summaryrefslogtreecommitdiffstats
path: root/meta-openembedded
diff options
context:
space:
mode:
authorDave Cobbley <david.j.cobbley@linux.intel.com>2018-08-14 10:05:37 -0700
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2018-08-22 21:26:31 -0400
commiteb8dc40360f0cfef56fb6947cc817a547d6d9bc6 (patch)
treede291a73dc37168da6370e2cf16c347d1eba9df8 /meta-openembedded
parent9c3cf826d853102535ead04cebc2d6023eff3032 (diff)
downloadtalos-openbmc-eb8dc40360f0cfef56fb6947cc817a547d6d9bc6.tar.gz
talos-openbmc-eb8dc40360f0cfef56fb6947cc817a547d6d9bc6.zip
[Subtree] Removing import-layers directory
As part of the move to subtrees, need to bring all the import layers content to the top level. Change-Id: I4a163d10898cbc6e11c27f776f60e1a470049d8f Signed-off-by: Dave Cobbley <david.j.cobbley@linux.intel.com> Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'meta-openembedded')
-rw-r--r--meta-openembedded/.gitignore5
-rw-r--r--meta-openembedded/COPYING.MIT17
-rw-r--r--meta-openembedded/README4
-rwxr-xr-xmeta-openembedded/contrib/oe-stylize.py412
-rwxr-xr-xmeta-openembedded/contrib/pw-am.sh15
-rw-r--r--meta-openembedded/meta-filesystems/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-filesystems/README105
-rw-r--r--meta-openembedded/meta-filesystems/conf/layer.conf18
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.2.3.bb21
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/ifuse/ifuse_1.1.2.bb15
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-Add-LDFLAGS-to-linker-cmdline.patch46
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-btree-Avoid-conflicts-with-libc-namespace-about-setk.patch135
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs_git.bb29
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/files/0001-libntfs-3g-Makefile.am-fix-install-failed-while-host.patch52
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_2017.3.23.bb41
-rwxr-xr-xmeta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owhttpd60
-rwxr-xr-xmeta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owserver59
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs_2.9p1.bb68
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/simple-mtpfs/simple-mtpfs_git.bb13
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/Using-PKG_CHECK_MODULES-to-found-headers-and-libraries.patch42
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/configure.patch11
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs_git.bb33
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/files/0001-Makefile-fix-path-for-sshfs.1.patch32
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/sshfs-fuse_2.8.bb16
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch32
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-unionfs-Define-IOCPARM_LEN-if-undefined.patch62
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_2.0.bb19
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/0001-define-loff_t-if-not-already-defined.patch30
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/makefile-add-ldflags.patch21
-rw-r--r--meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils_git.bb40
-rw-r--r--meta-openembedded/meta-filesystems/recipes-support/fuse/files/0001-fuse-fix-the-return-value-of-help-option.patch28
-rw-r--r--meta-openembedded/meta-filesystems/recipes-support/fuse/files/aarch64.patch33
-rw-r--r--meta-openembedded/meta-filesystems/recipes-support/fuse/files/fuse.conf1
-rw-r--r--meta-openembedded/meta-filesystems/recipes-support/fuse/files/gold-unversioned-symbol.patch92
-rw-r--r--meta-openembedded/meta-filesystems/recipes-support/fuse/fuse_2.9.7.bb69
-rw-r--r--meta-openembedded/meta-filesystems/recipes-support/physfs/physfs_2.0.3.bb13
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/0001-libau-Define-STRIP-weakly.patch37
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-add-tool-concept-to-Makefile-for-cross-com.patch30
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-don-t-strip-executables.patch37
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util_git.bb65
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/exfat-utils/exfat-utils_1.2.3.bb22
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0001-Remove-AC_CHECK_FILE-for-cross-compilation.patch32
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0002-Fix-mkfs-out-of-tree-builds.patch37
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools_1.8.0.bb18
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0001-udevil-0.4.3-fix-compile-with-gcc6.patch12
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0002-etc-Makefile.am-Use-systemd_unitdir-instead-of-libdi.patch32
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/udevil/udevil_0.4.4.bb28
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-Include-fcntl.h-for-O_EXCL.patch28
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-xfsdump-Use-c99-defined-int64_t-instead-of-__int64_t.patch28
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0002-Replace-__uint32_t-with-uint32_t.patch122
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0003-replace-use-of-SIGCLD-with-SIGCHLD.patch40
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0004-include-limit.h-for-PATH_MAX.patch29
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0005-include-sys-types.h-for-u_int32_t-in-attr-attributes.patch27
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/remove-install-as-user.patch205
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsdump/xfsdump_3.1.7.bb46
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/0001-build-Check-for-sync_file_range-libc-function.patch82
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch13
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.14.0.bb63
-rw-r--r--meta-openembedded/meta-filesystems/recipes-utils/xorriso/xorriso_1.4.0.bb29
-rw-r--r--meta-openembedded/meta-gnome/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-gnome/README38
-rw-r--r--meta-openembedded/meta-gnome/classes/sanity-meta-gnome.bbclass10
-rw-r--r--meta-openembedded/meta-gnome/conf/layer.conf21
-rw-r--r--meta-openembedded/meta-gnome/recipes-apps/pinpoint/pinpoint_git.bb24
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.8.10.bb45
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd/ssize_t_definition.patch40
-rw-r--r--meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd_0.48.bb23
-rw-r--r--meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-Add-G_GNUC_PRINTF-on-functions-with-format-strings.patch62
-rw-r--r--meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-gnome-doc-utils.make-sysrooted-pkg-config.patch51
-rw-r--r--meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0002-fix-gcc-6-build.patch39
-rw-r--r--meta-openembedded/meta-gnome/recipes-devtools/glade/glade3_3.8.5.bb23
-rw-r--r--meta-openembedded/meta-gnome/recipes-extended/gparted/files/gparted_polkit10
-rw-r--r--meta-openembedded/meta-gnome/recipes-extended/gparted/files/org.yoctoproject.pkexec.run-gparted.policy20
-rw-r--r--meta-openembedded/meta-gnome/recipes-extended/gparted/gparted_0.31.0.bb40
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword/0001-plugins-aiksaurus-Makefile.am-remove-uncomplete-opti.patch39
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword_3.0.2.bb142
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.18.0.bb36
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/desktop-file-utils/desktop-file-utils_0.18.bb18
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb32
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/default.lua46
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/devilspie2.desktop6
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0001-CMakeLists.txt-Remove-TRY_RUN-for-iconv.patch39
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0002-CMakeLists.txt-remove-CHECK_C_SOURCE_RUNS-check.patch53
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0003-contact-Replace-the-Novell-sample-contact-with-somet.patch202
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/iconv-detect.h5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server_3.26.3.bb130
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-Add-format-attribute-to-_synctex_malloc.patch27
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-help-remove-YELP-macro.patch24
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/evince/evince_3.24.0.bb66
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/faenza-icon-theme/faenza-icon-theme_1.3.bb26
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-Remove-help-directory-from-build.patch29
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-gedit-utils-qualify-handle_builder_error-with-format.patch31
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-tests-document-saver.c-Define-ACCESSPERMS-if-not-def.patch31
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-workaround-void-pointer-arithmetic.patch57
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0002-suppress-string-format-literal-warning-to-fix-build-.patch38
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_2.30.4.bb31
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_3.18.2.bb19
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring/musl.patch17
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_3.20.0.bb42
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/libgnome-keyring_3.12.0.bb17
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus3_3.10.1.bb21
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/files/0001-help-remove-YELP-macro.patch28
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_3.26.0.bb34
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light/classic-light.xml131
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light_1.0.bb21
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/0001-test-widget.c-fix-non-literal-format-string-issues.patch31
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/acinclude.m490
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.m453
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.make173
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/suppress-string-format-literal-warning.patch33
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2_2.10.5.bb32
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.6.bb21
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.36.0.bb68
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.16.1.bb33
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgnome/libgnomekbd_3.22.0.bb19
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgsf/files/0001-configure.ac-drop-a-copy-paste-of-introspection.m4-m.patch103
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.29.bb29
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/files/gtkstylus.sh5
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/libgtkstylus_0.5.bb29
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop/0001-netload-Include-libc-net-headers-unconditionally.patch46
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.38.0.bb13
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libtimezonemap/libtimezonemap_0.4.5.bb24
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_3.20.1.bb19
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb24
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libxklavier/files/fix-do_installe-failure.patch36
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/libxklavier/libxklavier_5.4.bb35
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity/0001-drop-zenity-detection.patch33
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.38.0.bb34
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_3.18.5.bb29
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-configure-use-foreign-mode-to-avoid-errors-with-miss.patch29
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-wvRTF.c-Specify-print-format-in-rtf_output.patch26
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/pkgconfig.patch13
-rw-r--r--meta-openembedded/meta-gnome/recipes-gnome/wv/wv_1.2.4.bb21
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/keybinder/keybinder_3.0.bb28
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch67
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb29
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-Makefile.am-Link-with-libm-for-powl-API.patch26
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-fix-compile-failure-against-musl-C-library.patch27
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-formatting-issues.patch34
-rw-r--r--meta-openembedded/meta-gnome/recipes-support/usermode/usermode_1.111.bb30
-rw-r--r--meta-openembedded/meta-gnome/site/arm-6413
-rw-r--r--meta-openembedded/meta-gnome/site/riscv64-linux16
-rw-r--r--meta-openembedded/meta-gnome/site/x86_64-linux17
-rw-r--r--meta-openembedded/meta-initramfs/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-initramfs/README36
-rw-r--r--meta-openembedded/meta-initramfs/classes/klibc.bbclass16
-rw-r--r--meta-openembedded/meta-initramfs/conf/layer.conf23
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-debug-image.bb22
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-image.bb28
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-klibc-image.bb12
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/files/init-debug.sh31
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/initramfs-debug_1.0.bb14
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg/icon.xpm43
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg_0.2.bb60
-rw-r--r--meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot_git.bb64
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut/0001-util.h-include-sys-reg.h-when-libc-glibc.patch33
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut_git.bb69
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0001-Add-another-variable-LIBS-to-provides-libraries-from.patch26
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0002-include-paths.h-for-_PATH_MOUNTED.patch25
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/grubby-rename-grub2-editenv-to-grub-editenv.patch69
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/run-ptest3
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby_8.40.bb40
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klcc-cross_2.0.4.bb34
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Define-in_-structs-for-non-glibc-system-libs.patch87
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Add-path-to-compiler-headers-via-isyste.patch28
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Use-print-libgcc-file-name-instead-of-p.patch28
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-always-use-bfd-linker.patch28
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-arm-Do-not-set-a-fallback-march-and-mtune.patch29
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-dash-Specify-format-string-in-fmtstr.patch29
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-include-linux-sysinfo.h-directly.patch30
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-mkfifo-Implement-mkfifo.patch27
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/armv4-fix-v4bx.patch26
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klcc-consider-sysroot.patch22
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-config-eabi.patch24
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-linux-libc-dev.patch29
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/staging.patch151
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/use-env-for-perl.patch25
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-static-utils_2.0.4.bb12
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils.inc60
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils_2.0.4.bb14
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc74
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc_2.0.4.bb24
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0001-Makefile-build-ubi-utils-only.patch87
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0002-common.mk-for-klibc-CC-is-klcc.patch27
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0003-libubi.c-add-klibc-specific-fixes-for-ioctl.patch76
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0004-Restore-compatibility-to-dietlibc-klibc-musl-libc-af.patch88
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0005-common.h-more-workarounds-for-klibc-compatibility.patch52
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0006-libiniparser-remove-unused-function-needing-float.patch85
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0007-mtd-utils-common.c-convert-to-integer-arithmetic.patch64
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0008-ubi-utils-ubiformat.c-convert-to-integer-arithmetic.patch44
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0009-Eliminate-warnings-about-implicit-non-const-casting-.patch48
-rw-r--r--meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc_1.5.2.bb51
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/0001-Adjust-the-order-of-headers-to-fix-build-for-musl.patch30
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/arm_crashdump.patch12
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/cflags_static.patch11
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/fix-out-of-tree-build.patch54
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ifdown_errno.patch11
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-elf-rel.patch61
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-syscall.patch44
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ppc__lshrdi3.patch18
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_flags.patch21
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_string.patch9
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sha256.patch13
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sysconf_nrprocessors.patch13
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_basename.patch14
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_kexec_test.patch13
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_sys_io.patch21
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_vfscanf.patch27
-rw-r--r--meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_2.0.2.bb69
-rw-r--r--meta-openembedded/meta-multimedia/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-multimedia/README19
-rw-r--r--meta-openembedded/meta-multimedia/classes/juce.bbclass47
-rw-r--r--meta-openembedded/meta-multimedia/conf/layer.conf32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch102
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb9
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb7
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb8
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb68
-rw-r--r--meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch38
-rw-r--r--meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb24
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch496
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch163
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch26
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch43
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch180
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch40
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch54
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch87
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch96
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb216
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch57
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb59
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch83
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch92
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb44
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch50
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb31
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb34
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch70
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch31
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch49
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch605
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb23
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb21
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch76
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb24
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb12
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb73
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch36
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb61
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb43
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch33
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch45
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch47
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb47
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch193
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch58
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch38
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch35
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch16
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c487
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h194
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb53
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch63
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb3
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc37
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb34
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb18
-rwxr-xr-xmeta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch14
-rwxr-xr-xmeta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb12
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb16
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch21
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb38
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch10
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in420
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb100
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch18
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb16
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb22
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch34
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb40
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch49
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch42
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb32
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch15
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch104
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb12
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc113
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch13
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch46
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch17
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch279
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch293
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch45
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch49
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch26
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch29
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch30
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch96
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch41
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch116
-rw-r--r--meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb28
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb25
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb20
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb7
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc14
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb6
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch41
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch19
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch222
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch24
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb27
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch73
-rw-r--r--meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb22
-rw-r--r--meta-openembedded/meta-networking/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-networking/MAINTAINERS35
-rw-r--r--meta-openembedded/meta-networking/README40
-rw-r--r--meta-openembedded/meta-networking/classes/waf-samba.bbclass119
-rw-r--r--meta-openembedded/meta-networking/conf/layer.conf26
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/README3
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64.txt39
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64_be.txt39
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-arm.txt40
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i586.txt40
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i686.txt40
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips.txt40
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips64.txt39
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mipsel.txt40
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc.txt40
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc64.txt40
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-riscv64.txt39
-rw-r--r--meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-x86_64.txt39
-rw-r--r--meta-openembedded/meta-networking/licenses/DMTF34
-rw-r--r--meta-openembedded/meta-networking/licenses/copyleft-next-0.3.0219
-rw-r--r--meta-openembedded/meta-networking/licenses/netperf43
-rw-r--r--meta-openembedded/meta-networking/licenses/radvd37
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda/0001-Makefile-respect-LDFLAGS-for-libreg.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda/do-not-run-ldconfig-if-destdir-is-set.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-gcc-6-unused-variables.patch11
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-issues-when-USE_OPENSSL-1.patch58
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-linking-of-libraries-used-by-reglib.patch57
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda/make.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda/use-target-word-size-instead-of-host-s.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/crda/crda_3.18.bb36
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/daq/daq_2.0.6.bb35
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/daq/files/0001-correct-the-location-of-unistd.h.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/daq/files/disable-run-test-program-while-cross-compiling.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/dhcpcd_6.11.5.bb24
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler/dibbler_fix_getSize_crash.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler_git.bb37
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/ez-ipupdate_3.0.11b7.bb16
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/Makefile.am.patch14
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/cache_file.c.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/conf_file.c.patch18
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/wformat.patch13
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/0001-rlm_mschap-Use-includedir-instead-of-hardcoding-usr-.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius110
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-avoid-searching-host-dirs.patch197
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-add-option-for-libcap.patch70
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-allow-cross-compilation.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-enble-user-in-conf.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-error-for-expansion-of-macro.patch61
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-issues-related-to-m4-include-path.patch236
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-quoting-for-BUILT_WITH.patch55
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-detection.patch89
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-do-not-use-jlibtool.patch160
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-rlm_python-add-PY_INC_DIR.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf2
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/volatiles.58_radiusd3
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/freeradius/freeradius_3.0.15.bb222
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch83
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch14
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rexec.xinetd.inetutils20
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rlogin.xinetd.inetutils23
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rsh.xinetd.inetutils21
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/telnet.xinetd.inetutils13
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/tftpd.xinetd.inetutils19
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/version.patch17
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils_1.9.4.bb206
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/lftp/files/fix-gcc-6-conflicts-signbit.patch44
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.7.7.bb34
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.12.bb16
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_2.8.0.bb42
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/miniupnpd/miniupnpd_2.0.bb37
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.2.8.bb39
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0001-sd-lldp.h-Remove-net-ethernet.h-seems-to-be-over-spe.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0002-Fixed-configure.ac-Fix-pkgconfig-sysroot-locations.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0003-Do-not-create-settings-settings-property-documentati.patch77
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0001-musl-basic.patch53
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0002-musl-dlopen-configure-ac.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0003-musl-network-support.patch72
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0004-musl-process-util.patch62
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0005-musl-avoid-further-conflicts-by-including-net-ethern.patch77
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0006-Add-a-strndupa-replacement-for-musl.patch47
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.10.6.bb143
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/openconnect/openconnect_git.bb27
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/python-networkmanager/python-networkmanager_2.0.1.bb13
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-rdate-define-logwtmp-on-libc-glibc.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-src-rdate-Fix-printf-format-errors.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate_1.5.bb21
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bb-build.patch75
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bison.patch147
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-cleanup.patch2087
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-fix-msgsndnotify-loop.patch37
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-hardlink.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-lfs.patch142
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-links.patch79
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-linux.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-makefile-add-ldflags.patch23
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-maxargs.patch16
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-mkstemp.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-oldpath.patch59
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-ssh.patch14
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-stat64.patch85
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-svr4.patch15
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-varargs.patch16
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist_6.1.5.bb37
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd/0001-rtnl_flush-Error-on-failed-write.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb17
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0001-packaging-Avoid-timeout-for-nmbd-if-started-offline-.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0006-avoid-using-colon-in-the-checking-msg.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/16-do-not-check-xsltproc-manpages.patch57
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/20-do-not-import-target-module-while-cross-compile.patch58
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/21-add-config-option-without-valgrind.patch64
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/dnsserver-4.7.0.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/glibc_only.patch15
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/iconv-4.7.0.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/netdb_defines.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-4.3.9-remove-getpwent_r.patch87
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-pam.patch37
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/smb_conf-4.7.0.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba/volatiles.03_samba3
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.7.6.bb318
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/sethdlc/files/sethdlc-fix-host-contamination.patch42
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/sethdlc/sethdlc.bb33
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-fix-do_package-failed-since-snort-2.9.7.0.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-libpcap-search-sysroot-for-headers.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-dap-address-space-id.patch62
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-flow-id.patch60
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-verdict-retry.patch60
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-inaddr-none.patch85
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/fix-host-contamination-when-enable-static-daq.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort/snort.init109
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/snort/snort_2.9.7.5.bb105
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0001-optimize-boot.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0002-lp1044361.patch118
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0003-fix-typeerror-on-error.patch20
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0004-lp1039729.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0005-lp1191197.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-add-an-option-to-specify-iptables-location.patch107
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-only-make-one-reference-to-env.patch77
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw_0.33.bb56
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/0001-Add-printf-format-and-silence-format-security-warnin.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/no-HOME-includes.patch22
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan_1.9.bb38
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0001-search-for-log-help-in-build-dir.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0002-Fix-vpnc-install-for-cross-compile.patch49
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0003-error.h-is-specific-to-glibc-on-linux.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0004-Use-pkgconfig-instead-of-libgcrypt-config.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0005-include-sys-ttydefaults.h-for-CEOT-definition.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0006-sysdep-Add-header-include-sequence-to-adjust-for-mus.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0007-add-error-API-when-error.h-is-not-on-platform.patch66
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0008-include-sysdep.h-before-net-if_tun.h.patch36
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0009-reduce-lifetime-value.patch42
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/default.conf19
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/long-help168
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc_0.5.3.bb59
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2016.06.10.bb20
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/wolfssl/files/0001-fix-no-rule-to-make-cyassl-options.h.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_3.12.0.bb24
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0001-argz.h-fix-musl-compile-add-missing-defines.patch45
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0002-tftp.h-tftpd.h-fix-musl-compile-missing-include.patch43
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/atftpd.service10
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/atftp_git.bb64
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch94
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_circumvent_tftp_size_restrictions.patch163
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_unprotected_assignments_crash.patch152
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd.init37
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-Define-__SWORD_TYPE-and-_PATH_NSSWITCH_CONF.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-modules-lookup_multi.c-Replace-__S_IEXEC-with-S_IEXE.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch49
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/add-the-needed-stdarg.h.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-do-not-check-for-modprobe.patch89
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-fix-lib-deps.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.2-libtirpc-as-need.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/cross.patch53
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix-the-YACC-rule-to-fix-a-building-failure.patch63
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix_disable_ldap.patch47
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/force-STRIP-to-emtpy.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/libtirpc.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/no-bash.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/remove-bashism.patch118
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/autofs/autofs_5.1.2.bb77
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/Fix-hardcoded-libdir.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/avoid-to-call-AC_TRY_RUN.patch46
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0009_sasldb_al.diff14
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0014_avoid_pic_overwrite.diff27
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/sasl.h-include-stddef.h-for-size_t-on-NetBSD.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.conf11
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.service12
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl_2.1.26.bb96
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.conf.sample21
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.init94
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.service12
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy/0001-src-igmpproxy.h-Include-sys-types.h-for-u_short-u_in.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy_0.1.bb16
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-Respect-flags-from-env.patch56
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-read-returns-ssize_t.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-usl_timer-Check-for-return-value-of-write-API.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-Mark-first-element-of-a-string-as-null.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-link-with-libtirpc.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-cli-Mark-return-of-strtol-as-long-int.patch58
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-musl-fixes.patch283
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/always_syslog.patch22
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool.service19
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_init.d.patch65
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_parallel_make_and_pic.patch89
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_usl_timer.patch49
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/makefile-add-ldflags.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/runtest.sh26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ippool/ippool_1.3.bb113
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-libopeniscsiusr-Include-limit.h-for-PATH_MAX.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-qedi.c-Removed-unused-linux-ethtool.h.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-idbm.c-Include-fcnl.h-for-O_RDWR-and-O_CREAT-definit.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-libopeniscsiusr-Add-CFLAGS-to-linker-cmdline.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0003-bnx2x.c-Reorder-the-includes-to-avoid-duplicate-defi.patch49
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0004-fwparam_ppc.c-Do-not-use-__compar_fn_t.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/99_iscsi-initiator-utils2
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/initd.debian119
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator4
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator-targets.service15
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator.service13
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/set_initiatorname12
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/iscsi-initiator-utils_2.0.876.bb117
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_1.4.2.bb48
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.default2
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.init.d128
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/lldpd/files/src-daemon-lldpd.service.in-Use-fixed-path-for-mkdir.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/lldpd/lldpd_0.9.8.bb65
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/ncftp-configure-use-BUILD_CC-for-ccdv.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/unistd.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp_3.2.6.bb35
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-Fix-build-failures-with-gcc7.patch49
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-ipmidirect-Replace-__STRING.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-plugins-Check-for-PTHREAD_RECURSIVE_MUTEX_INITIALIZE.patch47
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/c++11.patch12
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/clang-c++11.patch1288
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/fix-narrowing-warning.patch20
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-add-libnetsnmp-when-link.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-alignment-issue.patch23
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-host-gcc.patch24
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-testfail-errors.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-glib-cross-compile.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-hpi-shell-thread-fix.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-invalide-session.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-libxml2-cross-compile.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-linkfix.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-netsnmp-cross-compile.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-sysfs-cross-compile.patch23
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-use-serial-tests-config-needed-by-ptest.patch28
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi.init230
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpid.service11
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-daemons/openhpi/files/run-ptest5
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/openhpi/openhpi_3.6.1.bb115
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Disable-format-overflow-if-supported-by-gc.patch123
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Pass-linker-specific-options-with-Wl.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch122
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf_5.18.02.bb67
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-Check-for-glibc-before-setting-CANT_USE_SEND_RECV_MS.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-makedefs-Use-native-compiler-to-build-makedefs.test.patch64
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-daemons/postfix/files/aliasesdb20
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-daemons/postfix/files/check_hostname.sh13
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/icu-config.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/install.patch93
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/internal_recipient1
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/main.cf105
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/makedefs.patch116
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix94
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix-install.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/postfix.inc262
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/postfix/postfix_3.2.2.bb9
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/files/basic.conf.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/files/build_fixup.patch112
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/files/close-RequireValidShell-check.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/files/contrib.patch42
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/files/default9
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd-basic.init220
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd.service12
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/proftpd/proftpd_1.3.6.bb138
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd-use-pkgconfig.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.conf7
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.service10
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd_2.3.1.bb58
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/0001-Remove-hardcoded-usr-local-includes-from-configure.a.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/nostrip.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd_1.0.42.bb22
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.default1
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.init135
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/radvd/files/volatiles.03_radvd2
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/radvd/radvd.inc67
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/radvd/radvd_2.17.bb5
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-SquidNew-use-noexcept-instead-of-throw-for-C-11-comp.patch46
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-configure-Check-for-Wno-error-format-truncation-comp.patch118
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-tools.cc-fixed-unused-result-warning.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/Fix-flawed-dynamic-ldb-link-test-in-configure.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/Set-up-for-cross-compilation.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/Skip-AC_RUN_IFELSE-tests.patch65
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/gcc7-fixes.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/run-ptest3
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/set_sysroot_patch.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-don-t-do-squid-conf-tests-at-build-time.patch61
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-use-serial-tests-config-needed-by-ptest.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/files/volatiles.03_squid3
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/squid/squid_3.5.26.bb114
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/0001-__progname-is-provided-by-libc.patch62
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/add-error-check-for-disk-filled-up.patch81
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/default3
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/fix-writing-emtpy-file.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/init105
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.40-remap.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.42-tftpboot.patch60
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-chk_retcodes.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-cmd_arg.patch165
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.39-tzfix.patch24
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-fortify-strcpy-crash.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-stats.patch20
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-5.2-pktinfo.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-bug-fix-on-separated-CR-and-LF.patch38
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-xinetd18
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.service10
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.socket8
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/tftp-hpa_5.2.bb91
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vblade/files/cross.patch16
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vblade/files/makefile-add-ldflags.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.conf2
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.init193
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vblade/files/volatiles.99_vblade1
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vblade/vblade_22.bb51
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/change-secure_chroot_dir.patch62
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-daemons/vsftpd/files/init50
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/volatiles.99_vsftpd1
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.conf139
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.ftpusers15
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.service9
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.user_list20
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-sysdeputil.c-Fix-with-musl-which-does-not-have-utmpx.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-vsftpd-allow-sysinfo-in-the-seccomp-sandbox.patch43
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-destdir.patch52
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-libs.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-strip.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam-with-tcp_wrappers.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam.patch16
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-2.1.0-filter.patch89
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-tcp_wrappers-support.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd_3.0.3.bb112
-rw-r--r--meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/run-ptest21
-rw-r--r--meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/test.pl-adjust-for-ptest.patch90
-rw-r--r--meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl_0.22.bb39
-rw-r--r--meta-openembedded/meta-networking/recipes-devtools/python/python-ldap_2.4.41.bb29
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/corosync/corosync_2.4.3.bb79
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/dlm/dlm/respect-ldflags-also-from-bin_ldflags.patch36
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/dlm/dlm_4.0.2.bb51
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/0001-kernel-event-netlink_ack-now-requires-4-arguments.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/access-sk_v6_daddr-iff-IPV6-defined.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_bio_struct_of_linux_v4.3_and_above.patch108
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch475
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-call-trace-of-ahash-API-calling.patch85
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch327
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch67
-rw-r--r--meta-openembedded/meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb64
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/arno-iptables-firewall/arno-iptables-firewall_2.0.1g.bb35
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.4.bb36
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/conntrack-failover77
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/init87
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0001-add-RARP-and-update-iana-url.patch45
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0002-fix-compilation-warning.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0003-add-info-about-Wl-no-as-needed.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0004-workaround-for-kernel-regression-bug-IPv6-source-des.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0005-Add-noflush-command-line-support-for-ebtables-restor.patch75
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0006-don-t-print-IPv6-mask-if-it-s-all-ones-based-on-patc.patch69
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0007-extensions-Use-stdint-types.patch67
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0008-ethernetdb.h-Remove-C-specific-compiler-hint-macro-_.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0009-ebtables-Allow-RETURN-target-rules-in-user-defined-c.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0010-Adjust-header-include-sequence.patch216
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/01debian_defaultconfig.patch50
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables-save43
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.common163
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.init26
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/installnonroot.patch43
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/no-as-needed.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb103
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-Correct-typo-in-the-location-of-internal.h-in-includ.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-acct-Declare-the-define-visivility-attribute-together.patch255
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-queue-Declare-the-define-visivility-attribute-together.patch1229
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cthelper-visibility-hidden.patch382
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cttimeout-visibility-hidden.patch264
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-acct_1.0.3.bb17
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-conntrack_1.0.6.bb16
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cthelper_1.0.0.bb17
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cttimeout_1.0.0.bb16
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-log_1.0.1.bb15
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-queue_1.0.2.bb19
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0001-build-resolve-automake-1.12-warnings.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0002-src-get-source-code-license-header-in-sync-with-curr.patch49
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0003-configure-uclinux-is-also-linux.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0004-libnfnetlink-initialize-attribute-padding-to-resolve.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0005-include-Sync-with-kernel-headers.patch110
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0006-src-Use-stdint-types-everywhere.patch403
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink_1.0.1.bb25
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-Declare-the-define-visivility-attribute-together.patch2949
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-avoid-naming-local-function-as-one-of-printf-family.patch514
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.0.7.bb17
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nfacct/nfacct_1.0.2.bb15
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/0001-payload-explicit-network-ctx-assignment-for-icmp-icm.patch323
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/0002-proto-Add-some-exotic-ICMPv6-types.patch147
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/0003-payload-split-ll-proto-dependency-into-helper.patch62
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/0004-src-allow-update-of-net-base-w.-meta-l4proto-icmpv6.patch65
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/0005-src-ipv6-switch-implicit-dependencies-to-meta-l4prot.patch98
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/0006-payload-enforce-ip-ip6-protocol-depending-on-icmp-or.patch84
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/0007-src-ip-switch-implicit-dependencies-to-meta-l4proto-.patch86
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/files/fix-to-generate-ntf.8.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-filter/nftables/nftables_0.7.bb27
-rw-r--r--meta-openembedded/meta-networking/recipes-irc/znc/znc_git.bb34
-rw-r--r--meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_0.0.20171221.bb31
-rw-r--r--meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_0.0.20171221.bb27
-rw-r--r--meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard.inc17
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb47
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch51
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb44
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam10
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit20
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam12
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit23
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch77
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam10
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit21
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb102
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb70
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch46
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch71
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod71
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default2
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb85
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch66
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch1217
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd14
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb61
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf11
-rw-r--r--meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb55
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/dante/dante_1.4.1.bb49
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch223
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf250
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.init72
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/freediameter/files/install_test.patch22
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch72
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/freediameter/files/run-ptest11
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb138
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-nss_mdns-Do-not-include-nss.h-when-libc-glibc.patch42
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/files/build.patch167
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/files/mdns.service15
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_765.50.9.bb90
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-protocols/net-snmp/files/init66
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmpd.conf422
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmptrapd.conf18
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-BUG-a2584-Fix-snmptrap-to-use-clientaddr-from-snmp.c.patch45
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Remove-U64-typedef.patch2524
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_libs2-Error-Fix.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-configure-fix-check-for-enable-perl-cc-checks.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-UDPIPv6-transport-Add-a-missing-return-state.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0003-CHANGES-BUG-2712-Fix-Perl-module-compilation.patch186
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/dont-return-incompletely-parsed-varbinds.patch131
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch42
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-agentx-crash.patch75
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch34
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/run-ptest4
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmpd.service13
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmptrapd.service13
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/systemd-support.patch1652
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.3.bb244
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/nopoll/nopoll_0.4.2.b297.bb23
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openflow/openflow.inc37
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0001-Check-and-use-strlcpy-from-libc-before-defining-own.patch64
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0002-lib-netdev-Adjust-header-include-sequence.patch59
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_1.0.bb4
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_git.bb9
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-Use-1-instead-of-WAIT_ANY.patch29
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api-Included-needed-headers.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api.c-include-rpc-clnt.h-for-resultproc_t.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-test-pppd_dummy.c-Fix-return-value.patch38
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-cli-include-fcntl.h-for-O_CREAT-define.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-user-ipv6-structures.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0003-cli-Define-_GNU_SOURCE-for-getting-sighandler_t.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0004-Adjust-for-linux-kernel-headers-assumptions-on-glibc.patch36
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-modify-CFLAGS-to-aviod-build-error.patch106
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-obey-LDFLAGS.patch15
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/fix_linux_4.15_compile.patch44
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tp-simplify-gcc-warning-hack.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-enable-tests.patch24
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-sysconfig.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-warning.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix.patch49
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd.service17
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/run-ptest97
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp_1.8.bb99
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/0001-include-missing-sys-types.h.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/options.pptp30
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux_1.9.0.bb31
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/bgpd.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/isisd.service14
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospf6d.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospfd.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.default12
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.init200
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.pam13
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripd.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripngd.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/volatiles.03_quagga3
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.default12
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.init64
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/files/zebra.service17
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc232
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/quagga/quagga_1.2.4.bb4
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/Modify-configure.in-and-etc-Makefile.am.patch84
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/config-site.radiusclient-ng-0.5.61
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng_0.5.6.bb36
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0001-ppoe-Dont-include-linux-if_ether.h.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0002-Enable-support-for-the-kernel-module.patch23
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.in-Error-fix.patch57
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure_in_cross.patch153
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/discard-use-of-dnl-in-Makefile.am.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/dont-swallow-errors.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.default22
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.init59
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-src-restrictions.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/top-autoconf.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/update-config.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe_3.12.bb77
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks/makefile-add-ldflags.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks_1.8beta5.bb28
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp/0001-Use-foreign-switch-for-automake.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb24
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd.inc41
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_1.3.6.bb7
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_git.bb8
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/0001-zeroconf-Rename-arp_op-to-avoid-namespace-conflicts-.patch69
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/compilefix.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/debian-zeroconf51
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/makefile-add-ldflags.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/zeroconf-default17
-rw-r--r--meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf_0.9.bb37
-rw-r--r--meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/aoe-stat-no-bashism.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/makefile-add-ldflags.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-support/aoetools/aoetools_36.bb26
-rw-r--r--meta-openembedded/meta-networking/recipes-support/arptables/arptables/0001-Use-ARPCFLAGS-for-package-specific-compiler-flags.patch79
-rw-r--r--meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-arpt-get-target-fix.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-init-busybox.patch77
-rw-r--r--meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-remove-bashism.patch37
-rw-r--r--meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables.service16
-rw-r--r--meta-openembedded/meta-networking/recipes-support/arptables/arptables_git.bb39
-rw-r--r--meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0005-build-don-t-ignore-CFLAGS-from-environment.patch40
-rw-r--r--meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0006-libbridge-Modifying-the-AR-to-cross-toolchain.patch51
-rw-r--r--meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/kernel-headers.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils_1.6.bb35
-rw-r--r--meta-openembedded/meta-networking/recipes-support/c-ares/c-ares/cmake-install-libcares.pc.patch105
-rw-r--r--meta-openembedded/meta-networking/recipes-support/c-ares/c-ares_1.13.0.bb24
-rw-r--r--meta-openembedded/meta-networking/recipes-support/chrony/chrony/arm_eabi.patch63
-rw-r--r--meta-openembedded/meta-networking/recipes-support/chrony/chrony/chrony.conf44
-rw-r--r--meta-openembedded/meta-networking/recipes-support/chrony/chrony/chronyd58
-rw-r--r--meta-openembedded/meta-networking/recipes-support/chrony/chrony_3.2.bb134
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_git.bb37
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cifs/files/0001-mount.cifs-Remove-data_blob.h-include.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-docs_2.40.0.bb25
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-exper_2.50.0.bb29
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-final_2.40.0.bb34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema.inc9
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema/files/LICENSE34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/cim-schema/files/LICENSE34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/01-support-cross-compile-for-linux-os.patch24
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/02-link-rep_snprintf-for-ltdbtool.patch17
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/service-ensure-the-PID-directory-is-created.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ctdb/ctdb_2.5.6.bb57
-rw-r--r--meta-openembedded/meta-networking/recipes-support/curlpp/curlpp_0.8.1.bb33
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq.inc83
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq/lua.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq_2.78.bb8
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/files/99_dnsmasq1
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-noresolvconf.service15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf-helper62
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf.service17
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.conf298
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.resolvconf84
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnsmasq/files/init117
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dnssec-conf/dnssec-conf_2.02.bb35
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-configure.ac-convert-AC_TRY_RUN-to-AC_TRY_LINK-state.patch66
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-doveadm-Fix-parallel-build.patch38
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.service14
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.socket14
-rw-r--r--meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.2.33.bb71
-rw-r--r--meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils/0001-Makefile.in-fix-permission-bits-for-drbd.service.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils_8.9.6.bb46
-rw-r--r--meta-openembedded/meta-networking/recipes-support/drbd/drbd/check_existence_of_modules_before_installing.patch24
-rw-r--r--meta-openembedded/meta-networking/recipes-support/drbd/drbd_9.0.8-1.bb24
-rw-r--r--meta-openembedded/meta-networking/recipes-support/esmtp/esmtp_1.2.bb45
-rw-r--r--meta-openembedded/meta-networking/recipes-support/fetchmail/fetchmail_6.3.26.bb19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/fping/fping_3.5.bb25
-rw-r--r--meta-openembedded/meta-networking/recipes-support/fwknop/fwknop_2.6.9.bb37
-rw-r--r--meta-openembedded/meta-networking/recipes-support/geoip/files/run-ptest11
-rw-r--r--meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl/run-ptest15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl_1.50.bb35
-rw-r--r--meta-openembedded/meta-networking/recipes-support/geoip/geoip_1.6.11.bb90
-rw-r--r--meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/GeoIP.conf11
-rw-r--r--meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/geoipupdate.cron5
-rw-r--r--meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate_2.5.0.bb33
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ifenslave/ifenslave_2.9.bb27
-rw-r--r--meta-openembedded/meta-networking/recipes-support/iftop/iftop_1.0pre4.bb14
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc/0001-Makefile-pass-extra-linker-flags.patch31
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc_0.2.2.bb21
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-build-with-clang.patch115
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-header-issues-found-with-musl-libc.patch249
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-racoon-pfkey-avoid-potential-null-pointer-dereferenc.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-Don-t-link-against-libfl.patch87
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-cfparse-clear-memory-equal-to-size-of-array.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/configure.patch13
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2015-4047.patch36
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2016-10396.patch207
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/glibc-2.20.patch23
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-Resend-UPDATE-message-when-received-EINTR-message.patch220
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-ivm.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-pointers.patch61
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf8
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf.sample40
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools_0.8.2.bb96
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0001-Modify-the-Makefile-for-cross-compile.patch97
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0002-Replace-nl_handle-to-nl_sock.patch63
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0003-ipvsadm-remove-dependency-on-bash.patch39
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/makefile-add-ldflags.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm_1.26.bb37
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/include-topdir.patch48
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/snprintf.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp_1.0.6.bb38
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libldb/libldb/avoid-openldap-unless-wanted.patch13
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/libldb/libldb/do-not-import-target-module-while-cross-compile.patch58
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libldb/libldb/options-1.3.1.patch193
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libldb/libldb_1.3.1.bb63
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-Fix-comparison-types.patch38
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-configure.ac-Do-not-configure-build-aux.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libmemcached/files/0002-POSIX_SPAWN_USEVFORK-is-not-linux-specific-but-glibc.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libmemcached/files/crosscompile.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached.inc15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.18.bb10
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.7.bb4
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/avoid-attr-unless-wanted.patch20
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/options-2.1.10.patch184
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc_2.1.11.bb49
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/do-not-check-xsltproc-manpages.patch15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/tdb-Add-configure-options-for-packages.patch184
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtdb/libtdb_1.3.15.bb44
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/avoid-attr-unless-wanted.patch22
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/options-0.9.36.patch176
-rw-r--r--meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.9.36.bb44
-rw-r--r--meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-fix-compile-error-with-linux-kernel-v4.8.patch74
-rw-r--r--meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-ttcp-Add-printf-format-string.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0002-sigd-Replace-on_exit-API-with-atexit.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0003-mpoad-Drop-old-hack-to-compile-with-very-old-glibc.patch37
-rw-r--r--meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/install-from-buildir.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/link-with-ldflags.patch38
-rw-r--r--meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm_2.5.2.bb32
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/run-ptest5
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v4test.sh11
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v6test.sh11
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools_1.0.17.bb62
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Fix-build-errors-with-clang.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Remove-newline-from-format-line.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch44
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-coordinator-Fix-strncpy-range-warning.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-src-iz.c-Undef-dprintf-before-redefining.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/no-help2man.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools_git.bb36
-rw-r--r--meta-openembedded/meta-networking/recipes-support/macchanger/macchanger_1.5.0.bb24
-rw-r--r--meta-openembedded/meta-networking/recipes-support/memcached/memcached/memcached-add-hugetlbfs-check.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-support/memcached/memcached_1.5.0.bb52
-rw-r--r--meta-openembedded/meta-networking/recipes-support/mtr/mtr_0.87.bb27
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nbd/nbd_3.11.bb19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ncp/libowfat_0.31.bb27
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ncp/ncp_1.2.4.bb31
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-autogen-Do-not-symlink-gettext.h-from-build-host.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-replace-VLAIS-with-malloc-free-pair.patch124
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0002-Do-not-undef-_GNU_SOURCE.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6_git.bb76
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd/0001-bundle-own-base64-encode-decode-functions.patch379
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd_1.105.bb56
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcat/netcat.inc15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcat/netcat/make-netcat_flag_count_work.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcat/netcat/netcat-locale_h.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcat/netcat/obsolete_autoconf_macros.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcat/netcat_0.7.1.bb22
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netcf/netcf_0.2.8.bb71
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netperf/files/cpu_set.patch30
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netperf/files/init62
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netperf/files/vfork.patch58
-rw-r--r--meta-openembedded/meta-networking/recipes-support/netperf/netperf_git.bb66
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nghttp2/nghttp2_1.26.0.bb13
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/files/ypbind.init107
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/nis.inc31
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/yp-tools/domainname.service12
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/yp-tools_2.14.bb34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/yp-tools_4.2.3.bb47
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/0001-dns_hosts-Fix-build-with-musl.patch67
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/ypbind.service14
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt_2.4.bb62
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntimed/ntimed/use-ldflags.patch16
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntimed/ntimed_git.bb40
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop/0001-nDPI-Include-sys-types.h.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop.service15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in.patch164
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in_net_snmp_config_exist.patch21
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_init.patch228
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_webInterface.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop/use-static-inline.patch32
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntop/ntop_5.0.1.bb137
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp-4.2.4_p6-nano.patch27
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp.conf17
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd84
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.list1
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.service11
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate54
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.default7
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp1
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp.service11
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ntp/ntp_4.2.8p11.bb172
-rw-r--r--meta-openembedded/meta-networking/recipes-support/nuttcp/nuttcp_7.2.1.bb29
-rw-r--r--meta-openembedded/meta-networking/recipes-support/open-isns/open-isns/0001-util.h-endian.h-is-available-on-musl-on-linux.patch38
-rw-r--r--meta-openembedded/meta-networking/recipes-support/open-isns/open-isns_0.97.bb40
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/0001-lanserv-Rename-struct-parameter-printf-for-namespace.patch618
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/do-not-install-pyc-and-pyo.patch25
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/fix-symlink-install-error-in-cmdlang.patch22
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/include_sys_types.patch17
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi-init-fix-the-arguments.patch41
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi.service12
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-helper512
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-no-openipmigui-man.patch26
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-remove-host-path-from-la_LDFLAGS.patch50
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openipmi/openipmi_2.0.24.bb110
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn104
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn-volatile.conf1
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn@.service12
-rw-r--r--meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.4.4.bb67
-rw-r--r--meta-openembedded/meta-networking/recipes-support/phytool/phytool.bb15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/pimd/pimd/0001-configure-Dont-use-uname-to-determine-target-OS.patch28
-rw-r--r--meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb20
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ruli/files/0001-Fix-build-with-format-string-checks.patch33
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ruli/files/0001-src-ruli_addr.c-Add-missing-format-string.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ruli/files/Makefile.patch122
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ruli/ruli_0.36.bb25
-rw-r--r--meta-openembedded/meta-networking/recipes-support/smcroute/smcroute_2.0.0.bb13
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ssmping/files/0001-Makefile-tweak-install-dir.patch35
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ssmping/ssmping_0.9.1.bb17
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/build-ouside_srcdir.patch17
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/ssmtp-bug584162-fix.patch126
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/use-DESTDIR.patch74
-rw-r--r--meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb35
-rw-r--r--meta-openembedded/meta-networking/recipes-support/strongswan/files/0001-memory.h-Include-stdint.h-for-uintptr_t.patch24
-rw-r--r--meta-openembedded/meta-networking/recipes-support/strongswan/files/fix-funtion-parameter.patch99
-rw-r--r--meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.6.2.bb132
-rw-r--r--meta-openembedded/meta-networking/recipes-support/stunnel/stunnel/fix-openssl-no-des.patch54
-rw-r--r--meta-openembedded/meta-networking/recipes-support/stunnel/stunnel_5.35.bb24
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/add-ptest.patch36
-rwxr-xr-xmeta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/run-ptest5
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/unnecessary-to-check-libpcap.patch34
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump_4.9.2.bb51
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-1.2a3-time.patch75
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-CVS.20010207-bpf.patch15
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice_1.2a3.bb36
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tcpreplay/tcpreplay_4.2.6.bb19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/disable-documentation.patch37
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/tinyproxy.service14
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy_1.8.4.bb38
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tnftp/tnftp/tnftp-autotools.patch42
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20151004.bb39
-rw-r--r--meta-openembedded/meta-networking/recipes-support/traceroute/traceroute/filter-out-the-patches-from-subdirs.patch47
-rw-r--r--meta-openembedded/meta-networking/recipes-support/traceroute/traceroute_2.1.0.bb45
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tunctl/tunctl.inc17
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tunctl/tunctl/makefile-add-ldflags.patch19
-rw-r--r--meta-openembedded/meta-networking/recipes-support/tunctl/tunctl_1.5.bb4
-rw-r--r--meta-openembedded/meta-networking/recipes-support/uftp/uftp_4.9.3.bb16
-rw-r--r--meta-openembedded/meta-networking/recipes-support/wireshark/README45
-rw-r--r--meta-openembedded/meta-networking/recipes-support/wireshark/files/libgcrypt.patch53
-rw-r--r--meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_2.4.6.bb73
-rw-r--r--meta-openembedded/meta-networking/recipes-support/wpan-tools/wpan-tools_git.bb18
-rw-r--r--meta-openembedded/meta-networking/site/endian-big2
-rw-r--r--meta-openembedded/meta-networking/site/endian-little2
-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
-rw-r--r--meta-openembedded/meta-perl/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-perl/README93
-rw-r--r--meta-openembedded/meta-perl/conf/layer.conf18
-rw-r--r--meta-openembedded/meta-perl/recipes-extended/logcheck/files/99_logcheck2
-rw-r--r--meta-openembedded/meta-perl/recipes-extended/logcheck/logcheck_1.3.18.bb79
-rw-r--r--meta-openembedded/meta-perl/recipes-extended/mime-construct/files/fix-mime-construct-help-return-value.patch39
-rw-r--r--meta-openembedded/meta-perl/recipes-extended/mime-construct/mime-construct_1.11.bb28
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/adduser/adduser_3.116.bb54
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/adduser/files/adduser-add-M-option-for-useradd.patch45
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libalgorithm/libalgorithm-diff-perl_1.15.bb23
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libauthen/files/run-ptest16
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libauthen/libauthen-sasl-perl_2.16.bb28
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libcapture/libcapture-tiny-perl_0.46.bb37
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.38.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libclass/libclass-method-modifiers-perl_2.12.bb28
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-random-perl_0.11.bb15
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-rsa-perl_0.28.bb24
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libcurses/libcurses-perl_1.36.bb26
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdata/files/run-ptest16
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb33
-rwxr-xr-xmeta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl/sqlite-perl-test.pl69
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.54.bb41
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdevel/libdevel-globaldestruction-perl_0.14.bb23
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdigest/files/run-ptest16
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-hmac-perl_1.03.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-sha1-perl_2.13.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libencode/libencode-locale-perl_1.05.bb21
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_2.94.bb68
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-config-perl_0.008.bb24
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.12.bb37
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-helpers-perl_0.026.bb29
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-installpaths-perl_0.011.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-parsexs-perl_3.35.bb47
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libfile/libfile-slurp-perl_9999.19.bb19
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libhtml/files/bin-htmltree-fix-shebang.patch25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-parser-perl_3.72.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-tree-perl_5.03.bb42
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libimport/libimport-into-perl_1.002004.bb32
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libio/files/run-ptest16
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.054.bb47
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libio/libio-stringy-perl_2.111.bb31
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libipc/libipc-signal-perl_1.00.bb18
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/liblocale/liblocale-gettext-perl_1.07.bb21
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmime/files/run-ptest16
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmime/libmime-charset-perl_1.012.2.bb19
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmime/libmime-types-perl_2.17.bb42
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-perl_0.4224.bb34
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.039.bb54
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-pluggable-perl_5.2.bb44
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-runtime-perl_0.016.bb37
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libmoo/libmoo-perl_2.003004.bb44
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/files/run-ptest16
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.14.bb27
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.65.bb29
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl-0.12/libidn-wr-cross-compile.patch49
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl_0.12.bb34
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ssleay-perl_1.84.bb47
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libnet/libnet-telnet-perl_3.04.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libproc/libproc-waitstat-perl_1.00.bb20
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/librole/librole-tiny-perl_2.000006.bb29
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libstrictures/libstrictures-perl_2.000003.bb45
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libsub/libsub-exporter-progressive-perl_0.001013.bb30
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libterm/libterm-readkey-perl_2.37.bb36
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.42.bb120
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtext/libtext-charwidth-perl_0.04.bb27
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb27
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtext/libtext-iconv-perl_1.7.bb24
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libtext/libtext-wrapi18n-perl_0.06.bb32
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libunicode/libunicode-linebreak-perl_2017.004.bb26
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libxml/libxml-filter-buffertext-perl_1.01.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/disable-libxml2-check.patch79
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/fix-CATALOG-conditional-compile.patch31
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/using-DOCB-conditional.patch91
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl_2.0132.bb47
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/libxml/libxml-sax-writer-perl_0.57.bb25
-rw-r--r--meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb33
-rw-r--r--meta-openembedded/meta-python/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-python/README53
-rw-r--r--meta-openembedded/meta-python/conf/layer.conf19
-rw-r--r--meta-openembedded/meta-python/licenses/LLNL16
-rw-r--r--meta-openembedded/meta-python/licenses/Unicode37
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/80oe.conf.in24
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-avahi.service10
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-init.in47
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone.service.in10
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/gateone/gateone_git.bb87
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool_0.1.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc_0.1.16.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.16.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python-pyconnman_0.1.0.bb12
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-pyro4/python-pyro4_4.63.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun.inc10
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun_2.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-pytun/python3-pytun_2.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-thrift/python-thrift_0.11.0.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/python-txws/python-txws_0.9.1.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/parallel_make.patch43
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/remove_duplicate_install.patch26
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/telepathy-python_fix_for_automake_1.12.patch26
-rw-r--r--meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python_0.15.19.bb32
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb36
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-alembic_0.9.8.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc31
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.3.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-attrs_17.4.0.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc24
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-automat/0001-setup.py-remove-the-dependency-on-m2r.patch49
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc41
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.3.1.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.5.3.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.4.bb19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-can.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-can_2.1.0.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc33
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.1.18.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-click.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.8.1.bb21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.1.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc57
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.1.4.bb22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc40
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.2.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch31
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb27
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.6.bb32
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch52
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch27
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-django.inc32
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.10.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.1.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-flask_0.12.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc33
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch26
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.13.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.8.4.bb17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch33
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.8.4.bb25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_17.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch55
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch65
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch30
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch38
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb48
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.19.bb13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc24
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc43
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch39
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch30
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch24
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.26.4.bb50
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch110
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch33
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.4.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.4.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch30
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.22.0.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.2.bb13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pbr_3.1.1.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pip_9.0.3.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_1.0.15.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.5.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.3.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.5.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-py.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-py_1.5.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.2.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch98
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc29
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch90
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch52
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch30
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb26
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.5.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc38
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.89.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc29
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.6.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc11
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_17.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc21
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.0.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb5
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.4.21.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc42
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_3.0.bb5
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch32
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch51
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc20
-rwxr-xr-xmeta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.12.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch26
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_14.7.0.bb24
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc24
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.18.4.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc26
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.2.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch26
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.24.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_1.15.7.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc23
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.13.2.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-six.inc19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb27
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb51
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch42
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-tornado_4.5.3.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc247
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-twisted_17.9.0.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.22.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb25
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.5.bb15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb19
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc47
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc24
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc15
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc12
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc17
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.4.3.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_0.9.8.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_17.4.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.5.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.1.0.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.13.0.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.1.18.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.2.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.1.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.1.4.bb8
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.2.bb18
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.10.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.1.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-flask_0.12.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.13.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_17.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb29
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.4.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_2.0.2.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.22.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch29
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch61
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.6.1.bb22
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_1.0.15.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.5.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.3.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.5.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.5.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb9
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.5.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.89.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.6.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_17.5.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.4.21.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb6
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_3.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb2
-rwxr-xr-xmeta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.12.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.2.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb14
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.18.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.23.bb13
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb3
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.24.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_1.15.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.13.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_4.5.3.bb7
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_17.9.0.bb67
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.22.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb20
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.1.bb16
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb2
-rw-r--r--meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.4.3.bb4
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0001-comment-out-selinux.patch70
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0002-run_program-support-timeout.patch102
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0003-support-infinit-timeout.patch66
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-Mount-var-volatile-during-install.patch59
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0005-update-fstab-by-appending.patch32
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0006-fix-new.roots-object-is-not-iterable.patch28
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0007-fix-incorrect-timeout-while-system-time-changed.patch48
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0008-tweak-btrfs-packages.patch45
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0009-invoking-mount-with-infinite-timeout.patch31
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0010-use-oe-variable-to-replace-hardcoded-dir.patch34
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0011-invoking-fsck-with-infinite-timeout.patch31
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0012-invoking-mkfs-with-infinite-timeout.patch31
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0013-Revert-Adapt-to-logging-module-name-change.patch30
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0014-invoking-dd-with-infinite-timeout.patch31
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_2.2.0.bb47
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.1.5.bb27
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-cson/python-cson_git.bb21
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.46.bb17
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pyephem/python-pyephem_3.7.6.0.bb17
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0001-support-authentication-for-kickstart.patch151
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch76
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0003-comment-out-sections-shutdown-and-environment-in-gen.patch48
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0004-load.py-retry-to-invoke-request-with-timeout.patch82
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0005-tweak-shebang-to-python3.patch25
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_2.35.bb24
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted.inc22
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted_3.11.1.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-extended/python-pyparted/python3-pyparted_3.11.1.bb10
-rw-r--r--meta-openembedded/meta-python/recipes-extended/pywbem/pywbem_0.8.0.bb36
-rw-r--r--meta-openembedded/meta-webserver/COPYING.MIT17
-rw-r--r--meta-openembedded/meta-webserver/README68
-rw-r--r--meta-openembedded/meta-webserver/conf/layer.conf26
-rw-r--r--meta-openembedded/meta-webserver/licenses/OML28
-rw-r--r--meta-openembedded/meta-webserver/licenses/Xdebug60
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache-mod/apache-websocket_git.bb33
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2-native_2.4.29.bb45
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-configure_perlbin.patch22
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-ssl-ltmain-rpath.patch81
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-corelimit.patch37
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-selinux.patch63
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.4-export.patch22
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/replace-lynx-to-curl-in-apachectl-script.patch49
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/server-makefile.patch11
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.29.bb194
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/files/0001-configure-use-pkg-config-for-PCRE-detection.patch52
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2-volatile.conf2
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2.service14
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/files/configure-allow-to-disable-selinux-support.patch40
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/files/httpd-2.4.3-fix-race-issue-of-dir-install.patch21
-rwxr-xr-xmeta-openembedded/meta-webserver/recipes-httpd/apache2/files/init230
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/apache2/files/volatiles.04_apache23
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-configure.ac-Add-foreign-to-AM_INIT_AUTOMAKE.patch30
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-make-Do-not-build-po-files.patch27
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee-install-configured.py-once.patch40
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.init32
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.service10
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee_git.bb71
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha-init45
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha.service16
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/hiawatha/hiawatha_10.7.bb64
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/monkey/files/0001-configure-Respect-LIBS-variable-from-env.patch29
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init34
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service12
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.5.6.bb77
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/files/0001-Allow-the-overriding-of-the-endianness-via-the-confi.patch80
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch215
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf2
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.conf118
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.init52
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.service11
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx.inc156
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.12.2.bb6
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.13.9.bb10
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/0001-GNUmakefile-add-possibility-to-override-variables.patch145
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nhttpd.conf55
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nostromo34
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/tmpfiles.conf1
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/volatiles2
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/nostromo/nostromo_1.9.6.bb64
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/init52
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.conf1
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.service10
-rw-r--r--meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd_2.27.1.bb56
-rw-r--r--meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin/apache.conf42
-rw-r--r--meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin_4.7.9.bb41
-rw-r--r--meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_2.6.0.bb33
-rw-r--r--meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/Fix_EOF_not_declared_issue.patch17
-rw-r--r--meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/add_foreign_to_AM_INIT_AUTOMAKE.patch18
-rw-r--r--meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi_2.4.0.bb15
-rw-r--r--meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi-1.6.4/fix_configure_ipv6_test.patch35
-rw-r--r--meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi_1.6.4.bb16
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-Correct-Timeout-issue.patch21
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-makefile-Do-not-build-contrib-dir.patch27
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.conf5083
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service13
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_git.bb59
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/disable-version-check.patch64
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/exports-lib.pl.patch29
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/init-exclude.patch75
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/media-tomb.patch65
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mount-excludefs.patch25
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mysql-config-fix.patch50
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-generic.patch25
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-lib.pl.patch19
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/nfs-export.patch39
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/proftpd-config-fix.patch18
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-python2.3.patch25
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-startup-option.patch29
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/samba-config-fix.patch32
-rwxr-xr-xmeta-openembedded/meta-webserver/recipes-webadmin/webmin/files/setup.sh340
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/webmin.service15
-rw-r--r--meta-openembedded/meta-webserver/recipes-webadmin/webmin/webmin_1.850.bb170
-rw-r--r--meta-openembedded/meta-xfce/README22
-rw-r--r--meta-openembedded/meta-xfce/classes/thunar-plugin.bbclass12
-rw-r--r--meta-openembedded/meta-xfce/classes/xfce-app.bbclass6
-rw-r--r--meta-openembedded/meta-xfce/classes/xfce-git.bbclass7
-rw-r--r--meta-openembedded/meta-xfce/classes/xfce-panel-plugin.bbclass13
-rw-r--r--meta-openembedded/meta-xfce/classes/xfce.bbclass22
-rw-r--r--meta-openembedded/meta-xfce/conf/layer.conf25
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.4.2.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.1.5.bb41
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.4.0.bb19
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.12.1.bb19
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/ristretto/ristretto_0.8.2.bb15
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_git.bb26
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/files/0001-fix-Name-Comment-fields.patch34
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/xfce-polkit_0.2.bb14
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-mixer/xfce4-mixer_4.11.0.bb14
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-notifyd/xfce4-notifyd_0.4.2.bb35
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.9.1.bb22
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.2.0.bb10
-rw-r--r--meta-openembedded/meta-xfce/recipes-apps/xfce4-terminal/xfce4-terminal_0.8.7.3.bb12
-rw-r--r--meta-openembedded/meta-xfce/recipes-art/cursor-themes/openzone_1.2.3.bb31
-rw-r--r--meta-openembedded/meta-xfce/recipes-art/rodent-icon-theme/rodent-icon-theme_5.0.bb16
-rw-r--r--meta-openembedded/meta-xfce/recipes-art/xfce-dusk-gtk3/xfce-dusk-gtk3_1.3.bb19
-rw-r--r--meta-openembedded/meta-xfce/recipes-art/xfwm4-themes/xfwm4-themes_4.10.0.bb19
-rw-r--r--meta-openembedded/meta-xfce/recipes-bindings/vala/xfce4-vala_4.10.3.bb18
-rw-r--r--meta-openembedded/meta-xfce/recipes-core/images/core-image-minimal-xfce.bb18
-rw-r--r--meta-openembedded/meta-xfce/recipes-extended/imsettings/imsettings_1.7.3.bb31
-rw-r--r--meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-Makefile.am-use-LIBTOOL-instead-of-hardcoded-libtool.patch27
-rw-r--r--meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-test-unique-Add-format-qualifier-s-for-string.patch32
-rw-r--r--meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/build.patch421
-rw-r--r--meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/fix_for_compile_with_gcc-4.6.0.patch36
-rw-r--r--meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/noconst.patch130
-rw-r--r--meta-openembedded/meta-xfce/recipes-extended/libunique/libunique_1.1.6.bb30
-rw-r--r--meta-openembedded/meta-xfce/recipes-multimedia/packagegroups/packagegroup-xfce-multimedia.bb15
-rw-r--r--meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_1.0.0.bb38
-rw-r--r--meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.0.bb18
-rw-r--r--meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.2.3.bb16
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.0.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.6.0.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/clipman/xfce4-clipman-plugin_1.4.2.bb17
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/closebutton/xfce4-closebutton-plugin_git.bb18
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/cpufreq/xfce4-cpufreq-plugin_1.1.3.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.0.5.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.7.0.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/diskperf/xfce4-diskperf-plugin_2.6.1.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/embed/xfce4-embed-plugin_1.0.0.bb12
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/equake/xfce4-equake-plugin_1.3.8.1.bb14
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/eyes/xfce4-eyes-plugin_4.4.5.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.0.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.0.0.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/hotcorner/xfce4-hotcorner-plugin_0.0.2.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/kbdleds/xfce4-kbdleds-plugin_0.0.6.bb15
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.2.0.bb14
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin/0001-check-for-fstab.h-during-configure.patch87
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin_1.1.2.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin/0001-Do-not-include-sys-sysctl.h-its-unused-on-linux-port.patch25
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.3.1.bb12
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/0001-main-status-icon.c-remove-deprecated-g_type_init.patch32
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/01_fix_format-string.patch53
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.8.1.bb20
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.7.0.bb12
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.0.bb17
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/sensors/xfce4-sensors-plugin_1.2.97.bb27
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/smartbookmark/xfce4-smartbookmark-plugin_0.5.0.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.2.1.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.0.2.bb10
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.0.bb10
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_1.1.0.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/wavelan/xfce4-wavelan-plugin_0.6.0.bb9
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.8.10.bb13
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/whiskermenu/xfce4-whiskermenu-plugin_2.1.6.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-panel-plugins/xkb/xfce4-xkb-plugin_0.8.1.bb16
-rw-r--r--meta-openembedded/meta-xfce/recipes-support/vim/vim_%.bbappend1
-rw-r--r--meta-openembedded/meta-xfce/recipes-support/vim/vim_xfce.inc6
-rw-r--r--meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.3.1.bb12
-rw-r--r--meta-openembedded/meta-xfce/recipes-thunar-plugins/media-tags/thunar-media-tags-plugin_0.2.1.bb11
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/exo/exo/configure.patch57
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/exo/exo/exo-no-tests-0.8.patch30
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/exo/exo/reduce-build-to-exo-csource-only.patch85
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/exo/exo_0.12.0.bb39
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/garcon/files/0001-xfce-applications.menu-don-t-bloat-settings-menu-by-.patch35
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_0.6.1.bb17
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine/glib-2.54-ftbfs.patch23
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine_3.2.0.bb30
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/files/0001-libxfce4kbd-private-xfce4-keyboard-shortcuts.xml-fix.patch32
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.12.1.bb35
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.12.1.bb10
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-base.bb38
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-extended.bb70
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman/0001-Fix-return-with-no-value-in-function-returning-non-v.patch26
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman_0.8.1.bb18
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_1.6.15.bb35
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler/0001-configure-use-pkg-config-for-freetype2.patch45
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler_0.2.0.bb35
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.13.0.bb14
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-dev-tools/xfce4-dev-tools_4.12.0.bb23
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0001-clock-time-make-change-of-system-s-timezone-change-t.patch42
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0002-windowmenu-do-not-display-desktop-icon-when-no-windo.patch60
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/xfce4-panel_4.12.2.bb44
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-power-manager/xfce4-power-manager_1.6.1.bb44
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/machine-host.bb17
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-configure.in-hard-code-path-to-iceauth.patch40
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.12.1.bb32
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/files/0001-xsettings.xml-Set-default-themes.patch33
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings_git.bb40
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfconf/xfconf_4.12.1.bb15
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfdesktop/xfdesktop_4.12.4.bb17
-rw-r--r--meta-openembedded/meta-xfce/recipes-xfce/xfwm4/xfwm4_4.12.4.bb30
3822 files changed, 239724 insertions, 0 deletions
diff --git a/meta-openembedded/.gitignore b/meta-openembedded/.gitignore
new file mode 100644
index 000000000..b093583d7
--- /dev/null
+++ b/meta-openembedded/.gitignore
@@ -0,0 +1,5 @@
+/*.patch
+*.swp
+*.orig
+*.rej
+*~
diff --git a/meta-openembedded/COPYING.MIT b/meta-openembedded/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/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/README b/meta-openembedded/README
new file mode 100644
index 000000000..204966ac8
--- /dev/null
+++ b/meta-openembedded/README
@@ -0,0 +1,4 @@
+Collection of layers for the OE-core universe
+
+Please see the respective READMEs in the layer subdirectories
+
diff --git a/meta-openembedded/contrib/oe-stylize.py b/meta-openembedded/contrib/oe-stylize.py
new file mode 100755
index 000000000..ba4b87a74
--- /dev/null
+++ b/meta-openembedded/contrib/oe-stylize.py
@@ -0,0 +1,412 @@
+#!/usr/bin/env python
+
+"""\
+Sanitize a bitbake file following the OpenEmbedded style guidelines,
+see http://openembedded.org/wiki/StyleGuide
+
+(C) 2006 Cyril Romain <cyril.romain@gmail.com>
+MIT license
+
+TODO:
+ - add the others OpenEmbedded variables commonly used:
+ - parse command arguments and print usage on misuse
+ . prevent giving more than one .bb file in arguments
+ - write result to a file
+ - backup the original .bb file
+ - make a diff and ask confirmation for patching ?
+ - do not use startswith only:
+ /!\ startswith('SOMETHING') is not taken into account due to the previous startswith('S').
+ - count rule breaks and displays them in the order frequence
+"""
+
+from __future__ import print_function
+import fileinput
+import string
+import re
+
+__author__ = "Cyril Romain <cyril.romain@gmail.com>"
+__version__ = "$Revision: 0.5 $"
+
+# The standard set of variables often found in .bb files in the preferred order
+OE_vars = [
+ 'SUMMARY',
+ 'DESCRIPTION',
+ 'AUTHOR',
+ 'HOMEPAGE',
+ 'SECTION',
+ 'LICENSE',
+ 'LIC_FILES_CHKSUM',
+ 'DEPENDS',
+ 'PROVIDES',
+ 'SRCREV',
+ 'SRCDATE',
+ 'PE',
+ 'PV',
+ 'PR',
+ 'INC_PR',
+ 'SRC_URI',
+ 'S',
+ 'GPE_TARBALL_SUFFIX',
+ 'inherit',
+ 'EXTRA_',
+ 'export',
+ 'do_fetch',
+ 'do_unpack',
+ 'do_patch',
+ 'WORKDIR',
+ 'acpaths',
+ 'do_configure',
+ 'do_compile',
+ 'do_install',
+ 'PACKAGES',
+ 'PACKAGE_ARCH',
+ 'RDEPENDS',
+ 'RRECOMMENDS',
+ 'RSUGGESTS',
+ 'RPROVIDES',
+ 'RCONFLICTS',
+ 'FILES',
+ 'do_package',
+ 'do_stage',
+ 'addhandler',
+ 'addtask',
+ 'bindir',
+ 'headers',
+ 'include',
+ 'includedir',
+ 'python',
+ 'qtopiadir',
+ 'pkg_preins',
+ 'pkg_prerm',
+ 'pkg_postins',
+ 'pkg_postrm',
+ 'require',
+ 'sbindir',
+ 'basesysconfdir',
+ 'sysconfdir',
+ 'ALLOW_EMPTY',
+ 'ALTERNATIVE_NAME',
+ 'ALTERNATIVE_PATH',
+ 'ALTERNATIVE_LINK',
+ 'ALTERNATIVE_PRIORITY',
+ 'ALTNAME',
+ 'AMD_DRIVER_LABEL',
+ 'AMD_DRIVER_VERSION',
+ 'ANGSTROM_EXTRA_INSTALL',
+ 'APPDESKTOP',
+ 'APPIMAGE',
+ 'APPNAME',
+ 'APPTYPE',
+ 'APPWEB_BUILD',
+ 'APPWEB_HOST',
+ 'AR',
+ 'ARCH',
+ 'ARM_INSTRUCTION_SET',
+ 'MIPS_INSTRUCTION_SET',
+ 'ARM_MUTEX',
+ 'ART_CONFIG',
+ 'B',
+ 'BJAM_OPTS',
+ 'BJAM_TOOLS',
+ 'BONOBO_HEADERS',
+ 'BOOTSCRIPTS',
+ 'BROKEN',
+ 'BUILD_CPPFLAGS',
+ 'CFLAGS',
+ 'CCFLAGS',
+ 'CMDLINE',
+ 'COLLIE_MEMORY_SIZE',
+ 'COMPATIBLE_HOST',
+ 'COMPATIBLE_MACHINE',
+ 'COMPILE_HERMES',
+ 'CONFFILES',
+ 'CONFLICTS',
+ 'CORE_EXTRA_D',
+ 'CORE_IMAGE_EXTRA_INSTALL',
+ 'CORE_PACKAGES_D',
+ 'CORE_PACKAGES_RD',
+ 'CPPFLAGS',
+ 'CVSDATE',
+ 'CXXFLAGS',
+ 'DEBIAN_NOAUTONAME',
+ 'DEBUG_APPS',
+ 'DEFAULT_PREFERENCE',
+ 'DB4_CONFIG',
+ 'EXCLUDE_FROM_SHLIBS',
+ 'EXCLUDE_FROM_WORLD',
+ 'FIXEDSRCDATE',
+ 'GLIBC_ADDONS',
+ 'GLIBC_EXTRA_OECONF',
+ 'GNOME_VFS_HEADERS',
+ 'HEADERS',
+ 'INHIBIT_DEFAULT_DEPS',
+ 'INITSCRIPT_PACKAGES',
+ 'INITSCRIPT_NAME',
+ 'INITSCRIPT_PARAMS',
+ 'INSANE_SKIP',
+ 'PACKAGE_INSTALL',
+ 'KERNEL_IMAGETYPE',
+ 'KERNEL_IMAGEDEST',
+ 'KERNEL_OUTPUT',
+ 'KERNEL_RELEASE',
+ 'KERNEL_PRIORITY',
+ 'KERNEL_SOURCE',
+ 'KERNEL_SUFFIX',
+ 'KERNEL_VERSION',
+ 'K_MAJOR',
+ 'K_MICRO',
+ 'K_MINOR',
+ 'HHV',
+ 'KV',
+ 'LDFLAGS',
+ 'LD',
+ 'LD_SO',
+ 'LDLIBS',
+ 'LEAD_SONAME',
+ 'LIBTOOL',
+ 'LIBBDB_EXTRA',
+ 'LIBV',
+ 'MACHINE_ESSENTIAL_EXTRA_RDEPENDS',
+ 'MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS',
+ 'MACHINE_EXTRA_RDEPENDS',
+ 'MACHINE_EXTRA_RRECOMMENDS',
+ 'MACHINE_FEATURES',
+ 'MACHINE_TASKS',
+ 'MACHINE',
+ 'MACHTYPE',
+ 'MAKE_TARGETS',
+ 'MESSAGEUSER',
+ 'MESSAGEHOME',
+ 'MIRRORS',
+ 'MUTEX',
+ 'OE_QMAKE_INCDIR_QT',
+ 'OE_QMAKE_CXXFLAGS',
+ 'ORBIT_IDL_SRC',
+ 'PARALLEL_MAKE',
+ 'PAKCAGE_ARCH',
+ 'PCMCIA_MANAGER',
+ 'PKG_BASENAME',
+ 'PKG',
+ 'QEMU',
+ 'QMAKE_PROFILES',
+ 'QPEDIR',
+ 'QPF_DESCRIPTION',
+ 'QPF_PKGPATTERN',
+ 'QT_CONFIG_FLAGS',
+ 'QT_LIBRARY',
+ 'ROOTFS_POSTPROCESS_COMMAND',
+ 'RREPLACES',
+ 'TARGET_CFLAGS',
+ 'TARGET_CPPFLAGS',
+ 'TARGET_LDFLAGS',
+ 'UBOOT_MACHINE',
+ 'UCLIBC_BASE',
+ 'UCLIBC_PATCHES',
+ 'USERADD_PACKAGES',
+ 'USERADD_PARAM',
+ 'VIRTUAL_NAME',
+ 'XORG_PN',
+ 'XSERVER',
+ 'others'
+]
+
+varRegexp = r'^([a-zA-Z_0-9${}-]*)([ \t]*)([+.:]?=[+.]?)([ \t]*)([^\t]+)'
+routineRegexp = r'^([a-zA-Z0-9_ ${}-]+?)\('
+
+# Variables seen in the processed .bb
+seen_vars = {}
+for v in OE_vars:
+ seen_vars[v] = []
+
+# _Format guideline #0_:
+# No spaces are allowed at the beginning of lines that define a variable or
+# a do_ routine
+def respect_rule0(line):
+ return line.lstrip()==line
+def conformTo_rule0(line):
+ return line.lstrip()
+
+# _Format guideline #1_:
+# No spaces are allowed behind the line continuation symbol '\'
+def respect_rule1(line):
+ if line.rstrip().endswith('\\'):
+ return line.endswith('\\')
+ else:
+ return True
+def conformTo_rule1(line):
+ return line.rstrip()
+
+# _Format guideline #2_:
+# Tabs should not be used (use spaces instead).
+def respect_rule2(line):
+ return line.count('\t')==0
+def conformTo_rule2(line):
+ return line.expandtabs()
+
+# _Format guideline #3_:
+# Comments inside bb files are allowed using the '#' character at the
+# beginning of a line.
+def respect_rule3(line):
+ if line.lstrip().startswith('#'):
+ return line.startswith('#')
+ else:
+ return True
+def conformTo_rule3(line):
+ return line.lstrip()
+
+# _Format guideline #4_:
+# Use quotes on the right hand side of assignments FOO = "BAR"
+def respect_rule4(line):
+ r = re.search(varRegexp, line)
+ if r is not None:
+ r2 = re.search(r'("?)([^"\\]*)(["\\]?)', r.group(5))
+ # do not test for None it because always match
+ return r2.group(1)=='"' and r2.group(3)!=''
+ return False
+def conformTo_rule4(line):
+ r = re.search(varRegexp, line)
+ return ''.join([r.group(1), ' ', r.group(3), ' "', r.group(5), r.group(5).endswith('"') and '' or '"'])
+
+# _Format guideline #5_:
+# The correct spacing for a variable is FOO = "BAR".
+def respect_rule5(line):
+ r = re.search(varRegexp, line)
+ return r is not None and r.group(2)==" " and r.group(4)==" "
+def conformTo_rule5(line):
+ r = re.search(varRegexp, line)
+ return ''.join([r.group(1), ' ', r.group(3), ' ', r.group(5)])
+
+# _Format guideline #6_:
+# Don't use spaces or tabs on empty lines
+def respect_rule6(line):
+ return not line.isspace() or line=="\n"
+def conformTo_rule6(line):
+ return ""
+
+# _Format guideline #7_:
+# Indentation of multiline variables such as SRC_URI is desireable.
+def respect_rule7(line):
+ return True
+def conformTo_rule7(line):
+ return line
+
+rules = (
+ (respect_rule0, conformTo_rule0, "No spaces are allowed at the beginning of lines that define a variable or a do_ routine"),
+ (respect_rule1, conformTo_rule1, "No spaces are allowed behind the line continuation symbol '\\'"),
+ (respect_rule2, conformTo_rule2, "Tabs should not be used (use spaces instead)"),
+ (respect_rule3, conformTo_rule3, "Comments inside bb files are allowed using the '#' character at the beginning of a line"),
+ (respect_rule4, conformTo_rule4, "Use quotes on the right hand side of assignments FOO = \"BAR\""),
+ (respect_rule5, conformTo_rule5, "The correct spacing for a variable is FOO = \"BAR\""),
+ (respect_rule6, conformTo_rule6, "Don't use spaces or tabs on empty lines"),
+ (respect_rule7, conformTo_rule7, "Indentation of multiline variables such as SRC_URI is desireable"),
+)
+
+# Function to check that a line respects a rule. If not, it tries to conform
+# the line to the rule. Reminder or Disgression message are dump accordingly.
+def follow_rule(i, line):
+ oldline = line
+ # if the line does not respect the rule
+ if not rules[i][0](line):
+ # try to conform it to the rule
+ line = rules[i][1](line)
+ # if the line still does not respect the rule
+ if not rules[i][0](line):
+ # this is a rule disgression
+ print ("## Disgression: ", rules[i][2], " in: '", oldline, "'")
+ else:
+ # just remind user about his/her errors
+ print ("## Reminder: ", rules[i][2], " in : '", oldline, "'")
+ return line
+
+
+if __name__ == "__main__":
+
+ # -- retrieves the lines of the .bb file --
+ lines = []
+ for line in fileinput.input():
+ # use 'if True' to warn user about all the rule he/she breaks
+ # use 'if False' to conform to rules{2,1,6} without warnings
+ if True:
+ lines.append(line)
+ else:
+ # expandtabs on each line so that rule2 is always respected
+ # rstrip each line so that rule1 is always respected
+ line = line.expandtabs().rstrip()
+ # ignore empty lines (or line filled with spaces or tabs only)
+ # so that rule6 is always respected
+ if line is not '':
+ lines.append(line)
+
+ # -- parse the file --
+ var = ""
+ in_routine = False
+ commentBloc = []
+ olines = []
+ for line in lines:
+ originalLine = line
+ # rstrip line to remove line breaks characters
+ line = line.rstrip()
+ line = follow_rule(2, line)
+ line = follow_rule(1, line)
+ line = follow_rule(6, line)
+
+ # ignore empty lines
+ if line.isspace() or line is '':
+ # flush comments into the olines
+ for c in commentBloc: olines.append(c)
+ commentBloc = []
+ continue
+
+ if line.startswith('}'):
+ in_routine=False
+ keep = line.endswith('\\') or in_routine
+
+ # handles commented lines
+ if line.lstrip().startswith('#'):
+ # check and follow rule3 if not in a variables or routines
+ if not in_routine:
+ line = follow_rule(3, line)
+ commentBloc.append(line)
+ continue
+
+ if var in seen_vars:
+ for c in commentBloc: seen_vars[var].append(c)
+ commentBloc = []
+ seen_vars[var].append(line)
+ else:
+ for k in OE_vars:
+ if line.startswith(k):
+ var = k
+ break
+ if re.match(routineRegexp, line) is not None:
+ in_routine=True
+ line = follow_rule(0, line)
+ elif re.match(varRegexp, line) is not None:
+ line = follow_rule(0, line)
+ line = follow_rule(4, line)
+ line = follow_rule(5, line)
+ if var == "":
+ if not in_routine:
+ print ("## Warning: unknown variable/routine \"%s\"" % originalLine.rstrip('\n'))
+ var = 'others'
+ for c in commentBloc: seen_vars[var].append(c)
+ commentBloc = []
+ seen_vars[var].append(line)
+ if not keep and not in_routine: var = ""
+
+ # -- dump the sanitized .bb file --
+ addEmptyLine = False
+ # write comments that are not related to variables nor routines
+ for l in commentBloc: olines.append(l)
+ # write variables and routines
+ previourVarPrefix = "unknown"
+ for k in OE_vars:
+ if k=='SRC_URI': addEmptyLine = True
+ if seen_vars[k] != []:
+ if addEmptyLine and not k.startswith(previourVarPrefix):
+ olines.append("")
+ for l in seen_vars[k]:
+ olines.append(l)
+ previourVarPrefix = k.split('_')[0]=='' and "unknown" or k.split('_')[0]
+ for line in olines: print(line)
+
diff --git a/meta-openembedded/contrib/pw-am.sh b/meta-openembedded/contrib/pw-am.sh
new file mode 100755
index 000000000..8987eee8e
--- /dev/null
+++ b/meta-openembedded/contrib/pw-am.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+#
+# Idea and implementation: Koen Kooi
+# Multiple patches support: Marcin Juszkiewicz
+#
+# This script will fetch an 'mbox' patch from patchwork and git am it
+# usage: pw-am.sh <number>
+# example: 'pw-am.sh 221' will get the patch from http://patchwork.openembedded.org/patch/221/
+
+for patchnumber in $@;
+do
+ wget -nv http://patches.openembedded.org/patch/$patchnumber/mbox/ -O pw-am-$patchnumber.patch
+ git am -s pw-am-$patchnumber.patch
+ rm pw-am-$patchnumber.patch
+done
diff --git a/meta-openembedded/meta-filesystems/COPYING.MIT b/meta-openembedded/meta-filesystems/COPYING.MIT
new file mode 100644
index 000000000..89de35479
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/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-filesystems/README b/meta-openembedded/meta-filesystems/README
new file mode 100644
index 000000000..97d0e94bf
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/README
@@ -0,0 +1,105 @@
+This README file contains information on the contents of the
+filesystems layer.
+
+Please see the corresponding sections below for details.
+
+
+Dependencies
+============
+
+This layer depends on:
+
+ URI: git://git.openembedded.org/bitbake
+ branch: master
+
+ URI: git://git.openembedded.org/openembedded-core
+ layers: meta
+ branch: master
+
+ URI: git://git.openembedded.org/meta-openembedded
+ layers: meta-oe
+ branch: master
+
+Patches
+=======
+
+Please submit any patches against the filesystems layer to the
+OpenEmbedded development mailing list (openembedded-devel@lists.openembedded.org)
+with '[meta-filesystems]' in the subject.
+
+Layer maintainer: Armin Kuster <akuster808@gmail.com>
+
+When sending single patches, please use something like:
+
+ git send-email -1 -M \
+ --to openembedded-devel@lists.openembedded.org \
+ --subject-prefix=meta-filesystems][PATCH
+
+
+Table of Contents
+=================
+
+ I. Adding the filesystems layer to your build
+ II. Misc
+
+
+I. Adding the filesystems layer to your build
+=================================================
+
+In order to use this layer, you need to make the build system aware of
+it.
+
+Assuming the filesystems layer exists at the top-level of your
+yocto build tree, you can add it to the build system by adding the
+location of the filesystems layer to bblayers.conf, along with any
+other layers needed. e.g.:
+
+ BBLAYERS ?= " \
+ /path/to/yocto/meta \
+ /path/to/yocto/meta-oe \
+ /path/to/yocto/meta-filesystems \
+ "
+
+
+II. Misc
+========
+
+ --- physfs ---
+ A library to provide abstract access to various archives
+
+ --- fuse ---
+ Filesystem in Userspace (FUSE) is a simple interface for userspace programs
+ to export a virtual filesystem to the Linux kernel.
+
+ --- ifuse ---
+ A fuse filesystem to access the contents of an iPhone or iPod Touch
+
+ --- sshfs-fuse ---
+ A filesystem client based on the SSH File Transfer Protocol
+
+ --- owfs ---
+ An easy way to use the 1-Wire file system
+
+ --- ntfs-3g-ntfsprogs ---
+ The ntfs-3g is a freely available read/write NTFS driver for Linux and
+ ntfsprogs includes utilities for doing all required tasks to NTFS partitions.
+
+ --- cramfs ---
+ Builds cramfs filesystems for embedded systems
+
+ --- smbnetfs ---
+ SMBNetFS is a Linux/FreeBSD filesystem that allow you to use samba/microsoft
+ network in the same manner as the network neighborhood in Microsoft Windows.
+
+ --- fuse-exfat ---
+ A read and write exFAT driver for FUSE
+
+ --- exfat-utils ---
+ Utilities to create, check, label and dump exFAT filesystem
+
+ --- f2fs-tools ---
+ Tools needed for creating and managing f2fs partitions
+
+ --- xfsprogs ---
+ It provides XFS filesystem utilities.
+
diff --git a/meta-openembedded/meta-filesystems/conf/layer.conf b/meta-openembedded/meta-filesystems/conf/layer.conf
new file mode 100644
index 000000000..dbcff42d4
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/conf/layer.conf
@@ -0,0 +1,18 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "filesystems-layer"
+BBFILE_PATTERN_filesystems-layer = "^${LAYERDIR}/"
+BBFILE_PRIORITY_filesystems-layer = "6"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_filesystems-layer = "1"
+
+LAYERDEPENDS_filesystems-layer = "core openembedded-layer"
+
+LAYERSERIES_COMPAT_filesystems-layer = "sumo"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.2.3.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.2.3.bb
new file mode 100644
index 000000000..99bf2bed4
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/fuse-exfat/fuse-exfat_1.2.3.bb
@@ -0,0 +1,21 @@
+SUMMARY = "read and write exFAT driver for FUSE"
+DESCRIPTION = "fuse-exfat is a read and write driver implementing the \
+extended file allocation table as a filesystem in userspace. A mounthelper \
+is provided under the name mount.exfat-fuse. \
+"
+HOMEPAGE = "http://code.google.com/p/exfat/"
+SECTION = "universe/otherosfs"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+SRC_URI = "${DEBIAN_MIRROR}/main/f/fuse-exfat/fuse-exfat_${PV}.orig.tar.gz \
+"
+DEPENDS = "fuse virtual/libc"
+RRECOMMENDS_${PN} = "util-linux-mount"
+
+inherit autotools pkgconfig
+
+SRC_URI[md5sum] = "fca71e6598f79d037a3c7c969cb5710c"
+SRC_URI[sha256sum] = "f2e06eba5a21c621aac1d6da21b12a5a324fdd1e20f9c8acd357dd463c2355d9"
+
+S = "${WORKDIR}/${PN}-${PV}"
+EXTRA_OECONF += "sbindir=${base_sbindir}"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/ifuse/ifuse_1.1.2.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/ifuse/ifuse_1.1.2.bb
new file mode 100644
index 000000000..f0b58b967
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/ifuse/ifuse_1.1.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A fuse filesystem to access the contents of an iPhone or iPod Touch"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6ab17b41640564434dda85c06b7124f7"
+HOMEPAGE ="http://www.libimobiledevice.org/"
+
+DEPENDS = "fuse libimobiledevice"
+
+SRC_URI = " \
+ http://www.libimobiledevice.org/downloads/ifuse-${PV}.tar.bz2 \
+"
+
+SRC_URI[md5sum] = "4152526b2ac3c505cb41797d997be14d"
+SRC_URI[sha256sum] = "47835c8afb72588b3202fe0b206d7ea37a68663d9aa4eaf73f0a4bcb6215fc05"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-Add-LDFLAGS-to-linker-cmdline.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-Add-LDFLAGS-to-linker-cmdline.patch
new file mode 100644
index 000000000..30ad1b8ad
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-Add-LDFLAGS-to-linker-cmdline.patch
@@ -0,0 +1,46 @@
+From a322794f80f2718ae4463669c4b6ab2fbb15ffec Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 5 Apr 2017 17:36:45 +0000
+Subject: [PATCH] Add $(LDFLAGS) to linker cmdline
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: git/Makefile
+===================================================================
+--- git.orig/Makefile
++++ git/Makefile
+@@ -14,7 +14,7 @@ ZLIB_O := crc32.o deflate.o adler32.o co
+ CC := gcc
+ CHECK := cgcc
+ CHECKFLAGS := -D__CHECK_ENDIAN__
+-CFLAGS := -std=gnu99
++CFLAGS += -std=gnu99
+ CFLAGS += -Wall
+ CFLAGS += -Os
+ CFLAGS += -D_FILE_OFFSET_BITS=64
+@@ -28,18 +28,18 @@ $(ZLIB_O): /usr/lib/libz.a
+
+ ifdef S
+ EXTRA_OBJ := $(ZLIB_O)
+-CFLAGS += -static
++LDFLAGS += -static
+ else
+-CFLAGS += -lz
++LDFLAGS += -lz
+ endif
+
+ mklogfs: $(EXTRA_OBJ)
+ mklogfs: mkfs.o lib.o btree.o segment.o readwrite.o
+- $(CC) $(CFLAGS) -o $@ $^
++ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
+
+ logfsck: $(ZLIB_O)
+ logfsck: fsck.o lib.o journal.o super.o
+- $(CC) $(CFLAGS) -o $@ $^
++ $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
+
+ $(OBJ): kerncompat.h logfs.h logfs_abi.h btree.h
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-btree-Avoid-conflicts-with-libc-namespace-about-setk.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-btree-Avoid-conflicts-with-libc-namespace-about-setk.patch
new file mode 100644
index 000000000..dbf7ae016
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs/0001-btree-Avoid-conflicts-with-libc-namespace-about-setk.patch
@@ -0,0 +1,135 @@
+From 5a8e26157d9642f022587cc1ca7525213c7a5379 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 18:41:53 -0700
+Subject: [PATCH] btree: Avoid conflicts with libc namespace about setkey()
+
+This issue is highlighted with musl mainly because the
+function signature from stdlib.h does not match the local
+static function
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ btree.c | 32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/btree.c b/btree.c
+index eddc33b..dd3fef9 100644
+--- a/btree.c
++++ b/btree.c
+@@ -123,7 +123,7 @@ static unsigned long bval(struct btree_geo *geo, unsigned long *node, int n)
+ return node[geo->no_pairs * geo->keylen + n];
+ }
+
+-static void setkey(struct btree_geo *geo, unsigned long *node,
++static void _setkey(struct btree_geo *geo, unsigned long *node,
+ unsigned long *key, int n)
+ {
+ longcpy(bkey(geo, node, n), key, geo->keylen);
+@@ -292,7 +292,7 @@ static unsigned long *find_level(struct btree_head *head, struct btree_geo *geo,
+ /* FIXME: If the right-most key on higher levels is
+ * always zero, this wouldn't be necessary. */
+ i--;
+- setkey(geo, node, key, i);
++ _setkey(geo, node, key, i);
+ }
+ BUG_ON(i < 0);
+ node = (unsigned long *)bval(geo, node, i);
+@@ -311,7 +311,7 @@ static int btree_grow(struct btree_head *head, struct btree_geo *geo)
+ return -ENOMEM;
+ if (head->node) {
+ fill = getfill(geo, head->node, 0);
+- setkey(geo, node, bkey(geo, head->node, fill - 1), 0);
++ _setkey(geo, node, bkey(geo, head->node, fill - 1), 0);
+ setval(geo, node, (unsigned long)head->node, 0);
+ }
+ head->node = node;
+@@ -342,16 +342,16 @@ static void steal_l(struct btree_head *head, struct btree_geo *geo, int level,
+
+ for (i = rfill - 1; i >= 0; i--) {
+ /* Shift entries on the right */
+- setkey(geo, right, bkey(geo, right, i), i + no_entries);
++ _setkey(geo, right, bkey(geo, right, i), i + no_entries);
+ setval(geo, right, bval(geo, right, i), i + no_entries);
+ }
+ for (i = 0; i < no_entries; i++) {
+ /* Move some entries to the right */
+- setkey(geo, right, bkey(geo, left, lfill - no_entries + i), i);
++ _setkey(geo, right, bkey(geo, left, lfill - no_entries + i), i);
+ setval(geo, right, bval(geo, left, lfill - no_entries + i), i);
+ }
+ /* Set parent key */
+- setkey(geo, parent, bkey(geo, left, lfill - no_entries - 1), lpos);
++ _setkey(geo, parent, bkey(geo, left, lfill - no_entries - 1), lpos);
+ for (i = lfill - no_entries; i < lfill; i++)
+ clearpair(geo, left, i);
+ }
+@@ -366,14 +366,14 @@ static void steal_r(struct btree_head *head, struct btree_geo *geo, int level,
+
+ for (i = 0; i < no_entries; i++) {
+ /* Move some entries to the left */
+- setkey(geo, left, bkey(geo, right, i), lfill + i);
++ _setkey(geo, left, bkey(geo, right, i), lfill + i);
+ setval(geo, left, bval(geo, right, i), lfill + i);
+ }
+ /* Set parent key */
+- setkey(geo, parent, bkey(geo, right, no_entries - 1), lpos);
++ _setkey(geo, parent, bkey(geo, right, no_entries - 1), lpos);
+ /* Shift entries on the right */
+ for ( ; i < rfill; i++) {
+- setkey(geo, right, bkey(geo, right, i), i - no_entries);
++ _setkey(geo, right, bkey(geo, right, i), i - no_entries);
+ setval(geo, right, bval(geo, right, i), i - no_entries);
+ }
+ for (i = rfill - no_entries; i < rfill; i++)
+@@ -399,14 +399,14 @@ static int split(struct btree_head *head, struct btree_geo *geo,
+ return err;
+ }
+ for (i = 0; i < fill / 2; i++) {
+- setkey(geo, new, bkey(geo, node, i), i);
++ _setkey(geo, new, bkey(geo, node, i), i);
+ setval(geo, new, bval(geo, node, i), i);
+- setkey(geo, node, bkey(geo, node, i + fill / 2), i);
++ _setkey(geo, node, bkey(geo, node, i + fill / 2), i);
+ setval(geo, node, bval(geo, node, i + fill / 2), i);
+ clearpair(geo, node, i + fill / 2);
+ }
+ if (fill & 1) {
+- setkey(geo, node, bkey(geo, node, fill - 1), i);
++ _setkey(geo, node, bkey(geo, node, fill - 1), i);
+ setval(geo, node, bval(geo, node, fill - 1), i);
+ clearpair(geo, node, fill - 1);
+ }
+@@ -487,10 +487,10 @@ retry:
+
+ /* shift and insert */
+ for (i = fill; i > pos; i--) {
+- setkey(geo, node, bkey(geo, node, i - 1), i);
++ _setkey(geo, node, bkey(geo, node, i - 1), i);
+ setval(geo, node, bval(geo, node, i - 1), i);
+ }
+- setkey(geo, node, key, pos);
++ _setkey(geo, node, key, pos);
+ setval(geo, node, val, pos);
+
+ return 0;
+@@ -513,7 +513,7 @@ static void merge(struct btree_head *head, struct btree_geo *geo, int level,
+
+ for (i = 0; i < rfill; i++) {
+ /* Move all entries to the left */
+- setkey(geo, left, bkey(geo, right, i), lfill + i);
++ _setkey(geo, left, bkey(geo, right, i), lfill + i);
+ setval(geo, left, bval(geo, right, i), lfill + i);
+ }
+ /* Exchange left and right child in parent */
+@@ -615,7 +615,7 @@ static void *btree_remove_level(struct btree_head *head, struct btree_geo *geo,
+
+ /* remove and shift */
+ for (i = pos; i < fill - 1; i++) {
+- setkey(geo, node, bkey(geo, node, i + 1), i);
++ _setkey(geo, node, bkey(geo, node, i + 1), i);
+ setval(geo, node, bval(geo, node, i + 1), i);
+ }
+ clearpair(geo, node, fill - 1);
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs_git.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs_git.bb
new file mode 100644
index 000000000..1b4d97d76
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/logfsprogs/logfsprogs_git.bb
@@ -0,0 +1,29 @@
+SUMMARY = "LogFS Programs: used to create LogFS file system"
+DESCRIPTION = "\
+LogFS is a Linux log-structured and scalable flash file system, intended \
+for use on large devices of flash memory. It is written by Jörn Engel and \
+in part sponsored by the CE Linux Forum. \
+LogFS is included in the mainline Linux kernel and was introduced in \
+version 2.6.34, released on May 16, 2010."
+HOMEPAGE = "https://github.com/prasad-joshi/logfsprogs"
+SECTION = "base"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://fsck.c;md5=3859dc73da97909ff1d0125e88a27e02"
+DEPENDS = "zlib"
+
+SRC_URI = "git://github.com/prasad-joshi/logfsprogs.git \
+ file://0001-Add-LDFLAGS-to-linker-cmdline.patch \
+ file://0001-btree-Avoid-conflicts-with-libc-namespace-about-setk.patch \
+ "
+SRCREV = "45b72c81ce3c6fa17ca19bafc207ea93e76312f4"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "CC="${CC}" LD="${LD}" AR="${AR}""
+
+do_install () {
+ mkdir -p ${D}${bindir}
+ install -m 0755 ${S}/mklogfs ${D}${bindir}/mklogfs
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/files/0001-libntfs-3g-Makefile.am-fix-install-failed-while-host.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/files/0001-libntfs-3g-Makefile.am-fix-install-failed-while-host.patch
new file mode 100644
index 000000000..7b8eec7cb
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/files/0001-libntfs-3g-Makefile.am-fix-install-failed-while-host.patch
@@ -0,0 +1,52 @@
+From 575591caf1e8972f765885679b76787ef92de77b Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 24 Apr 2017 04:24:10 -0400
+Subject: [PATCH] libntfs-3g/Makefile.am: fix install failed while host dir not exist
+
+While cross compiling, if the dir of "$(rootlibdir)" and "$(libdir)"
+(such as "/usr/lib64") do not exist on host system, the do_instal failed.
+-----------------------
+make[3]: Entering directory `tmp/work/core2-64-wrs-linux/ntfs-3g-ntfsprogs/2017.3.23-r0/build/libntfs-3g'
+if [ ! "/usr/lib64" -ef "/usr/lib64" ]; then \
+ mv -f "tmp/work/core2-64-wrs-linux/ntfs-3g-ntfsprogs/2017.3.23-r0/image//usr/lib64"/libntfs-3g.so* \
+ "tmp/work/core2-64-wrs-linux/ntfs-3g-ntfsprogs/2017.3.23-r0/image//usr/lib64"; \
+fi
+mv:...are the same file
+-----------------------
+
+Use `=' rather than `-ef' to compare them, the cross compile does not
+care about host dir.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ libntfs-3g/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/libntfs-3g/Makefile.am b/libntfs-3g/Makefile.am
+index d6b150e..806109d 100644
+--- a/libntfs-3g/Makefile.am
++++ b/libntfs-3g/Makefile.am
+@@ -59,15 +59,15 @@ endif
+ # And create ldscript or symbolic link from /usr
+ install-exec-hook: install-rootlibLTLIBRARIES
+ if INSTALL_LIBRARY
+- if [ ! "$(rootlibdir)" -ef "$(libdir)" ]; then \
++ if [ "$(rootlibdir)" != "$(libdir)" ]; then \
+ $(MV) -f "$(DESTDIR)/$(libdir)"/libntfs-3g.so* "$(DESTDIR)/$(rootlibdir)"; \
+ fi
+ if GENERATE_LDSCRIPT
+- if [ ! "$(rootlibdir)" -ef "$(libdir)" ]; then \
++ if [ "$(rootlibdir)" != "$(libdir)" ]; then \
+ $(install_sh_PROGRAM) "libntfs-3g.script.so" "$(DESTDIR)/$(libdir)/libntfs-3g.so"; \
+ fi
+ else
+- if [ ! "$(rootlibdir)" -ef "$(libdir)" ]; then \
++ if [ "$(rootlibdir)" != "$(libdir)" ]; then \
+ $(LN_S) "$(rootlibdir)/libntfs-3g.so" "$(DESTDIR)/$(libdir)/libntfs-3g.so"; \
+ fi
+ endif
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_2017.3.23.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_2017.3.23.bb
new file mode 100644
index 000000000..9e77766e6
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_2017.3.23.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "The NTFS-3G driver is an open source, freely available NTFS driver for Linux with read and write support."
+HOMEPAGE = "http://www.ntfs-3g.org/"
+DEPENDS = "fuse libgcrypt"
+PROVIDES = "ntfsprogs ntfs-3g"
+LICENSE = "GPLv2 & LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ file://COPYING.LIB;md5=f30a9716ef3762e3467a2f62bf790f0a"
+
+SRC_URI = "http://tuxera.com/opensource/ntfs-3g_ntfsprogs-${PV}.tgz \
+ file://0001-libntfs-3g-Makefile.am-fix-install-failed-while-host.patch \
+"
+S = "${WORKDIR}/ntfs-3g_ntfsprogs-${PV}"
+SRC_URI[md5sum] = "d97474ae1954f772c6d2fa386a6f462c"
+SRC_URI[sha256sum] = "3e5a021d7b761261836dcb305370af299793eedbded731df3d6943802e1262d5"
+
+inherit autotools pkgconfig
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[uuid] = "--with-uuid,--without-uuid,util-linux"
+
+# required or it calls ldconfig at install step
+EXTRA_OEMAKE = "LDCONFIG=echo"
+
+PACKAGES =+ "ntfs-3g ntfsprogs libntfs-3g"
+
+FILES_ntfs-3g = "${base_sbindir}/*.ntfs-3g ${bindir}/ntfs-3g* ${base_sbindir}/mount.ntfs"
+RDEPENDS_ntfs-3g += "fuse"
+RRECOMMENDS_ntfs-3g = "util-linux-mount"
+
+FILES_ntfsprogs = "${base_sbindir}/* ${bindir}/* ${sbindir}/*"
+FILES_libntfs-3g = "${libdir}/*${SOLIBS}"
+
+do_install_append() {
+ # Standard mount will execute the program /sbin/mount.TYPE
+ # when called. Add the symbolic to let mount could find ntfs.
+ ln -sf mount.ntfs-3g ${D}/${base_sbindir}/mount.ntfs
+ rmdir ${D}${libdir}/ntfs-3g
+}
+
+# Satisfy the -dev runtime dependency
+ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owhttpd b/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owhttpd
new file mode 100755
index 000000000..5d74d13d9
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owhttpd
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+PATH=/sbin:/bin:/usr/bin
+
+DAEMON="owhttpd"
+
+test -f /usr/bin/${DAEMON} || exit 0
+
+if test -f /etc/default/${DAEMON} ; then
+. /etc/default/${DAEMON}
+else
+:
+fi
+
+if [ "$START_OWHTTPD" != "yes" ]
+then
+ exit 0
+fi
+
+
+startdaemon(){
+ echo -n "Starting ${DAEMON}: "
+ start-stop-daemon --start -x /usr/bin/${DAEMON} -- ${CMDLINE} --pid_file /var/run/${DAEMON}.pid
+ echo "done"
+}
+
+stopdaemon(){
+ echo -n "Stopping ${DAEMON}: "
+ start-stop-daemon --stop -p /var/run/${DAEMON}.pid
+ echo "done"
+}
+
+
+
+case "$1" in
+ start)
+ startdaemon
+ ;;
+ stop)
+ stopdaemon
+ ;;
+ force-reload)
+ stopdaemon
+ startdaemon
+ ;;
+ restart)
+ stopdaemon
+ startdaemon
+ ;;
+ reload)
+ stopdaemon
+ startdaemon
+ ;;
+ *)
+ echo "Usage: ${DAEMON} { start | stop | restart | reload }" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owserver b/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owserver
new file mode 100755
index 000000000..b69ea53e3
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs/owserver
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+PATH=/sbin:/bin:/usr/bin
+
+DAEMON="owserver"
+
+test -f /usr/bin/${DAEMON} || exit 0
+
+if test -f /etc/default/${DAEMON} ; then
+. /etc/default/${DAEMON}
+else
+:
+fi
+
+if [ "$START_OWSERVER" != "yes" ]
+then
+ exit 0
+fi
+
+startdaemon(){
+ echo -n "Starting ${DAEMON}: "
+ start-stop-daemon --start -x /usr/bin/${DAEMON} -- ${CMDLINE} --pid_file /var/run/${DAEMON}.pid
+ echo "done"
+}
+
+stopdaemon(){
+ echo -n "Stopping ${DAEMON}: "
+ start-stop-daemon --stop -p /var/run/${DAEMON}.pid
+ echo "done"
+}
+
+
+
+case "$1" in
+ start)
+ startdaemon
+ ;;
+ stop)
+ stopdaemon
+ ;;
+ force-reload)
+ stopdaemon
+ startdaemon
+ ;;
+ restart)
+ stopdaemon
+ startdaemon
+ ;;
+ reload)
+ stopdaemon
+ startdaemon
+ ;;
+ *)
+ echo "Usage: ${DAEMON} { start | stop | restart | reload }" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs_2.9p1.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs_2.9p1.bb
new file mode 100644
index 000000000..21fd7e93e
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/owfs/owfs_2.9p1.bb
@@ -0,0 +1,68 @@
+SUMMARY = "1-Wire file system"
+DESCRIPTION = "OWFS is an easy way to use the powerful 1-wire system of Dallas/Maxim"
+HOMEPAGE = "http://www.owfs.org/"
+SECTION = "console/network"
+
+LICENSE = "GPLv2 & LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a0bc427f423a41220ab79a0b392218bd \
+ file://COPYING.LIB;md5=865c4bd642d9e04f43925ad7e929ae87"
+
+DEPENDS = "fuse virtual/libusb0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/owfs/owfs-${PV}.tar.gz \
+ file://owhttpd \
+ file://owserver "
+SRC_URI[md5sum] = "56ba145be208002e58775a7203369851"
+SRC_URI[sha256sum] = "9d22dbff72d235476688c02669f7171b23e21dffadf40bbdd3b8263908218424"
+
+inherit autotools-brokensep update-rc.d
+
+EXTRA_OECONF = " \
+ --with-fuseinclude=${STAGING_INCDIR} \
+ --with-fuselib=${STAGING_LIBDIR} \
+ --enable-owfs \
+ --enable-owhttpd \
+ --enable-w1 \
+ --disable-swig \
+ --disable-owtcl \
+ --disable-owphp \
+ --disable-owpython \
+ --disable-owperl \
+"
+
+do_install_prepend() {
+ install -d ${D}${sysconfdir}/default/
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/owhttpd ${D}${sysconfdir}/init.d/owhttpd
+ install -m 0755 ${WORKDIR}/owserver ${D}${sysconfdir}/init.d/owserver
+}
+
+PACKAGES =+ "owftpd owhttpd owserver owshell libowcapi libow libownet owmon owtap"
+
+DESCRIPTION_owftpd = "Anoymous FTP server for 1-wire access"
+DESCRIPTION_owhttpd = "Tiny webserver for 1-wire control"
+DESCRIPTION_owserver = "Backend server (daemon) for 1-wire control"
+DESCRIPTION_owshell = "owdir owread owwrite owpresent owget - lightweight owserver access"
+DESCRIPTION_libowcapi = "easy C-language 1-wire interface "
+DESCRIPTION_libow = "easy C-language 1-wire interface to the owserver protocol"
+DESCRIPTION_libownet = "easy C-language 1-wire interface to the owserver protocol"
+DESCRIPTION_owmon = "Monitor for owserver settings and statistics"
+DESCRIPTION_owtap = "Packet sniffer for the owserver protocol"
+
+FILES_owftpd = "${bindir}/owftpd"
+FILES_owhttpd = "${bindir}/owhttpd ${sysconfdir}/init.d/owhttpd"
+FILES_owserver = "${bindir}/owserver ${sysconfdir}/init.d/owserver"
+FILES_owshell = "${bindir}/owread ${bindir}/owwrite \
+ ${bindir}/owdir ${bindir}/owpresent \
+ ${bindir}/owget ${bindir}/owside"
+FILES_owmon = "${bindir}/owmon"
+FILES_owtap = "${bindir}/owtap"
+FILES_libowcapi = "${libdir}/libowcapi-*"
+FILES_libow = "${libdir}/libow-*"
+FILES_libownet = "${libdir}/libownet-*"
+
+INITSCRIPT_PACKAGES = "owhttpd owserver"
+INITSCRIPT_NAME_owserver = "owserver"
+INITSCRIPT_NAME_owhttpd = "owhttpd"
+INITSCRIPT_PARAMS_owserver = "defaults 20"
+INITSCRIPT_PARAMS_owhttpd = "defaults 21"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/simple-mtpfs/simple-mtpfs_git.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/simple-mtpfs/simple-mtpfs_git.bb
new file mode 100644
index 000000000..f85977fd5
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/simple-mtpfs/simple-mtpfs_git.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "SIMPLE-MTPFS is a FUSE based filsystem for MTP devices connected via USB"
+HOMEPAGE = "https://github.com/phatina/simple-mtpfs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=75859989545e37968a99b631ef42722e"
+
+DEPENDS = "fuse libmtp"
+
+inherit autotools pkgconfig
+
+SRC_URI = "git://github.com/phatina/simple-mtpfs.git;protocol=https;branch=master"
+SRCREV = "a7ab64c7e4d7aca155cbc7ce9412aaf68ef6e404"
+
+S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/Using-PKG_CHECK_MODULES-to-found-headers-and-libraries.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/Using-PKG_CHECK_MODULES-to-found-headers-and-libraries.patch
new file mode 100644
index 000000000..6d60c9d22
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/Using-PKG_CHECK_MODULES-to-found-headers-and-libraries.patch
@@ -0,0 +1,42 @@
+From 7a524d49b3d4459280f18942df2980603400ec52 Mon Sep 17 00:00:00 2001
+From: Bian Naimeng <biannm@cn.fujitsu.com>
+Date: Fri, 19 Jun 2015 11:54:44 +0900
+Subject: [PATCH] Using PKG_CHECK_MODULES to found headers and libraries of
+ smbclient
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+---
+ configure.in | 5 +++++
+ src/Makefile.am | 3 +++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 4c03409..8d22e71 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -119,6 +119,11 @@ AC_CHECK_LIB(smbclient, smbc_setOptionUseCCache, [], [
+ LIBS="$LIBS $SMBCLIENT_LIBS"
+ CFLAGS="$CFLAGS $SMBCLIENT_CFLAGS"
+
++dnl *****************************************************************
++dnl *** Check libsmbclient by pkgconfig to get cflags and ldflags ***
++dnl *****************************************************************
++PKG_CHECK_MODULES(SMBCLIENT, smbclient)
++
+ dnl ******************
+ dnl *** Final step ***
+ dnl ******************
+diff --git a/src/Makefile.am b/src/Makefile.am
+index ccaa8c3..6598317 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -17,3 +17,6 @@ smbnetfs_SOURCES = \
+ event.c event.h \
+ reconfigure.c reconfigure.h \
+ main.c
++
++smbnetfs_CFLAGS=${SMBCLIENT_CFLAGS}
++smbnetfs_LDFLAGS=${SMBCLIENT_LDFLAGS}
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/configure.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/configure.patch
new file mode 100644
index 000000000..55275669b
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs/configure.patch
@@ -0,0 +1,11 @@
+Index: git/configure.in
+===================================================================
+--- git.orig/configure.ac 2014-06-18 16:06:16.040721349 +0000
++++ git/configure.ac 2014-07-18 07:49:17.085552256 +0000
+@@ -1,5 +1,5 @@
+ AC_INIT([SMBNetFS],[0.6.1])
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+ AC_CONFIG_HEADERS([src/config.h])
+ AC_PROG_CC
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs_git.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs_git.bb
new file mode 100644
index 000000000..c72936c08
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/smbnetfs/smbnetfs_git.bb
@@ -0,0 +1,33 @@
+SUMMARY = "FUSE module for mounting an entire SMB/NMB network in a single directory"
+DESCRIPTION = "SMBNetFS is a Linux/FreeBSD filesystem that allow you to use \
+ samba/microsoft network in the same manner as the network \
+ neighborhood in Microsoft Windows. Please donate me to help \
+ in SMBNetFS development."
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a"
+HOMEPAGE ="http://sourceforge.net/projects/smbnetfs"
+
+DEPENDS = "fuse samba"
+DEPENDS_append_libc-musl = " libexecinfo"
+
+# samba depends on libpam
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
+
+inherit autotools gitpkgv pkgconfig
+
+PKGV = "${GITPKGVTAG}"
+
+SRCREV = "bc6b94b015fdaf7c4dab56ccb996eecea8bc4373"
+
+SRC_URI = "git://smbnetfs.git.sourceforge.net/gitroot/smbnetfs/smbnetfs;branch=master \
+ file://configure.patch \
+ file://Using-PKG_CHECK_MODULES-to-found-headers-and-libraries.patch"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[libsecret] = "--with-libsecret=yes,--with-libsecret=no,libsecret"
+
+S = "${WORKDIR}/git"
+
+LDFLAGS_append_libc-musl = " -lexecinfo"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/files/0001-Makefile-fix-path-for-sshfs.1.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/files/0001-Makefile-fix-path-for-sshfs.1.patch
new file mode 100644
index 000000000..c434a03f0
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/files/0001-Makefile-fix-path-for-sshfs.1.patch
@@ -0,0 +1,32 @@
+From e3cd445a4ee44a16faa646d7b642d02eea62b1f8 Mon Sep 17 00:00:00 2001
+From: Zoltan Kuscsik <zoltan.kuscsik@linaro.org>
+Date: Fri, 1 Jul 2016 09:30:31 +0200
+Subject: [PATCH] Makefile: fix path for sshfs.1
+
+Fix source path when build directory differs
+from the source dir.
+
+Upstream-Status: Accepted
+
+https://github.com/libfuse/sshfs/pull/24
+
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index f003bae..3d8f9cb 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -24,7 +24,7 @@ sshfs.1: sshfs.1.in
+ $(AM_V_GEN)sed \
+ -e 's,__IDMAP_DEFAULT__,$(IDMAP_DEFAULT),g' \
+ -e 's,__UNMOUNT_COMMAND__,$(UNMOUNT_COMMAND),g' \
+- <sshfs.1.in >sshfs.1.tmp || exit 1; \
++ <$(srcdir)/sshfs.1.in >sshfs.1.tmp || exit 1; \
+ mv sshfs.1.tmp sshfs.1
+
+ if SSH_NODELAY_SO
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/sshfs-fuse_2.8.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/sshfs-fuse_2.8.bb
new file mode 100644
index 000000000..64ccdace1
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/sshfs-fuse/sshfs-fuse_2.8.bb
@@ -0,0 +1,16 @@
+SUMMARY = "This is a filesystem client based on the SSH File Transfer Protocol using FUSE"
+AUTHOR = "Miklos Szeredi <miklos@szeredi.hu>"
+HOMEPAGE = "http://fuse.sourceforge.net/sshfs.html"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+DEPENDS = "glib-2.0 fuse"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/libfuse/sshfs;tag=b2fa7593586b141298e6159f40f521d2b0f4f894 \
+ file://0001-Makefile-fix-path-for-sshfs.1.patch"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${libdir}/sshnodelay.so"
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch
new file mode 100644
index 000000000..bf363ca1b
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-support-cross-compiling.patch
@@ -0,0 +1,32 @@
+From 449cec34c123b86b792627553c6ec7471d2ee7ed Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 30 Jun 2017 14:46:51 +0800
+Subject: [PATCH] support cross compiling
+
+Do not override OE CMAKE variables
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -10,9 +10,9 @@ IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
+ ENDIF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
+
+ # Select flags.
+-SET(CMAKE_C_FLAGS "-pipe -W -Wall -DFORTIFY_SOURCE=2")
++SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pipe -W -Wall -DFORTIFY_SOURCE=2")
+ SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
+-SET(CMAKE_C_FLAGS_RELEASE "-O2")
++SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2")
+ SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG")
+
+ if (UNIX AND APPLE)
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-unionfs-Define-IOCPARM_LEN-if-undefined.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-unionfs-Define-IOCPARM_LEN-if-undefined.patch
new file mode 100644
index 000000000..8f991cd3f
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/files/0001-unionfs-Define-IOCPARM_LEN-if-undefined.patch
@@ -0,0 +1,62 @@
+From 10411fa8658621822ae394160daffaced4a4cd7f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 23:07:29 -0700
+Subject: [PATCH] unionfs: Define IOCPARM_LEN if undefined
+
+musl does not have sysctl.h which defines this
+for glibc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/unionfs.c | 8 --------
+ src/unionfs.h | 15 +++++++++++++++
+ 2 files changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/src/unionfs.c b/src/unionfs.c
+index a34d34e..51684a7 100644
+--- a/src/unionfs.c
++++ b/src/unionfs.c
+@@ -21,14 +21,6 @@
+ #include "opts.h"
+ #include "usyslog.h"
+
+-#ifndef _IOC_SIZE
+-#ifdef IOCPARM_LEN
+-#define _IOC_SIZE(x) IOCPARM_LEN(x)
+-#else
+-#error "No mechanism for determining ioctl length found."
+-#endif
+-#endif
+-
+ static struct fuse_opt unionfs_opts[] = {
+ FUSE_OPT_KEY("chroot=%s,", KEY_CHROOT),
+ FUSE_OPT_KEY("cow", KEY_COW),
+diff --git a/src/unionfs.h b/src/unionfs.h
+index 8f5e0bf..b02de5a 100644
+--- a/src/unionfs.h
++++ b/src/unionfs.h
+@@ -17,6 +17,21 @@
+ #define FUSE_META_FILE ".fuse_hidden"
+ #define FUSE_META_LENGTH 12
+
++#ifndef IOCPARM_MASK
++#define IOCPARM_MASK 0x1FFF
++#endif
++#ifndef IOCPARM_LEN
++#define IOCPARM_LEN(a) (((a) >> 16) & IOCPARM_MASK)
++#endif
++
++#ifndef _IOC_SIZE
++#ifdef IOCPARM_LEN
++#define _IOC_SIZE(x) IOCPARM_LEN(x)
++#else
++#error "No mechanism for determining ioctl length found."
++#endif
++#endif
++
+ // file access protection mask
+ #define S_PROT_MASK (S_ISUID| S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_2.0.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_2.0.bb
new file mode 100644
index 000000000..6bedf16b0
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/unionfs-fuse/unionfs-fuse_2.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "A FUSE based implemention of unionfs"
+HOMEPAGE = "https://github.com/rpodgorny/unionfs-fuse"
+SECTION = "console/network"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://src/unionfs.c;beginline=3;endline=8;md5=30fa8de70fd8abab00b483a1b7943a32 \
+ file://LICENSE;md5=7e5a37fce17307066eec6b23546da3b3 \
+"
+
+SRC_URI = "git://github.com/rpodgorny/${BPN}.git;branch=master \
+ file://0001-support-cross-compiling.patch \
+ file://0001-unionfs-Define-IOCPARM_LEN-if-undefined.patch \
+ "
+SRCREV = "c8d23a9a75f1a62988593671839e8a168a79f3e5"
+
+DEPENDS = "fuse"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/0001-define-loff_t-if-not-already-defined.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/0001-define-loff_t-if-not-already-defined.patch
new file mode 100644
index 000000000..df202c855
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/0001-define-loff_t-if-not-already-defined.patch
@@ -0,0 +1,30 @@
+From 848717da4a28d33f8aa8f889377e61e6b1b8ae67 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 18:29:52 -0700
+Subject: [PATCH] define loff_t if not already defined
+
+Helps to build with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ yaffs_guts.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/yaffs_guts.h b/yaffs_guts.h
+index 6bcf12d..4af17ce 100644
+--- a/yaffs_guts.h
++++ b/yaffs_guts.h
+@@ -18,6 +18,10 @@
+
+ #include "yportenv.h"
+
++#ifndef loff_t
++#define loff_t off_t
++#endif
++
+ #define YAFFS_OK 1
+ #define YAFFS_FAIL 0
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/makefile-add-ldflags.patch b/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/makefile-add-ldflags.patch
new file mode 100644
index 000000000..bb21899eb
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils/makefile-add-ldflags.patch
@@ -0,0 +1,21 @@
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/utils/Makefile b/utils/Makefile
+index 710ebbf..6259893 100644
+--- a/utils/Makefile
++++ b/utils/Makefile
+@@ -57,10 +57,10 @@ $(COMMONOBJS) $(MKYAFFSIMAGEOBJS) $(MKYAFFS2IMAGEOBJS) : %.o: %.c
+ $(CC) -c $(CFLAGS) $< -o $@
+
+ mkyaffsimage: $(MKYAFFSIMAGEOBJS) $(COMMONOBJS)
+- $(CC) -o $@ $^
++ $(CC) $(LDFLAGS) -o $@ $^
+
+ mkyaffs2image: $(MKYAFFS2IMAGEOBJS) $(COMMONOBJS)
+- $(CC) -o $@ $^
++ $(CC) $(LDFLAGS) -o $@ $^
+
+
+ clean:
diff --git a/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils_git.bb b/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils_git.bb
new file mode 100644
index 000000000..67c926b2c
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-filesystems/yaffs2/yaffs2-utils_git.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Yet Another Flash File System"
+DESCRIPTION = "Tools for managing 'yaffs2' file systems."
+
+SECTION = "base"
+HOMEPAGE = "http://www.yaffs.net"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://utils/mkyaffs2image.c;beginline=12;endline=14;md5=5f5464f9b3e981ca574e65b00e438561"
+
+PV = "0.0+git${SRCPV}"
+
+DEPENDS = "mtd-utils"
+
+# Source is the HEAD of master branch at the time of writing this recipe
+SRC_URI = "git://www.aleph1.co.uk/yaffs2;protocol=git;branch=master \
+ file://makefile-add-ldflags.patch \
+ file://0001-define-loff_t-if-not-already-defined.patch \
+ "
+
+SRCREV = "bc76682d93955cfb33051beb503ad9f8a5450578"
+S = "${WORKDIR}/git"
+
+CFLAGS_append = " -I.. -DCONFIG_YAFFS_UTIL -DCONFIG_YAFFS_DEFINES_TYPES"
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_compile() {
+ cd utils && oe_runmake
+}
+
+INSTALL_FILES = "mkyaffsimage \
+ mkyaffs2image \
+ "
+do_install() {
+ install -d ${D}${sbindir}/
+ for i in ${INSTALL_FILES}; do
+ install -m 0755 utils/$i ${D}${sbindir}/
+ done
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-filesystems/recipes-support/fuse/files/0001-fuse-fix-the-return-value-of-help-option.patch b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/0001-fuse-fix-the-return-value-of-help-option.patch
new file mode 100644
index 000000000..577dbb5b2
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/0001-fuse-fix-the-return-value-of-help-option.patch
@@ -0,0 +1,28 @@
+From 2182c423c6cd235c052e6c420203f24ec9bcd6ab Mon Sep 17 00:00:00 2001
+From: Lu Chong <Chong.Lu@windriver.com>
+Date: Wed, 30 Oct 2013 15:27:00 +0800
+Subject: [PATCH] fuse: fix the return value of "--help" option
+
+Upstream-Status: Pending
+
+Signed-off-by: Lu Chong <Chong.Lu@windriver.com>
+---
+ util/fusermount.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/util/fusermount.c b/util/fusermount.c
+index b2e87d9..70d7c75 100644
+--- a/util/fusermount.c
++++ b/util/fusermount.c
+@@ -1168,7 +1168,7 @@ static void usage(void)
+ " -q quiet\n"
+ " -z lazy unmount\n",
+ progname);
+- exit(1);
++ exit(0);
+ }
+
+ static void show_version(void)
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-filesystems/recipes-support/fuse/files/aarch64.patch b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/aarch64.patch
new file mode 100644
index 000000000..050d1146a
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/aarch64.patch
@@ -0,0 +1,33 @@
+fuse: add aarch64 support
+
+u64/u32 is not defined in sys/types.h, include linux/types.h like
+the kernel version of fuse.h does. Patch sent to upstream mailing list.
+
+Upstream-Status: Submitted
+Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ include/fuse_kernel.h | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/include/fuse_kernel.h b/include/fuse_kernel.h
+index c632b58..e804278 100644
+--- a/include/fuse_kernel.h
++++ b/include/fuse_kernel.h
+@@ -88,12 +88,7 @@
+ #ifndef _LINUX_FUSE_H
+ #define _LINUX_FUSE_H
+
+-#include <sys/types.h>
+-#define __u64 uint64_t
+-#define __s64 int64_t
+-#define __u32 uint32_t
+-#define __s32 int32_t
+-#define __u16 uint16_t
++#include <linux/types.h>
+
+ /*
+ * Version negotiation:
+--
+1.8.1.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-support/fuse/files/fuse.conf b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/fuse.conf
new file mode 100644
index 000000000..a517c488f
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/fuse.conf
@@ -0,0 +1 @@
+fuse
diff --git a/meta-openembedded/meta-filesystems/recipes-support/fuse/files/gold-unversioned-symbol.patch b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/gold-unversioned-symbol.patch
new file mode 100644
index 000000000..d47f692c0
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-support/fuse/files/gold-unversioned-symbol.patch
@@ -0,0 +1,92 @@
+fuse: Fix linking issues with gold linker
+
+fuse has problems when linking with gold since it uses version
+scripts in a way thats so perticular to bfd ld
+
+/home/kraj/work/angstrom/build/tmp-angstrom_2010_x-eglibc/sysroots/x86_64-linux/usr/libexec/armv5te-angstrom-linux-gnueabi/gcc/arm-angstro
+error: symbol __fuse_exited has undefined version
+| collect2: ld returned 1 exit status
+| make[1]: *** [libfuse.la] Error 1
+| make[1]: *** Waiting for unfinished jobs....
+
+For more details
+
+http://blog.flameeyes.eu/2011/06/01/gold-readiness-obstacle-2-base-versioning
+http://sources.redhat.com/bugzilla/show_bug.cgi?id=10861
+http://comments.gmane.org/gmane.comp.file-systems.fuse.devel/9524
+http://www.airs.com/blog/archives/300
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ lib/fuse.c | 10 +++++-----
+ lib/fuse_mt.c | 2 +-
+ lib/fuse_versionscript | 3 +++
+ lib/helper.c | 6 +++---
+ 4 files changed, 12 insertions(+), 9 deletions(-)
+
+diff --git a/lib/fuse.c b/lib/fuse.c
+index 067d0dc..6d27711 100644
+--- a/lib/fuse.c
++++ b/lib/fuse.c
+@@ -4873,11 +4873,11 @@ struct fuse *fuse_new_compat1(int fd, int flags,
+ 11);
+ }
+
+-FUSE_SYMVER(".symver fuse_exited,__fuse_exited@");
+-FUSE_SYMVER(".symver fuse_process_cmd,__fuse_process_cmd@");
+-FUSE_SYMVER(".symver fuse_read_cmd,__fuse_read_cmd@");
+-FUSE_SYMVER(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@");
+-FUSE_SYMVER(".symver fuse_new_compat2,fuse_new@");
++FUSE_SYMVER(".symver fuse_exited,__fuse_exited@FUSE_UNVERSIONED");
++FUSE_SYMVER(".symver fuse_process_cmd,__fuse_process_cmd@FUSE_UNVERSIONED");
++FUSE_SYMVER(".symver fuse_read_cmd,__fuse_read_cmd@FUSE_UNVERSIONED");
++FUSE_SYMVER(".symver fuse_set_getcontext_func,__fuse_set_getcontext_func@FUSE_UNVERSIONED");
++FUSE_SYMVER(".symver fuse_new_compat2,fuse_new@FUSE_UNVERSIONED");
+ FUSE_SYMVER(".symver fuse_new_compat22,fuse_new@FUSE_2.2");
+
+ #endif /* __FreeBSD__ || __NetBSD__ */
+diff --git a/lib/fuse_mt.c b/lib/fuse_mt.c
+index f6dbe71..fd5ac23 100644
+--- a/lib/fuse_mt.c
++++ b/lib/fuse_mt.c
+@@ -119,4 +119,4 @@ int fuse_loop_mt(struct fuse *f)
+ return res;
+ }
+
+-FUSE_SYMVER(".symver fuse_loop_mt_proc,__fuse_loop_mt@");
++FUSE_SYMVER(".symver fuse_loop_mt_proc,__fuse_loop_mt@FUSE_UNVERSIONED");
+diff --git a/lib/fuse_versionscript b/lib/fuse_versionscript
+index 8d91887..de16ab2 100644
+--- a/lib/fuse_versionscript
++++ b/lib/fuse_versionscript
+@@ -1,3 +1,6 @@
++FUSE_UNVERSIONED {
++};
++
+ FUSE_2.2 {
+ global:
+ fuse_destroy;
+diff --git a/lib/helper.c b/lib/helper.c
+index b644012..c5349bf 100644
+--- a/lib/helper.c
++++ b/lib/helper.c
+@@ -436,10 +436,10 @@ int fuse_mount_compat1(const char *mountpoint, const char *args[])
+ return fuse_mount_compat22(mountpoint, NULL);
+ }
+
+-FUSE_SYMVER(".symver fuse_setup_compat2,__fuse_setup@");
++FUSE_SYMVER(".symver fuse_setup_compat2,__fuse_setup@FUSE_UNVERSIONED");
+ FUSE_SYMVER(".symver fuse_setup_compat22,fuse_setup@FUSE_2.2");
+-FUSE_SYMVER(".symver fuse_teardown,__fuse_teardown@");
+-FUSE_SYMVER(".symver fuse_main_compat2,fuse_main@");
++FUSE_SYMVER(".symver fuse_teardown,__fuse_teardown@FUSE_UNVERSIONED");
++FUSE_SYMVER(".symver fuse_main_compat2,fuse_main@FUSE_UNVERSIONED");
+ FUSE_SYMVER(".symver fuse_main_real_compat22,fuse_main_real@FUSE_2.2");
+
+ #endif /* __FreeBSD__ || __NetBSD__ */
+--
+1.8.1.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse_2.9.7.bb b/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse_2.9.7.bb
new file mode 100644
index 000000000..202d4c3eb
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-support/fuse/fuse_2.9.7.bb
@@ -0,0 +1,69 @@
+SUMMARY = "Implementation of a fully functional filesystem in a userspace program"
+DESCRIPTION = "FUSE (Filesystem in Userspace) is a simple interface for userspace \
+ programs to export a virtual filesystem to the Linux kernel. FUSE \
+ also aims to provide a secure method for non privileged users to \
+ create and mount their own filesystem implementations. \
+ "
+HOMEPAGE = "https://github.com/libfuse/libfuse"
+SECTION = "libs"
+LICENSE = "GPLv2 & LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "https://github.com/libfuse/libfuse/releases/download/${BP}/${BP}.tar.gz \
+ file://gold-unversioned-symbol.patch \
+ file://aarch64.patch \
+ file://0001-fuse-fix-the-return-value-of-help-option.patch \
+ file://fuse.conf \
+"
+SRC_URI[md5sum] = "9bd4ce8184745fd3d000ca2692adacdb"
+SRC_URI[sha256sum] = "832432d1ad4f833c20e13b57cf40ce5277a9d33e483205fc63c78111b3358874"
+
+inherit autotools pkgconfig update-rc.d systemd
+
+INITSCRIPT_NAME = "fuse"
+INITSCRIPT_PARAMS = "start 3 S . stop 20 0 6 ."
+
+SYSTEMD_SERVICE_${PN} = ""
+
+DEPENDS = "gettext-native"
+
+PACKAGES =+ "fuse-utils-dbg fuse-utils libulockmgr libulockmgr-dev libulockmgr-dbg"
+
+RRECOMMENDS_${PN}_class-target = "kernel-module-fuse libulockmgr fuse-utils"
+
+FILES_${PN} += "${libdir}/libfuse.so.*"
+FILES_${PN}-dev += "${libdir}/libfuse*.la"
+
+FILES_libulockmgr = "${libdir}/libulockmgr.so.*"
+FILES_libulockmgr-dev += "${libdir}/libulock*.la"
+FILES_libulockmgr-dbg += "${libdir}/.debug/libulock*"
+
+# Forbid auto-renaming to libfuse-utils
+FILES_fuse-utils = "${bindir} ${base_sbindir}"
+FILES_fuse-utils-dbg = "${bindir}/.debug ${base_sbindir}/.debug"
+DEBIAN_NOAUTONAME_fuse-utils = "1"
+DEBIAN_NOAUTONAME_fuse-utils-dbg = "1"
+
+do_configure_prepend() {
+ # Make this explicit so overriding base_sbindir propagates properly.
+ export MOUNT_FUSE_PATH="${base_sbindir}"
+}
+
+do_install_append() {
+ rm -rf ${D}${base_prefix}/dev
+
+ # systemd class remove the sysv_initddir only if systemd_system_unitdir
+ # contains anything, but it's not needed if sysvinit is not in DISTRO_FEATURES
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
+ rm -rf ${D}${sysconfdir}/init.d/
+ fi
+
+ # Install systemd related configuration file
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/modules-load.d
+ install -m 0644 ${WORKDIR}/fuse.conf ${D}${sysconfdir}/modules-load.d
+ fi
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-filesystems/recipes-support/physfs/physfs_2.0.3.bb b/meta-openembedded/meta-filesystems/recipes-support/physfs/physfs_2.0.3.bb
new file mode 100644
index 000000000..dc2c10649
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-support/physfs/physfs_2.0.3.bb
@@ -0,0 +1,13 @@
+SUMMARY = "PhysicsFS is a library to provide abstract access to various archives"
+HOMEAPAGE = "http://icculus.org/physfs"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=5d94e3eaaa10b00ca803ba35a3e87cde"
+DEPENDS = "readline zlib"
+
+inherit cmake
+
+PE = "1"
+
+SRC_URI = "http://icculus.org/${BPN}/downloads/${BP}.tar.bz2"
+SRC_URI[md5sum] = "c2c727a8a8deb623b521b52d0080f613"
+SRC_URI[sha256sum] = "ca862097c0fb451f2cacd286194d071289342c107b6fe69079c079883ff66b69"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/0001-libau-Define-STRIP-weakly.patch b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/0001-libau-Define-STRIP-weakly.patch
new file mode 100644
index 000000000..6732dc42e
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/0001-libau-Define-STRIP-weakly.patch
@@ -0,0 +1,37 @@
+From daf04dc9ca1f2e4c65ec338ab439e0a792e1a8ac Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 5 Sep 2017 10:36:52 -0700
+Subject: [PATCH] libau: Define STRIP weakly
+
+STRIP can be set on environment to use cross version of strip utility
+hardcoding to strip is not working in cross environment
+
+Upstream-Status: Submitted
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ libau/Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/libau/Makefile b/libau/Makefile
+index 81520ac..c25eef2 100644
+--- a/libau/Makefile
++++ b/libau/Makefile
+@@ -25,6 +25,7 @@ LibSoHdr = libau.h rdu.h
+ LibSoExport = $(addsuffix .exp, $(basename ${LibSoObj}))
+ LibSoExportErr = $(addsuffix .err, ${LibSoExport})
+ LibSoVerScript = verscript
++STRIP ?= strip
+
+ all: ${LibSo}
+
+@@ -77,7 +78,7 @@ ${LibSo}.${LibSoMajor}.${LibSoMinor}: ${LibSoObj}
+ ${CC} --shared -Wl,-soname,${LibSo}.${LibSoMajor} \
+ -Wl,--version-script,${LibSoVerScript} \
+ ${LDFLAGS} -o $@ $^ ${LDLIBS}
+- strip -R EXP $@
++ ${STRIP} -R EXP $@
+ # readelf --syms --use-dynamic libau.so
+
+ install_ulib: File = ${LibSo}.${LibSoMajor}.${LibSoMinor}
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-add-tool-concept-to-Makefile-for-cross-com.patch b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-add-tool-concept-to-Makefile-for-cross-com.patch
new file mode 100644
index 000000000..c832696a3
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-add-tool-concept-to-Makefile-for-cross-com.patch
@@ -0,0 +1,30 @@
+From 13a60c631d7cf6c7e1926473d8069795c0def9b6 Mon Sep 17 00:00:00 2001
+From: Chen Qi <Qi.Chen@windriver.com>
+Date: Thu, 19 Jun 2014 15:09:56 +0100
+Subject: [PATCH] aufs-util: add tool concept to Makefile for cross compiling
+ purpose
+
+In a cross compilation environment, c2sh, c2tmac and ver need to be created first.
+Add a tools target to Makefile to allow for this.
+
+Upstream-Status: Pending
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index dbbe43d..aff969e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -152,7 +152,7 @@ aufs.5: aufs.in.5 c2tmac
+ chmod a-w $@
+
+ c2sh c2tmac ver: CC = ${HOSTCC}
+-.INTERMEDIATE: c2sh c2tmac ver
++tools: c2sh c2tmac ver
+
+ install_sbin: File = auibusy aumvdown auplink mount.aufs umount.aufs
+ ifeq (${Glibc},no)
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-don-t-strip-executables.patch b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-don-t-strip-executables.patch
new file mode 100644
index 000000000..b40822c0d
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util/aufs-util-don-t-strip-executables.patch
@@ -0,0 +1,37 @@
+From 9d5e7eff4ae906f1ea6e6527080fded0b595fbd4 Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@windriver.com>
+Date: Tue, 9 Apr 2013 18:50:34 -0700
+Subject: [PATCH] aufs-util: don't strip executables
+
+By default, aufs-util strips its binaries. This produces QA warnings
+as follows:
+
+ WARNING: File '/sbin/mount.aufs' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/sbin/auplink' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/sbin/umount.aufs' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/sbin/auibusy' from aufs-util was already stripped, this will prevent future debugging!
+ WARNING: File '/usr/lib/libau.so.2.6' from aufs-util was already stripped, this will prevent future debugging!
+
+To prevent this, we remove -s from LDFLAGS.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
+
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 54f8d97..dbbe43d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -118,7 +118,7 @@ clean:
+ ver_test: ver
+ ./ver
+
+-${Bin}: override LDFLAGS += -static -s
++${Bin}: override LDFLAGS += -static
+ ${Bin}: LDLIBS = -L. -lautil
+ ${BinObj}: %.o: %.c ${LibUtilHdr} ${LibUtil}
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util_git.bb b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util_git.bb
new file mode 100644
index 000000000..2e855e313
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/aufs-util/aufs-util_git.bb
@@ -0,0 +1,65 @@
+SUMMARY = "Tools for managing AUFS mounts"
+SECTION = "base"
+HOMEPAGE = "http://aufs.sourceforge.net/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=892f569a555ba9c07a568a7c0c4fa63a"
+
+DEPENDS = "coreutils-native aufs-util-native"
+DEPENDS_class-native = ""
+
+SRCREV = "89afb1806c3d2eed8db2666ae254b77518ae3ceb"
+SRC_URI = "git://git.code.sf.net/p/aufs/aufs-util;protocol=git;branch=aufs4.4 \
+ https://raw.githubusercontent.com/sfjro/aufs4-linux/aufs4.4/include/uapi/linux/aufs_type.h;name=aufs_type \
+ file://aufs-util-don-t-strip-executables.patch \
+ file://aufs-util-add-tool-concept-to-Makefile-for-cross-com.patch \
+ file://0001-libau-Define-STRIP-weakly.patch \
+"
+SRC_URI[aufs_type.md5sum] = "f7b4a255dcb55fe7b0967f5f59b44f19"
+SRC_URI[aufs_type.sha256sum] = "85bc8e4c1a94a7d526c382e4b047b4256cab8c4a65fc0396291707ad9a327a18"
+
+PV = "4.4+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+export HOSTCC = "${BUILD_CC}"
+do_configure_prepend() {
+ # Replace sbin,bin paths with bitbake environment
+ sed -i -e 's;install_sbin: Tgt = ${DESTDIR}/sbin;install_sbin: Tgt = ${DESTDIR}/${base_sbindir};' \
+ -e 's;install_ubin: Tgt = ${DESTDIR}/usr/sbin;install_sbin: Tgt = ${DESTDIR}/${bindir};' \
+ ${S}/Makefile
+}
+
+do_configure_append () {
+ install -d ${S}/include/linux/
+ cp ${WORKDIR}/aufs_type.h ${S}/include/linux/
+ sed -i -e 's;__user;;' ${S}/include/linux/aufs_type.h
+}
+
+do_configure_append_class-target () {
+ for i in ver c2sh c2tmac; do
+ cp ${STAGING_BINDIR_NATIVE}/aufs-util-${PV}/$i ${B}
+ done
+}
+
+do_compile () {
+ oe_runmake CPPFLAGS="-I${S}/include -I${S}/libau"
+}
+
+do_compile_class-native () {
+ oe_runmake tools CPPFLAGS="-I${S}/include -I${S}/libau" CC="${BUILD_CC}"
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install_sbin install_ubin install_etc
+}
+
+do_install_class-native () {
+ install -d ${D}${bindir}/aufs-util-${PV}
+ for i in ver c2sh c2tmac; do
+ install -m 755 $i ${D}${bindir}/aufs-util-${PV}/$i
+ done
+}
+
+RRECOMMENDS_${PN} += "kernel-module-aufs"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/exfat-utils/exfat-utils_1.2.3.bb b/meta-openembedded/meta-filesystems/recipes-utils/exfat-utils/exfat-utils_1.2.3.bb
new file mode 100644
index 000000000..440f33618
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/exfat-utils/exfat-utils_1.2.3.bb
@@ -0,0 +1,22 @@
+SUMMARY = "utilities to create, check, label and dump exFAT filesystem"
+DESCRIPTION = "Utilities to manage extended file allocation table filesystem. \
+This package provides tools to create, check and label the filesystem. It \
+contains \
+ - dumpexfat to dump properties of the filesystem \
+ - exfatfsck / fsck.exfat to report errors found on a exFAT filesystem \
+ - exfatlabel to label a exFAT filesystem \
+ - mkexfatfs / mkfs.exfat to create a exFAT filesystem. \
+"
+HOMEPAGE = "http://code.google.com/p/exfat/"
+SECTION = "universe/otherosfs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "https://github.com/relan/exfat/releases/download/v${PV}/${BP}.tar.gz"
+
+DEPENDS = "virtual/libc"
+
+inherit pkgconfig autotools
+
+SRC_URI[md5sum] = "f4e564450aa8159e26dde2869563d242"
+SRC_URI[sha256sum] = "80d3b3f21242d60d36a38a4ddb05cb7cc3a7d4eef5793e8314814937b938fcea"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0001-Remove-AC_CHECK_FILE-for-cross-compilation.patch b/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0001-Remove-AC_CHECK_FILE-for-cross-compilation.patch
new file mode 100644
index 000000000..cf844bf87
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0001-Remove-AC_CHECK_FILE-for-cross-compilation.patch
@@ -0,0 +1,32 @@
+From 3b3c6e6376babcd9a0b0db312b0e1e3bb3ab833e Mon Sep 17 00:00:00 2001
+From: Sven Ebenfeld <sven.ebenfeld@vaillant.de>
+Date: Wed, 26 Nov 2014 10:36:44 +0100
+Subject: [PATCH] Remove AC_CHECK_FILE for cross compilation
+
+---
+ configure.ac | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0111e72..8c286d4 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -20,14 +20,9 @@ AC_DEFINE([F2FS_MINOR_VERSION], m4_bpatsubst(f2fs_tools_version,
+ [\([0-9]*\).\([0-9]*\)\(\w\|\W\)*], [\2]),
+ [Minor version for f2fs-tools])
+
+-AC_CHECK_FILE(.git,
+- AC_DEFINE([F2FS_TOOLS_DATE],
+- "m4_bpatsubst(f2fs_tools_gitdate,
+- [\([0-9-]*\)\(\w\|\W\)*], [\1])",
+- [f2fs-tools date based on Git commits]),
+ AC_DEFINE([F2FS_TOOLS_DATE],
+ "f2fs_tools_date",
+- [f2fs-tools date based on Source releases]))
++ [f2fs-tools date based on Source releases])
+
+ AC_CONFIG_SRCDIR([config.h.in])
+ AC_CONFIG_HEADER([config.h])
+--
+1.8.1.rc3
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0002-Fix-mkfs-out-of-tree-builds.patch b/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0002-Fix-mkfs-out-of-tree-builds.patch
new file mode 100644
index 000000000..9e561cb11
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools/0002-Fix-mkfs-out-of-tree-builds.patch
@@ -0,0 +1,37 @@
+From 0731eefd389e01419f78a115e1363ed0c28cfd3a Mon Sep 17 00:00:00 2001
+From: "Yong, Jonathan" <jonathan.yong@intel.com>
+Date: Thu, 30 Mar 2017 08:03:37 +0000
+Subject: [PATCH] Fix mkfs out of tree builds
+
+Libraries are built in builddir, not srcdir, fix Makefile.am
+accordingly.
+
+Signed-off-by: Yong, Jonathan <jonathan.yong@intel.com>
+Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
+
+The patch was imported from the f2fs-tools repo
+(git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git)
+commit ID 0731eefd389e01419f78a115e1363ed0c28cfd3a.
+
+Upstream-Status: Accepted, expected to be included in 1.9.0.
+
+Signed-off-by: Yong, Jonathan <jonathan.yong@intel.com>
+
+---
+ mkfs/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mkfs/Makefile.am b/mkfs/Makefile.am
+index 162a0cf..0ea8b49 100644
+--- a/mkfs/Makefile.am
++++ b/mkfs/Makefile.am
+@@ -10,5 +10,5 @@ lib_LTLIBRARIES = libf2fs_format.la
+ libf2fs_format_la_SOURCES = f2fs_format_main.c f2fs_format.c f2fs_format_utils.c
+ libf2fs_format_la_CFLAGS = -DWITH_BLKDISCARD
+ libf2fs_format_la_CPPFLAGS = -I$(top_srcdir)/include
+-libf2fs_format_la_LDFLAGS = -luuid -L$(top_srcdir)/lib -lf2fs \
++libf2fs_format_la_LDFLAGS = -luuid -L$(top_builddir)/lib -lf2fs \
+ -version-info $(FMT_CURRENT):$(FMT_REVISION):$(FMT_AGE)
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools_1.8.0.bb b/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools_1.8.0.bb
new file mode 100644
index 000000000..691cb6ea0
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/f2fs-tools/f2fs-tools_1.8.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Tools for Flash-Friendly File System (F2FS)"
+HOMEPAGE = "http://sourceforge.net/projects/f2fs-tools/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=362b4b2594cd362b874a97718faa51d3"
+
+# to provide libuuid
+DEPENDS = "util-linux"
+
+SRCREV = "1e7aedf99b85d16f94d1d8ad2fcf846403bb2174"
+SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git \
+ file://0001-Remove-AC_CHECK_FILE-for-cross-compilation.patch \
+ file://0002-Fix-mkfs-out-of-tree-builds.patch"
+S = "${WORKDIR}/git"
+
+inherit pkgconfig autotools
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0001-udevil-0.4.3-fix-compile-with-gcc6.patch b/meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0001-udevil-0.4.3-fix-compile-with-gcc6.patch
new file mode 100644
index 000000000..355e93a37
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0001-udevil-0.4.3-fix-compile-with-gcc6.patch
@@ -0,0 +1,12 @@
+Fix compilation with GCC6
+
+--- a/src/device-info.c 2013-12-09 14:59:27.000000000 +0100
++++ b/src/device-info.c 2017-03-13 07:06:25.506666680 +0100
+@@ -3,6 +3,7 @@
+ * contains code excerpts from udisks v1.0.4
+ ************************************************************************** */
+
++#include <sys/stat.h>
+ #include "device-info.h"
+
+ static char *
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0002-etc-Makefile.am-Use-systemd_unitdir-instead-of-libdi.patch b/meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0002-etc-Makefile.am-Use-systemd_unitdir-instead-of-libdi.patch
new file mode 100644
index 000000000..f014a0f53
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/udevil/files/0002-etc-Makefile.am-Use-systemd_unitdir-instead-of-libdi.patch
@@ -0,0 +1,32 @@
+From 80b087193698632e525b90d45b4a49e61e343e1c Mon Sep 17 00:00:00 2001
+From: Krzysztof Kozlowski <krzk@kernel.org>
+Date: Thu, 13 Jul 2017 21:30:35 +0200
+Subject: [PATCH] etc: Makefile.am: Use systemd_unitdir instead of libdir
+
+Proper directory for installing systemd services is systemd_unitdir, not
+libdir.
+
+Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
+---
+ etc/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/etc/Makefile.am b/etc/Makefile.am
+index 9b6e7522c20f..6d663241a72f 100644
+--- a/etc/Makefile.am
++++ b/etc/Makefile.am
+@@ -16,8 +16,8 @@ if ADD_SYSTEMD
+ test -f $(DESTDIR)/$(sysconfdir)/conf.d/devmon || $(INSTALL_DATA) \
+ $(srcdir)/systemd/devmon \
+ $(DESTDIR)/$(sysconfdir)/conf.d/devmon
+- test -d $(DESTDIR)/$(libdir)/systemd/system || \
+- mkdir -p -- $(DESTDIR)/$(libdir)/systemd/system
++ test -d $(DESTDIR)/$(systemd_unitdir)/system || \
++ mkdir -p -- $(DESTDIR)/$(systemd_unitdir)/system
+ $(INSTALL_DATA) $(srcdir)/systemd/devmon@.service \
+- $(DESTDIR)/$(libdir)/systemd/system/devmon@.service
++ $(DESTDIR)/$(systemd_unitdir)/system/devmon@.service
+ endif
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/udevil/udevil_0.4.4.bb b/meta-openembedded/meta-filesystems/recipes-utils/udevil/udevil_0.4.4.bb
new file mode 100644
index 000000000..60f84f8f9
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/udevil/udevil_0.4.4.bb
@@ -0,0 +1,28 @@
+SUMMARY = "A command line Linux program which mounts and unmounts removable devices"
+HOMEPAGE = "http://ignorantguru.github.io/udevil/"
+
+DEPENDS = "glib-2.0 \
+ glib-2.0-native \
+ intltool-native \
+ udev \
+"
+RDEPENDS_${PN} = "udev bash"
+
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit autotools systemd
+
+SRC_URI = "https://github.com/IgnorantGuru/udevil/raw/pkg/${PV}/udevil-${PV}.tar.xz \
+ file://0001-udevil-0.4.3-fix-compile-with-gcc6.patch \
+ file://0002-etc-Makefile.am-Use-systemd_unitdir-instead-of-libdi.patch \
+"
+
+SRC_URI[md5sum] = "dc1c489b603a0500a04dc7e1805ac1d9"
+SRC_URI[sha256sum] = "ce8c51fd4d589cda7be56e75b42188deeb258c66fc911a9b3a70a3945c157739"
+
+PACKAGECONFIG = "${@bb.utils.contains('DISTRO_FEATURES','systemd','systemd','',d)}"
+PACKAGECONFIG[systemd] = "--enable-systemd,--disable-systemd,systemd"
+
+SYSTEMD_SERVICE_${PN} = "devmon@.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-Include-fcntl.h-for-O_EXCL.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-Include-fcntl.h-for-O_EXCL.patch
new file mode 100644
index 000000000..660468d73
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-Include-fcntl.h-for-O_EXCL.patch
@@ -0,0 +1,28 @@
+From 8cf48da5f645dd7bbb1ccbeab5bb0964f40f17f7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 23:18:47 -0700
+Subject: [PATCH 1/5] Include fcntl.h for O_EXCL
+
+Fix
+error: 'O_CREAT' undeclared (first use in this function)
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ invutil/invidx.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/invutil/invidx.c b/invutil/invidx.c
+index 67efdf7..325a9a1 100644
+--- a/invutil/invidx.c
++++ b/invutil/invidx.c
+@@ -27,6 +27,7 @@
+ #include <sys/stat.h>
+ #include <string.h>
+ #include <uuid/uuid.h>
++#include <fcntl.h>
+
+ #include "types.h"
+ #include "mlog.h"
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-xfsdump-Use-c99-defined-int64_t-instead-of-__int64_t.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-xfsdump-Use-c99-defined-int64_t-instead-of-__int64_t.patch
new file mode 100644
index 000000000..1fe1bde8b
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0001-xfsdump-Use-c99-defined-int64_t-instead-of-__int64_t.patch
@@ -0,0 +1,28 @@
+From f1e822d546e08cc195eaeb38ca172bd0c3800aa9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 9 Sep 2017 07:48:48 -0700
+Subject: [PATCH] xfsdump: Use c99 defined int64_t instead of __int64_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ common/hsmapi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/common/hsmapi.c b/common/hsmapi.c
+index 6054773..0709dbe 100644
+--- a/common/hsmapi.c
++++ b/common/hsmapi.c
+@@ -585,7 +585,7 @@ HsmModifyExtentMap(
+ struct getbmapx *bmap)
+ {
+ dmf_f_ctxt_t *dmf_f_ctxtp = (dmf_f_ctxt_t *)contextp;
+- __int64_t length;
++ int64_t length;
+
+ if (bmap[0].bmv_entries <= 0) {
+ return 1; /* caller must already be at EOF */
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0002-Replace-__uint32_t-with-uint32_t.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0002-Replace-__uint32_t-with-uint32_t.patch
new file mode 100644
index 000000000..ed3e0a9e9
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0002-Replace-__uint32_t-with-uint32_t.patch
@@ -0,0 +1,122 @@
+From f76d2142905f0e5bd830d5d576c235af1171c6ac Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 23:23:31 -0700
+Subject: [PATCH 2/5] Replace __uint32_t with uint32_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ common/content_inode.h | 4 ++--
+ doc/xfsdump.html | 8 ++++----
+ inventory/inv_oref.h | 2 +-
+ inventory/inv_priv.h | 4 ++--
+ inventory/inventory.h | 2 +-
+ 5 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/common/content_inode.h b/common/content_inode.h
+index a69a9a0..6936e05 100644
+--- a/common/content_inode.h
++++ b/common/content_inode.h
+@@ -191,10 +191,10 @@ typedef struct bstat bstat_t;
+ * and using two 16bit values to hold new 32bit projid was choosen
+ * to retain compatibility with "old" filesystems).
+ */
+-static inline __uint32_t
++static inline uint32_t
+ bstat_projid(struct bstat *bs)
+ {
+- return (__uint32_t)bs->bs_projid_hi << 16 | bs->bs_projid_lo;
++ return (uint32_t)bs->bs_projid_hi << 16 | bs->bs_projid_lo;
+ }
+
+
+diff --git a/doc/xfsdump.html b/doc/xfsdump.html
+index 9c6722e..f85128f 100644
+--- a/doc/xfsdump.html
++++ b/doc/xfsdump.html
+@@ -1935,7 +1935,7 @@ The files are constructed like so:
+ <pre>
+ typedef struct invt_counter {
+ INVT_COUNTER_FIELDS
+- __uint32_t ic_vernum;/* on disk version number for posterity */\
++ uint32_t ic_vernum;/* on disk version number for posterity */\
+ u_int ic_curnum;/* number of sessions/invindices recorded \
+ so far */ \
+ u_int ic_maxnum;/* maximum number of sessions/inv_indices \
+@@ -1975,7 +1975,7 @@ typedef struct invt_fstab {
+ <pre>
+ typedef struct invt_counter {
+ INVT_COUNTER_FIELDS
+- __uint32_t ic_vernum;/* on disk version number for posterity */\
++ uint32_t ic_vernum;/* on disk version number for posterity */\
+ u_int ic_curnum;/* number of sessions/invindices recorded \
+ so far */ \
+ u_int ic_maxnum;/* maximum number of sessions/inv_indices \
+@@ -2012,7 +2012,7 @@ typedef struct invt_entry {
+ <pre>
+ typedef struct invt_sescounter {
+ INVT_COUNTER_FIELDS
+- __uint32_t ic_vernum;/* on disk version number for posterity */\
++ uint32_t ic_vernum;/* on disk version number for posterity */\
+ u_int ic_curnum;/* number of sessions/invindices recorded \
+ so far */ \
+ u_int ic_maxnum;/* maximum number of sessions/inv_indices \
+@@ -2034,7 +2034,7 @@ typedef struct invt_seshdr {
+ off64_t sh_streams_off; /* offset to start of the set of
+ stream hdrs */
+ time_t sh_time; /* time of the dump */
+- __uint32_t sh_flag; /* for misc flags */
++ uint32_t sh_flag; /* for misc flags */
+ u_char sh_level; /* dump level */
+ u_char sh_pruned; /* pruned by invutil flag */
+ char sh_padding[22];
+diff --git a/inventory/inv_oref.h b/inventory/inv_oref.h
+index e16684d..38303a4 100644
+--- a/inventory/inv_oref.h
++++ b/inventory/inv_oref.h
+@@ -46,7 +46,7 @@
+
+
+
+-typedef __uint32_t invt_objtype_t;
++typedef uint32_t invt_objtype_t;
+
+ #define INVT_LOCKED 0x0001
+
+diff --git a/inventory/inv_priv.h b/inventory/inv_priv.h
+index 1690271..364ffbc 100644
+--- a/inventory/inv_priv.h
++++ b/inventory/inv_priv.h
+@@ -120,7 +120,7 @@ typedef struct invt_seshdr {
+ off64_t sh_streams_off; /* offset to start of the set of
+ stream hdrs */
+ time32_t sh_time; /* time of the dump */
+- __uint32_t sh_flag; /* for misc flags */
++ uint32_t sh_flag; /* for misc flags */
+ u_char sh_level; /* dump level */
+ u_char sh_pruned; /* pruned by invutil flag */
+ char sh_padding[22];
+@@ -184,7 +184,7 @@ typedef struct invt_entry {
+
+ /* Cheap Inheritance, and an attempt to avoid a nested type */
+ #define INVT_COUNTER_FIELDS \
+- __uint32_t ic_vernum;/* on disk version number for posterity */\
++ uint32_t ic_vernum;/* on disk version number for posterity */\
+ uint ic_curnum;/* number of sessions/invindices recorded \
+ so far */ \
+ uint ic_maxnum;/* maximum number of sessions/inv_indices \
+diff --git a/inventory/inventory.h b/inventory/inventory.h
+index 134b9ba..c1d7403 100644
+--- a/inventory/inventory.h
++++ b/inventory/inventory.h
+@@ -43,7 +43,7 @@
+ /* length of labels, mntpts, etc */
+ #define INV_STRLEN GLOBAL_HDR_STRING_SZ
+
+-typedef __uint32_t inv_version_t;
++typedef uint32_t inv_version_t;
+
+ /* This is the general inventory version.
+ */
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0003-replace-use-of-SIGCLD-with-SIGCHLD.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0003-replace-use-of-SIGCLD-with-SIGCHLD.patch
new file mode 100644
index 000000000..31303d8fa
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0003-replace-use-of-SIGCLD-with-SIGCHLD.patch
@@ -0,0 +1,40 @@
+From fcc0cf15a309947103a0695b8a1f4865b820eb5c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 23:26:03 -0700
+Subject: [PATCH 3/5] replace use of SIGCLD with SIGCHLD
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ common/main.c | 2 +-
+ doc/xfsdump.html | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/common/main.c b/common/main.c
+index 3848499..faa66ee 100644
+--- a/common/main.c
++++ b/common/main.c
+@@ -2225,7 +2225,7 @@ static sig_printmap_t sig_printmap[ ] = {
+ {SIGTERM, "SIGTERM"},
+ {SIGUSR1, "SIGUSR1"},
+ {SIGUSR2, "SIGUSR2"},
+- {SIGCLD, "SIGCLD"},
++ {SIGCHLD, "SIGCHLD"},
+ {SIGPWR, "SIGPWR"},
+ {SIGURG, "SIGURG"},
+ {SIGPOLL, "SIGPOLL"},
+diff --git a/doc/xfsdump.html b/doc/xfsdump.html
+index f85128f..d96f037 100644
+--- a/doc/xfsdump.html
++++ b/doc/xfsdump.html
+@@ -334,7 +334,7 @@ the ring buffer. It ignores signals and does not terminate until it
+ receives a RING_OP_DIE message. It then exits 0.
+ <p>
+ The main process sleeps waiting for any of its children to die
+-(ie. waiting for a SIGCLD). All children that it cares about (stream
++(ie. waiting for a SIGCHLD). All children that it cares about (stream
+ managers and ring buffer slaves) are registered through the child
+ manager abstraction. When a child dies wait status and other info is
+ stored with its entry in the child manager. main() ignores the deaths
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0004-include-limit.h-for-PATH_MAX.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0004-include-limit.h-for-PATH_MAX.patch
new file mode 100644
index 000000000..62ea15b86
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0004-include-limit.h-for-PATH_MAX.patch
@@ -0,0 +1,29 @@
+From 98c7d96f0f2c6eddf60aa4a1a08d7d4467645930 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 23:28:10 -0700
+Subject: [PATCH 4/5] include limit.h for PATH_MAX
+
+fixed
+var.c:42:12: error: 'PATH_MAX' undeclared (first use in this function); did you mean 'RAND_MAX'?
+ char path[PATH_MAX];`
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ dump/var.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/dump/var.c b/dump/var.c
+index 645caab..8156d37 100644
+--- a/dump/var.c
++++ b/dump/var.c
+@@ -16,6 +16,7 @@
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
++#include <limits.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <sys/stat.h>
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0005-include-sys-types.h-for-u_int32_t-in-attr-attributes.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0005-include-sys-types.h-for-u_int32_t-in-attr-attributes.patch
new file mode 100644
index 000000000..fb6e467c9
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/0005-include-sys-types.h-for-u_int32_t-in-attr-attributes.patch
@@ -0,0 +1,27 @@
+From d95f494de1aa8123c74170ffebaed8ea89649da2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 23:33:44 -0700
+Subject: [PATCH 5/5] include sys/types.h for u_int32_t in attr/attributes.h
+
+error: unknown type name 'u_int32_t'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ restore/content.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/restore/content.c b/restore/content.c
+index 7c4a81f..1d5de1b 100644
+--- a/restore/content.c
++++ b/restore/content.c
+@@ -24,6 +24,7 @@
+ #include <sys/param.h>
+ #include <sys/stat.h>
+ #include <sys/ioctl.h>
++#include <sys/types.h>
+ #include <attr/attributes.h>
+ #include <xfs/handle.h>
+ #include <time.h>
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/remove-install-as-user.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/remove-install-as-user.patch
new file mode 100644
index 000000000..e761db371
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/files/remove-install-as-user.patch
@@ -0,0 +1,205 @@
+remove install as user
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ include/buildmacros | 2 +-
+ include/install-sh | 95 ++++++++---------------------------------------------
+ 2 files changed, 14 insertions(+), 83 deletions(-)
+
+diff --git a/include/buildmacros b/include/buildmacros
+index 7a01880..0840d55 100644
+--- a/include/buildmacros
++++ b/include/buildmacros
+@@ -30,7 +30,7 @@ OBJECTS = $(ASFILES:.s=.o) \
+ $(LFILES:.l=.o) \
+ $(YFILES:%.y=%.tab.o)
+
+-INSTALL = $(TOPDIR)/install-sh -o $(PKG_USER) -g $(PKG_GROUP)
++INSTALL = $(TOPDIR)/install-sh
+
+ IMAGES_DIR = $(TOPDIR)/all-images
+ DIST_DIR = $(TOPDIR)/dist
+diff --git a/include/install-sh b/include/install-sh
+index c952a71..b9d66f7 100755
+--- a/include/install-sh
++++ b/include/install-sh
+@@ -24,11 +24,11 @@
+ # set set | yes yes
+ #
+ _usage() {
+- echo "Usage: $prog [-o owner] [-g group] [-m mode] -d directory"
+- echo "or $prog [-D] [-o owner] [-g group] [-m mode] file directory/file"
+- echo "or $prog [-o owner] [-g group] [-m mode] file [file ...] directory"
++ echo "Usage: $prog [-m mode] -d directory"
++ echo "or $prog [-m mode] file directory/file"
++ echo "or $prog [-m mode] file [file ...] directory"
+ echo "or $prog -S file target (creates \"target\" symlink)"
+- echo "or $prog -T lt_arg [-o owner] [-g group] [-m mode] libtool.lai directory"
++ echo "or $prog -T lt_arg [-m mode] libtool.lai directory"
+ echo ""
+ echo "The \$DIST_MANIFEST and \$DIST_ROOT environment variables affect the"
+ echo "behaviour of this command - see comments in the script."
+@@ -38,32 +38,6 @@ _usage() {
+ exit 1
+ }
+
+-_chown ()
+-{
+- _st=255
+- if [ $# -eq 3 ] ; then
+- chown $1:$2 $3
+- _st=$?
+- if [ $_st -ne 0 ] ; then
+- if [ $REAL_UID != '0' ] ; then
+- if [ ! -f $DIST_ROOT/.chown.quiet ] ; then
+- echo '==============================================='
+- echo Ownership of files under ${DIST_ROOT:-/}
+- echo cannot be changed
+- echo '==============================================='
+- if [ -n "$DIST_ROOT" ] ; then
+- touch $DIST_ROOT/.chown.quiet
+- fi
+- fi
+- _st=0
+- fi
+- fi
+- fi
+-
+- return $_st
+-}
+-
+-
+ _manifest ()
+ {
+ echo $* | sed -e 's/\/\//\//g' >>${DIST_MANIFEST:-/dev/null}
+@@ -77,9 +51,6 @@ Sflag=false
+ Tflag=false
+ DIRMODE=755
+ FILEMODE=644
+-OWNER=`id -u`
+-GROUP=`id -g`
+-REAL_UID=$OWNER
+
+ # default is to install and don't append manifest
+ INSTALL=true
+@@ -94,24 +65,16 @@ MANIFEST=:
+
+ if $INSTALL
+ then
+- CP=cp; LN=ln; MKDIR=mkdir; CHMOD=chmod; CHOWN=_chown
++ CP=cp; LN=ln; MKDIR=mkdir; CHMOD=chmod;
+ else
+- CP=true; LN=true; MKDIR=true; CHMOD=true; CHOWN=true
++ CP=true; LN=true; MKDIR=true; CHMOD=true;
+ fi
+
+-[ -n "$DIST_ROOT" -a $REAL_UID -ne 0 ] && CHOWN=true
+-
+-while getopts "Dcm:d:S:o:g:T:" c $*
++while getopts "Dcm:d:S:T:" c $*
+ do
+ case $c in
+ c)
+ ;;
+- g)
+- GROUP=$OPTARG
+- ;;
+- o)
+- OWNER=$OPTARG
+- ;;
+ m)
+ DIRMODE=`expr $OPTARG`
+ FILEMODE=$DIRMODE
+@@ -146,18 +109,7 @@ then
+ # first usage
+ #
+ $MKDIR -p $dir
+- status=$?
+- if [ $status -eq 0 ]
+- then
+- $CHMOD $DIRMODE $dir
+- status=$?
+- fi
+- if [ $status -eq 0 ]
+- then
+- $CHOWN $OWNER $GROUP $dir
+- status=$?
+- fi
+- $MANIFEST d $DIRMODE $OWNER $GROUP ${dir#$DIST_ROOT}
++ $MANIFEST d $DIRMODE ${dir#$DIST_ROOT}
+ elif $Sflag
+ then
+ #
+@@ -203,7 +155,7 @@ then
+ install_name=$target/$solib
+ $CP $solib $install_name
+ status=$?
+- $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$solib ${install_name#$DIST_ROOT}
++ $MANIFEST f $FILEMODE $HERE/$solib ${install_name#$DIST_ROOT}
+ break
+ fi
+ done
+@@ -254,7 +206,7 @@ then
+ install_name=$target/$old_library
+ $CP $old_library $install_name
+ status=$?
+- $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$old_library ${install_name#$DIST_ROOT}
++ $MANIFEST f $FILEMODE $HERE/$old_library ${install_name#$DIST_ROOT}
+ ;;
+ *)
+ echo "$prog: -T $lt_install invalid"
+@@ -267,7 +219,6 @@ then
+ if [ $status -eq 0 ]
+ then
+ $CHMOD $FILEMODE $install_name
+- $CHOWN $OWNER $GROUP $install_name
+ fi
+ ;;
+ esac
+@@ -292,23 +243,10 @@ else
+ then
+ if [ -f $dir/$f ]
+ then
+- $CHMOD $FILEMODE $dir/$f
+- status=$?
+- if [ $status -eq 0 ]
+- then
+- $CHOWN $OWNER $GROUP $dir/$f
+- status=$?
+- fi
+- $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f
++ $MANIFEST f $FILEMODE $HERE/$f ${dir#$DIST_ROOT}/$f
+ else
+ $CHMOD $FILEMODE $dir
+- status=$?
+- if [ $status -eq 0 ]
+- then
+- $CHOWN $OWNER $GROUP $dir
+- status=$?
+- fi
+- $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$dir ${dir#$DIST_ROOT}
++ $MANIFEST f $FILEMODE $HERE/$dir ${dir#$DIST_ROOT}
+ fi
+ fi
+ else
+@@ -334,14 +272,7 @@ else
+ status=$?
+ if [ $status -eq 0 ]
+ then
+- $CHMOD $FILEMODE $dir/$f
+- status=$?
+- if [ $status -eq 0 ]
+- then
+- $CHOWN $OWNER $GROUP $dir/$f
+- status=$?
+- fi
+- $MANIFEST f $FILEMODE $OWNER $GROUP $HERE/$f ${dir#$DIST_ROOT}/$f
++ $MANIFEST f $FILEMODE $HERE/$f ${dir#$DIST_ROOT}/$f
+ fi
+ [ $status -ne 0 ] && break
+ done
+--
+1.8.1.2
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/xfsdump_3.1.7.bb b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/xfsdump_3.1.7.bb
new file mode 100644
index 000000000..39f11890e
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsdump/xfsdump_3.1.7.bb
@@ -0,0 +1,46 @@
+SUMMARY = "XFS Filesystem Dump Utility"
+DESCRIPTION = "The xfsdump package contains xfsdump, xfsrestore and a \
+ number of other utilities for administering XFS filesystems.\
+ xfsdump examines files in a filesystem, determines which \
+ need to be backed up, and copies those files to a \
+ specified disk, tape or other storage medium."
+HOMEPAGE = "http://oss.sgi.com/projects/xfs"
+SECTION = "base"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=15c832894d10ddd00dfcf57bee490ecc"
+DEPENDS = "xfsprogs attr"
+
+SRC_URI = "https://www.kernel.org/pub/linux/utils/fs/xfs/xfsdump/${BP}.tar.xz \
+ file://remove-install-as-user.patch \
+ file://0001-Include-fcntl.h-for-O_EXCL.patch \
+ file://0002-Replace-__uint32_t-with-uint32_t.patch \
+ file://0003-replace-use-of-SIGCLD-with-SIGCHLD.patch \
+ file://0004-include-limit.h-for-PATH_MAX.patch \
+ file://0005-include-sys-types.h-for-u_int32_t-in-attr-attributes.patch \
+ file://0001-xfsdump-Use-c99-defined-int64_t-instead-of-__int64_t.patch \
+ "
+SRC_URI[md5sum] = "c6e91f2ac8b76c796db2d236f5ca5947"
+SRC_URI[sha256sum] = "99e6d4df257ebc6d29ca9e970ca20672c2ea03481ad949bc68f98de3e4d56dce"
+
+inherit autotools-brokensep
+
+PARALLEL_MAKE = ""
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gettext] = "--enable-gettext=yes,--enable-gettext=no,gettext"
+
+CFLAGS += "-D_FILE_OFFSET_BITS=64"
+
+EXTRA_OEMAKE += "'LIBTOOL=${HOST_SYS}-libtool' V=1"
+
+do_configure () {
+ export DEBUG="-DNDEBUG"
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}
+ oe_runconf
+}
+
+do_install () {
+ export DIST_ROOT=${D}
+ oe_runmake install
+ oe_runmake install-dev
+}
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/0001-build-Check-for-sync_file_range-libc-function.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/0001-build-Check-for-sync_file_range-libc-function.patch
new file mode 100644
index 000000000..d8ff55531
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/0001-build-Check-for-sync_file_range-libc-function.patch
@@ -0,0 +1,82 @@
+From ae7172194d3fbb563ff8bbe7c02d34f1bd0e5ec9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 31 Jan 2018 21:28:53 -0800
+Subject: [PATCH] build: Check for sync_file_range libc function
+
+glibc 2.27 now has sync_file_range()
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ include/builddefs.in | 1 +
+ io/Makefile | 5 ++++-
+ io/io.h | 2 +-
+ io/sync_file_range.c | 3 +++
+ 4 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/include/builddefs.in b/include/builddefs.in
+index 92d5076..504225a 100644
+--- a/include/builddefs.in
++++ b/include/builddefs.in
+@@ -105,6 +105,7 @@ HAVE_FIEMAP = @have_fiemap@
+ HAVE_PREADV = @have_preadv@
+ HAVE_PWRITEV2 = @have_pwritev2@
+ HAVE_COPY_FILE_RANGE = @have_copy_file_range@
++HAVE_NR_COPY_FILE_RANGE = @have_nr_copy_file_range@
+ HAVE_SYNC_FILE_RANGE = @have_sync_file_range@
+ HAVE_SYNCFS = @have_syncfs@
+ HAVE_READDIR = @have_readdir@
+diff --git a/io/Makefile b/io/Makefile
+index 6725936..1876e95 100644
+--- a/io/Makefile
++++ b/io/Makefile
+@@ -59,10 +59,13 @@ CFILES += inject.c resblks.c
+ LCFLAGS += -DHAVE_INJECT -DHAVE_RESBLKS
+ endif
+
+-ifeq ($(HAVE_COPY_FILE_RANGE),yes)
++ifeq ($(HAVE_NR_COPY_FILE_RANGE),yes)
+ CFILES += copy_file_range.c
++LCFLAGS += -DHAVE_NR_COPY_FILE_RANGE
++ifeq ($(HAVE_COPY_FILE_RANGE),yes)
+ LCFLAGS += -DHAVE_COPY_FILE_RANGE
+ endif
++endif
+
+ ifeq ($(HAVE_SYNC_FILE_RANGE),yes)
+ CFILES += sync_file_range.c
+diff --git a/io/io.h b/io/io.h
+index 3862985..79ddc7b 100644
+--- a/io/io.h
++++ b/io/io.h
+@@ -158,7 +158,7 @@ extern void fiemap_init(void);
+ #define fiemap_init() do { } while (0)
+ #endif
+
+-#ifdef HAVE_COPY_FILE_RANGE
++#if defined(HAVE_NR_COPY_FILE_RANGE) && !defined(HAVE_COPY_FILE_RANGE)
+ extern void copy_range_init(void);
+ #else
+ #define copy_range_init() do { } while (0)
+diff --git a/io/sync_file_range.c b/io/sync_file_range.c
+index 7e4f3e6..aafea01 100644
+--- a/io/sync_file_range.c
++++ b/io/sync_file_range.c
+@@ -16,6 +16,7 @@
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
++#ifndef HAVE_COPY_FILE_RANGE
+ #include "command.h"
+ #include "input.h"
+ #include "init.h"
+@@ -104,3 +105,5 @@ sync_range_init(void)
+
+ add_command(&sync_range_cmd);
+ }
++
++#endif
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch
new file mode 100644
index 000000000..bd2d02563
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/files/remove_flags_from_build_flags.patch
@@ -0,0 +1,13 @@
+Index: xfsprogs-4.14.0/include/builddefs.in
+===================================================================
+--- xfsprogs-4.14.0.orig/include/builddefs.in
++++ xfsprogs-4.14.0/include/builddefs.in
+@@ -168,7 +168,7 @@ ifeq ($(ENABLE_GETTEXT),yes)
+ GCFLAGS += -DENABLE_GETTEXT
+ endif
+
+-BUILD_CFLAGS += $(GCFLAGS) $(PCFLAGS)
++BUILD_CFLAGS += $(GCFLAGS)
+ # First, Sanitizer, Global, Platform, Local CFLAGS
+ CFLAGS += $(FCFLAGS) $(SANITIZER_CFLAGS) $(OPTIMIZER) $(GCFLAGS) $(PCFLAGS) $(LCFLAGS)
+
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.14.0.bb b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.14.0.bb
new file mode 100644
index 000000000..5d76afe00
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xfsprogs/xfsprogs_4.14.0.bb
@@ -0,0 +1,63 @@
+SUMMARY = "XFS Filesystem Utilities"
+HOMEPAGE = "http://oss.sgi.com/projects/xfs"
+SECTION = "base"
+LICENSE = "GPLv2 & LGPLv2.1"
+LICENSE_libhandle = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://doc/COPYING;md5=102f7fec3d53c7c8f0b7baf9bf9d76a8"
+DEPENDS = "util-linux util-linux-native"
+SRC_URI = "https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/${BP}.tar.xz \
+ file://remove_flags_from_build_flags.patch \
+ file://0001-build-Check-for-sync_file_range-libc-function.patch \
+ "
+SRC_URI[md5sum] = "2d50e3751cc98e6c9364bc3d2297b9fd"
+SRC_URI[sha256sum] = "b1b710b268bc95d6f45eca06e1262c29eb38865a19cd4404e48ba446e043b7ec"
+
+inherit autotools-brokensep
+
+PACKAGES =+ "${PN}-fsck ${PN}-mkfs ${PN}-repair libhandle"
+
+DEPENDS += "util-linux"
+
+RDEPENDS_${PN} = "${PN}-fsck ${PN}-mkfs ${PN}-repair"
+
+FILES_${PN}-fsck = "${base_sbindir}/fsck.xfs"
+FILES_${PN}-mkfs = "${base_sbindir}/mkfs.xfs"
+FILES_${PN}-repair = "${base_sbindir}/xfs_repair"
+
+FILES_libhandle = "${base_libdir}/libhandle${SOLIBS}"
+
+EXTRA_OECONF = "--enable-gettext=no \
+ INSTALL_USER=root \
+ INSTALL_GROUP=root \
+ ac_cv_header_aio_h=yes \
+ ac_cv_lib_rt_lio_listio=yes \
+"
+
+DISABLE_STATIC = ""
+EXTRA_AUTORECONF += "-I ${S}/m4 --exclude=autoheader"
+
+PACKAGECONFIG ??= "readline blkid"
+
+PACKAGECONFIG[readline] = "--enable-readline=yes,--enable-readline=no,readline"
+PACKAGECONFIG[blkid] = "--enable-blkid=yes,--enable-blkid=no,util-linux"
+
+export DEBUG="-DNDEBUG"
+export BUILD_VERBOSE="1"
+export tagname="CC"
+
+EXTRA_OEMAKE = "DIST_ROOT='${D}'"
+
+do_configure_prepend () {
+ export BUILD_CC="${BUILD_CC} ${BUILD_CFLAGS}"
+ # Prevent Makefile from calling configure without arguments,
+ # when do_configure gets called for a second time.
+ rm -f ${B}/include/builddefs ${B}/include/platform_defs.h ${B}/configure
+ # Recreate configure script.
+ oe_runmake configure
+}
+
+do_install_append() {
+ oe_runmake 'DESTDIR=${D}' install-dev
+ rm ${D}${libdir}/*.la
+ rmdir --ignore-fail-on-non-empty ${D}${libdir}
+}
diff --git a/meta-openembedded/meta-filesystems/recipes-utils/xorriso/xorriso_1.4.0.bb b/meta-openembedded/meta-filesystems/recipes-utils/xorriso/xorriso_1.4.0.bb
new file mode 100644
index 000000000..b26709e97
--- /dev/null
+++ b/meta-openembedded/meta-filesystems/recipes-utils/xorriso/xorriso_1.4.0.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "xorriso copies file objects from POSIX compliant filesystems \
+into Rock Ridge enhanced ISO 9660 filesystems and allows session-wise \
+manipulation of such filesystems"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "http://www.gnu.org/software/${BPN}/${BPN}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "ec79fd2736b8da76e7a870e27cadf6fa"
+SRC_URI[sha256sum] = "0bd1e085015b28c24f57697d6def2fe84517967dc417554c0c3ccf1685ed0e56"
+
+PACKAGECONFIG ??= "acl attr zlib bzip2 readline"
+PACKAGECONFIG[acl] = "--enable-libacl,--disable-libacl,acl,"
+PACKAGECONFIG[attr] = "--enable-xattr,--disable-xattr,attr,"
+PACKAGECONFIG[zlib] = "--enable-zlib,--disable-zlib,zlib,"
+PACKAGECONFIG[bzip2] = "--enable-libbz2,--disable-libbz2,bzip2,"
+PACKAGECONFIG[readline] = "--enable-libreadline,--disable-libreadline,readline,"
+
+inherit autotools-brokensep pkgconfig distro_features_check
+
+do_configure_prepend () {
+ touch NEWS
+}
+
+RDEPENDS_${PN} = "tk"
+REQUIRED_DISTRO_FEATURES = "x11"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-gnome/COPYING.MIT b/meta-openembedded/meta-gnome/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-gnome/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-gnome/README b/meta-openembedded/meta-gnome/README
new file mode 100644
index 000000000..2a682e72d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/README
@@ -0,0 +1,38 @@
+meta-gnome
+===========
+
+The recipe in this layer needs to have 'x11' in DISTRO_FEATURES
+to have effect. To enable them, add in configuration file the following line.
+
+ DISTRO_FEATURES_append = " x11"
+
+If meta-gnome is included, but x11 is not enabled as a
+distro feature a warning is printed at parse time:
+
+ You have included the meta-gnome layer, but
+ 'x11' has not been enabled in your DISTRO_FEATURES.
+
+If you know what you are doing, this warning can be disabled by setting the following
+variable in your configuration:
+
+ SKIP_META_GNOME_SANITY_CHECK = 1
+
+
+Dependencies
+------------
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+branch: master
+revision: HEAD
+
+URI: git://github.com/openembedded/meta-oe.git
+branch: master
+revision: HEAD
+
+Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-gnome]' in the subject'
+
+When sending single patches, please using something like:
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-gnome][PATCH'
+
+Layer maintainer: Andreas Müller <schnitzeltony@googlemail.com>
diff --git a/meta-openembedded/meta-gnome/classes/sanity-meta-gnome.bbclass b/meta-openembedded/meta-gnome/classes/sanity-meta-gnome.bbclass
new file mode 100644
index 000000000..331ea193d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/classes/sanity-meta-gnome.bbclass
@@ -0,0 +1,10 @@
+addhandler gnome_bbappend_distrocheck
+gnome_bbappend_distrocheck[eventmask] = "bb.event.SanityCheck"
+python gnome_bbappend_distrocheck() {
+ skip_check = e.data.getVar('SKIP_META_GNOME_SANITY_CHECK') == "1"
+ if 'x11' not in e.data.getVar('DISTRO_FEATURES').split() and not skip_check:
+ bb.warn("You have included the meta-gnome layer, but \
+'x11' has not been enabled in your DISTRO_FEATURES. Some bbappend files \
+may not take effect. See the meta-gnome README for details on enabling \
+meta-gnome support.")
+}
diff --git a/meta-openembedded/meta-gnome/conf/layer.conf b/meta-openembedded/meta-gnome/conf/layer.conf
new file mode 100644
index 000000000..e6e9532b4
--- /dev/null
+++ b/meta-openembedded/meta-gnome/conf/layer.conf
@@ -0,0 +1,21 @@
+# 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 += "gnome-layer"
+BBFILE_PATTERN_gnome-layer := "^${LAYERDIR}/"
+BBFILE_PRIORITY_gnome-layer = "7"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_gnome-layer = "1"
+
+LAYERDEPENDS_gnome-layer = "core openembedded-layer networking-layer"
+
+LAYERSERIES_COMPAT_gnome-layer = "sumo"
+
+# Sanity check for meta-gnome layer.
+# Setting SKIP_META_GNOME_SANITY_CHECK to "1" would skip the bbappend files check.
+INHERIT += "sanity-meta-gnome"
diff --git a/meta-openembedded/meta-gnome/recipes-apps/pinpoint/pinpoint_git.bb b/meta-openembedded/meta-gnome/recipes-apps/pinpoint/pinpoint_git.bb
new file mode 100644
index 000000000..bf5178cf8
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-apps/pinpoint/pinpoint_git.bb
@@ -0,0 +1,24 @@
+SUMMARY = "A simple presentation tool for hackers"
+DESCRIPTION = "Pinpoint is a simple presentation tool that hopes to avoid audience death \
+ by bullet point and instead encourage presentations containing beautiful \
+ images and small amounts of concise text in slides."
+SECTION = "x11/multimedia"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \
+ file://pinpoint.c;beginline=6;endline=17;md5=201d438283607da393fae6aca085454c"
+
+DEPENDS = "glib-2.0 gdk-pixbuf cogl-1.0 clutter-1.0 clutter-gst-3.0 librsvg"
+
+inherit autotools gettext pkgconfig distro_features_check
+
+# cogl requires opengl
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+SRC_URI = "git://git.gnome.org/pinpoint"
+
+SRCREV = "80a056c57e819d0b75035424638813b0670830e1"
+PV = "0.1.4+gitr${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+RRECOMMENDS_${PN} = "gdk-pixbuf-loader-jpeg gdk-pixbuf-loader-png"
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.8.10.bb b/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.8.10.bb
new file mode 100644
index 000000000..dc2b964be
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/network-manager-applet/network-manager-applet_1.8.10.bb
@@ -0,0 +1,45 @@
+SUMMARY = "GTK+ applet for NetworkManager"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+DEPENDS = "gtk+3 libnotify libsecret networkmanager dbus-glib \
+ gconf libgnome-keyring iso-codes nss \
+ intltool-native \
+"
+
+inherit distro_features_check gnomebase gsettings gtk-icon-cache gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[archive.md5sum] = "eae3be75e77ff1a7ea3174be25e62d03"
+SRC_URI[archive.sha256sum] = "0adc4bfae8b49f7a1d929c22ef20933bd41fb4a8b458280f44c65f9e45b4c9c3"
+
+PACKAGECONFIG[modemmanager] = "--with-wwan,--without-wwan,modemmanager"
+PACKAGECONFIG ??= ""
+
+EXTRA_OECONF = " \
+ --without-selinux \
+"
+
+do_configure_append() {
+ # Sigh... --enable-compile-warnings=no doesn't actually turn off -Werror
+ for i in $(find ${B} -name "Makefile") ; do
+ sed -i -e s%-Werror[^[:space:]]*%%g $i
+ done
+}
+
+# gobject-introspection related
+GI_DATA_ENABLED_libc-musl = "False"
+
+do_compile_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/src/libnma/.libs:${B}/src/libnm-gtk/.libs"
+}
+
+RDEPENDS_${PN} =+ "networkmanager"
+
+FILES_${PN} += " \
+ ${datadir}/appdata \
+ ${datadir}/nm-applet/ \
+ ${datadir}/libnm-gtk/wifi.ui \
+ ${datadir}/libnma/wifi.ui \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd/ssize_t_definition.patch b/meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd/ssize_t_definition.patch
new file mode 100644
index 000000000..570cb9ef3
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd/ssize_t_definition.patch
@@ -0,0 +1,40 @@
+From fb5056fea9559b3ec3bb61967a112b6c793b700d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 8 Jan 2013 21:33:34 -0800
+Subject: [PATCH] include unistd.h to get ssize_t definitions
+
+Fixes errors like
+
+| In file included from plugins/mas.c:36:0:
+| ./src/obex.h:39:1: error: unknown type name 'ssize_t'
+| ./src/obex.h:49:1: error: unknown type name 'ssize_t'
+| ./src/obex.h:50:1: error: unknown type name 'ssize_t'
+| In file included from plugins/mas.c:38:0:
+| ./src/mimetype.h:36:2: error: expected specifier-qualifier-list before 'ssize_t'
+| In file included from plugins/mas.c:39:0:
+| plugins/filesystem.h:24:1: error: unknown type name 'ssize_t'
+| plugins/mas.c:550:1: error: unknown type name 'ssize_t'
+| plugins/mas.c:557:1: error: unknown type name 'ssize_t'
+| plugins/mas.c: In function 'any_read':
+| plugins/mas.c:560:2: error: unknown type name 'ssize_t'
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ plugins/mas.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/plugins/mas.c b/plugins/mas.c
+index 1b18059..b519507 100644
+--- a/plugins/mas.c
++++ b/plugins/mas.c
+@@ -30,6 +30,7 @@
+ #include <glib.h>
+ #include <fcntl.h>
+ #include <inttypes.h>
++#include <unistd.h>
+
+ #include <gobex/gobex.h>
+ #include <gobex/gobex-apparam.h>
diff --git a/meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd_0.48.bb b/meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd_0.48.bb
new file mode 100644
index 000000000..6096bed73
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-connectivity/obex/obexd_0.48.bb
@@ -0,0 +1,23 @@
+SUMMARY = "OBEX Server and Client"
+# obexd was integrated into bluez5
+DEPENDS = "glib-2.0 dbus libical"
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES','bluez5','bluez5','bluez4',d)}"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e"
+
+SRC_URI = "http://www.kernel.org/pub/linux/bluetooth/obexd-${PV}.tar.gz \
+ file://ssize_t_definition.patch \
+"
+SRC_URI[md5sum] = "d03cf9bad2983243837f4f6d76ef14a6"
+SRC_URI[sha256sum] = "eaa9d8d9542700e6750918d72a3ce00f8cf3a2771d3e2516efd1be5a05f78582"
+
+inherit autotools-brokensep pkgconfig
+
+PACKAGES =+ "obex-client obex-plugins"
+
+FILES_${PN} += "${datadir}/dbus-1/services/${PN}.service"
+FILES_obex-client = "${libexecdir}/obex-client \
+ ${datadir}/dbus-1/services/obex-client.service"
+# currently the plugins are empty
+FILES_obex-plugins = "${libdir}/obex/plugins"
diff --git a/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-Add-G_GNUC_PRINTF-on-functions-with-format-strings.patch b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-Add-G_GNUC_PRINTF-on-functions-with-format-strings.patch
new file mode 100644
index 000000000..03cb762ce
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-Add-G_GNUC_PRINTF-on-functions-with-format-strings.patch
@@ -0,0 +1,62 @@
+From fcf29abe59607b5791f9de18ddb86b9ae3c9b7cc Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 23:50:05 -0700
+Subject: [PATCH] Add G_GNUC_PRINTF on functions with format strings
+
+This allows compilation with clang without errors, even when
+-Wformat-nonliteral is active (as long as there are no real cases of
+non literal formatting).
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gladeui/glade-command.c | 4 ++--
+ gladeui/glade-utils.c | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/gladeui/glade-command.c b/gladeui/glade-command.c
+index 9819766..4ac40ee 100644
+--- a/gladeui/glade-command.c
++++ b/gladeui/glade-command.c
+@@ -266,7 +266,7 @@ glade_command_collapse (GladeCommand *command,
+ *
+ * Marks the begining of a group.
+ */
+-void
++G_GNUC_PRINTF(1, 2) void
+ glade_command_push_group (const gchar *fmt, ...)
+ {
+ va_list args;
+@@ -655,7 +655,7 @@ glade_command_set_properties_list (GladeProject *project, GList *props)
+
+ multiple = g_list_length (me->sdata) > 1;
+ if (multiple)
+- glade_command_push_group (cmd->description);
++ glade_command_push_group ("%s", cmd->description);
+
+
+ glade_command_check_group (GLADE_COMMAND (me));
+diff --git a/gladeui/glade-utils.c b/gladeui/glade-utils.c
+index ae52501..c51ae59 100644
+--- a/gladeui/glade-utils.c
++++ b/gladeui/glade-utils.c
+@@ -197,7 +197,7 @@ glade_utils_get_pspec_from_funcname (const gchar *funcname)
+ * selected "OK", True if the @type was GLADE_UI_YES_OR_NO and
+ * the user selected "YES"; False otherwise.
+ */
+-gint
++G_GNUC_PRINTF(4, 5) gint
+ glade_util_ui_message (GtkWidget *parent,
+ GladeUIMessageType type,
+ GtkWidget *widget,
+@@ -320,7 +320,7 @@ remove_message_timeout (FlashInfo * fi)
+ *
+ * Flash a temporary message on the statusbar.
+ */
+-void
++G_GNUC_PRINTF(3, 4) void
+ glade_util_flash_message (GtkWidget *statusbar, guint context_id, gchar *format, ...)
+ {
+ va_list args;
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-gnome-doc-utils.make-sysrooted-pkg-config.patch b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-gnome-doc-utils.make-sysrooted-pkg-config.patch
new file mode 100644
index 000000000..1b24c39ce
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0001-gnome-doc-utils.make-sysrooted-pkg-config.patch
@@ -0,0 +1,51 @@
+From aed002cd9ff9e8f972120fbac33b4a65aba952e1 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 25 Sep 2012 10:28:33 +0200
+Subject: [PATCH] gnome-doc-utils.make: sysrooted pkg-config
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+same approach as used used in gnome-disk-utility:
+
+In cross environment we have to prepend the sysroot to the path found by
+pkgconfig since the path returned from pkgconfig does not have sysroot prefixed
+it ends up using the files from host system. Now usually people have gnome installed
+so the build succeeds but if you dont have gnome installed on build host then
+it wont find the files on host system and packages using gnome-doc-utils wont
+compile.
+
+This should work ok with non sysrooted builds too since in those cases PKG_CONFIG_SYSROOT_DIR
+will be empty
+
+Upstream-Status: pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ gnome-doc-utils.make | 10 +++++-----
+ 1 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/gnome-doc-utils.make b/gnome-doc-utils.make
+index 42d9df3..f71bbfa 100644
+--- a/gnome-doc-utils.make
++++ b/gnome-doc-utils.make
+@@ -133,11 +133,11 @@ _DOC_ABS_SRCDIR = @abs_srcdir@
+ _xml2po ?= `which xml2po`
+ _xml2po_mode = $(if $(DOC_ID),mallard,docbook)
+
+-_db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils`
+-_db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils`
+-_chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl
+-_credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl
+-_ids ?= $(shell $(PKG_CONFIG) --variable xmldir gnome-doc-utils)/gnome/xslt/docbook/utils/ids.xsl
++_db2html ?= ${PKG_CONFIG_SYSROOT_DIR}`$(PKG_CONFIG) --variable db2html gnome-doc-utils`
++_db2omf ?= ${PKG_CONFIG_SYSROOT_DIR}`$(PKG_CONFIG) --variable db2omf gnome-doc-utils`
++_chunks ?= ${PKG_CONFIG_SYSROOT_DIR}`$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl
++_credits ?= ${PKG_CONFIG_SYSROOT_DIR}`$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl
++_ids ?= ${PKG_CONFIG_SYSROOT_DIR}`$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/ids.xsl
+
+ if ENABLE_SK
+ _ENABLE_SK = true
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0002-fix-gcc-6-build.patch b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0002-fix-gcc-6-build.patch
new file mode 100644
index 000000000..f735ff819
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3/0002-fix-gcc-6-build.patch
@@ -0,0 +1,39 @@
+From 5aa3d2abb905fa8594f6c6572a87809da54c9342 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 5 Sep 2016 11:25:27 +0200
+Subject: [PATCH] fix gcc-6 build
+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>
+---
+ gladeui/glade-editor-property.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/gladeui/glade-editor-property.c b/gladeui/glade-editor-property.c
+index a0c1039..5e9ac38 100644
+--- a/gladeui/glade-editor-property.c
++++ b/gladeui/glade-editor-property.c
+@@ -2703,6 +2703,8 @@ glade_eprop_object_view (gboolean radio)
+ }
+
+
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+ static gchar *
+ glade_eprop_object_dialog_title (GladeEditorProperty *eprop)
+ {
+@@ -2731,6 +2733,7 @@ glade_eprop_object_dialog_title (GladeEditorProperty *eprop)
+ return g_strdup_printf (format, g_type_name
+ (eprop->klass->pspec->value_type));
+ }
++#pragma GCC diagnostic pop
+
+
+ gboolean
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3_3.8.5.bb b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3_3.8.5.bb
new file mode 100644
index 000000000..c3da3e9b9
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-devtools/glade/glade3_3.8.5.bb
@@ -0,0 +1,23 @@
+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+ gnome-doc-utils gnome-common libxml2 intltool-native"
+
+inherit distro_features_check autotools pkgconfig pythonnative gtk-icon-cache
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/glade3/3.8/glade3-${PV}.tar.xz \
+ file://0001-gnome-doc-utils.make-sysrooted-pkg-config.patch \
+ file://0002-fix-gcc-6-build.patch \
+ file://0001-Add-G_GNUC_PRINTF-on-functions-with-format-strings.patch \
+ "
+SRC_URI[md5sum] = "4e4b4f5ee34a03e017e4cef97d796c1f"
+SRC_URI[sha256sum] = "58a5f6e4df4028230ddecc74c564808b7ec4471b1925058e29304f778b6b2735"
+
+EXTRA_OECONF += "--disable-scrollkeeper"
+
+FILES_${PN} += "${datadir}/icons"
diff --git a/meta-openembedded/meta-gnome/recipes-extended/gparted/files/gparted_polkit b/meta-openembedded/meta-gnome/recipes-extended/gparted/files/gparted_polkit
new file mode 100644
index 000000000..feabd0eeb
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-extended/gparted/files/gparted_polkit
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# polkit installed?
+if [ $(which pkexec) ]; then
+ pkexec --disable-internal-agent "%sbindir%/gparted" "$@"
+else
+ %sbindir%/gparted "$@"
+fi
+
+
diff --git a/meta-openembedded/meta-gnome/recipes-extended/gparted/files/org.yoctoproject.pkexec.run-gparted.policy b/meta-openembedded/meta-gnome/recipes-extended/gparted/files/org.yoctoproject.pkexec.run-gparted.policy
new file mode 100644
index 000000000..77a91923e
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-extended/gparted/files/org.yoctoproject.pkexec.run-gparted.policy
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE policyconfig PUBLIC
+ "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
+<policyconfig>
+
+ <action id="org.yoctoproject.pkexec.run-gparted">
+ <description>Run the GParted program</description>
+ <message>Authentication is required to run the GParted Partition Editor</message>
+ <icon_name>gparted</icon_name>
+ <defaults>
+ <allow_any>auth_admin</allow_any>
+ <allow_inactive>auth_admin</allow_inactive>
+ <allow_active>auth_admin</allow_active>
+ </defaults>
+ <annotate key="org.freedesktop.policykit.exec.path">/usr/sbin/gparted</annotate>
+ <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
+ </action>
+
+</policyconfig>
diff --git a/meta-openembedded/meta-gnome/recipes-extended/gparted/gparted_0.31.0.bb b/meta-openembedded/meta-gnome/recipes-extended/gparted/gparted_0.31.0.bb
new file mode 100644
index 000000000..58beaf6c5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-extended/gparted/gparted_0.31.0.bb
@@ -0,0 +1,40 @@
+SUMMARY = "A partition editor to graphically manage disk partitions "
+HOMEPAGE = "http://gparted.org/index.php"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit distro_features_check autotools pkgconfig gtk-icon-cache
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = " \
+ ${SOURCEFORGE_MIRROR}/project/${BPN}/${BPN}/${BPN}-${PV}/${BPN}-${PV}.tar.gz \
+ file://org.yoctoproject.pkexec.run-gparted.policy \
+ file://gparted_polkit \
+"
+SRC_URI[md5sum] = "c554cc5734c50459dd551bd3fa10710e"
+SRC_URI[sha256sum] = "3b7b49a434d9e4b397bc41a1f5acab8539b9ff402b472dfd83ad77b2decd07ba"
+
+DEPENDS = "glib-2.0 glib-2.0-native gtkmm parted gnome-doc-utils intltool-native"
+
+do_install_append() {
+ # Add a script which checks if polkit is installed.
+ # If yes: a policy is requested from polkit / otherwise start as usual
+ install ${WORKDIR}/gparted_polkit ${D}${sbindir}
+ sed -i 's:%sbindir%:${sbindir}:g' ${D}${sbindir}/gparted_polkit
+ # relink menu entry to use our script
+ sed -i 's:${sbindir}/gparted:${sbindir}/gparted_polkit:g' ${D}${datadir}/applications/gparted.desktop
+
+ install -d ${D}${datadir}/polkit-1/actions
+ install ${WORKDIR}/org.yoctoproject.pkexec.run-gparted.policy ${D}${datadir}/polkit-1/actions/org.yoctoproject.pkexec.run-gparted.policy
+}
+
+EXTRA_OECONF = "--disable-scrollkeeper --disable-doc"
+
+FILES_${PN} += " \
+ ${datadir}/appdata \
+ ${datadir}/icons \
+ ${datadir}/polkit-1 \
+"
+
+RDEPENDS_${PN} = "dosfstools mtools e2fsprogs"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword/0001-plugins-aiksaurus-Makefile.am-remove-uncomplete-opti.patch b/meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword/0001-plugins-aiksaurus-Makefile.am-remove-uncomplete-opti.patch
new file mode 100644
index 000000000..0dff1411d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword/0001-plugins-aiksaurus-Makefile.am-remove-uncomplete-opti.patch
@@ -0,0 +1,39 @@
+From c646159ce817506131b58fdab1cdc1cd6364df7a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Sun, 7 Feb 2016 21:45:20 +0100
+Subject: [PATCH] plugins/aiksaurus/Makefile.am: remove uncomplete options
+ WITH_BUILTIN_AIKSAURUS_GTK
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* with gtk2 we won't use it
+* it is missing in configure.ac causing
+
+| plugins/aiksaurus/Makefile.am:5: error: WITH_BUILTIN_AIKSAURUS_GTK does not appear in AM_CONDITIONAL
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ plugins/aiksaurus/Makefile.am | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/plugins/aiksaurus/Makefile.am b/plugins/aiksaurus/Makefile.am
+index d402c58..1034e2a 100644
+--- a/plugins/aiksaurus/Makefile.am
++++ b/plugins/aiksaurus/Makefile.am
+@@ -2,10 +2,6 @@ SUBDIRS =
+
+ if TOOLKIT_GTK
+
+-if WITH_BUILTIN_AIKSAURUS_GTK
+-SUBDIRS += aiksaurusgtk3
+-platform_lib = aiksaurusgtk3/libAiksaurusGtk3.la
+-endif
+
+ endif
+
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword_3.0.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword_3.0.2.bb
new file mode 100644
index 000000000..d2c0186b5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/abiword/abiword_3.0.2.bb
@@ -0,0 +1,142 @@
+SUMMARY = "AbiWord is free word processing program similar to Microsoft(r) Word"
+HOMEPAGE = "http://www.abiword.org"
+SECTION = "x11/office"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ecd3ac329fca77e2d0e412bec38e1c20"
+DEPENDS = " \
+ perl-native \
+ gtk+ \
+ gtkmathview \
+ wv \
+ libfribidi \
+ jpeg \
+ libpng \
+ librsvg \
+ libwmf-native \
+ asio \
+ evolution-data-server \
+ libxslt \
+ ${@bb.utils.contains('BBFILE_COLLECTIONS', 'office-layer', 'redland rasqal', '', d)} \
+"
+RDEPENDS_${PN}_append_libc-glibc = " \
+ glibc-gconv-ibm850 glibc-gconv-cp1252 \
+ glibc-gconv-iso8859-15 glibc-gconv-iso8859-1 \
+"
+RCONFLICTS_${PN} = "${PN}-embedded"
+
+SRC_URI = " \
+ http://www.abisource.com/downloads/${BPN}/${PV}/source/${BP}.tar.gz \
+ file://0001-plugins-aiksaurus-Makefile.am-remove-uncomplete-opti.patch \
+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=c5edcc3ccd864b19004d14e9c1c9a26a"
+
+SRC_URI[md5sum] = "cda6dd58c747c133b421cc7eb18f5796"
+SRC_URI[sha256sum] = "afbfd458fd02989d8b0c6362ba8a4c14686d89666f54cfdb5501bd2090cf3522"
+
+#want 3.x from 3.x.y for the installation directory
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+
+inherit distro_features_check autotools-brokensep pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+PACKAGECONFIG ??= " \
+ collab-backend-xmpp collab-backend-tcp \
+ ${@bb.utils.contains('BBFILE_COLLECTIONS', 'office-layer', 'libical', '', d)} \
+"
+PACKAGECONFIG[libical] = "--with-libical,--without-libical,libical raptor2"
+PACKAGECONFIG[spell] = "--enable-spell,--disable-spell,enchant"
+PACKAGECONFIG[collab-backend-xmpp] = "--enable-collab-backend-xmpp,--disable-collab-backend-xmpp,libgsf libxml2 loudmouth"
+PACKAGECONFIG[collab-backend-tcp] = "--enable-collab-backend-tcp,--disable-collab-backend-tcp,libgsf libxml2"
+PACKAGECONFIG[collab-backend-service] = "--enable-collab-backend-service,--disable-collab-backend-service,libgsf libxml2 libsoup-2.4 gnutls"
+PACKAGECONFIG[collab-backend-telepathy] = "--enable-collab-backend-telepathy,--disable-collab-backend-telepathy,libgsf libxml2 telepathy-glib telepathy-mission-control"
+PACKAGECONFIG[collab-backend-sugar] = "--enable-collab-backend-sugar,--disable-collab-backend-sugar,libgsf libxml2 dbus-glib"
+
+EXTRA_OECONF = " --disable-static \
+ --enable-plugins \
+ --enable-clipart \
+ --enable-templates \
+ --without-gnomevfs \
+ --with-gtk2 \
+ --with-libwmf-config=${STAGING_DIR} \
+"
+
+LDFLAGS += "-lgmodule-2.0"
+
+do_compile() {
+ cd goffice-bits2
+ make goffice-paths.h
+ make libgoffice.la
+ cd ${B}
+ oe_runmake
+}
+
+PACKAGES += " ${PN}-clipart ${PN}-strings ${PN}-systemprofiles ${PN}-templates "
+
+FILES_${PN} += " \
+ ${libdir}/lib${PN}-*.so \
+ ${datadir}/mime-info \
+ ${datadir}/icons/* \
+ ${datadir}/${PN}-${SHRT_VER}/glade \
+ ${datadir}/${PN}-${SHRT_VER}/scripts \
+ ${datadir}/${PN}-${SHRT_VER}/system.profile-en \
+ ${datadir}/${PN}-${SHRT_VER}/system.profile-en_GB \
+ ${datadir}/${PN}-${SHRT_VER}/templates/normal.awt \
+ ${datadir}/${PN}-${SHRT_VER}/templates/normal.awt-en_GB \
+ ${datadir}/${PN}-${SHRT_VER}/templates/Employee-Directory.awt \
+ ${datadir}/${PN}-${SHRT_VER}/templates/Business-Report.awt \
+ ${datadir}/${PN}-${SHRT_VER}/templates/Fax-Coversheet.awt \
+ ${datadir}/${PN}-${SHRT_VER}/templates/Resume.awt \
+ ${datadir}/${PN}-${SHRT_VER}/templates/Two-Columns.awt \
+ ${datadir}/${PN}-${SHRT_VER}/templates/Memo.awt \
+ ${datadir}/${PN}-${SHRT_VER}/templates/Press-Release.awt \
+ ${datadir}/${PN}-${SHRT_VER}/certs \
+ ${datadir}/${PN}-${SHRT_VER}/ui \
+ ${datadir}/${PN}-${SHRT_VER}/xsl* \
+ ${datadir}/${PN}-${SHRT_VER}/mime-info \
+ ${datadir}/${PN}-${SHRT_VER}/Pr*.xml \
+"
+
+# don't steal /usr/lib/libabiword-3.0.so from ${PN}
+# in this case it's needed in ${PN}
+FILES_${PN}-dev = " \
+ ${includedir} \
+ ${libdir}/pkgconfig \
+ ${libdir}/${PN}*.la \
+ ${libdir}/lib${PN}*.la \
+ ${libdir}/${PN}-${SHRT_VER}/plugins/*.la \
+"
+FILES_${PN}-dbg += "${libdir}/${PN}-${SHRT_VER}/plugins/.debug"
+FILES_${PN}-doc += "${datadir}/${PN}-*/readme*"
+
+FILES_${PN}-strings += "${datadir}/${PN}-${SHRT_VER}/strings"
+FILES_${PN}-systemprofiles += "${datadir}/${PN}-${SHRT_VER}/system.profile*"
+FILES_${PN}-clipart += "${datadir}/${PN}-${SHRT_VER}/clipart"
+FILES_${PN}-strings += "${datadir}/${PN}-${SHRT_VER}/AbiWord/strings"
+FILES_${PN}-systemprofiles += "${datadir}/${PN}-${SHRT_VER}/AbiWord/system.profile*"
+FILES_${PN}-templates += "${datadir}/${PN}-${SHRT_VER}/templates"
+
+PACKAGES_DYNAMIC += "^${PN}-meta.* ^${PN}-plugin-.*"
+
+python populate_packages_prepend () {
+ abiword_libdir = d.expand('${libdir}/${PN}-${SHRT_VER}/plugins')
+ do_split_packages(d, abiword_libdir, '(.*)\.so$', 'abiword-plugin-%s', 'Abiword plugin for %s', extra_depends='')
+
+ metapkg = "abiword-meta"
+ d.setVar('ALLOW_EMPTY_' + metapkg, "1")
+ d.setVar('FILES_' + metapkg, "")
+ blacklist = [ 'abiword-plugins-dbg', 'abiword-plugins', 'abiword-plugins-doc', 'abiword-plugins-dev', 'abiword-plugins-locale' ]
+ metapkg_rdepends = []
+ packages = d.getVar('PACKAGES').split()
+ for pkg in packages[1:]:
+ if not pkg in blacklist 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") and not pkg.count("abiword-doc"):
+ print("Modifying %s" % pkg)
+ metapkg_rdepends.append(pkg)
+ d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends))
+ d.setVar('DESCRIPTION_' + metapkg, 'abiword-plugin meta package')
+ packages.append(metapkg)
+ d.setVar('PACKAGES', ' '.join(packages))
+}
+
+FILES_${PN}-plugin-openxml += "${datadir}/${PN}-${SHRT_VER}/omml_xslt"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.18.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.18.0.bb
new file mode 100644
index 000000000..e24bde449
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/dconf/dconf_0.18.0.bb
@@ -0,0 +1,36 @@
+SUMMARY = "configuation database system"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+SECTION = "x11/gnome"
+
+inherit gnomebase gsettings
+SRC_URI[archive.md5sum] = "69a12ed68893f2e1e81ac4e531bc1515"
+SRC_URI[archive.sha256sum] = "109b1bc6078690af1ed88cb144ef5c5aee7304769d8bdc82ed48c3696f10c955"
+GNOME_COMPRESS_TYPE = "xz"
+
+DEPENDS = "dbus glib-2.0 libxml2 intltool-native"
+
+inherit vala gtk-doc distro_features_check
+
+PACKAGECONFIG ??= "${@bb.utils.contains("DISTRO_FEATURES", "x11", "editor", "", d)}"
+
+#note: editor will be removed in version 0.23.1
+PACKAGECONFIG[editor] = "--enable-editor,--disable-editor,gtk+3"
+
+REQUIRED_DISTRO_FEATURES = "${@bb.utils.contains("PACKAGECONFIG", "editor", "x11", "", d)}"
+
+EXTRA_OECONF += "--disable-man"
+
+PACKAGES =+ "${@bb.utils.contains("DISTRO_FEATURES", "x11", "dconf-editor", "", d)}"
+
+FILES_${PN} += " \
+ ${datadir}/dbus-1 \
+ ${libdir}/gio/modules/*.so \
+ ${datadir}/bash-completion \
+"
+FILES_dconf-editor = " \
+ ${bindir}/dconf-editor \
+ ${datadir}/icons \
+"
+FILES_${PN}-dbg += "${libdir}/gio/modules/.debug/libdconfsettings.so"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/desktop-file-utils/desktop-file-utils_0.18.bb b/meta-openembedded/meta-gnome/recipes-gnome/desktop-file-utils/desktop-file-utils_0.18.bb
new file mode 100644
index 000000000..57a8720f2
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/desktop-file-utils/desktop-file-utils_0.18.bb
@@ -0,0 +1,18 @@
+HOMEPAGE = "http://www.freedesktop.org/wiki/Software/desktop-file-utils"
+DESCRIPTION = "desktop-file-utils contains a few command line utilities for working with desktop entries:"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "glib-2.0"
+
+PR = "r1"
+
+SRC_URI = "http://www.freedesktop.org/software/desktop-file-utils/releases/desktop-file-utils-${PV}.tar.bz2"
+SRC_URI[md5sum] = "d966b743eb394650f98d5dd56b9aece1"
+SRC_URI[sha256sum] = "d9449956c1c8caa75281a3322b2bb433db42610942f0ceeaa65ccd9636c04231"
+
+inherit autotools pkgconfig
+
+CACHED_CONFIGUREVARS += "ac_cv_prog_EMACS=no"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb
new file mode 100644
index 000000000..6ef8e8a62
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/devilspie2_0.43.bb
@@ -0,0 +1,32 @@
+DESCRIPTION = "Devilspie2 is a window matching utility, allowing the user to perform scripted actions on windows as they are created"
+HOMEPAGE = "http://www.gusnan.se/devilspie2"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=00aefaa50aad75c21367df66102d542c \
+ file://GPL3.txt;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "gtk+ glib-2.0 libwnck lua virtual/libx11"
+
+SRC_URI = " \
+ http://download.savannah.gnu.org/releases/${BPN}/${BPN}_${PV}-src.tar.gz \
+ file://default.lua \
+ file://devilspie2.desktop \
+"
+SRC_URI[md5sum] = "26eed0b5b4af5c7e13c551eceaeab832"
+SRC_URI[sha256sum] = "ecffc17c62b41e196b72340192a90c4223329df041f135e74c0990860595f828"
+
+inherit distro_features_check pkgconfig gettext
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_compile() {
+ export GTK2=1
+ oe_runmake CC="${CC}" CPPFLAGS="${CPPFLAGS}" LDFLAGS=" -ldl -lm ${LDFLAGS}"
+}
+
+do_install() {
+ oe_runmake DESTDIR="${D}" PREFIX="${prefix}" install
+ install -d ${D}/${sysconfdir}/devilspie2
+ install -m 644 ${WORKDIR}/default.lua ${D}/${sysconfdir}/devilspie2
+ install -d ${D}/${sysconfdir}/xdg/autostart
+ install -m 644 ${WORKDIR}/devilspie2.desktop ${D}/${sysconfdir}/xdg/autostart
+}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/default.lua b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/default.lua
new file mode 100644
index 000000000..22a17fe98
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/default.lua
@@ -0,0 +1,46 @@
+-- Copyright (c) 2012 Andreas Müller <schnitzeltony@googlemail.com>
+--
+-- this is an example
+-- * undecorating all windows opened maximized
+-- * maximizing and undecorating all appplication's windows in apps_list
+-- for further information see
+-- http://www.gusnan.se/devilspie2/manual.php
+
+wnd_type = get_window_type()
+
+if(wnd_type == "WINDOW_TYPE_NORMAL") then
+
+ -- add only applications you want maximized+undecorated and
+ -- which don't keep maximized state
+ apps_list =
+ {
+ "Terminal",
+ "ristretto",
+ "xarchiver",
+ }
+
+ app_name = get_application_name()
+
+ -- to have some informational output, start devilspie2 with --debug
+ -- option and uncomment the following lines:
+
+ --debug_print ("Window Name: " .. get_window_name())
+ --debug_print ("Application name: " .. app_name)
+ --debug_print ("window-type: " .. wnd_type)
+
+ -- undecorate all windows starting maximized
+ if (get_window_is_maximized()) then
+ undecorate_window()
+
+ -- maximize/undecorate all windows in apps_list
+ -- (unfortunately for some also their settings)
+ else
+ for line, str in ipairs(apps_list) do
+ if (string.find(app_name, str)) then
+ maximize()
+ undecorate_window()
+ break
+ end
+ end
+ end
+end
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/devilspie2.desktop b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/devilspie2.desktop
new file mode 100644
index 000000000..b80904a0d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/devilspie/files/devilspie2.desktop
@@ -0,0 +1,6 @@
+[Desktop Entry]
+Type=Application
+Name=Devilspie2
+Comment=Perform scripted actions on windows as they are created
+Exec=devilspie2 -f /etc/devilspie2
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0001-CMakeLists.txt-Remove-TRY_RUN-for-iconv.patch b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0001-CMakeLists.txt-Remove-TRY_RUN-for-iconv.patch
new file mode 100644
index 000000000..a821a14ab
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0001-CMakeLists.txt-Remove-TRY_RUN-for-iconv.patch
@@ -0,0 +1,39 @@
+From 131b88a81aba3d72d566bc8a9d968941a98e0007 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Tue, 19 Dec 2017 16:37:20 +0100
+Subject: [PATCH] CMakeLists.txt: Remove TRY_RUN for iconv
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+| CMake Error: TRY_RUN() invoked in cross-compiling mode, please set the following cache variables appropriately:
+| _correct_iconv_EXITCODE (advanced)
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ CMakeLists.txt | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 8d07772..a2396f2 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -521,13 +521,8 @@ if(NOT HAVE_ICONV)
+ endif(NOT HAVE_ICONV)
+
+ set(CMAKE_REQUIRED_LIBRARIES ${ICONV_LIBS})
+-CHECK_C_SOURCE_RUNS("#include \"${CMAKE_SOURCE_DIR}/iconv-detect.c\"" _correct_iconv)
+ unset(CMAKE_REQUIRED_LIBRARIES)
+
+-if(NOT _correct_iconv)
+- message(FATAL_ERROR "You need to install a working iconv implementation, such as ftp://ftp.gnu.org/pub/gnu/libiconv")
+-endif(NOT _correct_iconv)
+-
+ # ******************************
+ # Backtraces for debugging
+ # ******************************
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0002-CMakeLists.txt-remove-CHECK_C_SOURCE_RUNS-check.patch b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0002-CMakeLists.txt-remove-CHECK_C_SOURCE_RUNS-check.patch
new file mode 100644
index 000000000..c8dc7e12c
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0002-CMakeLists.txt-remove-CHECK_C_SOURCE_RUNS-check.patch
@@ -0,0 +1,53 @@
+From 210b204d9edd71202454ff04013cc52b23c598e4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Tue, 19 Dec 2017 16:55:13 +0100
+Subject: [PATCH] CMakeLists.txt: remove CHECK_C_SOURCE_RUNS check
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* TRY_RUN: does not work for OE
+* HAVE_LKSTRFTIME is set by recipe as configure option
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ CMakeLists.txt | 23 -----------------------
+ 1 file changed, 23 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index a2396f2..f3b271b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -573,29 +573,6 @@ CHECK_C_SOURCE_COMPILES("#include <langinfo.h>
+ CHECK_C_SOURCE_COMPILES("#include <langinfo.h>
+ int main(void) { char *detail = nl_langinfo (_NL_ADDRESS_COUNTRY_AB2); return 0; }" HAVE__NL_ADDRESS_COUNTRY_AB2)
+
+-# *******************************************************
+-# Check to see if strftime supports the use of %l and %k
+-# *******************************************************
+-
+-CHECK_C_SOURCE_RUNS("
+- #include <stdlib.h>
+- #include <string.h>
+- #include <time.h>
+- int main(int argc, char **argv) {
+- char buf[10];
+- time_t rawtime;
+- struct tm *timeinfo;
+-
+- time(&rawtime);
+- timeinfo=localtime(&rawtime);
+- buf[0] = 0;
+- strftime(buf, 10, \"%lx%k\", timeinfo);
+-
+- if (!buf[0] || buf[0] == 'x' || strstr(buf, \"l\") || strstr(buf, \"k\"))
+- return 1;
+- return 0;
+- }" HAVE_LKSTRFTIME)
+-
+ # ******************************
+ # system mail stuff
+ # ******************************
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0003-contact-Replace-the-Novell-sample-contact-with-somet.patch b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0003-contact-Replace-the-Novell-sample-contact-with-somet.patch
new file mode 100644
index 000000000..3cdfa8b6f
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/0003-contact-Replace-the-Novell-sample-contact-with-somet.patch
@@ -0,0 +1,202 @@
+From 4df8bd8ae4258289663b27af1207027c7ee06340 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Sun, 4 Aug 2013 09:13:25 +0200
+Subject: [PATCH 1/5] contact: Replace the Novell sample contact with something
+ more appropriate
+
+Upstream-Status: Inappropriate [configuration]
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+---
+ src/addressbook/libedata-book/ximian-vcard.h | 179 ++++++++++++++++++-------------
+ 2 files changed, 103 insertions(+), 77 deletions(-)
+
+diff --git a/src/addressbook/libedata-book/ximian-vcard.h b/src/addressbook/libedata-book/ximian-vcard.h
+index 782d37b..5b0b250 100644
+--- a/src/addressbook/libedata-book/ximian-vcard.h
++++ b/src/addressbook/libedata-book/ximian-vcard.h
+@@ -1,80 +1,105 @@
+ #define XIMIAN_VCARD \
+ "BEGIN:VCARD\n" \
+-"X-EVOLUTION-FILE-AS:Novell Ximian Group\n" \
+-"ADR;TYPE=WORK:;Suite 500;8 Cambridge Center;Cambridge;MA;02142;USA\n" \
+-"LABEL;TYPE=WORK:8 Cambridge Center, Suite 500\\nCambridge\\, MA\\n02142\\nUSA\n" \
+-"TEL;WORK;VOICE:(617) 613-2000\n" \
+-"TEL;WORK;FAX:(617) 613-2001\n" \
+-"EMAIL;INTERNET:hello@ximian.com\n" \
+-"URL:http://www.ximian.com/\n" \
+-"ORG:Novell;Ximian Group\n" \
+-"PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEARwBHAAD//gAXQ3JlYXRlZCB3aXRo\n" \
+-" IFRoZSBHSU1Q/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCM\n" \
+-" cHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMj\n" \
+-" IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAbgBkAwEiAAIRAQMRAf/EA\n" \
+-" BwAAAIDAQEBAQAAAAAAAAAAAAAHBQYIBAMBAv/EAEYQAAEDAwEFBgMEBgQPAAAAAAECAwQABREG\n" \
+-" BxIhMWETIkFRcYEUkaEIMkLBFSNSsbLRFmJydRgkMzY3Q0RGgpKTosLh8P/EABsBAQACAwEBAAA\n" \
+-" AAAAAAAAAAAAEBQIDBgEH/8QALREAAQMCAwYGAgMAAAAAAAAAAQACAwQREiFRBRMiMUFhMnGBkb\n" \
+-" HRBsEUofD/2gAMAwEAAhEDEQA/AH/RRRREVwXe9W2wwFzbpNZixkc1uqwPQeZ6CoHXevLfom1ds\n" \
+-" 9h6a6D8PGCsFZHMk+CR4n86yzdbrqfaZqYBSnp0hRPZMoG62ynoOSR1Pua8Lg0XPJegX5Jv6k+0\n" \
+-" bBjrWxp22LlkcBIlHs0HqEjiR64peT9umupqyWrhHhpP4WI6eHureNW7Tmw+DGaTI1FJVJdxksM\n" \
+-" qKG09CrmfbFMCHpCw2xATDs8JrH4gykq+Z4mqifbMUZsxpd/QUllK53M2SCb2xa+bXvf0gcV0Uw\n" \
+-" 0R/DVktH2hdUwlpFxjQrg1490tLPuOH0pvv2qE4jdchx1p8lNAj91Va87OtM3RCt+2Nx3Dyci/q\n" \
+-" yPYcD7g1EZ+RR4rSMI9b/S2mhdbhKsmkdtWmNTuNxnXVW2cvgGZRASo+SV8j74PSmOlQUMpORWP\n" \
+-" NU7MrjY0rlQFmdDTxOE4cQOo8R1Hyqe2Z7ZJ2m32bXfHnJVpJCUuqO8uP7+Kenh4eVXkFRFUMxx\n" \
+-" G4UOSN0Zs4LU1FeEOWxOityYzqHWXEhSFoOQoHkQa963rBFFFFERUdfr1E09Y5d1mr3Y8ZsrV5n\n" \
+-" yA6k4A6mpGkL9ojUym0W/TrLmAsGU+AeYBwgfPJ/4RREqrrcb1tJ1oUpBXLmObqUZ7rSByT0SkZ\n" \
+-" J8zk1pHQmiLXo+zpbabC3SAp55Q7zyvM9PIUudiGmURbS7fpCMvzFFton8LSTxx6qH0FM7VV9VY\n" \
+-" 9MzZ7aQt5tASw3+26ohKB/zEVSVFVvZzGMw02tqe/kpbI8LMR6/C/Xxq9QagfbbP+IW1QQ4Rycf\n" \
+-" xncHRAIJ/rEfsmu2a9Fgsl2XIZjtj8bqwgfM1+9L2VFksESAV9o6hG886ebjqjvLWepUSarutdn\n" \
+-" MXV+obRcZks/CwCQ5DKMpeBOTxzwzgA9KwfTtfxPOSB5GQUXc9pOjoC+zXe2HV5xiOC6PmkEfWp\n" \
+-" xe6tAWghSVDIIOQRXxekNOx4b0WPZYLLTram19mwlJKSMHjjNUzQd2dZM7SNxczcLOsttqVzdYz\n" \
+-" 3FewI9iKpK2mjMZdFe7ed9NfT9qZDI4OAd1Vkko50ndoui22kuXq2NBOO9JZSOH9sD9/z86c8gc\n" \
+-" DUJNQlaFJUkKSoYII4EVGoKp9PIHt9e6lyRNlZhcqlsJ2guQpydL3F4mO7kw1KP3Fcyj0PEjrnz\n" \
+-" rSAIIyOVYfvsJ3TGqlCKpTfYuJfjLHMDOR8jw9q2Foy+o1FpWBckY/XMpUoeRxxHsciu/jeJGB7\n" \
+-" eRXPvaWuLT0U/RRRWaxQeVY82x3BVw2oXbJyhgoZR0AQM/UmthK+6fSsWbRQW9pV73x/tZPtwNE\n" \
+-" Wj9Nw0WuwwIKQAGI6G/cAZ+tRW0lx5nTEW4Ntqdat9xjy5CEjJLSFZP5H2qaYdCkpUk5BGQa7Ap\n" \
+-" DrSm3EpWhYKVJUMgg8wRXz+kqyyTG7VXUsV22Clrfc48+CzMiPIejvIC23EHIUDXNe79b7HbXbh\n" \
+-" c5SI8ZvmtZ5nyA5k9BS7d0nfdMPuSdD3JtEZaitdom5Uznx3DzT6cPWkvq/V1611fGW5nZtBCgy\n" \
+-" zFbXhtCycE5JxknxPhXR07RUeB3D11H+9lAfwcxmrrqLbxcHpikWGAw1FScByUkqWvrgEBPpxqi\n" \
+-" ztdXWdqmNqIIjx7gykJUphJCXAM/eBJ5g4PQCmBZNiDKWEu364uF0jJYh4AT6qUDn2FVu6bPIkT\n" \
+-" aTB08xKeMOU2H99eCtKRvZGQMZ7hwceNZxVGzsbmMzIBv5dfNeOjnsCdUwbTtKsV8nJgIccZkqw\n" \
+-" lJcThDqvJJz8s4zUtLVzpc2vZZKt+qBIkyUKt0V0ONKSe+7g5SCPDr9Kv0tznXP1cNMyQfxnXBC\n" \
+-" tqUyuB3gslftPjJLkGWB3u82o/Ij86bf2e7iqRoxyIpWfhpC0JHQ4V/5GlVtJcBt0RPiXif+00w\n" \
+-" Ps5BQtNxP4TJP8Ka6rZZJpW37/Kq68ATlPeiiirBQ0HlWR9t9qVbtpEp/dwiY0h5J8Mgbp/h+ta\n" \
+-" 4pM7fdKLumn2rxGbKn4BKl4HEtn73ywD7GiL7o28JuulLbKCsqLKUL/tJ7p+oqyIe4c6RGyzU4g\n" \
+-" THLNJc3WpCt9gk8A54j3GPcdaZuoosy82V23QpaYpkEIdeIJKUeIAHieXPkTXA11DuassJsCefY\n" \
+-" /SvYZN5FiGZU9edRwLDAXJny2mRukoStQBWQOQHjSjg7PYE7ZmzcZb7cG6KK5CZD6txOCcJQvPg\n" \
+-" QAQfAn2q6RNOWi1D9J3R5dwlR2xmZPVv9mlI8ByTj59ar09Lm0jUIQl5Y0zAUMrQSPiXfHHpyz4\n" \
+-" D1qTRvMQIieQAQXOtllfIDre/X2WqVmI8Qz6D9q0bP9SO37SrSpW8ZUVXw7q+YcKeSgeRyMZ65q\n" \
+-" qammvWTalEv1yjOJtaWfh25CBvBOUkHPlxUeHlyq/MiPCitxorSGWG07qG0DASK45xZlx3GJDaH\n" \
+-" WljCkLGQR6VGinY2ofIG8Lri2gOi37hxYG3zC+uT2HY6ZDbyFMrAUlwK7pB5HNRcp7nxqpzdN3G\n" \
+-" CFQ7NObTa3nApcaSN/suOe4SDw6VK3O4swojsp9WGmxk9fIDrW4UzWkbt2K/v691vjec8YtZUTa\n" \
+-" BL+IuMaIjiWWytXQn/wBD608tgtrVC0W2+tOFSFqd9icD6AVnmFFl6n1AhoAmRPdwcfgR4n2H7q\n" \
+-" 2Ppi1N2exRojaQlKEBIHkAK7Gmi3MTWaLn6iTeSF+qmaKKK3rSiuedEanQ3I7qQpC0kEEZzXRRR\n" \
+-" FjnaRoSVoq/KcYQv9HOr3mHB/qzz3SenhVi0ftAbnNNwLo6G5iQEodUcJd9fJX760ZqLTkHUdsd\n" \
+-" hTWEOtuJwQoVl/XGyS7aakOPwGnJcDORujK0DqPH2qJV0cdUzC/0Oi3QTuhddqY84IuFukwnFFK\n" \
+-" JDSmlEcwFDGR86ISI1tgtQ4jYaYaTuoSP/udJS1azvFoAZLnbsp4dm/klPQHmKs0faVEWkfEw32\n" \
+-" 1f1CFj8q56XZNSwYG5t7fSt46yB5ucimM5L4c643pXWqU5tCteMpRKUfIIH86ipmvnnAUwoQSf2\n" \
+-" 3lZ+g/nWEey5yfCtrquBo8Su0+4sQ46pEp1LTSeZUfoPOlnfr67fZKQlK0QkK/VtficV5nrXOkX\n" \
+-" XUk9KQHp0gnghI7qPyAp1bOdkCmH2rneQHHxxQjHdb9OvWr2j2c2Didm74VZVVplGFuQXRsc2fO\n" \
+-" Qgb1cmsSXQN1JH+TT4D+dPEAAADkK848duMylppISkDGBXrVkoCKKKKIiiqrrbX9m0JARIua1re\n" \
+-" dJDMdoArcI58+AA8zVLsO26RqiS9Gsukpct5lHaKbTLaSrd8wFEZ9s0RN6vGRGZktlDqAoHzFKq\n" \
+-" JtomzrPOuzGjZvwEBRTJfckttpbUOae9jJ5cBk8R514Wrbo7e489+3aTlvtQGTIkqElsdm2Mkq4\n" \
+-" 4zyPKiKf1Hsj09flKdXEQh4/jR3VfMUvJ/2et1ZMOe8keSgFfyqz2LbfJ1M9IZs2kJsx2O0XnEN\n" \
+-" yEAhA4ZwcZ58hxr7ZdtkvUS5SbTo2fJMRsuPkPoSG0jzKsDPPhz4HyoipDewC47+FXFWOjYH51Y\n" \
+-" bTsAgtrSqc88/jwWrA+QxUlYtujupZ6oNo0nLlSUtqdKEyW04SMZOVYHiKjP8ACUt5/wB3pX/XT\n" \
+-" /KiJnWLQ1nsTSURorad39lIFWZKUoThIAHSlNqDbLP0siKu96MnQ0ygSyVyGzvYxnlnB4jga87F\n" \
+-" ttlamXJbs2j50xcZvtXUtyEZCfPB5+gyaIm9RSetm3J68RbhJgaSmPM25vtZaviW09knjxIOM8j\n" \
+-" y8q7LHtzstwv/AOhrlBftkkudkFOLS43v5xgqSeHHx5daImrRX5QtK0hSTkGiiLMP2ho8wa1iSn\n" \
+-" QoxVRQ20fAKClFQ9eIqq7LLJe7vreG7ZZCoZhqD8iZjustjnnwORkY8c+Wa1ZqbStt1PBMa4MId\n" \
+-" Rz7wzg+dL8bEbA1vpa7RtK+CkpdWAfXjRFB7UpCNe6Kdm6NnJft1qluKuUJlvdKznPbYH3hzPXJ\n" \
+-" PMGqZsk/zc2gf3G5/Cumc3sRsTO92Rcb3uB3XVjP1r4jYfYGwoN76QsYUEurGR5HjREudhUt2BP\n" \
+-" 1TMYID0eyuuoJGRvJII+oq96I2iwtVz7rb7ZZWbalyzyJ9wKUjLsrKEkjH4cE8+Jz049bew+wNb\n" \
+-" 3Z76N4YO66sZHlzob2H2Bkktb6CRglLqxkeXOiJZbAv9IMj+7X/wB6ag9lGnEaj17CRJA+BhZmy\n" \
+-" lK+6EI44PQq3R6E06W9h9gZVvNb6FYxlLqwcfOhvYhYWt7s99G8MK3XVjI68aIo7UxgbR9IajhQ\n" \
+-" 7/Du9yiSF3S3tMNrStlkAAt94DPDI4eJFUvYfNetqNYz4xAfjWZx5skZAUnJHD1FMVrYhYWVbzW\n" \
+-" +2ojGUOrBx86EbD7A0FBvfRvDCt11YyPI8aIo23zdP6i2e621TaUJiXCfa1IucFPJt5KVnfHRWS\n" \
+-" euPPNZ2YadfkNsspUp1aglCU8yTyrTSNh9gbCgjfSFjCgl1YyPI8al9PbItP2WamUywkuJ5KOVE\n" \
+-" emeVEVw02ZH9H4YkEqdDYCifE4oqXbaS02lCRhIGBRRF//Z\n" \
++"VERSION:3.0\n" \
++"FN:Yocto Project\n" \
++"URL:http://www.yoctoproject.org/\n" \
++"EMAIL:yocto@yoctoproject.org\n" \
++"TEL;TYPE=VOICE:+00 000 000 0000\n" \
++"ADR;TYPE=HOME:;1720 Beaver Creek;Dam #4;Planet Earth\n" \
++"LABEL:1720 Beaver Creek\\nDam #4\\nPlanet Earth\n" \
++"PHOTO;ENCODING=b:iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pV\n" \
++" UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAFE9JREFUeJztnXmQHNV9xz\n" \
++" +ve86dvU/tanUiCVwRQuaIhSEOMsIiEsbGRtiVGFy4EsdU4bINOICPUtkQHOxgYoiDTVJxCBiwM\n" \
++" CBxBjAlsIUlEQzISAhZN5JW2l3tvbNz9JU/fu/N7CwgVquVmEr194/t7enu97p73vf9zvcbCBEi\n" \
++" RIgQIUKECDH5UB/0DYwXwZv/Mh8AK3ISgBs4AwAR29oCwNwFfQBKLXY/mDucHFgf9A2EKEXZMiT\n" \
++" YdtdUADff+QCA5Q/9BQB+Xk7w9a27vpxP8g0AO9J4IYA64/qOE3m/k4WQIWWGsmJI/q0fn2P+t5\n" \
++" zerwFYDK0ACAgCAMsXRuCLqPDTQ7LvBgogSDY8DODWLvguQOLkv9t6Qm5+khAypMwQfiFlhkmZs\n" \
++" vY/9rOzAXK59EkAEc87BDD9c99cC6CU8t7tumD/PQ0A/uCOHwF4Vm6pOWbnc20AlvIDOTnQF8nU\n" \
++" hJOT3XQ/AK7jyJRWUSXHIw1vAQQV078BEJ1/7f9MwqMed4QMKTNMiCF/uP/ONgC7Y/ODAF52YCE\n" \
++" ArhcBwMIDiMZiLkAsVX8fwClfvfOrALldd5wGYGe6HgRQQfpkABXxi/fjCKkCX6ihtJ6rtFAP8i\n" \
++" Ny3nAfAJ4dk/OiCQBsZSn5vLoXIJ+aezVAxfxvPDCRZz5RCBlSZpgQQzbe+qXzAYLcwAMAgRM0A\n" \
++" UTQ072Sf6JKmo8HWQVgNSc7AU6+YG4AELiZKXITIic8gsL92J5uyzXixzBGbx1tIA73yIMkK2Vr\n" \
++" x/R5cg9KaXU40gCAH2//lOkjsm3WkwB97KoEyOHUA2TTw9J5U0MWwNm5rw9g3tfuzB3lqzpqhAw\n" \
++" pM0QmclE0knIBvOywD+ApB4BAG2u2EmoEnnw+xEAAsODD7S0AuGLMKZRRnYRBRpMCfMMMLTNUIP\n" \
++" vKc0u2WPoaSz+KbeuPPQXge8I+5XeLDAqsX5k+OnK7bwJwe50bAHLZfBWAo9v2DnfK3dnxtQCv3\n" \
++" vH1WwB2TPnoWoDLLrvsXbXHY0HIkDLDhBhizzx1J4C7tXcYQAVOC4CtRYAVyKh2/DQA886ZoQAS\n" \
++" VVGgaEqosTJsFEOUN8aJyNjB6JdeY+mxFZQ2qSwtQzw50c4eSJhjUW/wHwF275O+UpX1Its0w72\n" \
++" 88eSPLAZwoiMfAWj1131aH3iOSUbIkDLDhBhy2me/vB9gw21XPQQQH8zcAOArmdADJ6MApp5SB0\n" \
++" D1lKqS6wtjODBGuLYt/FGxJSM7fDNmglF/QRkfo2aORel5Zlvsy9NMKfbR0CLXJPZIG44n51hKP\n" \
++" ncLfcp+3sknALxMunbsO5kshAwpM0yIIQaLrr3rRoD1t15ZB5AY6vx7gGhKRlxNe61oOLYto1Nf\n" \
++" F2hmKE/LBTNqNVNglP3hyvyuCtfIvm/cYyqpt7Y+T2t8Y5lSuqsvEf60z4gD8MarYvVX1WibRZ/\n" \
++" saHnlqOQWgFjDzFfe+60cG0KGlBkmNUC1/t9XngfQ1nTg1wDTZ9jizS3M23p4+qZz3X1ExoWy7E\n" \
++" JbgXHyau1JG/0of0xbuo3A1Z97pZZ9gX3umC2gHQRkhrIAvLxeLHTbEoYYZntWbBjAr5t6HcDHr\n" \
++" 73950d4DceEkCFlhmOSIWOx6LwqmYyzNdUAXrav5LiypTsVE39TwYYwE7w3yg7Rmo7RtgjMyDfX\n" \
++" 2HrP7BsmGc1IU8pY8rbpsiinDItiCfEU19aLzdLZKYxJVNbtAnAq638CcMFxZIZByJAyw6TIkGD\n" \
++" vc7MBvM5nNgCoYKAJINDD1dIeVxPLANGEKPirHNPSqEaNvDHMUKVbY5nbhimaIfq4r4IxVwW6uV\n" \
++" EWvyf3Y2lZ0tNrdQFs3hb7KYCTaH4U4IJrb3/j/d7BZCFkSJlhUmRILuckAGKD2SYAnAwAFmL5Z\n" \
++" jKZACCTFgs+OyzHs3kJLzg62S2fLxLW08ywtWyIxuRYLCG3XBGXbVV1BQCpSn2tlhWWHdVPKGIt\n" \
++" MHZKiSEibfiabTXNElP5y2mNjwGoj9xywphhEDKkzDApDEnMW/YmQG7DDyS2PsBXAF7dsPNigDe\n" \
++" 27msDCIzfyZZRa+mRGTExjFESzVKxkj6M1Vzwe3nCMiffr9uQ4w3V0nZzszTWWC99NDbK6E9WJg\n" \
++" ttqmhC7I7KavFhxWqbAdxI5ZSjfQeThZAhZYbwCykzTKphGF904yb971UAv1l5hQPQ3uZdLZ1Jt\n" \
++" KngXNT+EEuZgFVxfPgFhdUIYatkz1zrG/VYq7M5TxSFvQdlf9N22R/JSDi2rqo4L86cJprAwvl2\n" \
++" L0BFW634VWKRD2yNSciQMsOkMsRg67rVVQDD69acBoCq1u73Uoeg75e6Q7xRrhO/4IfUzsPRHg+\n" \
++" KLDNX+JackNTqbjwqR6qrdLBJG6X5UQGq/f362r2V1wF8tL71fwFinTM+sIz5kCFlhuPCkNxbW2\n" \
++" YAJOxYG0CvttYefWUnAGfOqAfg9FbZ5rXj0LOL87uvKeIaEVHIudYukDHnKW34YRtnozxajzZCa\n" \
++" 5Ki7laM0qar4non0ZoBiC/95uaJPO9kImRImeG4MCTiZWYDxJORaQDPbpTlfvslK4hUp4zas2bK\n" \
++" fB9xSmULFI1EIzsK3nhvjLNRlTLH4M2DAwA8sWk/AOd9qA2AD0+rL56kU4yi5C/Wnzw47oc8Tgg\n" \
++" ZUmY4LgyxLW8ugB94cYADg7mSlFETNIpoGng6dBtRxfHhaoejju7iGQYYd3spIQpamQlodQ8KC1\n" \
++" 0tW/b3yf6HWopaVkVSZIibHT7l6J/y+CBkSJlhUhnyp6eeigPk9v52FkBUB6C0x5z+rIze2Y2SO\n" \
++" KfGWOyj00BNwoMJapnAk9L6lTVG7JgosGFKbUq0Ks+X5QoZR6/a9YoGja95FnhOJUAQBDF9P/mj\n" \
++" ffbJQsiQMsOkMiTa2akA0k5OfOCOhGaXzW8HoCct+6e31wCQ0dpVXssLNdr/ruVJoBliZIrJB1K\n" \
++" 2DtkWBrz8Y3Sw2U3Cwnk66NSiA1mxaHEMKl8CaK4nnW1/+j6TiB0yJIRgUhmyZ+ZMF6Byy5ZuKO\n" \
++" akTauS+Xx6jWzNqDbmhxfIuOjuOlxoK1mRAqD5zLMBmDp/AQAdL64FYHDPdgBc7ZuKxoWURitLa\n" \
++" at/+fxpQHHkGc8ygGuqQyjlAsxbdvngBB6bTZs2tANYFfE5APPnLPyDOaaUGjqatkKGlBkmlSGL\n" \
++" F0utqg0/ve4FAKWiVwPkA6cKIHB8naqpSuIiRvNpbGgotGVkQVWrRFNrpk4H4GC7bL0dkn8QT1S\n" \
++" U3oRxZWkZFLeMbFHvcAd4nvwfj9dMaKn0s8/ffzHAa5s2rgF4fNUaABoaG3abc35868rLAK65/n\n" \
++" vjStAOGVJmOC7VgFYGIhTO/+dr7gDIDXd+CSDieUmASCFzuvQu7FFtFOZ8bU3bKdHMRgYlPTWql\n" \
++" 5sZJcvEO4yZkdNZEb5ehOPp4zkVKdj4qqLuBYDPfu/ujx/N8z3x9H2fkrbdVQB73z4YA3ju8acD\n" \
++" gP7unsJ7bZnSlgGYffKsCwFuve3u3x6p7ZAhZYYTUi9rzc1f/i5A98G3vw9Qoxf3VyVFhMULDqv\n" \
++" Rlrp8ZhVSQsdEG8fE1M3WK0QG5eysF+QAPMt+HcCJVj5i+vibW/7zNnjv4jjveI41v1gE4OFLTS\n" \
++" 7sNgBli99goH9QATy3+qkCC/ds26kAmqc0DwEsXXrRJQBXX3f98+/WR8iQMsNx8fYaGN/QvXddd\n" \
++" T7Azr1iAO/auQcA1xGpYevRPm9mMYktEZNYSTIqW9ss3DFMcOUaNyeDeyAt+4Pa+LF04kheW//1\n" \
++" 7W3bASJnT/9X08d4mfHLX981FyDvuqKNRWyd+Ie+F6F2MiUa3+KLLixQ/Yn06gBgsKurCuB3v3v\n" \
++" uh/rQGe/WV8iQMkP4hZQZjotQf+WXP28EcBP+zwCG4sGnAQb6hy2A7l1bFcCiOgmvbu8Wj8Xat4\n" \
++" vFdmrrqgFIJHX1B1MVVmc9ZLK6jsqQTINbtsv+nsOy/cxZcn0kIVpBqqVOAbTHpz1m+vjKd/6tU\n" \
++" Bno3fDoow9MA3C9YUkAjFp1UHT1eDrDIghMtQh94SgnaW5EVmP96r/ulRXJmXwHwA/vuvN0gIUL\n" \
++" z+ka3WfIkDLDMTHk9f++NgUQT0eaAEac3JUAvV2Hvg6wr3egGmD3iIzqs5b/FQCREUnrPCsiAy+\n" \
++" bl1F0y7qBQttVzbLUpLJCC/WoKACONghHRoQJ+3d1A9CxR5gyNCLH/3yOFB46c34rANs6DwYAFf\n" \
++" 3FRSgNze1vAcSTkRsAalMtUrZ8SnsGwG+s3ghgRW0p6myq22nXj6etUM8kXhgaB6MWoUTFy9nXI\n" \
++" UR45uHHfgTw9Avr/+GdbzRkSNlhQmrvlv/49gyA6NDw7QD5bN8lAP6weJrNiLeaWgKAzte3K4C8\n" \
++" /v47B2UARdNSN3HJKcKCl94qEna7Tua0IibZQa6Ja89HhTYYG4fkeI1OfqhNySO98baEbrd3Sr5\n" \
++" odVRmgznVscLojXXvPwUgn0isBhipEpbVTm0GQNutONoLalnWEWeUIChlEICn1fDmltbV8N7MMA\n" \
++" gZUmYYN0N2r/1Foc5Udstr3wIg138JQKATCNxAhrEKZCQ5VlIBXLrkPACaDu0DYOfmHQAMW5I5F\n" \
++" 3xY5vmVFxb7+/4a0bjmatnRpjPmDudlgL+o5VKVzmqoTsjxXp1CGtGGpakE0ZeTezw0VJQhlQlp\n" \
++" O6mrGFHfqAA2bJT40vwzTpf7ntqqQ7263uOYFKRgTOZ3aWK49RiAW2t9gXEgZEiZYdwM6d38ZiE\n" \
++" HM54fOgPAz4umk8nLMM27kpvpOTJENq2XmExSj5zzW8S1UN8j2lTPdAm7Zl4TO2T+1mII958qpI\n" \
++" 2WKaJtDc+eAUDt1l0A/G1C2KUCGfmNmkkHtUP+qRHZf13HiWt0FQl3OF3ow6/XNX4rErJaWAe79\n" \
++" u4Q+2jX9r0AXHL5ZdJ3kwTQXLO+PijZoHSuUhCo9aYP2/a/CnDF0iuKHR8BIUPKDOPXspLFUGkm\n" \
++" I3Oun5XRmdajMK0ZM5AVbaVrUOTAqoyMqFPrJCUn1yo2wut/Et28tUOOVwcFMUWtkS/aYu8+YxE\n" \
++" ATXtEDjVrmRBTIitSMWHEbJ1gl9d1fdf3y3k9SNtWtugNmK3lj601obgenhVVcp993aKprb53FQ\n" \
++" CXXiliIFktCRieXmFkGdPcsg4CpJI115s+VnxyxdscBUKGlBnGzZDTTzqv4HN5qXfViwBZV50JM\n" \
++" JyRytWDOWHI7l5JbN6ake97d81skTE1LQrg2ks/BsCT9z0NwOY+sbaXnrug0N+da34PwEU7JGQ7\n" \
++" c794vndoP9Kd/RLSnabXoX9xkSTjPfuaeAEe7hdZslWZer5yXrKY7MD2nhEFUF8hsizWI9b8SXO\n" \
++" mK4BX+6RvNysOtGdWP6kAPnHJ8gAgkUpqH5bqArDtxOcBVnxyxe/e80W+D0KGlBnGzRC1uPhzdC\n" \
++" /+9Ns/ARgeGJgG0DGUXQLQPTB8AGBzt5SuPhhtOB3Ar2tIAGw4JMx5/hWxQ7py0v36PgnpLpozt\n" \
++" 9Df7mYZ6Vcf0rlrGZMYYcK+woAfzJH9tC+y5O4D0lZXXIJdkZSMfs/8RFIuU7BDtg1k0gDVKacX\n" \
++" gM7N0wDmnHlmL8CfLZwfA/jjy5sqAboPCINeenatAjh36ZJBgGgscTnAFy79whETGMaDkCFlhmP\n" \
++" y9r696rYkwM+fWf95gG279n8OoLM/PRWgI8fJAJ2pKVGAkXpJeivQUntLnRHRqM6e11Zoe5tekt\n" \
++" aTLy0uYIziuOQusETcTgxpL/Dve6T1IKK3+gnjfQcBaBop2jqtFXZeN5oGUL5bBzB9SuPNABd/8\n" \
++" Yu/AXjt5ZcfAXjzj3+sB1BW0AfwieUXXQnwtWu+s2Ycr2tcCBlSZjgmhtz07etOAtj86saNAE5m\n" \
++" pBYgl3ctAE/n6gxlZUnbznxKAfQ0zAIgSIhtYGr0Wn7RSRQoPefrytaB+XUEnSJqKlmbKkAmLcj\n" \
++" Tn1s6CTvZK3bL9LyIicZUtNCJrbMrzHK5vF4EWlFVGQC0z5p1GsA55yw+AOA72cUA6ezwawDXXH\n" \
++" PjrqN4XeNCyJAywzEx5IpPffwJAC+fWwaQ1dZzoNtNZyUuMqLj33kdD+90RfM5VK1/TiQqlq/yi\n" \
++" pE2W7mOfOZmAGxNEU9XCAgsKwngWzrrzpKN0nHu6NBBBTAzIzZOoy6YGo0Ux2ChrKPeutpGsXW9\n" \
++" 3qbW1ucBVj365JKjfzsTQ8iQMsOEIobf+PJfnwrQsXf3qQC5jKhCvv6Vm5z2ablBacVqSy8NaLI\n" \
++" kUhjpk/m9XzPEihfrXiz72MduBVix5NyHAJYtW9YF8MILLzQB/OSBxy8C2LZ330UAnQNDCwGC9E\n" \
++" AKoCUv2lS9DvtFDDPUaIYYQhbctvIcOu6RT4+ce3Rv5tgRMqTMEH4hZYYJTVmeE9QA+L5UqjSra\n" \
++" ANLV/XxSjPSi9+7WW0rbo5qW85PepL1oLLFckCnpOxfASxfvnzLmO479XYzwLp16x4C+Ob1Nz4C\n" \
++" MJTvWQCQiprqQDpLXt+Tskb9JIapYl5YA19aN8Vx8/H3exeTjZAhZYYJMSTrcxgg70uBw+IaDTn\n" \
++" ujd2aWldarTSV5Fy9TtwPxECrb6j9jenj+ptuehPghptvPuK9ZLq6+gHswBUdW7PQ9WSs2VrVDm\n" \
++" zzG0klY1BSQY2DZUxloVi8YkKrco8FIUPKDBNiyJeuurwD4I5bbt8IMJLubgfIZXMWjKqXaKrCm\n" \
++" a1ZuK5LNtTU1h8GaG+fthLg/oceusv0oVQxkHQkXPCZz/QA3HPPPSsAnn7y8SsBeroOnwtg4y8A\n" \
++" yOez8qORjluQC+YHJH1fll1F7UgOIJlK7gOYPmvubXLmpP863nsiZEiZYVKWI6xc+a2FAHv/tP1\n" \
++" cgM7OzmqAwLdaARzP6QCobajrA5gza+5LALfefuJ+BsKgt7d3xtjP6urqxP2u1OF3XnFiETIkRI\n" \
++" gQIUKE+H+C/wMGX8Ias1s6CQAAAABJRU5ErkJggg==\n" \
+ "END:VCARD"
+--
+1.8.3.2
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/iconv-detect.h b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/iconv-detect.h
new file mode 100644
index 000000000..46f476d5b
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server/iconv-detect.h
@@ -0,0 +1,5 @@
+/* This is an auto-generated header, DO NOT EDIT! */
+
+#define ICONV_ISO_D_FORMAT "iso-%d-%d"
+#define ICONV_ISO_S_FORMAT "iso-%d-%s"
+#define ICONV_10646 "iso-10646"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server_3.26.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server_3.26.3.bb
new file mode 100644
index 000000000..2303b8f18
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/eds/evolution-data-server_3.26.3.bb
@@ -0,0 +1,130 @@
+SUMMARY = "Evolution database backend server"
+HOMEPAGE = "http://www.gnome.org/projects/evolution/"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+
+LICENSE = "LGPLv2 & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6a6e689d19255cf0557f3fe7d7068212 \
+ file://src/camel/camel.h;endline=24;md5=342fc5e9357254bc30c24e43ae47d9a1 \
+ file://src/libedataserver/e-data-server-util.h;endline=20;md5=8f21a9c80ea82a4fb80b5f959f672543 \
+ file://src/calendar/libecal/e-cal.h;endline=24;md5=e699ec3866f73f129f7a4ffffdcfc196"
+
+DEPENDS = " \
+ intltool-native gperf-native \
+ glib-2.0 gtk+3 gconf libgnome-keyring libgdata \
+ dbus db virtual/libiconv zlib libsoup-2.4 libical nss libsecret \
+"
+
+inherit distro_features_check gnomebase cmake gtk-doc gettext gobject-introspection perlnative pythonnative
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI += " \
+ file://0001-CMakeLists.txt-Remove-TRY_RUN-for-iconv.patch \
+ file://0002-CMakeLists.txt-remove-CHECK_C_SOURCE_RUNS-check.patch \
+ file://0003-contact-Replace-the-Novell-sample-contact-with-somet.patch \
+ file://iconv-detect.h \
+"
+SRC_URI[archive.md5sum] = "568a21a4df4e0ec985c849b38fc66908"
+SRC_URI[archive.sha256sum] = "63b1ae5f76be818862f455bf841b5ebb1ec3e1f4df6d3a16dc2be348b7e0a1c5"
+
+LKSTRFTIME = "HAVE_LKSTRFTIME=ON"
+LKSTRFTIME_libc-musl = "HAVE_LKSTRFTIME=OFF"
+
+EXTRA_OECMAKE = " \
+ -DWITH_KRB5=OFF \
+ -DENABLE_GOA=OFF \
+ -DENABLE_UOA=OFF \
+ -DENABLE_GOOGLE_AUTH=OFF \
+ -DENABLE_WEATHER=OFF \
+ -D${LKSTRFTIME} \
+"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[openldap] = "-DWITH_OPENLDAP=ON,-DWITH_OPENLDAP=OFF,openldap"
+
+EXTRA_OECONF = "--with-libdb=${STAGING_DIR_HOST}${prefix} \
+ --disable-nntp --disable-gtk-doc"
+
+# -ldb needs this on some platforms
+LDFLAGS += "-lpthread -lgmodule-2.0 -lgthread-2.0"
+
+do_configure_append () {
+ cp ${WORKDIR}/iconv-detect.h ${S}/src
+
+ # fix native perl shebang
+ sed -i 's:${STAGING_BINDIR_NATIVE}/perl-native:${bindir}:' ${B}/src/tools/addressbook-export/csv2vcard
+}
+
+do_compile_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/camel/.libs:${B}/libedataserver/.libs"
+}
+
+
+PACKAGES =+ "libcamel libcamel-dev libebook libebook-dev libecal libecal-dev \
+ libedata-book libedata-book-dev libedata-cal libedata-cal-dev \
+ libedataserver libedataserver-dev \
+ libedataserverui libedataserverui-dev"
+
+FILES_${PN} =+ "${systemd_user_unitdir} \
+ ${datadir}/dbus-1 \
+ ${datadir}/evolution-data-server-*/ui/"
+RDEPENDS_${PN} += "perl"
+
+FILES_${PN}-dev =+ "${libdir}/pkgconfig/evolution-data-server-*.pc"
+FILES_${PN}-dbg =+ "${libdir}/evolution-data-server*/camel-providers/.debug \
+ ${libdir}/evolution-data-server*/calendar-backends/.debug \
+ ${libdir}/evolution-data-server*/addressbook-backends/.debug \
+ ${libdir}/evolution-data-server*/extensions/.debug/"
+
+RRECOMMENDS_${PN}-dev += "libecal-dev libebook-dev"
+
+FILES_libcamel = "${libdir}/libcamel-*.so.* \
+ ${libdir}/libcamel-provider-*.so.* \
+ ${libdir}/evolution-data-server*/camel-providers/*.so \
+ ${libdir}/evolution-data-server*/camel-providers/*.urls"
+FILES_libcamel-dev = "${libdir}/libcamel-*.so ${libdir}/libcamel-provider-*.so \
+ ${libdir}/pkgconfig/camel*pc \
+ ${libdir}/evolution-data-server*/camel-providers/*.la \
+ ${includedir}/evolution-data-server*/camel"
+
+FILES_libebook = "${libdir}/libebook-*.so.*"
+FILES_libebook-dev = "${libdir}/libebook-1.2.so \
+ ${libdir}/pkgconfig/libebook-*.pc \
+ ${includedir}/evolution-data-server*/libebook/*.h"
+RRECOMMENDS_libebook = "libedata-book"
+
+FILES_libecal = "${libdir}/libecal-*.so.* \
+ ${datadir}/evolution-data-server-1.4/zoneinfo"
+FILES_libecal-dev = "${libdir}/libecal-*.so ${libdir}/pkgconfig/libecal-*.pc \
+ ${includedir}/evolution-data-server*/libecal/*.h \
+ ${includedir}/evolution-data-server*/libical/*.h"
+RRECOMMENDS_libecal = "libedata-cal tzdata"
+
+FILES_libedata-book = "${libexecdir}/e-addressbook-factory \
+ ${datadir}/dbus-1/services/*.AddressBook.service \
+ ${libdir}/libedata-book-*.so.* \
+ ${libdir}/evolution-data-server-*/extensions/libebook*.so \
+ ${datadir}/evolution-data-server-1.4/weather/Locations.xml"
+FILES_libedata-book-dev = "${libdir}/libedata-book-*.so \
+ ${libdir}/pkgconfig/libedata-book-*.pc \
+ ${libdir}/evolution-data-server-*/extensions/libebook*.la \
+ ${includedir}/evolution-data-server-*/libedata-book"
+
+FILES_libedata-cal = "${libexecdir}/e-calendar-factory \
+ ${datadir}/dbus-1/services/*.Calendar.service \
+ ${libdir}/libedata-cal-*.so.* \
+ ${libdir}/evolution-data-server-*/extensions/libecal*.so"
+FILES_libedata-cal-dev = "${libdir}/libedata-cal-*.so \
+ ${libdir}/pkgconfig/libedata-cal-*.pc \
+ ${includedir}/evolution-data-server-*/libedata-cal \
+ ${libdir}/evolution-data-server-*/extensions/libecal*.la"
+
+FILES_libedataserver = "${libdir}/libedataserver-*.so.*"
+FILES_libedataserver-dev = "${libdir}/libedataserver-*.so \
+ ${libdir}/pkgconfig/libedataserver-*.pc \
+ ${includedir}/evolution-data-server-*/libedataserver/*.h"
+
+FILES_libedataserverui = "${libdir}/libedataserverui-*.so.* ${datadir}/evolution-data-server-1.4/glade/*.glade"
+FILES_libedataserverui-dev = "${libdir}/libedataserverui-*.so \
+ ${libdir}/pkgconfig/libedataserverui-*.pc \
+ ${includedir}/evolution-data-server-*/libedataserverui/*.h"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-Add-format-attribute-to-_synctex_malloc.patch b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-Add-format-attribute-to-_synctex_malloc.patch
new file mode 100644
index 000000000..de739c5b3
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-Add-format-attribute-to-_synctex_malloc.patch
@@ -0,0 +1,27 @@
+From 3776fd0b42e473fe51d3678bf26cdaa37e1d8e0d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 8 Apr 2017 13:36:12 -0700
+Subject: [PATCH] Add format attribute to _synctex_malloc
+
+Helps in avoiding compile errors about formating with clang
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cut-n-paste/synctex/synctex_parser_utils.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/cut-n-paste/synctex/synctex_parser_utils.c b/cut-n-paste/synctex/synctex_parser_utils.c
+index f8a9f6f..9459b2d 100644
+--- a/cut-n-paste/synctex/synctex_parser_utils.c
++++ b/cut-n-paste/synctex/synctex_parser_utils.c
+@@ -78,6 +78,7 @@ void *_synctex_malloc(size_t size) {
+ return (void *)ptr;
+ }
+
++__attribute__((__format__ (__printf__, 1, 0)))
+ int _synctex_error(const char * reason,...) {
+ va_list arg;
+ int result;
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-help-remove-YELP-macro.patch b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-help-remove-YELP-macro.patch
new file mode 100644
index 000000000..592f46606
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince/0001-help-remove-YELP-macro.patch
@@ -0,0 +1,24 @@
+From 40921037d8e7205a3889d529fb4e06f79e1e88b0 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Fri, 19 Feb 2016 16:52:18 +0200
+Subject: [PATCH] help: remove YELP macro
+
+Upstream-Status: Inappropriate [embedded-specific]
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ help/Makefile.am | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/help/Makefile.am b/help/Makefile.am
+index 7835810..37c88ce 100644
+--- a/help/Makefile.am
++++ b/help/Makefile.am
+@@ -1,5 +1,3 @@
+-@YELP_HELP_RULES@
+-
+ SUBDIRS = reference
+
+ HELP_ID = evince
+--
+2.7.0
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_3.24.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_3.24.0.bb
new file mode 100644
index 000000000..c7ecf2ba5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/evince/evince_3.24.0.bb
@@ -0,0 +1,66 @@
+SUMMARY = "Evince is a document viewer for document formats like pdf, ps, djvu"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=96f2f8d5ee576a2163977938ea36fa7b"
+SECTION = "x11/office"
+DEPENDS = "gtk+3 libsecret ${@bb.utils.contains('DISTRO_FEATURES','x11','gnome-desktop3','',d)} poppler gstreamer1.0-plugins-base orc adwaita-icon-theme intltool-native gnome-common-native"
+PR = "r5"
+
+inherit gnome pkgconfig gtk-icon-cache gsettings gobject-introspection distro_features_check systemd
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@gnome_verdir("${PV}")}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive \
+ file://0001-help-remove-YELP-macro.patch \
+ file://0001-Add-format-attribute-to-_synctex_malloc.patch \
+ "
+SRC_URI[archive.md5sum] = "3fb65ff46de191dc49c481f1fc66201c"
+SRC_URI[archive.sha256sum] = "043895af7bbd6f1b57f9ab8778e78cf9c0af5dfcc347eaa94a17bf864c04dc8f"
+
+EXTRA_OECONF = " --enable-thumbnailer \
+"
+
+do_compile_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/libdocument/.libs"
+}
+
+
+do_install_append() {
+ install -d ${D}${datadir}/pixmaps
+ install -m 0755 ${S}/data/icons/48x48/apps/evince.png ${D}${datadir}/pixmaps/
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}
+ then
+ install -d ${D}${systemd_unitdir}/system
+ mv ${D}${systemd_user_unitdir}/evince.service ${D}${systemd_system_unitdir}/evince.service
+ else
+ rm -rf ${D}${libdir}/systemd/user/evince.service
+ fi
+ rmdir --ignore-fail-on-non-empty ${D}${systemd_user_unitdir}
+ rmdir --ignore-fail-on-non-empty ${D}${nonarch_libdir}/systemd
+ rmdir --ignore-fail-on-non-empty ${D}${nonarch_libdir}
+}
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[nautilus] = "--enable-nautilus,--disable-nautilus,nautilus"
+PACKAGECONFIG[browser-plugin] = "--enable-browser-plugin,--disable-browser-plugin,"
+
+SYSTEMD_SERVICE_${PN} = "evince.service"
+
+RDEPENDS_${PN} += "glib-2.0-utils"
+RRECOMMMENDS_${PN} = "adwaita-icon-theme"
+
+PACKAGES =+ "${PN}-nautilus-extension"
+PACKAGES =+ "${PN}-browser-plugin"
+
+FILES_${PN} += "${datadir}/dbus-1 \
+ ${datadir}/appdata \
+ ${datadir}/thumbnailers \
+ ${systemd_unitdir}/systemd/user/evince.service \
+ "
+FILES_${PN}-dbg += "${libdir}/*/*/.debug \
+ ${libdir}/*/*/*/.debug"
+FILES_${PN}-dev += "${libdir}/nautilus/extensions-2.0/*.la \
+ ${libdir}/evince/*/backends/*.la"
+FILES_${PN}-staticdev += "${libdir}/nautilus/extensions-2.0/*.a \
+ ${libdir}/evince/*/backends/*.a"
+FILES_${PN}-nautilus-extension = "${libdir}/nautilus/*/*so"
+FILES_${PN}-browser-plugin = "${libdir}/mozilla/*/*so"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/faenza-icon-theme/faenza-icon-theme_1.3.bb b/meta-openembedded/meta-gnome/recipes-gnome/faenza-icon-theme/faenza-icon-theme_1.3.bb
new file mode 100644
index 000000000..a39b1a0ca
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/faenza-icon-theme/faenza-icon-theme_1.3.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "An icon theme for Gnome"
+SECTION = "x11/wm"
+LICENSE = "GPLv3"
+HOMEPAGE = "http://code.google.com/p/faenza-icon-theme/"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit allarch gtk-icon-cache
+
+S = "${WORKDIR}"
+
+SRC_URI = "http://faenza-icon-theme.googlecode.com/files/${PN}_${PV}.zip"
+SRC_URI[md5sum] = "e9bd6106d13017ce06d24b586259ae9c"
+SRC_URI[sha256sum] = "d4486fda0413f8a81a87e0dd2329f50f2a8a7cb4147b48cf147f0160add8174a"
+
+do_install() {
+ install -d ${D}${datadir}/icons
+ for theme in `find -name 'Faenza*.tar.gz'`; do
+ tar -xf ${theme} -C ${D}${datadir}/icons
+ done
+ tar -xf emesene-faenza-theme.tar.gz -C ${D}${datadir}
+ mv -f ${D}${datadir}/emesene/themes ${D}${datadir}/themes
+ rm -rf ${D}${datadir}/emesene
+ chown -R root:root ${D}${datadir}
+}
+
+FILES_${PN} += "${datadir}/icons ${datadir}/themes"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-Remove-help-directory-from-build.patch b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-Remove-help-directory-from-build.patch
new file mode 100644
index 000000000..4ad57effe
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-Remove-help-directory-from-build.patch
@@ -0,0 +1,29 @@
+From 1d2e6165e3154e27ecde329a40c05f0880afb9e0 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Tue, 17 May 2016 14:14:03 +0300
+Subject: [PATCH] Remove help directory from build
+
+It hardcodes the use of xml2po utility, which is provided by obsolete gnome-doc-utils
+
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ Makefile.am | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index e57b203..a88152d 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -3,9 +3,6 @@ ACLOCAL_AMFLAGS = -I m4
+
+ SUBDIRS = gedit pixmaps po data plugin-loaders plugins docs tests win32 osx
+
+-if !OS_OSX
+-SUBDIRS += help
+-endif
+
+ distuninstallcheck_listfiles = find . -type f -print | grep -v scrollkeeper
+
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-gedit-utils-qualify-handle_builder_error-with-format.patch b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-gedit-utils-qualify-handle_builder_error-with-format.patch
new file mode 100644
index 000000000..4885c4511
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-gedit-utils-qualify-handle_builder_error-with-format.patch
@@ -0,0 +1,31 @@
+From 623ffac1f6e7725041b386e0f2933fe36809b5a9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 09:04:30 -0700
+Subject: [PATCH] gedit-utils: qualify handle_builder_error() with format
+ string parameters
+
+gedit-utils.c:1063:32: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
+ msg_plain = g_strdup_vprintf (message, args);
+ ^~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ gedit/gedit-utils.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gedit/gedit-utils.c b/gedit/gedit-utils.c
+index 41a5afd..c800828 100644
+--- a/gedit/gedit-utils.c
++++ b/gedit/gedit-utils.c
+@@ -1051,7 +1051,7 @@ gedit_utils_is_valid_uri (const gchar *uri)
+ return TRUE;
+ }
+
+-static GtkWidget *
++static G_GNUC_PRINTF(1, 2) GtkWidget *
+ handle_builder_error (const gchar *message, ...)
+ {
+ GtkWidget *label;
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-tests-document-saver.c-Define-ACCESSPERMS-if-not-def.patch b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-tests-document-saver.c-Define-ACCESSPERMS-if-not-def.patch
new file mode 100644
index 000000000..11afe75ce
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-tests-document-saver.c-Define-ACCESSPERMS-if-not-def.patch
@@ -0,0 +1,31 @@
+From ee43bcc3c8d69fe56a64c3487e2d3c780ea5d25e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 06:53:35 -0700
+Subject: [PATCH] tests/document-saver.c: Define ACCESSPERMS if not defined
+ already
+
+Helps compile with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/document-saver.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/tests/document-saver.c b/tests/document-saver.c
+index 9f44d5a..811ade6 100644
+--- a/tests/document-saver.c
++++ b/tests/document-saver.c
+@@ -41,6 +41,10 @@
+ #define UNOWNED_GROUP_LOCAL_URI "/tmp/gedit-document-saver-unowned-group.txt"
+ #define UNOWNED_GROUP_REMOTE_URI "sftp://localhost/tmp/gedit-document-saver-unowned-group.txt"
+
++#if !defined(ACCESSPERMS)
++#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
++#endif
++
+ static gboolean test_completed;
+ static gboolean mount_completed;
+ static gboolean mount_success;
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-workaround-void-pointer-arithmetic.patch b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-workaround-void-pointer-arithmetic.patch
new file mode 100644
index 000000000..a28808b8d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0001-workaround-void-pointer-arithmetic.patch
@@ -0,0 +1,57 @@
+From 8e0cbfac142d38320dd02416601e14c65585cd17 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Sat, 9 Mar 2013 12:47:06 +0100
+Subject: [PATCH] workaround void pointer arithmetic
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+fixes errors like:
+error: pointer of type 'void *' used in arithmetic [-Werror=pointer-arith]
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ gedit/gedit-document-input-stream.c | 4 ++--
+ gedit/gedit-smart-charset-converter.c | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/gedit/gedit-document-input-stream.c b/gedit/gedit-document-input-stream.c
+index 5a1f961..38316e7 100644
+--- a/gedit/gedit-document-input-stream.c
++++ b/gedit/gedit-document-input-stream.c
+@@ -426,7 +426,7 @@ gedit_document_input_stream_read (GInputStream *stream,
+
+ do
+ {
+- n = read_line (dstream, buffer + read, space_left);
++ n = read_line (dstream, ((char*)buffer) + read, space_left);
+ read += n;
+ space_left -= n;
+ } while (space_left > 0 && n != 0 && dstream->priv->bytes_partial == 0);
+@@ -451,7 +451,7 @@ gedit_document_input_stream_read (GInputStream *stream,
+
+ newline = get_new_line (dstream);
+
+- memcpy (buffer + read, newline, newline_size);
++ memcpy (((char*)buffer) + read, newline, newline_size);
+
+ read += newline_size;
+ dstream->priv->newline_added = TRUE;
+diff --git a/gedit/gedit-smart-charset-converter.c b/gedit/gedit-smart-charset-converter.c
+index e32b0b1..6745ce3 100644
+--- a/gedit/gedit-smart-charset-converter.c
++++ b/gedit/gedit-smart-charset-converter.c
+@@ -153,7 +153,7 @@ try_convert (GCharsetConverter *converter,
+ do
+ {
+ res = g_converter_convert (G_CONVERTER (converter),
+- inbuf + nread,
++ ((const char*)inbuf) + nread,
+ inbuf_size - nread,
+ out + nwritten,
+ out_size - nwritten,
+--
+1.7.4.4
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0002-suppress-string-format-literal-warning-to-fix-build-.patch b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0002-suppress-string-format-literal-warning-to-fix-build-.patch
new file mode 100644
index 000000000..a5d231012
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/files/0002-suppress-string-format-literal-warning-to-fix-build-.patch
@@ -0,0 +1,38 @@
+From 4ebdf8023f763f75a7e1b548894de2e8b784f4a8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 29 Jul 2016 23:19:40 +0200
+Subject: [PATCH] suppress string format literal warning to fix build with gcc6
+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>
+---
+ plugins/time/gedit-time-plugin.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/plugins/time/gedit-time-plugin.c b/plugins/time/gedit-time-plugin.c
+index d2ffdb9..441d9f9 100644
+--- a/plugins/time/gedit-time-plugin.c
++++ b/plugins/time/gedit-time-plugin.c
+@@ -473,12 +473,15 @@ get_time (const gchar* format)
+ clock = time (NULL);
+ now = localtime (&clock);
+
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+ do
+ {
+ out_length += 255;
+ out = g_realloc (out, out_length);
+ }
+ while (strftime (out, out_length, locale_format, now) == 0);
++#pragma GCC diagnostic pop
+
+ g_free (locale_format);
+
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_2.30.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_2.30.4.bb
new file mode 100644
index 000000000..ba425ad6b
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gedit/gedit_2.30.4.bb
@@ -0,0 +1,31 @@
+SUMMARY = "GNOME editor"
+SECTION = "x11/gnome"
+LICENSE = "GPLv2+"
+PR = "r2"
+
+DEPENDS = "gvfs enchant gconf gnome-doc-utils glib-2.0 gtk+ gtksourceview2 iso-codes intltool-native gnome-common-native libice"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit distro_features_check gnome gettext pythonnative
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "${GNOME_MIRROR}/${GNOMEBN}/${@gnome_verdir("${PV}")}/${GNOMEBN}-${PV}.tar.${GNOME_COMPRESS_TYPE};name=archive \
+ file://0001-workaround-void-pointer-arithmetic.patch \
+ file://0001-Remove-help-directory-from-build.patch \
+ file://0002-suppress-string-format-literal-warning-to-fix-build-.patch \
+ file://0001-tests-document-saver.c-Define-ACCESSPERMS-if-not-def.patch \
+ file://0001-gedit-utils-qualify-handle_builder_error-with-format.patch \
+ "
+SRC_URI[archive.md5sum] = "e1eecb0a92a1a363b3d375ec5ac0fb3b"
+SRC_URI[archive.sha256sum] = "a561fe3dd1d199baede1bd07c4ee65f06fc7c494dd4d3327117f04149a608e3c"
+GNOME_COMPRESS_TYPE="bz2"
+
+EXTRA_OECONF = "--disable-scrollkeeper \
+ --enable-gvfs-metadata"
+
+LDFLAGS += "-lgmodule-2.0 -lICE"
+
+FILES_${PN} += "${libdir}/gedit-2/plugin* ${datadir}/gedit-2"
+FILES_${PN}-dbg += "${libdir}/gedit-2/plugin-loaders/.debug ${libdir}/gedit-2/plugins/.debug"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_3.18.2.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_3.18.2.bb
new file mode 100644
index 000000000..8cfd65af3
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-bluetooth/gnome-bluetooth_3.18.2.bb
@@ -0,0 +1,19 @@
+SUMMARY = "GNOME bluetooth manager"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
+ file://COPYING.LIB;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+"
+
+SECTION = "x11/gnome"
+
+DEPENDS = "udev gtk+3 libnotify libcanberra intltool-native gnome-common-native \
+ ${@bb.utils.contains('DISTRO_FEATURES','bluez5','bluez5','bluez4',d)} \
+"
+
+inherit gnomebase gtk-icon-cache gobject-introspection distro_features_check
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[archive.md5sum] = "75d09c924468ec0c687f9ab3acf7f113"
+SRC_URI[archive.sha256sum] = "d8df073c331df0f97261869fb77ffcdbf4e3e4eaf460d3c3ed2b16e03d9c5398"
+
+FILES_${PN}-dbg += "${libdir}/gnome-bluetooth/plugins/.debug/"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring/musl.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring/musl.patch
new file mode 100644
index 000000000..050b87ab2
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring/musl.patch
@@ -0,0 +1,17 @@
+include sys/select.h for FD_* macros
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+Index: gnome-keyring-2.32.1/pkcs11/rpc-layer/gkm-rpc-daemon-standalone.c
+===================================================================
+--- gnome-keyring-2.32.1.orig/pkcs11/rpc-layer/gkm-rpc-daemon-standalone.c
++++ gnome-keyring-2.32.1/pkcs11/rpc-layer/gkm-rpc-daemon-standalone.c
+@@ -32,6 +32,7 @@
+ #include <unistd.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <sys/select.h>
+
+ #include <dlfcn.h>
+ #include <pthread.h>
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_3.20.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_3.20.0.bb
new file mode 100644
index 000000000..55640625d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/gnome-keyring_3.20.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Password and keyring managing daemon"
+HOMEPAGE = "http://www.gnome.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+SECTION = "x11/gnome"
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c \
+"
+
+inherit distro_features_check gnomebase remove-libtool
+
+DEPENDS = " \
+ intltool-native \
+ glib-2.0-native \
+ gtk+3 \
+ gcr \
+ libgcrypt \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)} \
+"
+
+SRC_URI[archive.md5sum] = "e09efe8021944dae404736b5a2adb98e"
+SRC_URI[archive.sha256sum] = "bc17cecd748a0e46e302171d11c3ae3d76bba5258c441fabec3786f418e7ec99"
+SRC_URI += "file://musl.patch"
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+RDEPENDS_${PN} = "libgnome-keyring glib-2.0-utils"
+
+EXTRA_OECONF = " \
+ --disable-doc \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam --with-pam-dir=${base_libdir}/security', '--disable-pam', d)} \
+"
+
+
+FILES_${PN} += " \
+ ${datadir}/dbus-1/services \
+ ${datadir}/p11-kit \
+ ${base_libdir}/security/*${SOLIBSDEV} \
+ ${libdir}/pkcs11/gnome-keyring-pkcs11.so \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/libgnome-keyring_3.12.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/libgnome-keyring_3.12.0.bb
new file mode 100644
index 000000000..82abe3349
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-keyring/libgnome-keyring_3.12.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Compatibility library for accessing secrets"
+HOMEPAGE = "http://www.gnome.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+
+LICENSE = "GPLv2 & LGPLv2"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=0914b9d3ebaba41ef2e3e0ae16f296cf \
+ file://COPYING.GPL;md5=94d55d512a9ba36caa9b7df079bae19f \
+"
+SECTION = "x11/gnome/libs"
+
+inherit gnomebase gtk-doc gobject-introspection
+
+DEPENDS = "dbus libgcrypt glib-2.0 glib-2.0-native intltool-native"
+
+SRC_URI[archive.md5sum] = "6696e4f2e9aed4625cdc3af30bd8c238"
+SRC_URI[archive.sha256sum] = "c4c178fbb05f72acc484d22ddb0568f7532c409b0a13e06513ff54b91e947783"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus3_3.10.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus3_3.10.1.bb
new file mode 100644
index 000000000..647ae914f
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-menus/gnome-menus3_3.10.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "GNOME menus"
+SECTION = "x11/gnome"
+LICENSE = "GPLv2 & LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=5f30f0716dfdd0d91eb439ebec522ec2"
+
+DEPENDS = "python libxml2 gconf popt gtk+3 intltool-native gnome-common-native"
+
+inherit distro_features_check gnomebase pkgconfig python-dir pythonnative gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+BPN = "gnome-menus"
+
+SHRT_VER = "${@d.getVar('PV').split('.')[0]}.${@d.getVar('PV').split('.')[1]}"
+SRC_URI = "${GNOME_MIRROR}/${BPN}/${SHRT_VER}/${BPN}-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "6db025e79e2b69f39fc7aa0753f43081"
+SRC_URI[sha256sum] = "46950aba274c1ad58234374fa9b235258650737307f3bc396af48eb983668a71"
+
+FILES_${PN} += "${datadir}/desktop-directories/"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/files/0001-help-remove-YELP-macro.patch b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/files/0001-help-remove-YELP-macro.patch
new file mode 100644
index 000000000..57b60a0d5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/files/0001-help-remove-YELP-macro.patch
@@ -0,0 +1,28 @@
+From 4a3ee8b46d25b3d310448bfa4446e15a686fc685 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Fri, 23 Mar 2018 13:50:18 +0100
+Subject: [PATCH] help: remove YELP macro
+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>
+---
+ help/Makefile.am | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/help/Makefile.am b/help/Makefile.am
+index c5cd0d3..4b83adf 100644
+--- a/help/Makefile.am
++++ b/help/Makefile.am
+@@ -1,5 +1,3 @@
+-@YELP_HELP_RULES@
+-
+ HELP_ID = gnome-system-monitor
+
+ HELP_FILES = \
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_3.26.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_3.26.0.bb
new file mode 100644
index 000000000..9b6ce17ca
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gnome-system-monitor/gnome-system-monitor_3.26.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Gnome system monitor"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = " \
+ intltool-native \
+ gnome-common-native \
+ glib-2.0-native \
+ gtkmm3 \
+ libgtop \
+ librsvg \
+ libwnck3 \
+"
+
+inherit gnomebase distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[archive.md5sum] = "fcd59867c07f8c4853b1e28d60cbc037"
+SRC_URI[archive.sha256sum] = "f848a8c2ca5e164cf09d3a205dd49e4e4bf4b60d43b0969c10443eb519d0e6b3"
+SRC_URI += "file://0001-help-remove-YELP-macro.patch"
+
+RRECOMMENDS_${PN} = "adwaita-icon-theme"
+
+FILES_${PN} += " \
+ ${datadir}/icons \
+ ${datadir}/dbus-1 \
+ ${datadir}/gnome/autostart \
+"
+
+FILES_${PN}-doc += " \
+ ${datadir}/omf \
+ ${datadir}/gnome/help \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light/classic-light.xml b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light/classic-light.xml
new file mode 100644
index 000000000..23b4b9a22
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light/classic-light.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Based on gtksourceview 'classic'
+
+ This file is part of GtkSourceView
+
+ Copyright (C) 2006-2007 GtkSourceView team
+ Author: Yevgen Muntyan <muntyan@tamu.edu>
+
+ GtkSourceView 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.
+
+ GtkSourceView 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+-->
+<style-scheme id="classic-light" _name="Classic-Light" version="1.0">
+ <author>GtkSourceView team</author>
+ <_description>Classic color scheme light</_description>
+
+ <!-- The scheme tries to look like the default GVim scheme,
+ since it is also what the hardwired GtkSourceView 1 color
+ scheme did -->
+
+ <!-- Palette -->
+ <color name="black" value="#000000"/>
+ <color name="white" value="#FFFFFF"/>
+ <color name="blue" value="#0000FF"/>
+ <color name="magenta" value="#FF00FF"/>
+ <color name="violet" value="#6A5ACD"/>
+ <color name="cyan" value="#008A8C"/>
+ <color name="gray" value="#BEBEBE"/>
+ <color name="lightgray" value="#E0E0E0"/>
+ <color name="green" value="#2E8B57"/>
+ <color name="bordeaux" value="#A52A2A"/>
+ <color name="red" value="#FF0000"/>
+ <color name="yellow" value="#FFFF00"/>
+ <color name="purple" value="#A020F0"/>
+
+ <!-- Global Settings -->
+ <style name="current-line" background="#eeeeec"/>
+ <style name="current-line-number" background="#eeeeec"/>
+ <style name="draw-spaces" foreground="#babdb6"/>
+ <style name="background-pattern" background="#f3f3f3"/>
+ <style name="text" foreground="black" background="white"/>
+ <style name="selection" background="gray"/>
+ <style name="cursor" foreground="black"/>
+ <style name="line-numbers" foreground="black" background="gray"/>
+
+ <!-- Bracket Matching -->
+ <style name="bracket-match" foreground="white" background="gray"/>
+ <style name="bracket-mismatch" foreground="white" background="red"/>
+
+ <!-- Right Margin -->
+ <style name="right-margin" foreground="#000000" background="#000000"/>
+
+ <!-- Search Matching -->
+ <style name="search-match" background="yellow"/>
+
+ <!-- Comments -->
+ <style name="def:comment" foreground="blue"/>
+ <style name="def:shebang" foreground="blue" bold="true"/>
+ <style name="def:doc-comment-element" italic="true"/>
+
+ <!-- Constants -->
+ <style name="def:constant" foreground="magenta"/>
+ <style name="def:special-char" foreground="violet"/>
+
+ <!-- Identifiers -->
+ <style name="def:identifier" foreground="cyan"/>
+
+ <!-- Statements -->
+ <style name="def:statement" foreground="bordeaux" bold="true"/>
+
+ <!-- Types -->
+ <style name="def:type" foreground="green" bold="true"/>
+
+ <!-- Others -->
+ <style name="def:preprocessor" foreground="purple"/>
+ <style name="def:error" background="red" bold="true"/>
+ <style name="def:warning" background="yellow"/>
+ <style name="def:note" foreground="blue" background="yellow" bold="true"/>
+ <style name="def:underlined" italic="true" underline="single"/>
+
+ <!-- Heading styles, uncomment to enable -->
+ <!--
+ <style name="def:heading0" scale="5.0"/>
+ <style name="def:heading1" scale="2.5"/>
+ <style name="def:heading2" scale="2.0"/>
+ <style name="def:heading3" scale="1.7"/>
+ <style name="def:heading4" scale="1.5"/>
+ <style name="def:heading5" scale="1.3"/>
+ <style name="def:heading6" scale="1.2"/>
+ -->
+
+ <!-- Language specific styles -->
+ <style name="diff:added-line" foreground="#008B8B"/>
+ <style name="diff:removed-line" foreground="#6A5ACD"/>
+ <style name="diff:changed-line" use-style="def:preprocessor"/>
+ <style name="diff:special-case" use-style="def:constant"/>
+ <style name="diff:location" use-style="def:statement"/>
+ <style name="diff:diff-file" use-style="def:type"/>
+
+ <style name="xml:tags" foreground="cyan"/>
+ <style name="xml:attribute-name" foreground="violet"/>
+ <style name="xml:namespace" foreground="green" bold="true"/>
+
+ <style name="js:object" foreground="#2E8B57" bold="true"/>
+ <style name="js:constructors" foreground="#008B8B"/>
+
+ <style name="latex:display-math" foreground="#6A5ACD"/>
+ <style name="latex:command" foreground="#2E8B57" bold="true"/>
+ <style name="latex:include" use-style="def:preprocessor"/>
+
+ <style name="sh:variable" foreground="#6A5ACD"/>
+
+ <!-- legacy styles for old lang files -->
+ <style name="Others" foreground="#2E8B57" bold="true"/>
+ <style name="Others 2" foreground="#008B8B"/>
+ <style name="Others 3" foreground="#6A5ACD"/>
+
+</style-scheme>
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light_1.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light_1.0.bb
new file mode 100644
index 000000000..e7dc0f865
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview-classic-light_1.0.bb
@@ -0,0 +1,21 @@
+DESCRIPTION = "Gtksourceview Classic-Light theme"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://classic-light.xml;beginline=6;endline=23;md5=2b4f75364fad00a4d752214dcbd7d7c3"
+
+inherit allarch
+
+SRC_URI = "file://classic-light.xml"
+
+S = "${WORKDIR}"
+
+do_install() {
+ install -d ${D}${datadir}/gtksourceview-2.0/styles
+ install -m 0644 ${WORKDIR}/classic-light.xml ${D}${datadir}/gtksourceview-2.0/styles/
+ install -d ${D}${datadir}/gtksourceview-3.0/styles
+ install -m 0644 ${WORKDIR}/classic-light.xml ${D}${datadir}/gtksourceview-3.0/styles/
+}
+
+FILES_${PN} = " \
+ ${datadir}/gtksourceview-2.0/styles \
+ ${datadir}/gtksourceview-3.0/styles \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/0001-test-widget.c-fix-non-literal-format-string-issues.patch b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/0001-test-widget.c-fix-non-literal-format-string-issues.patch
new file mode 100644
index 000000000..6118b679a
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/0001-test-widget.c-fix-non-literal-format-string-issues.patch
@@ -0,0 +1,31 @@
+From 0781b218beb8ba160ea223ff3d74a4fa2abf86fa Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Apr 2017 16:21:14 -0700
+Subject: [PATCH] test-widget.c: fix non-literal format string issues
+
+clang errors out when using -Werror=format-nonliteral
+since the definition of g_strdup_vprintf() from glib-2.0
+is using va_list and clang seems to still warn where as
+gcc doesn't do that for va_list arguments
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/test-widget.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test-widget.c b/tests/test-widget.c
+index 46f5f4e..3f2e60f 100644
+--- a/tests/test-widget.c
++++ b/tests/test-widget.c
+@@ -260,7 +260,7 @@ static const gchar *buffer_ui_description =
+
+ /* File loading code ----------------------------------------------------------------- */
+
+-static void
++static void G_GNUC_PRINTF (2, 0)
+ error_dialog (GtkWindow *parent, const gchar *msg, ...)
+ {
+ va_list ap;
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/acinclude.m4 b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/acinclude.m4
new file mode 100644
index 000000000..53518fb2e
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/acinclude.m4
@@ -0,0 +1,90 @@
+## this one is commonly used with AM_PATH_PYTHONDIR ...
+dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]])
+dnl Check if a module containing a given symbol is visible to python.
+AC_DEFUN(AM_CHECK_PYMOD,
+[AC_REQUIRE([AM_PATH_PYTHON])
+py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
+AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1)
+AC_CACHE_VAL(py_cv_mod_$py_mod_var, [
+ifelse([$2],[], [prog="
+import sys
+try:
+ import $1
+except ImportError:
+ sys.exit(1)
+except:
+ sys.exit(0)
+sys.exit(0)"], [prog="
+import $1
+$1.$2"])
+if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
+ then
+ eval "py_cv_mod_$py_mod_var=yes"
+ else
+ eval "py_cv_mod_$py_mod_var=no"
+ fi
+])
+py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"`
+if test "x$py_val" != xno; then
+ AC_MSG_RESULT(yes)
+ ifelse([$3], [],, [$3
+])dnl
+else
+ AC_MSG_RESULT(no)
+ ifelse([$4], [],, [$4
+])dnl
+fi
+])
+
+dnl a macro to check for ability to create python extensions
+dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_INCLUDES
+AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for headers required to compile python extensions)
+dnl deduce PYTHON_INCLUDES
+AC_ARG_WITH(python-includes,
+ [ --with-python-includes=DIR path to Python includes], py_exec_prefix=$withval)
+if test x$py_exec_prefix != x; then
+PYTHON_INCLUDES="-I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+else
+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+fi
+fi
+AC_SUBST(PYTHON_INCLUDES)
+dnl check if the headers exist:
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+AC_TRY_CPP([#include <Python.h>],dnl
+[AC_MSG_RESULT(found)
+$1],dnl
+[AC_MSG_RESULT(not found)
+$2])
+CPPFLAGS="$save_CPPFLAGS"
+])
+
+dnl
+dnl JH_ADD_CFLAG(FLAG)
+dnl checks whether the C compiler supports the given flag, and if so, adds
+dnl it to $CFLAGS. If the flag is already present in the list, then the
+dnl check is not performed.
+AC_DEFUN([JH_ADD_CFLAG],
+[
+case " $CFLAGS " in
+*@<:@\ \ @:>@$1@<:@\ \ @:>@*)
+ ;;
+*)
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $1"
+ AC_MSG_CHECKING([whether [$]CC understands $1])
+ AC_TRY_COMPILE([], [], [jh_has_option=yes], [jh_has_option=no])
+ AC_MSG_RESULT($jh_has_option)
+ if test $jh_has_option = no; then
+ CFLAGS="$save_CFLAGS"
+ fi
+ ;;
+esac])
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.m4 b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.m4
new file mode 100644
index 000000000..3ec41666b
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.m4
@@ -0,0 +1,53 @@
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+ AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+ AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+ dnl for overriding the documentation installation directory
+ AC_ARG_WITH(html-dir,
+ AC_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+ [with_html_dir='${datadir}/gtk-doc/html'])
+ HTML_DIR="$with_html_dir"
+ AC_SUBST(HTML_DIR)
+
+ dnl enable/disable documentation building
+ AC_ARG_ENABLE(gtk-doc,
+ AC_HELP_STRING([--enable-gtk-doc],
+ [use gtk-doc to build documentation [default=no]]),,
+ enable_gtk_doc=no)
+
+ have_gtk_doc=no
+ if test -z "$PKG_CONFIG"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+ fi
+ if test "$PKG_CONFIG" != "no" && $PKG_CONFIG --exists gtk-doc; then
+ have_gtk_doc=yes
+ fi
+
+ dnl do we want to do a version check?
+ifelse([$1],[],,
+ [gtk_doc_min_version=$1
+ if test "$have_gtk_doc" = yes; then
+ AC_MSG_CHECKING([gtk-doc version >= $gtk_doc_min_version])
+ if $PKG_CONFIG --atleast-version $gtk_doc_min_version gtk-doc; then
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ have_gtk_doc=no
+ fi
+ fi
+])
+ if test x$enable_gtk_doc = xyes; then
+ if test "$have_gtk_doc" != yes; then
+ enable_gtk_doc=no
+ fi
+ fi
+
+ AM_CONDITIONAL(ENABLE_GTK_DOC, test x$enable_gtk_doc = xyes)
+ AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test -n "$LIBTOOL")
+])
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.make b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.make
new file mode 100644
index 000000000..354ffb7c6
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/gtk-doc.make
@@ -0,0 +1,173 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+endif
+
+# We set GPATH here; this gives us semantics for GNU make
+# which are more like other make's VPATH, when it comes to
+# whether a source that is a target of one rule is then
+# searched for in VPATH/GPATH.
+#
+GPATH = $(srcdir)
+
+TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
+
+EXTRA_DIST = \
+ $(content_files) \
+ $(HTML_IMAGES) \
+ $(DOC_MAIN_SGML_FILE) \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-overrides.txt
+
+DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+ $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp
+
+SCANOBJ_FILES = \
+ $(DOC_MODULE).args \
+ $(DOC_MODULE).hierarchy \
+ $(DOC_MODULE).interfaces \
+ $(DOC_MODULE).prerequisites \
+ $(DOC_MODULE).signals
+
+REPORT_FILES = \
+ $(DOC_MODULE)-undocumented.txt \
+ $(DOC_MODULE)-undeclared.txt \
+ $(DOC_MODULE)-unused.txt
+
+CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS)
+
+if ENABLE_GTK_DOC
+all-local: html-build.stamp
+else
+all-local:
+endif
+
+docs: html-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+ @echo 'gtk-doc: Scanning header files'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && \
+ gtkdoc-scan --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --ignore-headers="$(IGNORE_HFILES)" $(SCAN_OPTIONS) $(EXTRA_HFILES)
+ if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" CFLAGS="$(GTKDOC_CFLAGS)" LDFLAGS="$(GTKDOC_LIBS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+ else \
+ cd $(srcdir) ; \
+ for i in $(SCANOBJ_FILES) ; do \
+ test -f $$i || touch $$i ; \
+ done \
+ fi
+ touch scan-build.stamp
+
+$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
+ @true
+
+#### templates ####
+
+tmpl-build.stamp: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+ @echo 'gtk-doc: Rebuilding template files'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+ touch tmpl-build.stamp
+
+tmpl.stamp: tmpl-build.stamp
+ @true
+
+tmpl/*.sgml:
+ @true
+
+
+#### xml ####
+
+sgml-build.stamp: tmpl.stamp $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files)
+ @echo 'gtk-doc: Building XML'
+ @-chmod -R u+w $(srcdir)
+ cd $(srcdir) && \
+ gtkdoc-mkdb --module=$(DOC_MODULE) --source-dir=$(DOC_SOURCE_DIR) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $(MKDB_OPTIONS)
+ touch sgml-build.stamp
+
+sgml.stamp: sgml-build.stamp
+ @true
+
+#### html ####
+
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+ @echo 'gtk-doc: Building HTML'
+ @-chmod -R u+w $(srcdir)
+ rm -rf $(srcdir)/html
+ mkdir $(srcdir)/html
+ cd $(srcdir)/html && gtkdoc-mkhtml $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+ test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+ @echo 'gtk-doc: Fixing cross-references'
+ cd $(srcdir) && gtkdoc-fixxref --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ touch html-build.stamp
+
+##############
+
+clean-local:
+ rm -f *~ *.bak
+ rm -rf .libs
+
+distclean-local:
+ cd $(srcdir) && \
+ rm -rf xml $(REPORT_FILES) \
+ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+maintainer-clean-local: clean
+ cd $(srcdir) && rm -rf xml html
+
+install-data-local:
+ -installfiles=`echo $(srcdir)/html/*`; \
+ if test "$$installfiles" = '$(srcdir)/html/*'; \
+ then echo '-- Nothing to install' ; \
+ else \
+ $(mkinstalldirs) $(DESTDIR)$(TARGET_DIR); \
+ for i in $$installfiles; do \
+ echo '-- Installing '$$i ; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(TARGET_DIR); \
+ done; \
+ echo '-- Installing $(srcdir)/html/index.sgml' ; \
+ $(INSTALL_DATA) $(srcdir)/html/index.sgml $(DESTDIR)$(TARGET_DIR) || :; \
+ which gtkdoc-rebase >/dev/null && \
+ gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) ; \
+ fi
+
+
+uninstall-local:
+ rm -f $(DESTDIR)$(TARGET_DIR)/*
+
+#
+# Require gtk-doc when making dist
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+ @echo "*** gtk-doc must be installed and enabled in order to make dist"
+ @false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+ mkdir $(distdir)/tmpl
+ mkdir $(distdir)/xml
+ mkdir $(distdir)/html
+ -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+ -cp $(srcdir)/xml/*.xml $(distdir)/xml
+ cp $(srcdir)/html/* $(distdir)/html
+ -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+ -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+ cd $(distdir) && rm -f $(DISTCLEANFILES)
+ -gtkdoc-rebase --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/suppress-string-format-literal-warning.patch b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/suppress-string-format-literal-warning.patch
new file mode 100644
index 000000000..f9ae07763
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2/suppress-string-format-literal-warning.patch
@@ -0,0 +1,33 @@
+Fix build error with gcc6:
+../../gtksourceview-2.10.5/gtksourceview/gtksourceprintcompositor.c: In function 'strdup_strftime':
+../../gtksourceview-2.10.5/gtksourceview/gtksourceprintcompositor.c:1951:3: error: format not a string literal, format string not checked [-Werror=format-nonliteral]
+ tmplen = strftime (tmpbuf, tmpbufsize, locale_format, tm);
+ ^~~~~~
+
+Patch Reference:
+https://git.gnome.org/browse/glib/commit/?id=0817af40e8c74c721c30f6ef482b1f53d12044c7
+https://git.gnome.org/browse/glib/commit/?id=8cdbc7fb2c8c876902e457abe46ee18a0b134486
+
+Upstream-Status: Pending
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff -Nurp gtksourceview-2.10.5.orig/gtksourceview/gtksourceprintcompositor.c gtksourceview-2.10.5/gtksourceview/gtksourceprintcompositor.c
+--- gtksourceview-2.10.5.orig/gtksourceview/gtksourceprintcompositor.c 2016-07-01 13:11:43.631173762 +0800
++++ gtksourceview-2.10.5/gtksourceview/gtksourceprintcompositor.c 2016-07-04 13:54:18.223726343 +0800
+@@ -1913,6 +1913,8 @@ setup_pango_layouts (GtkSourcePrintCompo
+ * GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald */
+
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+ static gchar *
+ strdup_strftime (const gchar *format, const struct tm *tm)
+ {
+@@ -1982,6 +1984,7 @@ strdup_strftime (const gchar *format, co
+
+ return convbuf;
+ }
++#pragma GCC diagnostic pop
+
+ static gchar *
+ evaluate_format_string (GtkSourcePrintCompositor *compositor,
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2_2.10.5.bb b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2_2.10.5.bb
new file mode 100644
index 000000000..012f8e3bc
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview2_2.10.5.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Portable C library for multiline text editing"
+HOMEPAGE = "http://projects.gnome.org/gtksourceview/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "gtk+ libxml2 intltool-native gnome-common-native glib-2.0-native"
+
+PNAME = "gtksourceview"
+
+S = "${WORKDIR}/${PNAME}-${PV}"
+
+inherit gnomebase lib_package gettext distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+# overrule SRC_URI from gnome.conf
+SRC_URI = "${GNOME_MIRROR}/${PNAME}/${@gnome_verdir("${PV}")}/${PNAME}-${PV}.tar.bz2;name=archive \
+ file://gtk-doc.make \
+ file://suppress-string-format-literal-warning.patch \
+ file://0001-test-widget.c-fix-non-literal-format-string-issues.patch \
+ "
+SRC_URI[archive.md5sum] = "1219ad1694df136f126507466aeb41aa"
+SRC_URI[archive.sha256sum] = "c585773743b1df8a04b1be7f7d90eecdf22681490d6810be54c81a7ae152191e"
+
+do_configure_prepend() {
+ cp ${WORKDIR}/gtk-doc.make ${S}/
+ sed -i -e s:docs::g ${S}/Makefile.am
+ echo "EXTRA_DIST = version.xml" > gnome-doc-utils.make
+}
+
+FILES_${PN} += " ${datadir}/gtksourceview-2.0"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.6.bb b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.6.bb
new file mode 100644
index 000000000..87e48ed3c
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gtksourceview/gtksourceview3_3.24.6.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Portable C library for multiline text editing"
+HOMEPAGE = "http://projects.gnome.org/gtksourceview/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24"
+
+DEPENDS = "gtk+3 libxml2 intltool-native gnome-common-native glib-2.0-native"
+
+PNAME = "gtksourceview"
+
+S = "${WORKDIR}/${PNAME}-${PV}"
+
+inherit gnomebase lib_package gettext distro_features_check gtk-doc gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://ftp.gnome.org/pub/gnome/sources/gtksourceview/3.24/${PNAME}-${PV}.tar.xz"
+SRC_URI[md5sum] = "c09ccfc80f78083841f8fe266c1ac52a"
+SRC_URI[sha256sum] = "7aa6bdfebcdc73a763dddeaa42f190c40835e6f8495bb9eb8f78587e2577c188"
+
+FILES_${PN} += " ${datadir}/gtksourceview-3.0"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.36.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.36.0.bb
new file mode 100644
index 000000000..5f7391285
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/gvfs/gvfs_1.36.0.bb
@@ -0,0 +1,68 @@
+DESCRIPTION = "gvfs is a userspace virtual filesystem"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=05df38dd77c35ec8431f212410a3329e"
+
+inherit gnome bash-completion gettext
+
+DEPENDS += "libsecret glib-2.0 gconf intltool-native libgudev udisks2 polkit shadow-native"
+
+SRC_URI = "https://download.gnome.org/sources/${BPN}/${@gnome_verdir("${PV}")}/${BPN}-${PV}.tar.xz;name=archive"
+
+SRC_URI[archive.md5sum] = "216d461c5e96e2cea74253be407af6dc"
+SRC_URI[archive.sha256sum] = "9ec388afeb373a213f2cc489184f76a17ae273a000e8a4ec720c1995943256bb"
+
+do_configure_prepend() {
+ # make automake happy..
+ touch ${S}/ABOUT-NLS
+}
+
+EXTRA_OECONF = " \
+ --disable-gdu \
+ --enable-udisks2 \
+ --disable-documentation \
+"
+
+PACKAGES =+ "gvfsd-ftp gvfsd-sftp gvfsd-trash"
+
+FILES_${PN} += " \
+ ${datadir}/glib-2.0 \
+ ${datadir}/GConf \
+ ${datadir}/dbus-1/services \
+ ${libdir}/gio/modules/*.so \
+ ${libdir}/tmpfiles.d \
+ ${systemd_user_unitdir} \
+"
+RDEPENDS_${PN} = "udisks2"
+
+FILES_${PN}-dbg += "${libdir}/gio/modules/.debug/*"
+FILES_${PN}-dev += "${libdir}/gio/modules/*.la"
+
+FILES_gvfsd-ftp = "${libexecdir}/gvfsd-ftp ${datadir}/gvfs/mounts/ftp.mount"
+FILES_gvfsd-sftp = "${libexecdir}/gvfsd-sftp ${datadir}/gvfs/mounts/sftp.mount"
+FILES_gvfsd-trash = "${libexecdir}/gvfsd-trash ${datadir}/gvfs/mounts/trash.mount"
+
+RRECOMMENDS_gvfsd-ftp += "openssh-sftp openssh-ssh"
+
+PACKAGECONFIG ?= "libgphoto2 ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+PACKAGECONFIG[afc] = "--enable-afc, --disable-afc, libimobiledevice libplist"
+PACKAGECONFIG[archive] = "--enable-archive, --disable-archive, libarchive"
+PACKAGECONFIG[avahi] = "--enable-avahi, --disable-avahi, avahi"
+PACKAGECONFIG[gcr] = "--enable-gcr, --disable-gcr, gcr"
+PACKAGECONFIG[http] = "--enable-http, --disable-http, libsoup-2.4"
+PACKAGECONFIG[libmtp] = "--enable-libmtp, --disable-libmtp, libmtp"
+PACKAGECONFIG[libgphoto2] = "--enable-gphoto2, --disable-gphoto2, libgphoto2"
+PACKAGECONFIG[samba] = "--enable-samba, --disable-samba, samba"
+PACKAGECONFIG[systemd] = "--with-systemduserunitdir=${systemd_user_unitdir},--without-systemduserunitdir,systemd"
+
+# needs meta-filesystems
+PACKAGECONFIG[fuse] = "--enable-fuse, --disable-fuse, fuse"
+
+# libcdio-paranoia recipe doesn't exist yet
+PACKAGECONFIG[cdda] = "--enable-cdda, --disable-cdda, libcdio-paranoia"
+
+# Fix up permissions on polkit rules.d to work with rpm4 constraints
+do_install_append() {
+ chmod 700 ${D}/${datadir}/polkit-1/rules.d
+ chown polkitd:root ${D}/${datadir}/polkit-1/rules.d
+}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.16.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.16.1.bb
new file mode 100644
index 000000000..80cbae39f
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgdata/libgdata_0.16.1.bb
@@ -0,0 +1,33 @@
+SUMMARY = "GLib-based library for accessing online service APIs using the GData protocol"
+HOMEPAGE = "http://live.gnome.org/libgdata"
+BUGTRACKER = "https://bugzilla.gnome.org/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \
+ file://gdata/gdata.h;endline=20;md5=079a554efcf65d46f96a515806e7e99a \
+ file://gdata/gdata-types.h;endline=20;md5=7399b111aac8718da13888fc634be6ef"
+
+DEPENDS = "gnome-common-native libxml2 glib-2.0 libsoup-2.4 intltool-native liboauth gcr json-glib"
+
+inherit distro_features_check gnomebase pkgconfig autotools-brokensep gettext gtk-doc vala gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_configure_prepend_class-target () {
+ # introspection.m4 pre-packaged with upstream tarballs does not yet
+ # have our fixes
+ rm -f ${S}/introspection.m4
+
+ # remove the pre-built gtk-doc files, as they're installed (or attempted to be installed)
+ # even if gtk-doc is explicitly disabled
+ rm -rf ${S}/docs/reference/html
+}
+
+do_compile_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/gdata/.libs"
+}
+
+EXTRA_OECONF += "--disable-goa --disable-tests --disable-gtk-doc"
+
+SRC_URI[archive.md5sum] = "eb552a8a8482e4231a3d1baf7262e64d"
+SRC_URI[archive.sha256sum] = "8740e071ecb2ae0d2a4b9f180d2ae5fdf9dc4c41e7ff9dc7e057f62442800827"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgnome/libgnomekbd_3.22.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgnome/libgnomekbd_3.22.0.bb
new file mode 100644
index 000000000..40249fdfb
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgnome/libgnomekbd_3.22.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "GNOME keyboard library"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=6e29c688d912da12b66b73e32b03d812"
+
+SECTION = "x11/gnome/libs"
+
+DEPENDS = "gconf glib-2.0 libxklavier gtk+3 intltool-native"
+
+inherit distro_features_check gnome gobject-introspection gettext
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+GNOME_COMPRESS_TYPE = "xz"
+
+SRC_URI[archive.md5sum] = "7b1ebf99f4254c99922163c262c7ff04"
+SRC_URI[archive.sha256sum] = "340b30dabfebbd4e0e6c0fe34a378966dd5640b5d44595ab8a19b0be255d77df"
+
+EXTRA_OECONF_remove = "--disable-schemas-install"
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgsf/files/0001-configure.ac-drop-a-copy-paste-of-introspection.m4-m.patch b/meta-openembedded/meta-gnome/recipes-gnome/libgsf/files/0001-configure.ac-drop-a-copy-paste-of-introspection.m4-m.patch
new file mode 100644
index 000000000..bc0090e17
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgsf/files/0001-configure.ac-drop-a-copy-paste-of-introspection.m4-m.patch
@@ -0,0 +1,103 @@
+From 16d2c2e74350fda5505982fb150e72af7aee7454 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Fri, 19 Feb 2016 16:23:56 +0200
+Subject: [PATCH] configure.ac: drop a copy-paste of introspection.m4 macros
+
+Upstream-Status: Pending
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ configure.ac | 78 +-----------------------------------------------------------
+ 1 file changed, 1 insertion(+), 77 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 54f7663..3038535 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -77,83 +77,7 @@ libgsf_reqs="
+ "
+
+ PKG_CHECK_MODULES(LIBGSF, $libgsf_reqs)
+-# GObject Introspection
+-GIR_REQ=1.0.0
+-AC_ARG_ENABLE(introspection,
+- AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
+- [Enable introspection for this build]),,
+- [enable_introspection=no])
+-
+-AC_MSG_CHECKING([for gobject-introspection])
+-
+-dnl presence/version checking
+-AS_CASE([$enable_introspection],
+-[no], [
+- found_introspection="no (disabled, use --enable-introspection to enable)"
+-],
+-[yes],[
+- PKG_CHECK_EXISTS([gobject-introspection-1.0],,
+- AC_MSG_ERROR([gobject-introspection-1.0 is not installed]))
+- PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $GIR_REQ],
+- found_introspection=yes,
+- AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME]))
+-],
+-[auto],[
+- PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $GIR_REQ], found_introspection=yes, found_introspection=no)
+-dnl Canonicalize enable_introspection
+-enable_introspection=$found_introspection
+-],
+-[
+- AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
+-])
+-
+-AC_MSG_RESULT([$found_introspection])
+-
+-if test "x$found_introspection" = "xyes"; then
+- dnl You can override INTROSPECTION_GIRDIR and INTROSPECTION_TYPELIBDIR
+- dnl if you wish. If you override the latter, you might want to set
+- dnl GI_TYPELIB_PATH to include the same directory. For example
+- dnl
+- dnl GI_TYPELIB_PATH=$PREFIX/lib64/girepository-1.0
+- dnl INTROSPECTION_TYPELIBDIR=$GI_TYPELIB_PATH
+- dnl INTROSPECTION_GIRDIR=$PREFIX/share/gir-1.0
+- dnl
+- dnl Note, that unlike binaries produced with libgsf, nothing tells
+- dnl python where to find libgsf, so you might also need to set
+- dnl LD_LIBRARY_PATH.
+-
+- INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
+- INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
+- INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+- if test "x$INTROSPECTION_GIRDIR" = x; then
+- INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+- fi
+- if test "x$INTROSPECTION_TYPELIBDIR" = x; then
+- INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
+- fi
+- INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
+- INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
+- INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+-else
+- INTROSPECTION_SCANNER=
+- INTROSPECTION_COMPILER=
+- INTROSPECTION_GENERATE=
+- INTROSPECTION_GIRDIR=
+- INTROSPECTION_TYPELIBDIR=
+- INTROSPECTION_CFLAGS=
+- INTROSPECTION_LIBS=
+- INTROSPECTION_MAKEFILE=
+-fi
+-AC_SUBST(INTROSPECTION_SCANNER)
+-AC_SUBST(INTROSPECTION_COMPILER)
+-AC_SUBST(INTROSPECTION_GENERATE)
+-AC_SUBST(INTROSPECTION_GIRDIR)
+-AC_SUBST(INTROSPECTION_TYPELIBDIR)
+-AC_SUBST(INTROSPECTION_CFLAGS)
+-AC_SUBST(INTROSPECTION_LIBS)
+-AC_SUBST(INTROSPECTION_MAKEFILE)
+-
+-AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
++GOBJECT_INTROSPECTION_CHECK([1.46.0])
+ dnl we need to change the install directories for distcheck
+ AC_ARG_WITH([gir-dir],
+ AS_HELP_STRING(
+--
+2.7.0
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.29.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.29.bb
new file mode 100644
index 000000000..f5e2f1dd7
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgsf/libgsf_1.14.29.bb
@@ -0,0 +1,29 @@
+SUMMARY = "GNOME Structured File Library"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dc7371b50816c96e145fa0f8ade8e24d \
+ file://COPYING.LIB;md5=61464cfe342798eeced82efe9ae55f63"
+
+SECTION = "libs"
+
+DEPENDS= "libxml2 bzip2 glib-2.0 zlib intltool-native gnome-common-native"
+
+inherit autotools pkgconfig gnome gconf gobject-introspection
+
+SRC_URI += "file://0001-configure.ac-drop-a-copy-paste-of-introspection.m4-m.patch"
+
+SRC_URI[archive.md5sum] = "3056b94bb3281dbc8311371bfc23cf72"
+SRC_URI[archive.sha256sum] = "4d8bca33424eb711acdb6a060cb488b132063d699c4fa201db24c2c89c62529c"
+
+GNOME_COMPRESS_TYPE = "xz"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gdk-pixbuf] = "--with-gdk-pixbuf,--without-gdk-pixbuf,gdk-pixbuf"
+
+EXTRA_OECONF = "\
+ --disable-gtk-doc \
+ --with-bz2 \
+"
+
+RDEPENDS_${PN} = "gconf"
+
+FILES_${PN} += "${datadir}/thumbnailers"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/files/gtkstylus.sh b/meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/files/gtkstylus.sh
new file mode 100644
index 000000000..b1302ede0
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/files/gtkstylus.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+GTK_MODULES=libgtkstylus.so
+
+export GTK_MODULES
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/libgtkstylus_0.5.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/libgtkstylus_0.5.bb
new file mode 100644
index 000000000..a7c8a6fce
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgtkstylus/libgtkstylus_0.5.bb
@@ -0,0 +1,29 @@
+SUMMARY = "GTK plugin for stylus based systems"
+SECTION = "libs"
+DEPENDS = "gtk+"
+LICENSE = "LGPL-2.0+"
+LIC_FILES_CHKSUM = "file://tap.c;beginline=1;endline=20;md5=71756eeb144e9eeb177c69aa672b1635"
+PR = "r4"
+
+inherit distro_features_check autotools pkgconfig
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://burtonini.com/temp/${BP}.tar.gz \
+ file://gtkstylus.sh"
+SRC_URI[md5sum] = "fa1c82cd9fd2fafd7ff10d78eb5781c5"
+SRC_URI[sha256sum] = "383e0a22a537f653b8d41688277560f95678a042967198085ec7caa1a5cc2f4c"
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/X11/Xsession.d
+ install -m 755 ${WORKDIR}/gtkstylus.sh ${D}/${sysconfdir}/X11/Xsession.d/45gtkstylus
+}
+
+# Horrible but rpm falls over if you use '*'
+GTKVER = "2.10.0"
+
+FILES_${PN} = "${sysconfdir} \
+ ${libdir}/gtk-2.0/${GTKVER}/modules/libgtkstylus.so.*"
+FILES_${PN}-dbg += "${libdir}/gtk-2.0/${GTKVER}/modules/.debug"
+FILES_${PN}-dev += "${libdir}/gtk-2.0/${GTKVER}/modules/libgtkstylus.so"
+FILES_${PN}-staticdev += "${libdir}/gtk-2.0/${GTKVER}/modules/libgtkstylus.*a"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop/0001-netload-Include-libc-net-headers-unconditionally.patch b/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop/0001-netload-Include-libc-net-headers-unconditionally.patch
new file mode 100644
index 000000000..c4f7da4bf
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop/0001-netload-Include-libc-net-headers-unconditionally.patch
@@ -0,0 +1,46 @@
+From 3c6f70e50cb586ac4add4dea627c316242691040 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 09:17:29 -0700
+Subject: [PATCH] netload: Include libc net headers unconditionally
+
+This fixes compile with musl, and this conditional
+is not needed now a days if we are still using glibc < 1.0
+we have other bigger problems
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdeps/linux/netload.c | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+diff --git a/sysdeps/linux/netload.c b/sysdeps/linux/netload.c
+index c275db2..446bddd 100644
+--- a/sysdeps/linux/netload.c
++++ b/sysdeps/linux/netload.c
+@@ -34,8 +34,6 @@
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+
+-#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
+-/* GNU LibC */
+ #include <net/if.h>
+ #include <netinet/ip_icmp.h>
+ #include <netinet/in.h>
+@@ -43,15 +41,6 @@
+ #include <netinet/tcp.h>
+ #include <netinet/udp.h>
+ #include <net/if.h>
+-#else /* Libc 5 */
+-#include <linux/if.h>
+-#include <linux/in.h>
+-#include <linux/ip.h>
+-#include <linux/icmp.h>
+-#include <linux/tcp.h>
+-#include <linux/udp.h>
+-#endif
+-
+
+ #ifdef HAVE_IFADDRS_H
+ /* needed for IPV6 support */
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.38.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.38.0.bb
new file mode 100644
index 000000000..494934fe7
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libgtop/libgtop_2.38.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "LibGTop2"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+inherit gnomebase lib_package gtk-doc distro_features_check gobject-introspection gettext
+
+# depends on libxau
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[archive.md5sum] = "bb0ce7de6b28694b40405eedac8a31b5"
+SRC_URI[archive.sha256sum] = "4f6c0e62bb438abfd16b4559cd2eca0251de19e291c888cdc4dc88e5ffebb612"
+
+DEPENDS = "glib-2.0 libxau"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libtimezonemap/libtimezonemap_0.4.5.bb b/meta-openembedded/meta-gnome/recipes-gnome/libtimezonemap/libtimezonemap_0.4.5.bb
new file mode 100644
index 000000000..957d7d027
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libtimezonemap/libtimezonemap_0.4.5.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "Time zone map widget for Gtk+"
+HOMEPAGE = "https://launchpad.net/timezonemap"
+SECTION = "devel/lib"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "http://archive.ubuntu.com/ubuntu/pool/main/libt/${BPN}/${BPN}_${PV}.tar.gz \
+"
+SRC_URI[md5sum] = "054306fa998fe580f17b68aa1e16551b"
+SRC_URI[sha256sum] = "327e64a17c676c1bcda3b6ba3394d3d01250e5ac9a49222b9ff5737d90b15383"
+
+
+DEPENDS = "gtk+3 gdk-pixbuf libsoup-2.4 json-glib gnome-common-native \
+"
+
+B = "${S}"
+
+inherit distro_features_check autotools pkgconfig gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+do_configure_prepend() {
+ (cd ${S}; NOCONFIGURE="yes" . ${S}/autogen.sh)
+}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_3.20.1.bb b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_3.20.1.bb
new file mode 100644
index 000000000..02149fbec
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck3_3.20.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Window navigation construction toolkit"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
+
+BPN = "libwnck"
+
+SECTION = "x11/libs"
+DEPENDS = "intltool-native gnome-common-native gtk+3 gdk-pixbuf-native libxres"
+
+PACKAGECONFIG ??= "startup-notification"
+PACKAGECONFIG[startup-notification] = "--enable-startup-notification,--disable-startup-notification,startup-notification"
+
+inherit gnomebase gobject-introspection gtk-doc
+SRC_URI[archive.md5sum] = "487938d65d4bfae1f2501052b1bd7492"
+SRC_URI[archive.sha256sum] = "1cb03716bc477058dfdf3ebfa4f534de3b13b1aa067fcd064d0b7813291cba72"
+
+inherit distro_features_check
+# libxres means x11 only
+REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb
new file mode 100644
index 000000000..ea4c8df53
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libwnck/libwnck_2.31.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Window navigation construction toolkit"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
+
+SECTION = "x11/libs"
+DEPENDS = "intltool-native gnome-common-native gtk+ gdk-pixbuf-native libxres"
+
+PACKAGECONFIG ??= "startup-notification"
+PACKAGECONFIG[startup-notification] = "--enable-startup-notification,--disable-startup-notification,startup-notification"
+
+inherit gnomebase gobject-introspection distro_features_check
+REQUIRED_DISTRO_FEATURES = "x11"
+
+GNOME_COMPRESS_TYPE = "xz"
+SRC_URI[archive.md5sum] = "f03e1139296e2a3a92e3b65a3080cd32"
+SRC_URI[archive.sha256sum] = "83f732d20781fc88b22cdc6aaf2d4f388db6d3d4ff28d1a8fd45be9fb7743a9e"
+
+do_install_append() {
+ # to avoid conflicts with libwnck3 remove cmdline tools
+ # if the tools are requrired add libwnck3 to your image
+ rm ${D}${bindir}/wnckprop
+ rm ${D}${bindir}/wnck-urgency-monitor
+ rmdir ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libxklavier/files/fix-do_installe-failure.patch b/meta-openembedded/meta-gnome/recipes-gnome/libxklavier/files/fix-do_installe-failure.patch
new file mode 100644
index 000000000..29eeef3d5
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libxklavier/files/fix-do_installe-failure.patch
@@ -0,0 +1,36 @@
+From 2343283caf88d2390afee08fe034b4c970b20f2e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sat, 16 Apr 2016 06:40:04 -0400
+Subject: [PATCH] fix do_installe failure
+
+| 18 /usr/bin/install -c -m 644 ../../libxklavier-5.4/libxklavier/libxklavier.vapi
+libxklavier.deps 'tmp/work/corei7-64-wrs-linux/libxklavier/5.4-r0/image/
+usr/share/vala/vapi'
+| 19 /usr/bin/install: cannot stat '../../libxklavier-5.4/libxklavier/
+libxklavier.vapi': No such file or directory
+| 20 Makefile:621: recipe for target 'install-vapiDATA' failed
+| 21 make[3]: *** [install-vapiDATA] Error 1
+| 22 make[3]: *** Waiting for unfinished jobs....
+
+Upstream-Stauts: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ libxklavier/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libxklavier/Makefile.am b/libxklavier/Makefile.am
+index c9c1bbe..f0efa32 100644
+--- a/libxklavier/Makefile.am
++++ b/libxklavier/Makefile.am
+@@ -131,6 +131,6 @@ libxklavier.deps:
+ done
+
+ vapidir = $(datadir)/vala/vapi
+-vapi_DATA = $(VAPIGEN_VAPIS) $(VAPIGEN_VAPIS:.vapi=.deps)
++vapi_DATA = $(VAPIGEN_VAPIS:.vapi=.deps)
+ endif
+ endif
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/libxklavier/libxklavier_5.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/libxklavier/libxklavier_5.4.bb
new file mode 100644
index 000000000..2ef54f212
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/libxklavier/libxklavier_5.4.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Helper lib for keyboard management"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=6e29c688d912da12b66b73e32b03d812"
+
+DEPENDS = "xkbcomp gtk+ iso-codes libxi libxml2"
+
+inherit autotools pkgconfig gettext gobject-introspection distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+RDEPENDS_${PN} += "iso-codes xkbcomp"
+
+SRC_URI = " \
+ http://pkgs.fedoraproject.org/repo/pkgs/${BPN}/${BPN}-${PV}.tar.bz2/13af74dcb6011ecedf1e3ed122bd31fa/${BPN}-${PV}.tar.bz2 \
+ file://fix-do_installe-failure.patch \
+"
+SRC_URI[md5sum] = "13af74dcb6011ecedf1e3ed122bd31fa"
+SRC_URI[sha256sum] = "17a34194df5cbcd3b7bfd0f561d95d1f723aa1c87fca56bc2c209514460a9320"
+
+FILES_${PN} += "${datadir}/*"
+
+EXTRA_OECONF = "--with-xkb-bin-base=${bindir}"
+
+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
+}
+
+do_compile_append() {
+ sed -i -e s:${STAGING_DIR_TARGET}::g \
+ -e s:/${TARGET_SYS}::g \
+ libxklavier.pc
+}
+
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity/0001-drop-zenity-detection.patch b/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity/0001-drop-zenity-detection.patch
new file mode 100644
index 000000000..3493e511b
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity/0001-drop-zenity-detection.patch
@@ -0,0 +1,33 @@
+From ec0e52b49c9b6869413c9544c2ed44710ab91141 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sat, 14 Apr 2018 16:15:59 +0800
+Subject: [PATCH] drop zenity detection
+
+OE does not support zenity
+
+Upstream-Status: inappropriate [OE specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ configure.ac | 5 -----
+ 1 file changed, 5 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 5f9e7e9..80b32c7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -359,11 +359,6 @@ fi
+
+ AM_CONDITIONAL(HAVE_SM, test "$found_sm" = "yes")
+
+-AC_PATH_PROG(ZENITY, zenity, no)
+-if test x"$ZENITY" = xno; then
+- AC_MSG_ERROR([zenity not found in your path - needed for dialogs])
+-fi
+-
+ dnl **************************************************************************
+ dnl Check for Vulkan support
+ dnl **************************************************************************
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.38.0.bb b/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.38.0.bb
new file mode 100644
index 000000000..48fc9144d
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/metacity/metacity_3.38.0.bb
@@ -0,0 +1,34 @@
+SECTION = "x11/wm"
+SUMMARY = "Metacity is the boring window manager for the adult in you"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b4cce53560b8e619ffa7c830fb8761aa \
+ file://src/include/main.h;endline=24;md5=72148ede07a6dadd01de6a882d20a9ad"
+
+DEPENDS = "gsettings-desktop-schemas startup-notification \
+ gnome-doc-utils gdk-pixbuf-native \
+ gtk+3 glib-2.0 libcanberra libgtop intltool-native"
+
+inherit autotools gettext gnomebase distro_features_check
+# depends on startup-notification which depends on virtual/libx11
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "git://github.com/GNOME/metacity.git;branch=master \
+ file://0001-drop-zenity-detection.patch \
+"
+
+S = "${WORKDIR}/git"
+SRCREV = "c0d4b2fc0fcd6f2d3c37da935923f9e9ed5eb99f"
+
+EXTRA_OECONF += "--disable-xinerama"
+
+do_configure_prepend() {
+ cd ${S}
+ aclocal --install || exit 1
+ autoreconf --verbose --force --install -Wno-portability || exit 1
+ cd -
+
+}
+
+FILES_${PN} += "${datadir}/themes ${datadir}/gnome-control-center ${datadir}/gnome"
+RDEPENDS_${PN} += "gsettings-desktop-schemas"
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_3.18.5.bb b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_3.18.5.bb
new file mode 100644
index 000000000..8fdbf6ac2
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/nautilus/nautilus_3.18.5.bb
@@ -0,0 +1,29 @@
+SUMMARY = "File manager for GNOME"
+SECTION = "x11/gnome"
+
+LICENSE="GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=36cf660aea2b8beffba7945f44a7e748 \
+ file://COPYING.EXTENSIONS;md5=7579d6678402a1868631bf82c93ff0d4 \
+ file://COPYING.LIB;md5=f30a9716ef3762e3467a2f62bf790f0a"
+
+SRC_URI = "http://ftp.gnome.org/pub/GNOME/sources/nautilus/3.18/nautilus-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "0f578bda5655c0ce204befafca5803d7"
+SRC_URI[sha256sum] = "60a927c0522b4cced9d8f62baed2ee5e2fd4305be4523eb5bc44805971a6cc15"
+
+DEPENDS = "gtk+3 gnome-desktop3 gsettings-desktop-schemas glib-2.0-native intltool-native pango"
+
+inherit distro_features_check autotools pkgconfig gobject-introspection
+REQUIRED_DISTRO_FEATURES = "x11"
+
+EXTRA_OECONF = " \
+ --disable-gtk-doc \
+ --disable-update-mimedb \
+ --disable-nst-extension \
+ --enable-tracker=no \
+ --disable-schemas-compile \
+ --enable-xmp=no \
+ --enable-libexif=no \
+"
+
+FILES_${PN} += "${datadir}/*"
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-configure-use-foreign-mode-to-avoid-errors-with-miss.patch b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-configure-use-foreign-mode-to-avoid-errors-with-miss.patch
new file mode 100644
index 000000000..a8c5bc796
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-configure-use-foreign-mode-to-avoid-errors-with-miss.patch
@@ -0,0 +1,29 @@
+From eebe1f27f4b27b05eb4b9b55f9df1124acf4d092 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 1 Aug 2014 12:25:24 +0200
+Subject: [PATCH] configure: use 'foreign' mode to avoid errors with missing
+ NEWS/AUTHORS/etc
+
+Upstream-status: Pending
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 3d7eef6..1784bdd 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -41,7 +41,7 @@ VERSION=$WV_VERSION
+ PACKAGE=wv
+
+ dnl Initialize automake stuff
+-AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
++AM_INIT_AUTOMAKE([foreign])
+
+ # Specify a configuration file
+ AM_CONFIG_HEADER(config.h)
+--
+1.9.0
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-wvRTF.c-Specify-print-format-in-rtf_output.patch b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-wvRTF.c-Specify-print-format-in-rtf_output.patch
new file mode 100644
index 000000000..2fc3f367f
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/0001-wvRTF.c-Specify-print-format-in-rtf_output.patch
@@ -0,0 +1,26 @@
+From 079529b8d5e339e2211fa2f8c15543a738a627bc Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 14:50:51 -0700
+Subject: [PATCH] wvRTF.c: Specify print format in rtf_output()
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ wvRTF.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/wvRTF.c b/wvRTF.c
+index 361d258..4f24b30 100644
+--- a/wvRTF.c
++++ b/wvRTF.c
+@@ -192,7 +192,7 @@ output_rtfUserData (rtfUserData * ud)
+ rtf_output_char ('{');
+
+ /* font color */
+- rtf_output (rtfColors[ud->cCol]);
++ rtf_output ("%s", rtfColors[ud->cCol]);
+
+ /* font face */
+ rtf_output ("\\f%d", ud->cFont);
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/pkgconfig.patch b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/pkgconfig.patch
new file mode 100644
index 000000000..136d89341
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv-1.2.4/pkgconfig.patch
@@ -0,0 +1,13 @@
+Index: wv-1.2.0/wv-1.0.pc.in
+===================================================================
+--- wv-1.2.0.orig/wv-1.0.pc.in 2008-03-19 22:25:18.000000000 +0000
++++ wv-1.2.0/wv-1.0.pc.in 2008-03-19 22:26:32.000000000 +0000
+@@ -6,5 +6,6 @@
+ Name: wvWare
+ Description: Word Document Filter library and utilities
+ Version: @VERSION@
+-Libs: -L${libdir} -lwv @WMF_LIBS@ @XML_LIBS@ @GLIB_LIBS@ @GSF_LIBS@ @PNG_LIBS@ @ZLIB_LIBS@ @LIBS@ -lm
+-Cflags: -I${includedir}/wv @GSF_CFLAGS@
++Requires: libgsf-1
++Libs: -L${libdir} -lwv @WMF_LIBS@ @XML_LIBS@ @PNG_LIBS@ @ZLIB_LIBS@ @LIBS@ -lm
++Cflags: -I${includedir}/wv
diff --git a/meta-openembedded/meta-gnome/recipes-gnome/wv/wv_1.2.4.bb b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv_1.2.4.bb
new file mode 100644
index 000000000..8ed1fcd15
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-gnome/wv/wv_1.2.4.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Programs for accessing Microsoft Word documents"
+HOMEPAGE = "http://wvware.sourceforge.net/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6cbca01f1c9178aca280e8ff64d85b2f"
+
+DEPENDS = "libgsf glib-2.0 libpng"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wvware/wv-${PV}.tar.gz \
+ file://pkgconfig.patch \
+ file://0001-configure-use-foreign-mode-to-avoid-errors-with-miss.patch \
+ file://0001-wvRTF.c-Specify-print-format-in-rtf_output.patch \
+ "
+
+SRC_URI[md5sum] = "c1861c560491f121e12917fa76970ac5"
+SRC_URI[sha256sum] = "673109910e22d4cf94cc8be4dcb9a0c41b5fbdb1736d4b7bdc7778894d57c2d6"
+
+inherit autotools pkgconfig
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+EXTRA_OECONF = ""
diff --git a/meta-openembedded/meta-gnome/recipes-support/keybinder/keybinder_3.0.bb b/meta-openembedded/meta-gnome/recipes-support/keybinder/keybinder_3.0.bb
new file mode 100644
index 000000000..0a0a3e6b4
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/keybinder/keybinder_3.0.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "keybinder is a library for registering global key bindings, for gtk-based applications."
+HOMEPAGE = "https://github.com/engla/keybinder"
+LICENSE = "X11"
+SECTION = "devel/lib"
+DEPENDS = "gtk+3 gobject-introspection-native \
+ gtk+ \
+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=1f18f9c6d8b4cfcc7d7804a243a4c0b4"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "736ccef40d39603b8111c8a3a0bca0319bbafdc0"
+PV = "3.0+git${SRCPV}"
+SRC_URI = "git://github.com/engla/keybinder.git;branch=keybinder-3.0 \
+"
+
+RDEPENDS_${PN} = "gtk+"
+
+inherit distro_features_check autotools gtk-doc gobject-introspection
+
+REQUIRED_DISTRO_FEATURES = "x11"
+do_configure_prepend() {
+ touch ${S}/ChangeLog
+}
+
+SRC_DISTRIBUTE_LICENSES += "X11"
diff --git a/meta-openembedded/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch b/meta-openembedded/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
new file mode 100644
index 000000000..fda37895c
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/onboard/onboard/0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch
@@ -0,0 +1,67 @@
+From 1c95f64aa342147387ce4b1b7269a5c8b34bd898 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 09:01:04 -0700
+Subject: [PATCH] pypredict/lm: Define error API if platform does not have it
+
+error() API is not implemented across all libcs on linux
+e.g. musl does not provide it.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Onboard/pypredict/lm/lm.cpp | 1 -
+ Onboard/pypredict/lm/lm.h | 13 +++++++++++++
+ Onboard/pypredict/lm/lm_dynamic.cpp | 2 --
+ 3 files changed, 13 insertions(+), 3 deletions(-)
+
+diff --git a/Onboard/pypredict/lm/lm.cpp b/Onboard/pypredict/lm/lm.cpp
+index 2e64296..37ae241 100644
+--- a/Onboard/pypredict/lm/lm.cpp
++++ b/Onboard/pypredict/lm/lm.cpp
+@@ -19,7 +19,6 @@
+
+ #include <stdlib.h>
+ #include <stdio.h>
+-#include <error.h>
+ #include <algorithm>
+ #include <cmath>
+ #include <string>
+diff --git a/Onboard/pypredict/lm/lm.h b/Onboard/pypredict/lm/lm.h
+index ed4164a..b8b63ee 100644
+--- a/Onboard/pypredict/lm/lm.h
++++ b/Onboard/pypredict/lm/lm.h
+@@ -32,6 +32,19 @@
+ #include <algorithm>
+ #include <string>
+
++#if defined(HAVE_ERROR_H)
++#include <error.h>
++#else
++#include <err.h>
++#define _onboard_error(S, E, F, ...) do { \
++ if (E) \
++ err(S, F ": %s", ##__VA_ARGS__, strerror(E)); \
++ else \
++ err(S, F, ##__VA_ARGS__); \
++} while(0)
++
++#define error _onboard_error
++#endif
+
+ // break into debugger
+ // step twice to come back out of the raise() call into known code
+diff --git a/Onboard/pypredict/lm/lm_dynamic.cpp b/Onboard/pypredict/lm/lm_dynamic.cpp
+index 7c62824..e7c7f40 100644
+--- a/Onboard/pypredict/lm/lm_dynamic.cpp
++++ b/Onboard/pypredict/lm/lm_dynamic.cpp
+@@ -17,8 +17,6 @@
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+-#include <error.h>
+-
+ #include "lm_dynamic.h"
+
+ using namespace std;
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb b/meta-openembedded/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
new file mode 100644
index 000000000..4e49becc4
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/onboard/onboard_1.4.1.bb
@@ -0,0 +1,29 @@
+SUMMARY = "An onscreen keyboard"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.GPL3;md5=8521fa4dd51909b407c5150498d34f4e"
+
+DEPENDS += "gtk+3 hunspell libcanberra libxkbfile dconf python3-distutils-extra-native intltool-native"
+
+SRC_URI = "https://launchpad.net/onboard/1.4/${PV}/+download/${BPN}-${PV}.tar.gz \
+ file://0001-pypredict-lm-Define-error-API-if-platform-does-not-h.patch \
+ "
+SRC_URI[md5sum] = "1a2fbe82e934f5b37841d17ff51e80e8"
+SRC_URI[sha256sum] = "01cae1ac5b1ef1ab985bd2d2d79ded6fc99ee04b1535cc1bb191e43a231a3865"
+
+inherit distro_features_check setuptools3 pkgconfig gtk-icon-cache gsettings
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+FILES_${PN} += " \
+ ${datadir}/dbus-1 \
+ ${datadir}/icons \
+ ${datadir}/gnome-shell \
+ ${datadir}/help \
+"
+
+RDEPENDS_${PN} += " \
+ ncurses \
+ python3-dbus \
+ python3-pycairo \
+ python3-pygobject \
+"
diff --git a/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-Makefile.am-Link-with-libm-for-powl-API.patch b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-Makefile.am-Link-with-libm-for-powl-API.patch
new file mode 100644
index 000000000..76640b0a1
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-Makefile.am-Link-with-libm-for-powl-API.patch
@@ -0,0 +1,26 @@
+From fda0ff49968aebc7b27f9711cf6eb7f6c560adc1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jul 2017 18:28:15 -0700
+Subject: [PATCH] Makefile.am: Link with libm for powl() API
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 4219f28..2a5ceac 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -69,7 +69,7 @@ dist_pkgdata_DATA = usermode.ui
+ userhelper_SOURCES = userhelper.c userhelper.h shvar.c shvar.h
+ userhelper_CPPFLAGS = $(AM_CPPFLAGS) -DSYSCONFDIR='"$(sysconfdir)"'
+ userhelper_LDADD = liblib.a $(LIBUSER_LIBS) $(GLIB_LIBS) $(PAM_LIBS) \
+- $(SELINUX_LIBS) $(EFENCE_LIBS)
++ $(SELINUX_LIBS) $(EFENCE_LIBS) -lm
+
+ userinfo_SOURCES = userinfo.c
+ userinfo_CPPFLAGS = $(AM_CPPFLAGS) $(PIXMAPDIR_CPPFLAGS) $(SBINDIR_CPPFLAGS) \
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-fix-compile-failure-against-musl-C-library.patch b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-fix-compile-failure-against-musl-C-library.patch
new file mode 100644
index 000000000..bf19f284c
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-fix-compile-failure-against-musl-C-library.patch
@@ -0,0 +1,27 @@
+From c77e3f0d4560797f7dc56549ae5ebcc035714a4d Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 20 Jul 2017 23:20:53 -0400
+Subject: [PATCH] fix compile failure against musl C library
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ usermount.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/usermount.c b/usermount.c
+index 3aafadd..4107027 100644
+--- a/usermount.c
++++ b/usermount.c
+@@ -46,6 +46,7 @@
+ #include <limits.h>
+ #include <locale.h>
+ #include <mntent.h>
++#include <paths.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-formatting-issues.patch b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-formatting-issues.patch
new file mode 100644
index 000000000..9d512d439
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode/0001-formatting-issues.patch
@@ -0,0 +1,34 @@
+From 7a316dad0697af2ef4e8079a5af51565a8195aa6 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 24 Jul 2017 01:42:30 -0400
+Subject: [PATCH] userhelper.c: fix formatting issues
+
+Fixed when compile with "-Wformat -Wformat-security -Werror=format-security":
+|../usermode-1.111/userhelper.c:585:4: error: format not a string
+literal and no format arguments [-Werror=format-security]
+| text = g_strdup_printf(dgettext(data->domain, data->banner));
+| ^~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ userhelper.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/userhelper.c b/userhelper.c
+index 76ad492..ee0da49 100644
+--- a/userhelper.c
++++ b/userhelper.c
+@@ -582,7 +582,7 @@ converse_console(int num_msg, const struct pam_message **msg,
+
+ if (banner == 0) {
+ if ((data->banner != NULL) && (data->domain != NULL)) {
+- text = g_strdup_printf(dgettext(data->domain, data->banner));
++ text = g_strdup_printf("%s", dgettext(data->domain, data->banner));
+ } else {
+ if ((service != NULL) && (strlen(service) > 0)) {
+ if (data->fallback_allowed) {
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-gnome/recipes-support/usermode/usermode_1.111.bb b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode_1.111.bb
new file mode 100644
index 000000000..3aea2e6bb
--- /dev/null
+++ b/meta-openembedded/meta-gnome/recipes-support/usermode/usermode_1.111.bb
@@ -0,0 +1,30 @@
+DESCRIPTION = "The usermode contains the userhelper program, which can be used to allow configured \
+programs to be run with superuser privileges by ordinary users, and several \
+graphical tools for users: \
+* userinfo allows users to change their finger information. \
+* usermount lets users mount, unmount, and format filesystems. \
+* userpasswd allows users to change their passwords. \
+"
+HOMEPAGE = "https://pagure.io/usermode"
+LICENSE = "GPLv2+"
+DEPENDS = "libuser ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)} \
+ gtk+ desktop-file-utils-native \
+ startup-notification intltool-native \
+ util-linux \
+"
+
+SRC_URI = "https://releases.pagure.org/${BPN}/${BPN}-${PV}.tar.xz \
+ file://0001-formatting-issues.patch \
+ file://0001-fix-compile-failure-against-musl-C-library.patch \
+ file://0001-Makefile.am-Link-with-libm-for-powl-API.patch \
+ "
+SRC_URI[md5sum] = "28ba510fbd8da9f4e86e57d6c31cff29"
+SRC_URI[sha256sum] = "3dd0b9639b5bd396b7ea5fada6aaa694dbfdaa3ad06eb95a6eabcdfd02f875c6"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+inherit distro_features_check autotools gettext pkgconfig
+
+EXTRA_OEMAKE += "INSTALL='install -p'"
+
+REQUIRED_DISTRO_FEATURES = "x11 pam"
diff --git a/meta-openembedded/meta-gnome/site/arm-64 b/meta-openembedded/meta-gnome/site/arm-64
new file mode 100644
index 000000000..f474d2cc4
--- /dev/null
+++ b/meta-openembedded/meta-gnome/site/arm-64
@@ -0,0 +1,13 @@
+# ORBit2
+ac_cv_alignof_CORBA_boolean=1
+ac_cv_alignof_CORBA_char=1
+ac_cv_alignof_CORBA_double=8
+ac_cv_alignof_CORBA_float=4
+ac_cv_alignof_CORBA_long=4
+ac_cv_alignof_CORBA_long_double=8
+ac_cv_alignof_CORBA_long_long=8
+ac_cv_alignof_CORBA_octet=1
+ac_cv_alignof_CORBA_pointer=4
+ac_cv_alignof_CORBA_short=2
+ac_cv_alignof_CORBA_struct=1
+ac_cv_alignof_CORBA_wchar=2
diff --git a/meta-openembedded/meta-gnome/site/riscv64-linux b/meta-openembedded/meta-gnome/site/riscv64-linux
new file mode 100644
index 000000000..e3a41ea0e
--- /dev/null
+++ b/meta-openembedded/meta-gnome/site/riscv64-linux
@@ -0,0 +1,16 @@
+# libidl
+libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
+
+# ORBit2
+ac_cv_alignof_CORBA_boolean=1
+ac_cv_alignof_CORBA_char=1
+ac_cv_alignof_CORBA_double=8
+ac_cv_alignof_CORBA_float=4
+ac_cv_alignof_CORBA_long=4
+ac_cv_alignof_CORBA_long_double=8
+ac_cv_alignof_CORBA_long_long=8
+ac_cv_alignof_CORBA_octet=1
+ac_cv_alignof_CORBA_pointer=4
+ac_cv_alignof_CORBA_short=2
+ac_cv_alignof_CORBA_struct=1
+ac_cv_alignof_CORBA_wchar=2
diff --git a/meta-openembedded/meta-gnome/site/x86_64-linux b/meta-openembedded/meta-gnome/site/x86_64-linux
new file mode 100644
index 000000000..eba1fee2b
--- /dev/null
+++ b/meta-openembedded/meta-gnome/site/x86_64-linux
@@ -0,0 +1,17 @@
+# ORBit2
+ac_cv_alignof_CORBA_boolean=1
+ac_cv_alignof_CORBA_char=1
+ac_cv_alignof_CORBA_double=8
+ac_cv_alignof_CORBA_float=4
+ac_cv_alignof_CORBA_long=4
+ac_cv_alignof_CORBA_long_double=8
+ac_cv_alignof_CORBA_long_long=8
+ac_cv_alignof_CORBA_octet=1
+ac_cv_alignof_CORBA_pointer=8
+ac_cv_alignof_CORBA_short=2
+ac_cv_alignof_CORBA_struct=1
+ac_cv_alignof_CORBA_wchar=2
+
+lf_cv_sane_realloc=yes
+as_cv_unaligned_access=${as_cv_unaligned_access=yes}
+
diff --git a/meta-openembedded/meta-initramfs/COPYING.MIT b/meta-openembedded/meta-initramfs/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/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-initramfs/README b/meta-openembedded/meta-initramfs/README
new file mode 100644
index 000000000..718538312
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/README
@@ -0,0 +1,36 @@
+meta-initramfs
+==============
+
+This layer contains the metadata necessary to build the klibc library and
+utilities (shared and static) plus other tools useful for the creation of
+small-sized initramfs.
+
+
+Dependencies
+------------
+
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+branch: master
+revision: HEAD
+
+
+Maintenance
+-----------
+
+Send patches / pull requests to openembedded-devel@lists.openembedded.org
+with '[meta-initramfs]' in the subject.
+
+When sending single patches, please using something like:
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-initramfs][PATCH'
+
+Interm layer maintainer: Armin Kuster <akuster808@gmail.com>
+
+
+License
+-------
+
+All metadata is MIT licensed unless otherwise stated. Source code included
+in tree for individual recipes is under the LICENSE stated in each recipe
+(.bb file) unless otherwise stated.
diff --git a/meta-openembedded/meta-initramfs/classes/klibc.bbclass b/meta-openembedded/meta-initramfs/classes/klibc.bbclass
new file mode 100644
index 000000000..b7b72b728
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/classes/klibc.bbclass
@@ -0,0 +1,16 @@
+# klcc-cross depends on klibc
+DEPENDS =+ "klcc-cross"
+
+# Default for klcc is to build static binaries.
+# Set CC = "${TARGET_PREFIX}klcc -shared" to build the dynamic version.
+CC_forcevariable = "${TARGET_PREFIX}klcc ${TOOLCHAIN_OPTIONS}"
+CC_forcevariable_armv4_linux-gnueabi = "${TARGET_PREFIX}klcc ${TOOLCHAIN_OPTIONS} -march=armv4 -mthumb-interwork"
+CC_append_armv7ve = " ${@' -mfloat-abi=${TUNE_CCARGS_MFLOAT}' if (d.getVar('TUNE_CCARGS_MFLOAT') != '') else ''}"
+CC_append_armv7a = " ${@' -mfloat-abi=${TUNE_CCARGS_MFLOAT}' if (d.getVar('TUNE_CCARGS_MFLOAT') != '') else ''}"
+
+CPP_forcevariable = "${CC} -E"
+
+# klcc uses own optimizations by default. See klcc(1) man file.
+export CFLAGS="${TUNE_CCARGS}"
+export CPPFLAGS="${TUNE_CCARGS}"
+export LDFLAGS="${TUNE_CCARGS}"
diff --git a/meta-openembedded/meta-initramfs/conf/layer.conf b/meta-openembedded/meta-initramfs/conf/layer.conf
new file mode 100644
index 000000000..97afc9374
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/conf/layer.conf
@@ -0,0 +1,23 @@
+# Layer configuration for meta-initramfs layer
+
+# 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 += "meta-initramfs"
+BBFILE_PATTERN_meta-initramfs := "^${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_meta-initramfs = "8"
+LAYERDEPENDS_meta-initramfs = "core"
+
+LAYERSERIES_COMPAT_meta-initramfs = "sumo"
+
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
+ dracut->virtual/kernel \
+"
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-debug-image.bb b/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-debug-image.bb
new file mode 100644
index 000000000..be7350ade
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-debug-image.bb
@@ -0,0 +1,22 @@
+# Simple initramfs image. Mostly used for live images.
+DESCRIPTION = "Small image capable of booting a device. The kernel includes \
+the Minimal RAM-based Initial Root Filesystem (initramfs), which one can use \
+to check the hardware efficiently."
+
+PACKAGE_INSTALL = "initramfs-debug busybox base-passwd ${ROOTFS_BOOTSTRAP_INSTALL}"
+
+# Do not pollute the initrd image with rootfs features
+IMAGE_FEATURES = ""
+
+export IMAGE_BASENAME = "initramfs-debug-image"
+IMAGE_LINGUAS = ""
+
+LICENSE = "MIT"
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+inherit core-image
+
+IMAGE_ROOTFS_SIZE = "8192"
+IMAGE_ROOTFS_EXTRA_SPACE = "0"
+
+BAD_RECOMMENDATIONS += "busybox-syslog"
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-image.bb b/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-image.bb
new file mode 100644
index 000000000..2573eb481
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-image.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Initramfs image for kexecboot kernel"
+DESCRIPTION = "This image provides kexecboot (linux as bootloader) and helpers."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit image
+
+IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}"
+
+# avoid circular dependencies
+EXTRA_IMAGEDEPENDS = ""
+KERNELDEPMODDEPEND = ""
+
+# We really need just kexecboot, kexec and ubiattach
+IMAGE_INSTALL = "kexecboot kexec mtd-utils-ubifs"
+
+# Do not pollute the initrd image with rootfs features
+IMAGE_FEATURES = ""
+
+IMAGE_LINGUAS = ""
+
+FEED_DEPLOYDIR_BASE_URI = ""
+LDCONFIGDEPEND = ""
+IMAGE_ROOTFS_EXTRA_SPACE = "0"
+
+# disable runtime dependency on run-postinsts -> update-rc.d
+ROOTFS_BOOTSTRAP_INSTALL = ""
+
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-klibc-image.bb b/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-klibc-image.bb
new file mode 100644
index 000000000..3a8d9f743
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/images/initramfs-kexecboot-klibc-image.bb
@@ -0,0 +1,12 @@
+require initramfs-kexecboot-image.bb
+
+SUMMARY = "Initramfs image for kexecboot kernel (klibc-static binaries)"
+
+# We really need just kexecboot, kexec and ubiattach
+# statically compiled against klibc
+IMAGE_INSTALL = "kexecboot-klibc kexec-klibc ubiattach-klibc"
+
+python () {
+ if d.getVar('TARGET_ARCH') == "nios2":
+ raise bb.parse.SkipRecipe("'nios2' not supported arch")
+}
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/files/init-debug.sh b/meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/files/init-debug.sh
new file mode 100644
index 000000000..7edbd70cb
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/files/init-debug.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+do_mount_fs() {
+ grep -q "$1" /proc/filesystems || return
+ test -d "$2" || mkdir -p "$2"
+ mount -t "$1" "$1" "$2"
+}
+
+do_mknod() {
+ test -e "$1" || mknod "$1" "$2" "$3" "$4"
+}
+
+mkdir -p /proc
+mount -t proc proc /proc
+
+do_mount_fs sysfs /sys
+do_mount_fs debugfs /sys/kernel/debug
+do_mount_fs devtmpfs /dev
+do_mount_fs devpts /dev/pts
+do_mount_fs tmpfs /dev/shm
+
+mkdir -p /run
+mkdir -p /var/run
+
+do_mknod /dev/console c 5 1
+do_mknod /dev/null c 1 3
+do_mknod /dev/zero c 1 5
+
+exec sh </dev/console >/dev/console 2>/dev/console
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/initramfs-debug_1.0.bb b/meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/initramfs-debug_1.0.bb
new file mode 100644
index 000000000..667690f88
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/initrdscripts/initramfs-debug_1.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Extremely basic live image init script"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+SRC_URI = "file://init-debug.sh"
+
+S = "${WORKDIR}"
+
+do_install() {
+ install -m 0755 ${WORKDIR}/init-debug.sh ${D}/init
+}
+
+inherit allarch
+
+FILES_${PN} += " /init "
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg/icon.xpm b/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg/icon.xpm
new file mode 100644
index 000000000..6e6fd776d
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg/icon.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * icon_xpm[] = {
+"32 32 8 1",
+" c None",
+". c #D6DBDE",
+"+ c #9BA6AE",
+"@ c #60727D",
+"# c #B8BFC5",
+"$ c #A9E8F6",
+"% c #12BCE4",
+"& c #57D2EC",
+" ",
+" ",
+" ",
+" .++@@@@++. ",
+" +@@@@@@@@@@@@+ ",
+" #@@@@@@@@@@@@@@@@# ",
+" +@@@@@@@@@@@@@@@@@@+ ",
+" .@@@@@@@@++##+@@@@@@@@@. ",
+" @@@@@@@. .@@@@@@@ ",
+" +@@@@@+ $$$$ #@@@@@+ ",
+" #@@@@@. $%%%%%%%%$ .@@@@@# ",
+" @@@@@. &%%%%%%%%%%& .@@@@@ ",
+" #@@@@+ %%%%%%%%%%%%%% +@@@@# ",
+" @@@@@ &%%%%%%%%%%%%%%& @@@@@ ",
+".@@@@. $%%%%%& $%%%%%& .@@@@.",
+"+@@@@ %%%%% $%%%%%& @@@@+",
+"+@@@+ %%%%$ $%%%%%& $$ +@@@+",
+"@@@@+ $%%%% $%%%%%& $%$ +@@@@",
+"@@@@# &%%%& &%%%%& $%%& #@@@@",
+"@@@@. &%%%& %%%%& $%%%& .@@@@",
+"@@@@# $%%%& &%%& &%%%$ #@@@@",
+"+@@@+ $%%%% %%%%$ +@@@+",
+"+@@@@ %%%%& &%%%% @@@@+",
+"#@@@@ &%%%%& &%%%%& @@@@#",
+" @@@@+ %%%%%%&$$&%%%%%% +@@@@ ",
+" +@@@@. $%%%%%%%%%%%%%%$ .@@@@+ ",
+" .@@@@@ $%%%%%%%%%%%%$ @@@@@. ",
+" #++++. &%%%%%%%%& .++++# ",
+" $&&%%&&$ ",
+" ",
+" ",
+" "};
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg_0.2.bb b/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg_0.2.bb
new file mode 100644
index 000000000..804ec3235
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot-cfg_0.2.bb
@@ -0,0 +1,60 @@
+SUMMARY = "Configuration files for kexecboot"
+DESCRIPTION = "Default icon and boot.cfg for kexecboot linux-as-bootloader."
+SECTION = "base"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+SRC_URI = "file://icon.xpm"
+
+S = "${WORKDIR}"
+
+do_install_prepend () {
+echo '# /boot/boot.cfg - KEXECBOOT configuration file.
+#
+# First kernel stanza.
+# Show this label in kexecboot menu.
+#
+LABEL=${KEXECBOOT_LABEL}
+#
+# Specify full kernel path on target.
+KERNEL=/boot/${KERNEL_IMAGETYPE}
+#
+# Append this tags to the kernel cmdline.
+APPEND=${CMDLINE} ${CMDLINE_DEBUG}
+#
+# Specify optional initrd/initramfs.
+# INITRD=/boot/initramfs.cpio.gz
+#
+# Specify full path for a custom icon for the menu-item.
+# If not set, use device-icons as default (NAND, SD, CF, ...).
+# ICON=/boot/icon.xpm
+#
+# Priority of item in kexecboot menu.
+# Items with highest priority will be shown at top of menu.
+# Default: 0 (lowest, ordered by device ordering)
+# PRIORITY=10
+#
+#
+# Second kernel stanza.
+# LABEL=${KEXECBOOT_LABEL}-test
+# KERNEL=/boot/${KERNEL_IMAGETYPE}-test
+# APPEND=${CMDLINE}
+#' > ${S}/boot.cfg
+}
+do_install () {
+ install -d ${D}/boot
+ install -m 0644 boot.cfg ${D}/boot/boot.cfg
+ install -m 0644 icon.xpm ${D}/boot/icon.xpm
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FILES_${PN} += "/boot/*"
+
+CMDLINE ?= ""
+CMDLINE_DEBUG ?= "quiet"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+# Note: for qvga the label is currently limited to about 24 chars
+KEXECBOOT_LABEL ?= "${@d.getVar('DISTRO') or d.getVar('DISTRO_VERSION')}-${MACHINE}"
diff --git a/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot_git.bb b/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot_git.bb
new file mode 100644
index 000000000..9f5dad7c6
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-bsp/kexecboot/kexecboot_git.bb
@@ -0,0 +1,64 @@
+###########################
+# Configure options:
+#
+# --enable-static-linking compile kexecboot as static executable [default=no]
+# --enable-fbui support framebuffer menu [default=yes]
+# --enable-fbui-width limit FB UI width to specified value [default=no]
+# --enable-fbui-height limit FB UI height to specified value [default=no]
+# --enable-textui support console text user interface [default=no]
+# --enable-cfgfiles support config files [default=yes]
+# --enable-icons support custom icons (depends on fbui) [default=yes]
+# --enable-zaurus compile Sharp Zaurus specific code [default=no]
+# --enable-zimage compile with zImage support [default=yes]
+# --enable-uimage compile with uImage support [default=no]
+# --enable-machine-kernel look for machine-specific zImage kernel [default=no]
+# --enable-devices-recreating
+# enable devices re-creating [default=yes]
+# --enable-debug enable debug output [default=no]
+# --enable-host-debug allow for non-destructive executing of kexecboot on
+# host system [default=no]
+# --enable-numkeys enable menu item selection by keys [0-9] [default=yes]
+# --enable-bg-buffer enable buffer for pre-drawed FB GUI background
+#
+# --enable-timeout allow to boot 1st kernel after timeout in seconds
+# [default=no]
+# --enable-delay specify delay before device scanning, allowing
+# initialization of old CF/SD cards [default=1]
+# --enable-bpp enable support of specified bpp modes
+# (all,32,24,18,16,4,2,1) [default=all]
+# --enable-evdev-rate change evdev (keyboard/mouse) repeat rate
+# in milliseconds e.g. "1000,250" [default=no]
+# --with-kexec-binary look for kexec binary at path
+# [default="/usr/sbin/kexec"]
+##########################
+SUMMARY = "kexecboot linux-as-bootloader"
+DESCRIPTION = "kexecboot is a graphical linux-as-bootloader implementation based on kexec."
+HOMEPAGE = "http://kexecboot.org"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+PV = "0.6+git${SRCPV}"
+S = "${WORKDIR}/git"
+SRC_URI = "git://github.com/kexecboot/kexecboot.git"
+SRCREV = "4c4f127e79ac5b8d6b6e2fbb938ccbf12b04c531"
+inherit autotools
+
+EXTRA_OECONF = "--enable-textui --enable-delay=2 --enable-evdev-rate=1000,250"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 kexecboot ${D}${bindir}
+ install -d ${D}/proc
+ install -d ${D}/mnt
+ install -d ${D}/dev
+ install -d ${D}/sys
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FILES_${PN} += " ${bindir}/kexecboot /init /proc /mnt /dev /sys"
+
+pkg_postinst_${PN} () {
+ ln -sf ${bindir}/kexecboot $D/init
+}
+
+BBCLASSEXTEND = "klibc"
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut/0001-util.h-include-sys-reg.h-when-libc-glibc.patch b/meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut/0001-util.h-include-sys-reg.h-when-libc-glibc.patch
new file mode 100644
index 000000000..32714038b
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut/0001-util.h-include-sys-reg.h-when-libc-glibc.patch
@@ -0,0 +1,33 @@
+From 06011ce55b1e892e863568a73d64eebc6389544f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 17:14:05 -0700
+Subject: [PATCH] util.h: include <sys/reg.h> when libc != glibc
+
+For musl libc it is required to include <sys/reg.h> to
+have __WORDSIZE defined to e.g. 32 for arm*-musl.
+
+Taken from void-linux
+https://github.com/voidlinux/void-packages/blob/master/srcpkgs/dracut/patches/musl-__wordsize.patch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ install/util.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/install/util.h b/install/util.h
+index 2ad3254d..062626ec 100644
+--- a/install/util.h
++++ b/install/util.h
+@@ -36,6 +36,9 @@
+ #include <sys/stat.h>
+ #include <dirent.h>
+ #include <sys/resource.h>
++#if !defined(__GLIBC__)
++#include <sys/reg.h>
++#endif
+
+ #include "macro.h"
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut_git.bb b/meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut_git.bb
new file mode 100644
index 000000000..ccf9f6ab1
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/dracut/dracut_git.bb
@@ -0,0 +1,69 @@
+SUMMARY = "Initramfs generator using udev"
+HOMEPAGE = "https://dracut.wiki.kernel.org/index.php/Main_Page"
+DESCRIPTION = "Dracut is an event driven initramfs infrastructure. dracut (the tool) is used to create an initramfs image by copying tools and files from an installed system and combining it with the dracut framework, usually found in /usr/lib/dracut/modules.d."
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+PE = "1"
+PV = "046+git${SRCREV}"
+
+# v046 tag
+SRCREV = "a0799ffb554487a370c2a1adafaedd2021b6dc8c"
+SRC_URI = "git://git.kernel.org/pub/scm/boot/dracut/dracut.git;protocol=http \
+ file://0001-util.h-include-sys-reg.h-when-libc-glibc.patch \
+ "
+
+DEPENDS += "kmod"
+DEPENDS_append_libc-musl = " fts"
+
+inherit bash-completion pkgconfig
+
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF = "--prefix=${prefix} \
+ --libdir=${prefix}/lib \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sbindir=${sbindir} \
+ --disable-documentation \
+ --bindir=${bindir} \
+ --includedir=${includedir} \
+ --localstatedir=${localstatedir} \
+ "
+
+# RDEPEND on systemd optionally
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,,,systemd"
+
+EXTRA_OEMAKE += 'libdir=${prefix}/lib LDLIBS="${LDLIBS}"'
+
+LDLIBS_append_libc-musl = " -lfts"
+
+do_configure() {
+ ./configure ${EXTRA_OECONF}
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+ # Its Makefile uses cp -arx to install modules.d, so fix the owner
+ # to root:root
+ chown -R root:root ${D}/${prefix}/lib/dracut/modules.d
+}
+
+FILES_${PN} += "${prefix}/lib/kernel \
+ ${prefix}/lib/dracut \
+ ${systemd_unitdir} \
+ "
+FILES_${PN}-dbg += "${prefix}/lib/dracut/.debug"
+
+CONFFILES_${PN} += "${sysconfdir}/dracut.conf"
+
+RDEPENDS_${PN} = "findutils cpio util-linux-blkid util-linux-getopt util-linux bash ldd"
+
+# This could be optimized a bit, but let's avoid non-booting systems :)
+RRECOMMENDS_${PN} = " \
+ kernel-modules \
+ busybox \
+ coreutils \
+ "
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0001-Add-another-variable-LIBS-to-provides-libraries-from.patch b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0001-Add-another-variable-LIBS-to-provides-libraries-from.patch
new file mode 100644
index 000000000..1b1a993a0
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0001-Add-another-variable-LIBS-to-provides-libraries-from.patch
@@ -0,0 +1,26 @@
+From 22afaa21b4b258082be591e54c99e1ba6fbd7748 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 10:19:22 -0700
+Subject: [PATCH 1/2] Add another variable LIBS to provides libraries from env
+
+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 ac14404..92a8e73 100644
+--- a/Makefile
++++ b/Makefile
+@@ -27,7 +27,7 @@ RPM_OPT_FLAGS ?= -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector
+ CFLAGS += $(RPM_OPT_FLAGS) -std=gnu99 -Wall -Werror -Wno-error=unused-function -Wno-unused-function -ggdb
+ LDFLAGS :=
+
+-grubby_LIBS = -lblkid -lpopt
++grubby_LIBS = -lblkid -lpopt ${LIBS}
+
+ all: grubby
+
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0002-include-paths.h-for-_PATH_MOUNTED.patch b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0002-include-paths.h-for-_PATH_MOUNTED.patch
new file mode 100644
index 000000000..de8133a3a
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/0002-include-paths.h-for-_PATH_MOUNTED.patch
@@ -0,0 +1,25 @@
+From 8f844ac7f44b8dc428d06cd6958c5f32d383d01c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 10:19:50 -0700
+Subject: [PATCH 2/2] include paths.h for _PATH_MOUNTED
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ grubby.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/grubby.c b/grubby.c
+index 47a1a15..59f74a9 100644
+--- a/grubby.c
++++ b/grubby.c
+@@ -34,6 +34,7 @@
+ #include <libgen.h>
+ #include <execinfo.h>
+ #include <signal.h>
++#include <paths.h>
+ #include <blkid/blkid.h>
+
+ #include "log.h"
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/grubby-rename-grub2-editenv-to-grub-editenv.patch b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/grubby-rename-grub2-editenv-to-grub-editenv.patch
new file mode 100644
index 000000000..d936249be
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/grubby-rename-grub2-editenv-to-grub-editenv.patch
@@ -0,0 +1,69 @@
+From 0841706a5b5280e501c8e392c70c466c5fbcf0aa Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Tue, 4 Aug 2015 23:54:41 -0700
+Subject: [PATCH] rename grub2-editenv to grub-editenv
+
+We don't use the name grub2-editenv for grub2.
+
+Upstream-Status: Inappropriate
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ grubby.c | 4 ++--
+ test.sh | 6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/grubby.c b/grubby.c
+index d4ebb86..47a1a15 100644
+--- a/grubby.c
++++ b/grubby.c
+@@ -290,7 +290,7 @@ static char *grub2GetEnv(struct configFileInfo *info, char *name)
+ char *s = NULL;
+ char *ret = NULL;
+ char *envFile = info->envFile ? info->envFile : "/boot/grub2/grubenv";
+- int rc = asprintf(&s, "grub2-editenv %s list | grep '^%s='", envFile, name);
++ int rc = asprintf(&s, "grub-editenv %s list | grep '^%s='", envFile, name);
+
+ if (rc < 0)
+ return NULL;
+@@ -361,7 +361,7 @@ static int grub2SetEnv(struct configFileInfo *info, char *name, char *value)
+ if (!value)
+ return -1;
+
+- rc = asprintf(&s, "grub2-editenv %s set '%s=%s'", envFile, name, value);
++ rc = asprintf(&s, "grub-editenv %s set '%s=%s'", envFile, name, value);
+ free(value);
+ if (rc <0)
+ return -1;
+diff --git a/test.sh b/test.sh
+index 6379698..f738388 100755
+--- a/test.sh
++++ b/test.sh
+@@ -574,7 +574,7 @@ if [ "$testgrub2" == "y" ]; then
+ --title='title' --initrd=/boot/new-initrd --boot-filesystem=/boot/ \
+ --copy-default
+ commandTest "saved_default output" \
+- "grub2-editenv test/grub2-support_files/env_temp list" \
++ "grub-editenv test/grub2-support_files/env_temp list" \
+ "saved_entry=Linux, with Fedora 2.6.38.8-32.fc15.x86_64"
+
+ testing="GRUB2 add kernel with default=saved_entry and a terrible title"
+@@ -587,13 +587,13 @@ if [ "$testgrub2" == "y" ]; then
+ testing="GRUB2 set default with default=saved_entry and a terrible name"
+ grub2Test grub2.9 add/g2-1.9 --env grubenv.1 --set-default-index=0
+ commandTest "saved_default output" \
+- "grub2-editenv test/grub2-support_files/env_temp list" \
++ "grub-editenv test/grub2-support_files/env_temp list" \
+ 'saved_entry=Fedora (3.10.3-300.fc19.x86_64) 19 (Schrödinger’s Cat)'
+
+ testing="GRUB2 set default with default=saved_entry"
+ grub2Test grub2.8 add/g2-1.8 --env grubenv.1 --set-default-index=0
+ commandTest "saved_default output" \
+- "grub2-editenv test/grub2-support_files/env_temp list" \
++ "grub-editenv test/grub2-support_files/env_temp list" \
+ "saved_entry=title"
+
+ testing="GRUB2 --default-index with default=saved_entry"
+--
+2.3.5
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/run-ptest b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/run-ptest
new file mode 100644
index 000000000..b06ac5946
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+./test.sh -v
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby_8.40.bb b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby_8.40.bb
new file mode 100644
index 000000000..dc3a70bb5
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/grubby/grubby_8.40.bb
@@ -0,0 +1,40 @@
+SUMMARY = "A command line tool for updating and displaying info about boot loaders"
+DESCRIPTION = "grubby is a command line tool for updating and displaying information \
+about the configuration files for the grub, lilo, elilo (ia64), yaboot (powerpc) and \
+zipl (s390) boot loaders. It is primarily designed to be used from scripts which install \
+new kernels and need to find information about the current boot environment. \
+"
+HOMEPAGE = "https://github.com/rhboot/grubby"
+LICENSE = "GPLv2+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=892f569a555ba9c07a568a7c0c4fa63a"
+
+DEPENDS = "popt util-linux"
+DEPENDS_append_libc-musl = " libexecinfo"
+
+S = "${WORKDIR}/git"
+SRCREV = "79c5cfa02c567efdc5bb18cdd584789e2e35aa23"
+SRC_URI = "git://github.com/rhboot/grubby.git;protocol=https; \
+ file://grubby-rename-grub2-editenv-to-grub-editenv.patch \
+ file://run-ptest \
+ file://0001-Add-another-variable-LIBS-to-provides-libraries-from.patch \
+ file://0002-include-paths.h-for-_PATH_MOUNTED.patch \
+ "
+
+RDEPENDS_${PN} += "dracut"
+
+inherit autotools-brokensep ptest
+
+EXTRA_OEMAKE = "-e 'CC=${CC}' 'LDFLAGS=${LDFLAGS}' LIBS='${LIBS}'"
+
+LIBS_libc-musl = "-lexecinfo"
+LIBS ?= ""
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ cp -r ${S}/test ${S}/test.sh ${D}${PTEST_PATH}
+ sed -i 's|./grubby|grubby|' ${D}${PTEST_PATH}/test.sh
+}
+
+RDEPENDS_${PN}-ptest = "util-linux-getopt bash"
+
+COMPATIBLE_HOST = '(x86_64.*|i.86.*)-(linux|freebsd.*)'
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klcc-cross_2.0.4.bb b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klcc-cross_2.0.4.bb
new file mode 100644
index 000000000..b285b2e8b
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klcc-cross_2.0.4.bb
@@ -0,0 +1,34 @@
+SUMMARY = "The klcc crosscompiler for klibc"
+
+require klibc.inc
+DEPENDS = "klibc"
+
+# no packaging for this crossscript
+PACKAGES = ""
+inherit nopackages
+
+FILESPATH =. "${FILE_DIRNAME}/klibc-${PV}:"
+
+SRC_URI += "file://use-env-for-perl.patch"
+
+# disable task already run in klibc recipe
+do_configure[noexec] = "1"
+
+do_compile() {
+ oe_runmake 'INSTALLDIR=${STAGING_DIR_TARGET}${libdir}/klibc' klcc
+}
+
+do_install() {
+ install -d ${D}${bindir_crossscripts}/
+ install -m 0755 klcc/klcc ${D}${bindir_crossscripts}/${TARGET_PREFIX}klcc
+ # Turn the horribly encoded paths into something which sstate can transform using its ususal
+ # magic by removing all the crazy escaping.
+ sed -i -e "2i \$TARGETSYSROOT = '${STAGING_DIR_TARGET}';" \
+ -e "2i \$NATIVESYSROOT = '${STAGING_DIR_NATIVE}';" \
+ -e 's#${@d.getVar("STAGING_DIR_NATIVE", True).replace("/", "\\\\/").replace("-", "\\\\-").replace(".", "\\\\.")}#${NATIVESYSROOT}#g;' \
+ -e 's#${@d.getVar("STAGING_DIR_TARGET", True).replace("/", "\\\\/").replace("-", "\\\\-").replace(".", "\\\\.")}#${TARGETSYSROOT}#g' \
+ ${D}${bindir_crossscripts}/${TARGET_PREFIX}klcc
+}
+
+SYSROOT_DIRS += "${bindir_crossscripts}"
+SSTATE_SCAN_FILES += "*-klcc"
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Define-in_-structs-for-non-glibc-system-libs.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Define-in_-structs-for-non-glibc-system-libs.patch
new file mode 100644
index 000000000..e7a0cce83
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Define-in_-structs-for-non-glibc-system-libs.patch
@@ -0,0 +1,87 @@
+From 57e3a60b23891905733bfea7a1cb78c2377cc524 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Jul 2017 15:17:29 -0700
+Subject: [PATCH] Define in_* structs for non-glibc system libs
+
+These defines and structs are required to be coming from
+userspace netinet/in.h, which is being overridden in klibc
+however, libc-compat.h from kernel is only written keeping
+glibc in mind, and does not provide adequate guards for musl
+to infer that these structs should be defined in linux/in.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ usr/include/net/if.h | 11 +++++++++++
+ usr/include/netinet/in.h | 36 ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 47 insertions(+)
+
+diff --git a/usr/include/net/if.h b/usr/include/net/if.h
+index 116a176..6246b12 100644
+--- a/usr/include/net/if.h
++++ b/usr/include/net/if.h
+@@ -1,6 +1,17 @@
+ #ifndef _NET_IF_H
+ #define _NET_IF_H
+
++#ifndef __GLIBC__
++#include <linux/libc-compat.h>
++#undef __UAPI_DEF_IF_IFREQ
++#define __UAPI_DEF_IF_IFREQ 1
++#undef __UAPI_DEF_IF_IFNAMSIZ
++#define __UAPI_DEF_IF_IFNAMSIZ 1
++#undef __UAPI_DEF_IF_IFMAP
++#define __UAPI_DEF_IF_IFMAP 1
++#undef __UAPI_DEF_IF_NET_DEVICE_FLAGS
++#define __UAPI_DEF_IF_NET_DEVICE_FLAGS 1
++#endif
+ #include <sys/socket.h>
+ #include <sys/types.h>
+ #include <linux/if.h>
+diff --git a/usr/include/netinet/in.h b/usr/include/netinet/in.h
+index 2952bb2..0c95bc9 100644
+--- a/usr/include/netinet/in.h
++++ b/usr/include/netinet/in.h
+@@ -5,6 +5,42 @@
+ #ifndef _NETINET_IN_H
+ #define _NETINET_IN_H
+
++#ifndef __GLIBC__
++#include <linux/libc-compat.h>
++
++#undef __UAPI_DEF_IN_ADDR
++#undef __UAPI_DEF_IN_IPPROTO
++#undef __UAPI_DEF_IN_PKTINFO
++#undef __UAPI_DEF_IP_MREQ
++#undef __UAPI_DEF_SOCKADDR_IN
++#undef __UAPI_DEF_IN_CLASS
++#undef __UAPI_DEF_IN6_ADDR
++#undef __UAPI_DEF_IN6_ADDR_ALT
++#undef __UAPI_DEF_SOCKADDR_IN6
++#undef __UAPI_DEF_IPV6_MREQ
++#undef __UAPI_DEF_IPPROTO_V6
++#undef __UAPI_DEF_IPV6_OPTIONS
++#undef __UAPI_DEF_IN6_PKTINFO
++#undef __UAPI_DEF_IP6_MTUINFO
++#undef __UAPI_DEF_IF_IFREQ
++
++#define __UAPI_DEF_IN_ADDR 1
++#define __UAPI_DEF_IN_IPPROTO 1
++#define __UAPI_DEF_IN_PKTINFO 1
++#define __UAPI_DEF_IP_MREQ 1
++#define __UAPI_DEF_SOCKADDR_IN 1
++#define __UAPI_DEF_IN_CLASS 1
++#define __UAPI_DEF_IN6_ADDR 1
++#define __UAPI_DEF_IN6_ADDR_ALT 1
++#define __UAPI_DEF_SOCKADDR_IN6 1
++#define __UAPI_DEF_IPV6_MREQ 1
++#define __UAPI_DEF_IPPROTO_V6 1
++#define __UAPI_DEF_IPV6_OPTIONS 1
++#define __UAPI_DEF_IN6_PKTINFO 1
++#define __UAPI_DEF_IP6_MTUINFO 1
++#define __UAPI_DEF_IF_IFREQ 1
++#endif
++
+ #include <klibc/extern.h>
+ #include <stdint.h>
+ #include <endian.h> /* Must be included *before* <linux/in.h> */
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Add-path-to-compiler-headers-via-isyste.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Add-path-to-compiler-headers-via-isyste.patch
new file mode 100644
index 000000000..181dcfb6d
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Add-path-to-compiler-headers-via-isyste.patch
@@ -0,0 +1,28 @@
+From 4b4147b76518d31a88fb2c58cdbf2236e159a25c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 8 Sep 2017 23:10:54 -0700
+Subject: [PATCH] Kbuild.klibc: Add path to compiler headers via -isystem
+
+We need to include this path so it can find compiler headers e.g.
+stdarg.h which is called from wrapper stdarg.h using include_next
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ scripts/Kbuild.klibc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/scripts/Kbuild.klibc b/scripts/Kbuild.klibc
+index 101f86f..1d5cdc4 100644
+--- a/scripts/Kbuild.klibc
++++ b/scripts/Kbuild.klibc
+@@ -105,7 +105,8 @@ KLIBCOBJCOPY := $(OBJCOPY)
+ KLIBCOBJDUMP := $(OBJDUMP)
+
+ # klibc include paths
+-KLIBCCPPFLAGS := -nostdinc -iwithprefix include \
++KLIBCCPPFLAGS := -nostdinc -iwithprefix include \
++ -isystem $(shell $(CC) -print-file-name=include) \
+ -I$(KLIBCINC)/arch/$(KLIBCARCHDIR) \
+ -I$(KLIBCINC)/bits$(KLIBCBITSIZE) \
+ -I$(KLIBCOBJ)/../include \
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Use-print-libgcc-file-name-instead-of-p.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Use-print-libgcc-file-name-instead-of-p.patch
new file mode 100644
index 000000000..1ba05a811
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-Kbuild.klibc-Use-print-libgcc-file-name-instead-of-p.patch
@@ -0,0 +1,28 @@
+From b6185401fc3daa7fa8ba2b84db3e4da3b94a9867 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 26 Jul 2017 16:13:16 -0700
+Subject: [PATCH] Kbuild.klibc: Use -print-libgcc-file-name instead of
+ --print-libgcc
+
+-print-libgcc-file-name works with clang and gcc unlike --print-libgcc
+which is gcc specific
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ scripts/Kbuild.klibc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/Kbuild.klibc b/scripts/Kbuild.klibc
+index f500d53..101f86f 100644
+--- a/scripts/Kbuild.klibc
++++ b/scripts/Kbuild.klibc
+@@ -128,7 +128,7 @@ KLIBCCFLAGS += $(KLIBCCPPFLAGS) $(KLIBCREQFLAGS) $(KLIBCARCHREQFLAGS) \
+ KLIBCAFLAGS += -D__ASSEMBLY__ $(KLIBCCFLAGS)
+ KLIBCSTRIPFLAGS += --strip-all -R .comment -R .note
+
+-KLIBCLIBGCC_DEF := $(shell $(KLIBCCC) $(KLIBCCFLAGS) --print-libgcc)
++KLIBCLIBGCC_DEF := $(shell $(KLIBCCC) $(KLIBCCFLAGS) -print-libgcc-file-name)
+ KLIBCLIBGCC ?= $(KLIBCLIBGCC_DEF)
+ KLIBCCRT0 := $(KLIBCOBJ)/arch/$(KLIBCARCHDIR)/crt0.o
+ KLIBCLIBC := $(KLIBCOBJ)/libc.a
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-always-use-bfd-linker.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-always-use-bfd-linker.patch
new file mode 100644
index 000000000..de04d691f
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-always-use-bfd-linker.patch
@@ -0,0 +1,28 @@
+From 63ab5102d6ef362a597941e62470bf19e6f1652b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 11 Jul 2017 08:09:52 -0700
+Subject: [PATCH] always use bfd linker
+
+its possible that distros choose to default to gold linker
+therefore explicitly asking for bfd linker would fix the
+linking issues on such distros
+
+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 dc10fc5..40647be 100644
+--- a/Makefile
++++ b/Makefile
+@@ -20,7 +20,7 @@ include $(srctree)/scripts/Kbuild.include
+ KLIBCROSS ?= $(CROSS_COMPILE)
+ export KLIBCROSS
+ export CC := $(KLIBCROSS)gcc
+-export LD := $(KLIBCROSS)ld
++export LD := $(KLIBCROSS)ld.bfd
+ export AR := $(KLIBCROSS)ar
+ export RANLIB := $(KLIBCROSS)ranlib
+ export STRIP := $(KLIBCROSS)strip
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-arm-Do-not-set-a-fallback-march-and-mtune.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-arm-Do-not-set-a-fallback-march-and-mtune.patch
new file mode 100644
index 000000000..fcf4f891a
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-arm-Do-not-set-a-fallback-march-and-mtune.patch
@@ -0,0 +1,29 @@
+From ebd2b0e414c98467156b961abb470b5d07f37ea8 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 29 Sep 2017 23:11:53 -0700
+Subject: [PATCH] arm: Do not set a fallback march and mtune
+
+In OE we pass the options explicitly, there is
+no need to set it inside the makefiles, we will
+need to compute values for CPU_ARCH and CPU_TUNE
+which is a bit harder in OE
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ usr/klibc/arch/arm/MCONFIG | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usr/klibc/arch/arm/MCONFIG b/usr/klibc/arch/arm/MCONFIG
+index 303c6ac..48d2685 100644
+--- a/usr/klibc/arch/arm/MCONFIG
++++ b/usr/klibc/arch/arm/MCONFIG
+@@ -10,7 +10,7 @@
+ CPU_ARCH ?= armv4
+ CPU_TUNE ?= strongarm
+
+-KLIBCOPTFLAGS += -Os -march=$(CPU_ARCH) -mtune=$(CPU_TUNE)
++KLIBCOPTFLAGS += -Os
+ KLIBCBITSIZE = 32
+ KLIBCREQFLAGS += -fno-exceptions
+ KLIBCSTRIPFLAGS += -R .ARM.exidx
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-dash-Specify-format-string-in-fmtstr.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-dash-Specify-format-string-in-fmtstr.patch
new file mode 100644
index 000000000..46a23987f
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-dash-Specify-format-string-in-fmtstr.patch
@@ -0,0 +1,29 @@
+From 8beffe501c1ac5b35d62004735c4157c74183901 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Jul 2017 13:51:25 -0700
+Subject: [PATCH] dash: Specify format string in fmtstr()
+
+Fixes build with hardening flags
+
+usr/dash/jobs.c:429:3: error: format not a string literal and no format arguments [-Werror=format-security]
+ col = fmtstr(s, 32, strsignal(st));
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ usr/dash/jobs.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usr/dash/jobs.c b/usr/dash/jobs.c
+index 009bbfe..299bcac 100644
+--- a/usr/dash/jobs.c
++++ b/usr/dash/jobs.c
+@@ -426,7 +426,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)");
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-include-linux-sysinfo.h-directly.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-include-linux-sysinfo.h-directly.patch
new file mode 100644
index 000000000..04c97fc5e
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-include-linux-sysinfo.h-directly.patch
@@ -0,0 +1,30 @@
+From d966d52d1e569cbc2293d841285e2b8941f28c61 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 9 Jul 2017 15:56:28 -0700
+Subject: [PATCH] include linux/sysinfo.h directly
+
+This is done to avoid the kernel header linux/kernel.h to use
+__GLIBC__ define to decide on if libc implements sysinfo() API
+or not. Kernel headers should be independent of such assumptions
+but until its done in right place, change the local header
+override to avoid this assumption
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ usr/include/sys/sysinfo.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usr/include/sys/sysinfo.h b/usr/include/sys/sysinfo.h
+index dba68dc..d145c0b 100644
+--- a/usr/include/sys/sysinfo.h
++++ b/usr/include/sys/sysinfo.h
+@@ -5,7 +5,7 @@
+ #ifndef _SYS_SYSINFO_H
+ #define _SYS_SYSINFO_H
+
+-#include <linux/kernel.h>
++#include <linux/sysinfo.h>
+
+ extern int sysinfo(struct sysinfo *info);
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-mkfifo-Implement-mkfifo.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-mkfifo-Implement-mkfifo.patch
new file mode 100644
index 000000000..3bc081d4e
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/0001-mkfifo-Implement-mkfifo.patch
@@ -0,0 +1,27 @@
+From cf97079009ba48d10e52052b2eab7461ea4dd09b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 10 Jul 2017 20:42:50 -0700
+Subject: [PATCH] mkfifo: Implement mkfifo
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ usr/utils/mkfifo.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/usr/utils/mkfifo.c b/usr/utils/mkfifo.c
+index 5a758b2..f1f577e 100644
+--- a/usr/utils/mkfifo.c
++++ b/usr/utils/mkfifo.c
+@@ -26,6 +26,11 @@ static int make_fifo(char *dir)
+ return 0;
+ }
+
++int mkfifo (const char *__p, mode_t __m)
++{
++ return mknod(__p, (__m & ~S_IFMT) | S_IFIFO, (dev_t) 0);
++}
++
+ int main(int argc, char *argv[])
+ {
+ int c, ret = 0;
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/armv4-fix-v4bx.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/armv4-fix-v4bx.patch
new file mode 100644
index 000000000..e84235306
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/armv4-fix-v4bx.patch
@@ -0,0 +1,26 @@
+From d2fb484d995221277cce7abddcd7dfa0e8bceec3 Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Fri, 11 Jan 2013 17:26:40 +0000
+Subject: [PATCH] klibc_2.0.2: apply FIX_V4BX patch for armv4 targets only
+
+Status: not applicable upstream, in OE/Yocto we use $(FIX_V4BX)
+which is "" in case of armv5 or thumbs.
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+
+---
+ usr/klibc/arch/arm/MCONFIG | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/usr/klibc/arch/arm/MCONFIG b/usr/klibc/arch/arm/MCONFIG
+index 53bc1dc..303c6ac 100644
+--- a/usr/klibc/arch/arm/MCONFIG
++++ b/usr/klibc/arch/arm/MCONFIG
+@@ -29,6 +29,7 @@ else
+ KLIBCSHAREDFLAGS = -Ttext 0x01800200
+ ifeq ($(CONFIG_AEABI),y)
+ KLIBCREQFLAGS += -mabi=aapcs-linux -mno-thumb-interwork
++KLIBCLDFLAGS += $(FIX_ARMV4_EABI_BX)
+ else
+ KLIBCREQFLAGS += -mabi=apcs-gnu -mno-thumb-interwork
+ endif
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klcc-consider-sysroot.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klcc-consider-sysroot.patch
new file mode 100644
index 000000000..5f47d3f20
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klcc-consider-sysroot.patch
@@ -0,0 +1,22 @@
+From 0cb26cf2d25d36c1fdcc4f1635e4329436ed866a Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Fri, 19 Sep 2014 23:09:29 +0200
+
+---
+ klcc/klcc.in | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/klcc/klcc.in b/klcc/klcc.in
+index 43d0984..61e9385 100644
+--- a/klcc/klcc.in
++++ b/klcc/klcc.in
+@@ -204,6 +204,9 @@ while ( defined($a = shift(@ARGV)) ) {
+ # Libraries
+ push(@libs, $a);
+ push(@libs, shift(@ARGV)) if ( $2 eq '' );
++ } elsif ( $a =~ /^--([sysroot=])(.*)$/ ) {
++ # Override gcc encoded sysroot
++ push(@ccopt, $a);
+ } else {
+ die "$0: unknown option: $a\n";
+ }
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-config-eabi.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-config-eabi.patch
new file mode 100644
index 000000000..f28cd5423
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-config-eabi.patch
@@ -0,0 +1,24 @@
+From 1118cc971917abe19ddb029aa80417f6fd6bb343 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Sat, 6 Aug 2011 05:30:14 +0000
+Subject: [PATCH] klibc: initial commit of version 1.5.24
+
+Patch was imported from the OpenEmbedded git server
+(git://git.openembedded.org/openembedded)
+as of commit id b6764cf32ec93547531130dca364fb95e1c495f4
+Signed-off-by: Thomas Kunze <thommycheck@gmx.de>
+
+---
+ defconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/defconfig b/defconfig
+index 04b98e9..0cb23d0 100644
+--- a/defconfig
++++ b/defconfig
+@@ -6,4 +6,4 @@ CONFIG_KLIBC_ZLIB=y
+ CONFIG_REGPARM=y
+ # ARM options
+ # CONFIG_KLIBC_THUMB is not set
+-# CONFIG_AEABI is not set
++CONFIG_AEABI=y
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-linux-libc-dev.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-linux-libc-dev.patch
new file mode 100644
index 000000000..a5563b740
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/klibc-linux-libc-dev.patch
@@ -0,0 +1,29 @@
+From 1be2bc41f915922102a3ba671b54c2df6f0052e6 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sun, 14 Mar 2010 18:41:56 +0000
+Subject: [PATCH] klibc_1.5.26: now build against linux-libc-headers
+
+commit 43adf69062254fb4f8d4d11fb5fe36a60ae25d5a
+
+ Taken from debian "Fix klibc Debian specific build trouble"
+ Adapted for klibc_2.0.2
+
+---
+ scripts/Kbuild.install | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/scripts/Kbuild.install b/scripts/Kbuild.install
+index 8af5697..d32a8a5 100644
+--- a/scripts/Kbuild.install
++++ b/scripts/Kbuild.install
+@@ -95,7 +95,9 @@ header:
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin
+- $(Q)$(MAKE) -C $(KLIBCKERNELSRC) ARCH=$(KLIBCARCH) INSTALL_HDR_PATH=$(INSTALLROOT)$(INSTALLDIR)/$(KCROSS) headers_install
++ $(Q)for x in ../../../include/asm ../../../include/asm-generic ../../../include/linux ../../../include/mtd; do \
++ ln -sf $${x} $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/ || exit; \
++ done
+ $(Q)cp -rf usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/.
+ $(Q)chmod -R a+rX,go-w $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)$(install-data) $(srctree)/klcc/klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/staging.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/staging.patch
new file mode 100644
index 000000000..5c7a6625b
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/staging.patch
@@ -0,0 +1,151 @@
+From 1892079b827cf8f8316305b6d6e0985db82441a2 Mon Sep 17 00:00:00 2001
+From: Thomas Kunze <thommycheck@gmx.de>
+Date: Sat, 6 Aug 2011 05:30:14 +0000
+Subject: [PATCH] klibc: initial commit of version 1.5.24
+
+Patch was imported from the OpenEmbedded git server
+(git://git.openembedded.org/openembedded)
+as of commit id eefb99a313bbcc8f34c8b32bf0c5aa2dd2580735
+Signed-off-by: Thomas Kunze <thommycheck@gmx.de>
+
+Minor edits following upstream changes
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+
+---
+ scripts/Kbuild.install | 4 ----
+ usr/dash/Kbuild | 2 --
+ usr/gzip/Kbuild | 2 --
+ usr/kinit/Kbuild | 2 --
+ usr/kinit/fstype/Kbuild | 2 --
+ usr/kinit/ipconfig/Kbuild | 2 --
+ usr/kinit/nfsmount/Kbuild | 2 --
+ usr/kinit/resume/Kbuild | 2 --
+ usr/kinit/run-init/Kbuild | 2 --
+ usr/klibc/Kbuild | 2 --
+ usr/utils/Kbuild | 2 --
+ 11 files changed, 24 deletions(-)
+
+diff --git a/scripts/Kbuild.install b/scripts/Kbuild.install
+index d32a8a5..fda699d 100644
+--- a/scripts/Kbuild.install
++++ b/scripts/Kbuild.install
+@@ -88,19 +88,15 @@ else
+ header:
+ $(Q)echo " INSTALL headers + man pages to $(INSTALLROOT)$(INSTALLDIR)"
+ $(Q)mkdir -p $(INSTALLROOT)$(bindir)
+- $(Q)mkdir -p $(INSTALLROOT)$(mandir)/man1
+- $(Q)mkdir -p $(INSTALLROOT)$(SHLIBDIR)
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)
+ $(Q)-rm -rf $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+ $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)lib
+- $(Q)mkdir -p $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)bin
+ $(Q)for x in ../../../include/asm ../../../include/asm-generic ../../../include/linux ../../../include/mtd; do \
+ ln -sf $${x} $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/ || exit; \
+ done
+ $(Q)cp -rf usr/include/. $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include/.
+ $(Q)chmod -R a+rX,go-w $(INSTALLROOT)$(INSTALLDIR)/$(KCROSS)include
+- $(Q)$(install-data) $(srctree)/klcc/klcc.1 $(INSTALLROOT)$(mandir)/man1/$(KCROSS)klcc.1
+ $(Q)$(install-bin) $(objtree)/klcc/$(KCROSS)klcc $(INSTALLROOT)$(bindir)
+
+ footer: header
+diff --git a/usr/dash/Kbuild b/usr/dash/Kbuild
+index 3a98c1f..1a6920a 100644
+--- a/usr/dash/Kbuild
++++ b/usr/dash/Kbuild
+@@ -92,5 +92,3 @@ $(obj)/syntax.c: $(obj)/mksyntax
+ $(obj)/syntax.h: $(obj)/syntax.c
+ $(Q):
+
+-# Targets to install
+-install-y := sh.shared
+diff --git a/usr/gzip/Kbuild b/usr/gzip/Kbuild
+index 9bbf0a4..c497d02 100644
+--- a/usr/gzip/Kbuild
++++ b/usr/gzip/Kbuild
+@@ -21,5 +21,3 @@ $(obj)/gunzip $(obj)/zcat: $(obj)/gzip
+ # Cleaning
+ targets := gzip gzip.g gunzip zcat
+
+-# Targets to install
+-install-y := gzip gunzip zcat
+diff --git a/usr/kinit/Kbuild b/usr/kinit/Kbuild
+index 5320127..f7fdccd 100644
+--- a/usr/kinit/Kbuild
++++ b/usr/kinit/Kbuild
+@@ -33,5 +33,3 @@ targets += kinit kinit.g kinit.shared kinit.shared.g
+ subdir- := fstype ipconfig nfsmount resume run-init
+
+
+-# install binary
+-install-y := kinit kinit.shared
+diff --git a/usr/kinit/fstype/Kbuild b/usr/kinit/fstype/Kbuild
+index 9b20db1..367611d 100644
+--- a/usr/kinit/fstype/Kbuild
++++ b/usr/kinit/fstype/Kbuild
+@@ -21,5 +21,3 @@ shared/fstype-y := $(objs)
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+diff --git a/usr/kinit/ipconfig/Kbuild b/usr/kinit/ipconfig/Kbuild
+index 7f8d181..eb1d472 100644
+--- a/usr/kinit/ipconfig/Kbuild
++++ b/usr/kinit/ipconfig/Kbuild
+@@ -27,5 +27,3 @@ shared/ipconfig-y := $(objs)
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+diff --git a/usr/kinit/nfsmount/Kbuild b/usr/kinit/nfsmount/Kbuild
+index 461e6f3..ba31708 100644
+--- a/usr/kinit/nfsmount/Kbuild
++++ b/usr/kinit/nfsmount/Kbuild
+@@ -23,5 +23,3 @@ dummypmap-y := dummypmap_test.o
+
+ clean-dirs := static shared
+
+-# Install binary
+-install-y := $(shared-y)
+diff --git a/usr/kinit/resume/Kbuild b/usr/kinit/resume/Kbuild
+index 034195d..c1342e1 100644
+--- a/usr/kinit/resume/Kbuild
++++ b/usr/kinit/resume/Kbuild
+@@ -26,5 +26,3 @@ shared/resume-lib := ../lib.a
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+diff --git a/usr/kinit/run-init/Kbuild b/usr/kinit/run-init/Kbuild
+index f7832b7..c153b0a 100644
+--- a/usr/kinit/run-init/Kbuild
++++ b/usr/kinit/run-init/Kbuild
+@@ -30,5 +30,3 @@ shared/run-init-lib := ../lib.a
+ # Cleaning
+ clean-dirs := static shared
+
+-# install binary
+-install-y := $(shared-y)
+diff --git a/usr/klibc/Kbuild b/usr/klibc/Kbuild
+index eba6add..98caf2e 100644
+--- a/usr/klibc/Kbuild
++++ b/usr/klibc/Kbuild
+@@ -185,5 +185,3 @@ install-rule:
+ $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib))
+ $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \
+ $(INSTALLROOT)$(INSTALLDIR)/$(KLIBCCROSS)lib
+- $(Q)$(install-lib) $(obj)/klibc-$(SOLIBHASH).so \
+- $(INSTALLROOT)$(SHLIBDIR)
+diff --git a/usr/utils/Kbuild b/usr/utils/Kbuild
+index 05aa794..67d9486 100644
+--- a/usr/utils/Kbuild
++++ b/usr/utils/Kbuild
+@@ -72,5 +72,3 @@ $(obj)/shared/reboot $(obj)/shared/poweroff: $(obj)/shared/halt
+ # Clean deletes the static and shared dir
+ clean-dirs := static shared
+
+-# install only install the shared binaries
+-install-y := $(shared-y) shared/reboot shared/poweroff
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/use-env-for-perl.patch b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/use-env-for-perl.patch
new file mode 100644
index 000000000..eac128cc0
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-2.0.4/use-env-for-perl.patch
@@ -0,0 +1,25 @@
+Patch was imported from the OpenEmbedded git server
+(git://git.openembedded.org/openembedded)
+as of commit id 676cbb54d42c89a4832871064cfcb7ee2ad372ee
+
+klcc-cross: Add patch to use /usr/bin/env perl
+Certain configurations (such as autobuilders) may build in very
+deep paths (that are longer than the #! mechanism allows) which
+makes it unsafe to use the direct path for perl. In our case we know
+that /usr/bin/env perl will always return ours (if it has been built).
+
+Signed-off-by: Tom Rini <tom_rini@mentor.com>
+
+Index: klibc-1.5.20/klcc/makeklcc.pl
+===================================================================
+--- a/klcc/makeklcc.pl
++++ b/klcc/makeklcc.pl
+@@ -26,7 +26,7 @@ sub pathsearch($) {
+ return undef;
+ }
+
+-print "#!${perlpath}\n";
++print "#!/usr/bin/env perl\n";
+
+ open(KLIBCCONF, "< $klibcconf\0")
+ or die "$0: cannot open $klibcconf: $!\n";
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-static-utils_2.0.4.bb b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-static-utils_2.0.4.bb
new file mode 100644
index 000000000..c835fd647
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-static-utils_2.0.4.bb
@@ -0,0 +1,12 @@
+SUMMARY = "klibc utils for initramfs statically compiled"
+
+FILESPATH =. "${FILE_DIRNAME}/klibc-${PV}:"
+
+PACKAGES = "${PN}"
+FILES_${PN} = ""
+
+KLIBC_UTILS_VARIANT = "static"
+KLIBC_UTILS_PKGNAME = "klibc-static-utils"
+
+require klibc-utils.inc
+require klibc.inc
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils.inc b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils.inc
new file mode 100644
index 000000000..7df33d64e
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils.inc
@@ -0,0 +1,60 @@
+do_install() {
+ install -d ${D}${base_bindir}
+ install -d ${D}${base_sbindir}
+ # debian packages kinit + kinit.shared but only sh.shared
+ if [ "${KLIBC_UTILS_VARIANT}" = "shared" ]; then
+ install -m 755 usr/kinit/kinit ${D}${base_bindir}/kinit
+ install -m 755 usr/kinit/kinit.shared ${D}${base_bindir}/kinit.shared
+ install -m 755 usr/dash/sh.shared ${D}${base_bindir}/sh.shared
+ else
+ install -m 755 usr/dash/sh ${D}${base_bindir}/sh
+ install -m 755 usr/kinit/kinit ${D}${base_bindir}/kinit
+ fi
+ install -m 755 usr/gzip/gzip ${D}${base_bindir}
+ install -m 755 usr/kinit/fstype/${KLIBC_UTILS_VARIANT}/fstype ${D}${base_bindir}
+ install -m 755 usr/kinit/ipconfig/${KLIBC_UTILS_VARIANT}/ipconfig ${D}${base_bindir}
+ install -m 755 usr/kinit/nfsmount/${KLIBC_UTILS_VARIANT}/nfsmount ${D}${base_bindir}
+ install -m 755 usr/kinit/resume/${KLIBC_UTILS_VARIANT}/resume ${D}${base_bindir}
+ install -m 755 usr/kinit/run-init/${KLIBC_UTILS_VARIANT}/run-init ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/cat ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/chroot ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/cpio ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/dd ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/dmesg ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/false ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/halt ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/kill ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/ln ${D}${base_bindir}
+ # losetup goes in ${base_sbindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/losetup ${D}${base_sbindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/ls ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/minips ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/mkdir ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/mkfifo ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/mknod ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/mount ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/mv ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/nuke ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/pivot_root ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/poweroff ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/readlink ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/reboot ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/sleep ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/sync ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/true ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/umount ${D}${base_bindir}
+ install -m 755 usr/utils/${KLIBC_UTILS_VARIANT}/uname ${D}${base_bindir}
+ ln -s gzip ${D}${base_bindir}/gunzip
+ ln -s gzip ${D}${base_bindir}/zcat
+}
+
+EXTRA_KLIBC_DEPS = "${@oe.utils.conditional('KLIBC_UTILS_VARIANT', 'shared', '${THIS_LIBKLIBC}', '', d)}"
+
+PACKAGES_DYNAMIC += "^${KLIBC_UTILS_PKGNAME}-.*"
+
+python populate_packages_prepend () {
+ base_bin_dir = d.expand('${base_bindir}')
+ do_split_packages(d, base_bin_dir, '(.*)', '${KLIBC_UTILS_PKGNAME}-%s', 'Klibc util for %s', extra_depends='${EXTRA_KLIBC_DEPS}', allow_links=True, allow_dirs=True)
+ base_sbin_dir = d.expand('${base_sbindir}')
+ do_split_packages(d, base_sbin_dir, '(.*)', '${KLIBC_UTILS_PKGNAME}-%s', 'Klibc util for %s', extra_depends='${EXTRA_KLIBC_DEPS}', allow_dirs=True)
+}
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils_2.0.4.bb b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils_2.0.4.bb
new file mode 100644
index 000000000..06e71cb7b
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc-utils_2.0.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "klibc utils for initramfs"
+
+FILESPATH =. "${FILE_DIRNAME}/klibc-${PV}:"
+
+PACKAGES = "${PN}"
+FILES_${PN} = ""
+
+KLIBC_UTILS_VARIANT = "shared"
+KLIBC_UTILS_PKGNAME = "klibc-utils"
+
+require klibc-utils.inc
+require klibc.inc
+
+DEPENDS = "klibc"
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc
new file mode 100644
index 000000000..30294b19a
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc.inc
@@ -0,0 +1,74 @@
+DESCRIPTION = "klibc is intended to be a minimalistic libc subset for \
+use with initramfs. It is deliberately written for small size, \
+minimal entaglement, and portability, not speed."
+SECTION = "libs"
+LICENSE = "BSD-3-Clause & GPL-2.0 & MIT & Zlib"
+LIC_FILES_CHKSUM = "file://usr/klibc/LICENSE;md5=d75181f10e998c21eb147f6d2e43ce8b"
+DEPENDS = "linux-libc-headers perl-native"
+SRCREV = "4d19974d7020488f63651244e1f9f51727c3f66c"
+
+SRC_URI = "git://git.kernel.org/pub/scm/libs/klibc/klibc.git \
+ ${ARMPATCHES} \
+ file://klibc-linux-libc-dev.patch \
+ file://staging.patch \
+ file://klcc-consider-sysroot.patch \
+ file://0001-dash-Specify-format-string-in-fmtstr.patch \
+ file://0001-Define-in_-structs-for-non-glibc-system-libs.patch \
+ file://0001-include-linux-sysinfo.h-directly.patch \
+ file://0001-mkfifo-Implement-mkfifo.patch \
+ file://0001-always-use-bfd-linker.patch \
+ file://0001-Kbuild.klibc-Use-print-libgcc-file-name-instead-of-p.patch \
+ file://0001-Kbuild.klibc-Add-path-to-compiler-headers-via-isyste.patch \
+ file://0001-arm-Do-not-set-a-fallback-march-and-mtune.patch \
+"
+
+ARMPATCHES ?= ""
+
+ARMPATCHES_arm = "file://klibc-config-eabi.patch \
+ file://armv4-fix-v4bx.patch \
+ "
+
+
+S = "${WORKDIR}/git"
+
+PARALLEL_MAKE = ""
+EXTRA_OEMAKE = "'KLIBCARCH=${KLIBC_ARCH}' \
+ 'CROSS_COMPILE=${TARGET_PREFIX}' \
+ 'KLIBCKERNELSRC=${STAGING_DIR_TARGET}${exec_prefix}' \
+ 'KLIBCLIBGCC=${STAGING_DIR_TARGET}${libdir}/${TARGET_SYS}/*/libgcc.a' \
+ 'prefix=${exec_prefix}' \
+ 'INSTALLROOT=${D}' \
+ 'INSTALLDIR=${libdir}/klibc' \
+ 'SHLIBDIR=${libdir}' \
+ '${KLIBCTHUMB}' \
+ 'KLIBCOPTFLAGS=${TUNE_CCARGS} -Os' \
+ V=1 \
+ "
+
+export FIX_ARMV4_EABI_BX = "${FIX_V4BX}"
+KLIBCTHUMB = "${@['CONFIG_KLIBC_THUMB=n', 'CONFIG_KLIBC_THUMB=y'][(d.getVar('ARM_INSTRUCTION_SET') == 'thumb')]}"
+
+do_configure () {
+ ln -sf "${STAGING_DIR_TARGET}${exec_prefix}" linux
+}
+
+do_compile_prepend_toolchain-clang() {
+ sed -i -e 's#$(KLIBCROSS)gcc#$(KLIBCROSS)clang#g' ${S}/Makefile
+}
+
+INHIBIT_PACKAGE_STRIP = "1"
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+INSANE_SKIP_${PN} = "already-stripped"
+INSANE_SKIP_libklibc-dev = "dev-elf"
+KLIBC_ARCH = "${TARGET_ARCH}"
+KLIBC_ARCH_aarch64 = "arm64"
+KLIBC_ARCH_armeb = "arm"
+KLIBC_ARCH_mipsel = "mips"
+KLIBC_ARCH_x86 = "i386"
+KLIBC_ARCH_x86-64 = "x86_64"
+KLIBC_ARCH_powerpc = "ppc"
+KLIBC_ARCH_powerpc64 = "ppc64"
+THIS_LIBKLIBC = "libklibc (= ${PV}-${PR})"
+
+SECURITY_CFLAGS = "-fno-PIE -no-pie"
+SECURITY_LDFLAGS = "-no-pie"
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc_2.0.4.bb b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc_2.0.4.bb
new file mode 100644
index 000000000..bc80f382f
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/klibc/klibc_2.0.4.bb
@@ -0,0 +1,24 @@
+SUMMARY = "klibc, a small C library for use with initramfs"
+
+do_install() {
+ oe_runmake install
+ # the crosscompiler is packaged by klcc-cross
+ # remove klcc
+ rm ${D}${bindir}/klcc
+ # remove now empty dir
+ rmdir ${D}${bindir}
+ install -d ${D}${libdir}
+ install -m 755 usr/klibc/klibc-*.so ${D}${libdir}
+ (cd ${D}${libdir}; ln -s klibc-*.so klibc.so)
+}
+
+PACKAGES = "libklibc libklibc-staticdev libklibc-dev"
+
+FILES_libklibc = "${libdir}/klibc-*.so"
+FILES_libklibc-staticdev = "${libdir}/klibc/lib/libc.a"
+FILES_libklibc-dev = "${libdir}/klibc.so \
+ ${libdir}/klibc/lib/* \
+ ${libdir}/klibc/include/* \
+ "
+
+require klibc.inc
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0001-Makefile-build-ubi-utils-only.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0001-Makefile-build-ubi-utils-only.patch
new file mode 100644
index 000000000..6ac2cca9d
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0001-Makefile-build-ubi-utils-only.patch
@@ -0,0 +1,87 @@
+From 1c989e4c36d0bf76ab444f984bc73b98eeacd03f Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sun, 29 Jun 2014 00:32:29 +0200
+Subject: [PATCH 1/9] Makefile: build ubi-utils only
+
+We build all the static ubi-utils but actually only ubiattach is needed in
+a minimalistic initramfs for the mount of ubi volumes.
+
+More fixes are needed in order to build the full mtd-utils.
+The first issue is:
+
+| mkfs.jffs2.c:64:20: fatal error: libgen.h: No such file or directory
+| #include <libgen.h>
+
+Removing the include then the second error is:
+
+| mkfs.jffs2.c:1570:22: error: '_SC_PAGESIZE' undeclared
+| (first use in this function)
+| page_size = sysconf(_SC_PAGESIZE);
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ Makefile | 26 ++------------------------
+ 1 file changed, 2 insertions(+), 24 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 3ce8587..8b79f71 100644
+--- a/Makefile
++++ b/Makefile
+@@ -16,28 +16,11 @@ endif
+
+ TESTS = tests
+
+-MTD_BINS = \
+- ftl_format flash_erase nanddump doc_loadbios \
+- ftl_check mkfs.jffs2 flash_lock flash_unlock \
+- flash_otp_info flash_otp_dump flash_otp_lock flash_otp_write \
+- mtd_debug flashcp nandwrite nandtest mtdpart \
+- jffs2dump \
+- nftldump nftl_format docfdisk \
+- rfddump rfdformat \
+- serve_image recv_image \
+- sumtool jffs2reader
+ UBI_BINS = \
+ ubiupdatevol ubimkvol ubirmvol ubicrc32 ubinfo ubiattach \
+ ubidetach ubinize ubiformat ubirename mtdinfo ubirsvol ubiblock
+
+-BINS = $(MTD_BINS)
+-BINS += mkfs.ubifs/mkfs.ubifs
+-BINS += $(addprefix ubi-utils/,$(UBI_BINS))
+-SCRIPTS = flash_eraseall
+-
+-TARGETS = $(BINS)
+-TARGETS += lib/libmtd.a
+-TARGETS += ubi-utils/libubi.a
++BINS = $(addprefix ubi-utils/,$(UBI_BINS))
+
+ OBJDEPS = $(BUILDDIR)/include/version.h
+
+@@ -61,12 +44,9 @@ endif
+ rm -f $(BUILDDIR)/include/version.h
+ $(MAKE) -C $(TESTS) clean
+
+-install:: $(addprefix $(BUILDDIR)/,${BINS}) ${SCRIPTS}
++install:: $(addprefix $(BUILDDIR)/,${BINS})
+ mkdir -p ${DESTDIR}/${SBINDIR}
+ install -m 0755 $^ ${DESTDIR}/${SBINDIR}/
+- mkdir -p ${DESTDIR}/${MANDIR}/man1
+- install -m 0644 mkfs.jffs2.1 ${DESTDIR}/${MANDIR}/man1/
+- -gzip -9f ${DESTDIR}/${MANDIR}/man1/*.1
+
+ tests::
+ $(MAKE) -C $(TESTS)
+@@ -91,8 +71,6 @@ LDLIBS_mkfs.jffs2 = -lz $(LZOLDLIBS)
+ LDFLAGS_jffs2reader = $(ZLIBLDFLAGS) $(LZOLDFLAGS)
+ LDLIBS_jffs2reader = -lz $(LZOLDLIBS)
+
+-$(foreach v,$(MTD_BINS),$(eval $(call mkdep,,$(v))))
+-
+ #
+ # Common libmtd
+ #
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0002-common.mk-for-klibc-CC-is-klcc.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0002-common.mk-for-klibc-CC-is-klcc.patch
new file mode 100644
index 000000000..c23d11f0b
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0002-common.mk-for-klibc-CC-is-klcc.patch
@@ -0,0 +1,27 @@
+From 89c76bbe82a2029a25b0654eb0a1d0b22d6e6877 Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sun, 29 Jun 2014 00:37:28 +0200
+Subject: [PATCH 2/9] common.mk: for klibc $(CC) is klcc
+
+Do not hardcode: assign the value to the variable if it is not already defined.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ common.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/common.mk b/common.mk
+index ba87377..126d11a 100644
+--- a/common.mk
++++ b/common.mk
+@@ -1,4 +1,4 @@
+-CC := $(CROSS)gcc
++CC ?= $(CROSS)gcc
+ AR := $(CROSS)ar
+ RANLIB := $(CROSS)ranlib
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0003-libubi.c-add-klibc-specific-fixes-for-ioctl.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0003-libubi.c-add-klibc-specific-fixes-for-ioctl.patch
new file mode 100644
index 000000000..9ad4a5b99
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0003-libubi.c-add-klibc-specific-fixes-for-ioctl.patch
@@ -0,0 +1,76 @@
+From fecbb7056d621a30f7106e67f5fe209763571b70 Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sun, 29 Jun 2014 00:40:15 +0200
+Subject: [PATCH 3/9] libubi.c: add klibc specific fixes for ioctl
+
+First issue is that ioctl() in klibc doesn't expect a constant as arg3.
+Second issue is that arg3 in klibc ioctl() implementation is not optional.
+
+Fixes:
+
+| ubi-utils/libubi.c: In function 'do_attach':
+| ubi-utils/libubi.c:698:8: warning: passing argument 3 of 'ioctl' discards
+| 'const' qualifier from pointer target type
+| ret = ioctl(fd, UBI_IOCATT, r);
+| ^
+| In file included from ubi-utils/libubi.c:32:0:
+| .../lib/klibc/include/sys/ioctl.h:15:14: note: expected 'void *' but argument
+| is of type 'const struct ubi_attach_req *'
+| __extern int ioctl(int, int, void *);
+| ^
+
+| ubi-utils/libubi.c: In function 'ubi_vol_block_create':
+| ubi-utils/libubi.c:1118:9: error: too few arguments to function 'ioctl'
+| return ioctl(fd, UBI_IOCVOLCRBLK);
+| ^
+| In file included from ubi-utils/libubi.c:32:0:
+| .../lib/klibc/include/sys/ioctl.h:15:14: note: declared here
+| __extern int ioctl(int, int, void *);
+| ^
+| ubi-utils/libubi.c: In function 'ubi_vol_block_remove':
+| ubi-utils/libubi.c:1123:9: error: too few arguments to function 'ioctl'
+| return ioctl(fd, UBI_IOCVOLRMBLK);
+| ^
+| In file included from ubi-utils/libubi.c:32:0:
+| .../usr/lib/klibc/include/sys/ioctl.h:15:14: note: declared here
+| __extern int ioctl(int, int, void *);
+| ^
+
+Upstream-Status: Accepted
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ ubi-utils/libubi.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ubi-utils/libubi.c b/ubi-utils/libubi.c
+index 97c0434..2b49833 100644
+--- a/ubi-utils/libubi.c
++++ b/ubi-utils/libubi.c
+@@ -687,7 +687,7 @@ void libubi_close(libubi_t desc)
+ * success and %-1 in case of failure. @r->ubi_num contains newly created UBI
+ * device number.
+ */
+-static int do_attach(const char *node, const struct ubi_attach_req *r)
++static int do_attach(const char *node, struct ubi_attach_req *r)
+ {
+ int fd, ret;
+
+@@ -1115,12 +1115,12 @@ int ubi_rsvol(libubi_t desc, const char *node, int vol_id, long long bytes)
+
+ int ubi_vol_block_create(int fd)
+ {
+- return ioctl(fd, UBI_IOCVOLCRBLK);
++ return ioctl(fd, UBI_IOCVOLCRBLK, NULL);
+ }
+
+ int ubi_vol_block_remove(int fd)
+ {
+- return ioctl(fd, UBI_IOCVOLRMBLK);
++ return ioctl(fd, UBI_IOCVOLRMBLK, NULL);
+ }
+
+ int ubi_update_start(libubi_t desc, int fd, long long bytes)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0004-Restore-compatibility-to-dietlibc-klibc-musl-libc-af.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0004-Restore-compatibility-to-dietlibc-klibc-musl-libc-af.patch
new file mode 100644
index 000000000..2f31fb4a2
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0004-Restore-compatibility-to-dietlibc-klibc-musl-libc-af.patch
@@ -0,0 +1,88 @@
+From b668cb75cb7e72ff92055209130d4cd4b3cacbdb Mon Sep 17 00:00:00 2001
+From: Thorsten Glaser <tg@mirbsd.org>
+Date: Fri, 20 Jun 2014 10:56:27 +0000
+Subject: [PATCH 4/9] Restore compatibility to dietlibc, klibc, musl libc after
+ commit 4f1b108
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Each C library has their own way to define off_t, and the <features.h>
+header is nonstandard and specific to the GNU libc and those that clone
+it (uClibc). Fefe’s dietlibc uses different flags, and klibc always uses
+a 64-bit off_t (like the BSDs); musl libc cannot be recognised using cpp
+instructions, so we assume 64 bit there (and on unknown C libraries) and
+leave it to the user to submit a follow-up fix if we guess wrong. I also
+added a static assertion to verify the 64 bit guess is correct.
+
+It would be really better using a configure script for this instead.
+
+Fixes:
+| CC lib/libmtd.o
+| In file included from ubi-utils/ubiutils-common.c:35:0:
+| ./include/common.h:29:22: fatal error: features.h: No such file or directory
+| #include <features.h>
+| ^
+| compilation terminated.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Thorsten Glaser <tg@mirbsd.org>
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ include/common.h | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+diff --git a/include/common.h b/include/common.h
+index fb0ca83..5a20964 100644
+--- a/include/common.h
++++ b/include/common.h
+@@ -26,7 +26,9 @@
+ #include <string.h>
+ #include <fcntl.h>
+ #include <errno.h>
++#if defined(__GLIBC__) || defined(__UCLIBC__)
+ #include <features.h>
++#endif
+ #include <inttypes.h>
+ #include "version.h"
+
+@@ -67,6 +69,21 @@ extern "C" {
+ #endif
+
+ /* define a print format specifier for off_t */
++#if defined(__KLIBC__)
++/* always 64 bit on klibc */
++#define PRIxoff_t PRIx64
++#define PRIdoff_t PRId64
++#elif defined(__dietlibc__)
++/* depends on compiler flags on dietlibc */
++#if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
++#define PRIxoff_t PRIx64
++#define PRIdoff_t PRId64
++#else
++#define PRIxoff_t "l"PRIx32
++#define PRIdoff_t "l"PRId32
++#endif
++#elif defined(__GLIBC__) || defined(__UCLIBC__)
++/* depends on compiler flags on glibc and uClibc */
+ #ifdef __USE_FILE_OFFSET64
+ #define PRIxoff_t PRIx64
+ #define PRIdoff_t PRId64
+@@ -74,6 +91,13 @@ extern "C" {
+ #define PRIxoff_t "l"PRIx32
+ #define PRIdoff_t "l"PRId32
+ #endif
++#else
++/* unknown libc or musl */
++#define PRIxoff_t PRIx64
++#define PRIdoff_t PRId64
++/* verify our guess of 64 bit is correct */
++static char __PRIxoff_t_static_assert[sizeof(off_t) == 8 ? 1 : -1];
++#endif
+
+ /* Verbose messages */
+ #define bareverbose(verbose, fmt, ...) do { \
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0005-common.h-more-workarounds-for-klibc-compatibility.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0005-common.h-more-workarounds-for-klibc-compatibility.patch
new file mode 100644
index 000000000..8309a7271
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0005-common.h-more-workarounds-for-klibc-compatibility.patch
@@ -0,0 +1,52 @@
+From 5d4a66b502003ef385dab31a17012246407e7364 Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sun, 29 Jun 2014 00:44:03 +0200
+Subject: [PATCH 5/9] common.h: more workarounds for klibc compatibility
+
+Patch is addressing two issues:
+* First, Klibc doesn't have rpmatch().
+* Second, Klibc lacks getline()
+
+Fixes:
+| LD ubi-utils/ubiformat
+| .../git/ubi-utils/ubiformat.o: In function `prompt':
+| .../git/./include/common.h:157: undefined reference to `getline'
+| .../git/./include/common.h:164: undefined reference to `rpmatch'
+| .../git/./include/common.h:157: undefined reference to `getline'
+| .../git/./include/common.h:164: undefined reference to `rpmatch'
+
+Upstream-Status: Submitted
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ include/common.h | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/include/common.h b/include/common.h
+index 5a20964..2f51e1c 100644
+--- a/include/common.h
++++ b/include/common.h
+@@ -161,15 +161,17 @@ static inline int __rpmatch(const char *resp)
+ */
+ static inline bool prompt(const char *msg, bool def)
+ {
+- char *line = NULL;
+- size_t len;
++ char *line;
+ bool ret = def;
+
++ const int sizeof_line = 2;
++ line = malloc(sizeof_line);
++
+ do {
+ normsg_cont("%s (%c/%c) ", msg, def ? 'Y' : 'y', def ? 'n' : 'N');
+ fflush(stdout);
+
+- while (getline(&line, &len, stdin) == -1) {
++ while (fgets(line, sizeof_line, stdin) == NULL) {
+ printf("failed to read prompt; assuming '%s'\n",
+ def ? "yes" : "no");
+ break;
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0006-libiniparser-remove-unused-function-needing-float.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0006-libiniparser-remove-unused-function-needing-float.patch
new file mode 100644
index 000000000..d046f9505
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0006-libiniparser-remove-unused-function-needing-float.patch
@@ -0,0 +1,85 @@
+From 2af30e9b2988111e45ed6ea6af55e49ec7cb1cb1 Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sun, 29 Jun 2014 00:44:57 +0200
+Subject: [PATCH 6/9] libiniparser: remove unused function needing float
+
+Fixes:
+| LD ubi-utils/ubiformat
+| .../git/ubi-utils/libiniparser.a(libiniparser.o): In function
+| ` LD ubi-utils/ubirename
+| iniparser_getdouble':
+| .../git/ubi-utils/libiniparser.c:336: undefined reference to `atof'
+
+Grep doesn't reveal any occurrence of iniparser_getdouble(), using atof() so
+remove it: floating-point is not supported in klibc
+
+Upstream-Status: Accepted
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ ubi-utils/include/libiniparser.h | 15 ---------------
+ ubi-utils/libiniparser.c | 22 ----------------------
+ 2 files changed, 37 deletions(-)
+
+diff --git a/ubi-utils/include/libiniparser.h b/ubi-utils/include/libiniparser.h
+index be3c667..abd77aa 100644
+--- a/ubi-utils/include/libiniparser.h
++++ b/ubi-utils/include/libiniparser.h
+@@ -158,21 +158,6 @@ int iniparser_getint(dictionary * d, const char * key, int notfound);
+
+ /*-------------------------------------------------------------------------*/
+ /**
+- @brief Get the string associated to a key, convert to a double
+- @param d Dictionary to search
+- @param key Key string to look for
+- @param notfound Value to return in case of error
+- @return double
+-
+- This function queries a dictionary for a key. A key as read from an
+- ini file is given as "section:key". If the key cannot be found,
+- the notfound value is returned.
+- */
+-/*--------------------------------------------------------------------------*/
+-double iniparser_getdouble(dictionary * d, char * key, double notfound);
+-
+-/*-------------------------------------------------------------------------*/
+-/**
+ @brief Get the string associated to a key, convert to a boolean
+ @param d Dictionary to search
+ @param key Key string to look for
+diff --git a/ubi-utils/libiniparser.c b/ubi-utils/libiniparser.c
+index 898f57f..ba70c08 100644
+--- a/ubi-utils/libiniparser.c
++++ b/ubi-utils/libiniparser.c
+@@ -316,28 +316,6 @@ int iniparser_getint(dictionary * d, const char * key, int notfound)
+
+ /*-------------------------------------------------------------------------*/
+ /**
+- @brief Get the string associated to a key, convert to a double
+- @param d Dictionary to search
+- @param key Key string to look for
+- @param notfound Value to return in case of error
+- @return double
+-
+- This function queries a dictionary for a key. A key as read from an
+- ini file is given as "section:key". If the key cannot be found,
+- the notfound value is returned.
+- */
+-/*--------------------------------------------------------------------------*/
+-double iniparser_getdouble(dictionary * d, char * key, double notfound)
+-{
+- char * str ;
+-
+- str = iniparser_getstring(d, key, INI_INVALID_KEY);
+- if (str==INI_INVALID_KEY) return notfound ;
+- return atof(str);
+-}
+-
+-/*-------------------------------------------------------------------------*/
+-/**
+ @brief Get the string associated to a key, convert to a boolean
+ @param d Dictionary to search
+ @param key Key string to look for
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0007-mtd-utils-common.c-convert-to-integer-arithmetic.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0007-mtd-utils-common.c-convert-to-integer-arithmetic.patch
new file mode 100644
index 000000000..36b012f90
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0007-mtd-utils-common.c-convert-to-integer-arithmetic.patch
@@ -0,0 +1,64 @@
+From 41e7c76b0853bf5241b38b8167dfd57c27fef1eb Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sun, 28 Jan 2018 21:47:59 +0100
+Subject: [PATCH 7/9] mtd-utils: common.c: convert to integer arithmetic
+
+We use floating point just to print out KiB, MiB, GiB.
+Avoid that to be klibc friendly.
+
+Fixes compilation for aarch64 against klibc:
+
+error: '-mgeneral-regs-only' is incompatible with floating-point argument
+| printf("%s%.1f GiB", p, (double)bytes / (1024 * 1024 * 1024));
+etc.
+
+Note:
+* In the KiB case, we could apparently multiply by 100 before dividing
+ without risking overflow. This code simply avoids multiplications.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ ubi-utils/ubiutils-common.c | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+diff --git a/ubi-utils/ubiutils-common.c b/ubi-utils/ubiutils-common.c
+index 6609a6b..0ded2a4 100644
+--- a/ubi-utils/ubiutils-common.c
++++ b/ubi-utils/ubiutils-common.c
+@@ -107,6 +107,9 @@ long long ubiutils_get_bytes(const char *str)
+ void ubiutils_print_bytes(long long bytes, int bracket)
+ {
+ const char *p;
++ int GiB = 1024 * 1024 * 1024;
++ int MiB = 1024 * 1024;
++ int KiB = 1024;
+
+ if (bracket)
+ p = " (";
+@@ -115,12 +118,15 @@ void ubiutils_print_bytes(long long bytes, int bracket)
+
+ printf("%lld bytes", bytes);
+
+- if (bytes > 1024 * 1024 * 1024)
+- printf("%s%.1f GiB", p, (double)bytes / (1024 * 1024 * 1024));
+- else if (bytes > 1024 * 1024)
+- printf("%s%.1f MiB", p, (double)bytes / (1024 * 1024));
+- else if (bytes > 1024 && bytes != 0)
+- printf("%s%.1f KiB", p, (double)bytes / 1024);
++ if (bytes > GiB)
++ printf("%s%lld.%lld GiB", p,
++ bytes / GiB, bytes % GiB / (GiB / 10));
++ else if (bytes > MiB)
++ printf("%s%lld.%lld MiB", p,
++ bytes / MiB, bytes % MiB / (MiB / 10));
++ else if (bytes > KiB && bytes != 0)
++ printf("%s%lld.%lld KiB", p,
++ bytes / KiB, bytes % KiB / (KiB / 10));
+ else
+ return;
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0008-ubi-utils-ubiformat.c-convert-to-integer-arithmetic.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0008-ubi-utils-ubiformat.c-convert-to-integer-arithmetic.patch
new file mode 100644
index 000000000..5bd05742c
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0008-ubi-utils-ubiformat.c-convert-to-integer-arithmetic.patch
@@ -0,0 +1,44 @@
+From e6f1a85c0a3df24fe3ca9a520dc697105e75a80c Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sat, 27 Jan 2018 09:39:26 +0100
+Subject: [PATCH 8/9] ubi-utils: ubiformat.c: convert to integer arithmetic
+
+Do not cast percent to double, it is just used as upper limit.
+Avoid floating point to fix compilation for aarch64 against klibc:
+
+error: '-mgeneral-regs-only' is incompatible with floating-point code
+| int percent = ((double)si->ok_cnt)/si->good_cnt * 100;
+| ^~~~~~~
+
+Notes:
+* The checks in the code above this line ensure that si->good_cnt is not 0.
+
+* The code assumes si->good_cnt * 100 will not overflow, then we can use
+ (si->ok_cnt * 100) safely because the former is bigger.
+
+* The truncated result does not affect the logic:
+ i.e. a value of 49.9 is truncated to 49 and is still <50.
+
+Upstream-Status: Submitted
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ ubi-utils/ubiformat.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ubi-utils/ubiformat.c b/ubi-utils/ubiformat.c
+index 21409ca..d93164a 100644
+--- a/ubi-utils/ubiformat.c
++++ b/ubi-utils/ubiformat.c
+@@ -843,7 +843,7 @@ int main(int argc, char * const argv[])
+ }
+
+ if (!args.override_ec && si->empty_cnt < si->good_cnt) {
+- int percent = ((double)si->ok_cnt)/si->good_cnt * 100;
++ int percent = (si->ok_cnt * 100) / si->good_cnt;
+
+ /*
+ * Make sure the majority of eraseblocks have valid
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0009-Eliminate-warnings-about-implicit-non-const-casting-.patch b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0009-Eliminate-warnings-about-implicit-non-const-casting-.patch
new file mode 100644
index 000000000..658246add
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc-1.5.2/0009-Eliminate-warnings-about-implicit-non-const-casting-.patch
@@ -0,0 +1,48 @@
+From 2229f3b9fd4bad47794c28e558ad273173cea73d Mon Sep 17 00:00:00 2001
+From: Andrea Adami <andrea.adami@gmail.com>
+Date: Sat, 27 Jan 2018 09:52:46 +0100
+Subject: [PATCH 9/9] Eliminate warnings about implicit non-const casting in
+ libmtd
+
+The mtd_get_dev_info1 function reads (among other things) name and type
+string into coresponding struct mtd_dev_info fields.
+
+The struct mtd_dev_info has the string fields marked const, requiring
+them to be cast to non-const version during initialization.
+
+This cast was previously omitted from the dev_read_data calls,
+triggering warnings during compilation.
+
+Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+
+Upstream-Status: Backport
+
+Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
+---
+ lib/libmtd.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lib/libmtd.c b/lib/libmtd.c
+index 60b4782..5f0bcbc 100644
+--- a/lib/libmtd.c
++++ b/lib/libmtd.c
+@@ -746,13 +746,13 @@ int mtd_get_dev_info1(libmtd_t desc, int mtd_num, struct mtd_dev_info *mtd)
+ if (dev_get_major(lib, mtd_num, &mtd->major, &mtd->minor))
+ return -1;
+
+- ret = dev_read_data(lib->mtd_name, mtd_num, &mtd->name,
++ ret = dev_read_data(lib->mtd_name, mtd_num, (char *)&mtd->name,
+ MTD_NAME_MAX + 1);
+ if (ret < 0)
+ return -1;
+ ((char *)mtd->name)[ret - 1] = '\0';
+
+- ret = dev_read_data(lib->mtd_type, mtd_num, &mtd->type_str,
++ ret = dev_read_data(lib->mtd_type, mtd_num, (char *)&mtd->type_str,
+ MTD_TYPE_MAX + 1);
+ if (ret < 0)
+ return -1;
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc_1.5.2.bb b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc_1.5.2.bb
new file mode 100644
index 000000000..abb0d4b84
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-devtools/mtd/ubi-utils-klibc_1.5.2.bb
@@ -0,0 +1,51 @@
+SUMMARY = "UBI utils statically compiled against klibc"
+DESCRIPTION = "Small sized tools from mtd-utils for use with initramfs."
+SECTION = "base"
+DEPENDS = "zlib lzo e2fsprogs util-linux"
+HOMEPAGE = "http://www.linux-mtd.infradead.org/"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+ file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c"
+
+inherit klibc
+
+SRCREV = "aea36417067dade75192bafa03af70b6eb2677b1"
+SRC_URI = "git://git.infradead.org/mtd-utils.git \
+ file://0001-Makefile-build-ubi-utils-only.patch \
+ file://0002-common.mk-for-klibc-CC-is-klcc.patch \
+ file://0003-libubi.c-add-klibc-specific-fixes-for-ioctl.patch \
+ file://0004-Restore-compatibility-to-dietlibc-klibc-musl-libc-af.patch \
+ file://0005-common.h-more-workarounds-for-klibc-compatibility.patch \
+ file://0006-libiniparser-remove-unused-function-needing-float.patch \
+ file://0007-mtd-utils-common.c-convert-to-integer-arithmetic.patch \
+ file://0008-ubi-utils-ubiformat.c-convert-to-integer-arithmetic.patch \
+ file://0009-Eliminate-warnings-about-implicit-non-const-casting-.patch \
+ "
+
+S = "${WORKDIR}/git/"
+
+EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}include -DWITHOUT_XATTR' 'BUILDDIR=${S}'"
+
+do_install () {
+ oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir}
+}
+
+PACKAGES = "ubi-utils-klibc-dbg"
+
+PACKAGES =+ "mtdinfo-klibc ubiattach-klibc ubiblock-klibc ubicrc32-klibc ubidetach-klibc \
+ ubiformat-klibc ubimkvol-klibc ubinfo-klibc ubinize-klibc ubirename-klibc \
+ ubirmvol-klibc ubirsvol-klibc ubiupdatevol-klibc"
+
+FILES_mtdinfo-klibc = "${sbindir}/mtdinfo"
+FILES_ubiattach-klibc = "${sbindir}/ubiattach"
+FILES_ubiblock-klibc = "${sbindir}/ubiblock"
+FILES_ubicrc32-klibc = "${sbindir}/ubicrc32"
+FILES_ubidetach-klibc = "${sbindir}/ubidetach"
+FILES_ubiformat-klibc = "${sbindir}/ubiformat"
+FILES_ubimkvol-klibc = "${sbindir}/ubimkvol"
+FILES_ubinfo-klibc = "${sbindir}/ubinfo"
+FILES_ubinize-klibc = "${sbindir}/ubinize"
+FILES_ubirename-klibc = "${sbindir}/ubirename"
+FILES_ubirmvol-klibc = "${sbindir}/ubirmvol"
+FILES_ubirsvol-klibc = "${sbindir}/ubirsvol"
+FILES_ubiupdatevol-klibc = "${sbindir}/ubiupdatevol"
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/0001-Adjust-the-order-of-headers-to-fix-build-for-musl.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/0001-Adjust-the-order-of-headers-to-fix-build-for-musl.patch
new file mode 100644
index 000000000..a7600b301
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/0001-Adjust-the-order-of-headers-to-fix-build-for-musl.patch
@@ -0,0 +1,30 @@
+From 86b962e7c0de43b20b6210d059e4855ce87078bc Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 16:20:08 -0700
+Subject: [PATCH] Adjust the order of headers to fix build for musl
+
+Fixes
+kexec/ifdown.c:33:16: error: storage size of 'ifc' isn't known
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ kexec/ifdown.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kexec/ifdown.c b/kexec/ifdown.c
+index 2215798..e13f777 100644
+--- a/kexec/ifdown.c
++++ b/kexec/ifdown.c
+@@ -16,8 +16,8 @@ char *v_ifdown = "@(#)ifdown.c 1.11 02-Jun-1998 miquels@cistron.nl";
+ #include <sys/time.h>
+ #include <errno.h>
+
+-#include <net/if.h>
+ #include <netinet/in.h>
++#include <net/if.h>
+
+ #define MAX_IFS 64
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/arm_crashdump.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/arm_crashdump.patch
new file mode 100644
index 000000000..0ff61e543
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/arm_crashdump.patch
@@ -0,0 +1,12 @@
+--- a/kexec/arch/arm/crashdump-arm.c
++++ b/kexec/arch/arm/crashdump-arm.c
+@@ -20,7 +20,7 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+-#include <elf.h>
++#include "../../../include/elf.h"
+ #include <errno.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/cflags_static.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/cflags_static.patch
new file mode 100644
index 000000000..35100a3b4
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/cflags_static.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -46,7 +46,7 @@
+ # where necessary.
+ CPPFLAGS = @CPPFLAGS@ -I$(srcdir)/include -I$(srcdir)/util_lib/include \
+ -Iinclude/
+-CFLAGS = @CFLAGS@ -fno-strict-aliasing -Wall -Wstrict-prototypes
++CFLAGS = @CFLAGS@ -static -fno-strict-aliasing -Wall -Wstrict-prototypes
+ PURGATORY_EXTRA_CFLAGS = @PURGATORY_EXTRA_CFLAGS@
+ ASFLAGS = @ASFLAGS@
+ LDFLAGS = @LDFLAGS@
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/fix-out-of-tree-build.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/fix-out-of-tree-build.patch
new file mode 100644
index 000000000..ccbb24d0d
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/fix-out-of-tree-build.patch
@@ -0,0 +1,54 @@
+From 37737527725e465833be649101c4a6f8352c5d5e Mon Sep 17 00:00:00 2001
+From: Tyler Hall <tylerwhall@gmail.com>
+Date: Tue, 7 Feb 2012 18:50:05 -0500
+Subject: Fix out-of-tree build
+
+Use automatic variables for prerequisites when copying man pages and
+include a makefile relative to $(srcdir).
+
+Backported to 2.0.2-klibc
+
+Signed-off-by: Tyler Hall <tylerwhall@gmail.com>
+Signed-off-by: Simon Horman <horms@verge.net.au>
+
+diff --git a/kdump/Makefile b/kdump/Makefile
+index 1e2b72c..5dfa928 100644
+--- a/kdump/Makefile
++++ b/kdump/Makefile
+@@ -22,7 +22,7 @@ $(KDUMP): $(KDUMP_OBJS)
+
+ $(KDUMP_MANPAGE): kdump/kdump.8
+ $(MKDIR) -p $(MANDIR)/man8
+- cp kdump/kdump.8 $(KDUMP_MANPAGE)
++ cp $^ $(KDUMP_MANPAGE)
+ echo::
+ @echo "KDUMP_SRCS $(KDUMP_SRCS)"
+ @echo "KDUMP_DEPS $(KDUMP_DEPS)"
+diff --git a/kexec/Makefile b/kexec/Makefile
+index 2137cab..8c815b5 100644
+--- a/kexec/Makefile
++++ b/kexec/Makefile
+@@ -82,7 +82,7 @@ $(KEXEC): CPPFLAGS+=-I$(srcdir)/kexec/arch/$(ARCH)/include
+
+ $(KEXEC_MANPAGE): kexec/kexec.8
+ @$(MKDIR) -p $(MANDIR)/man8
+- cp kexec/kexec.8 $(KEXEC_MANPAGE)
++ cp $^ $(KEXEC_MANPAGE)
+ echo::
+ @echo "KEXEC_SRCS $(KEXEC_SRCS)"
+ @echo "KEXEC_DEPS $(KEXEC_DEPS)"
+diff --git a/kexec/arch/ppc/Makefile b/kexec/arch/ppc/Makefile
+index 3dba7cf..41242a5 100644
+--- a/kexec/arch/ppc/Makefile
++++ b/kexec/arch/ppc/Makefile
+@@ -1,7 +1,7 @@
+ #
+ # kexec ppc (linux booting linux)
+ #
+-include kexec/arch/ppc/libfdt/Makefile.libfdt
++include $(srcdir)/kexec/arch/ppc/libfdt/Makefile.libfdt
+
+ ppc_KEXEC_SRCS = kexec/arch/ppc/kexec-ppc.c
+ ppc_KEXEC_SRCS += kexec/arch/ppc/kexec-elf-ppc.c
+
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ifdown_errno.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ifdown_errno.patch
new file mode 100644
index 000000000..7f8cddd35
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ifdown_errno.patch
@@ -0,0 +1,11 @@
+--- a/kexec/ifdown.c
++++ b/kexec/ifdown.c
+@@ -14,7 +14,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
+ #include <sys/time.h>
+-#include <sys/errno.h>
++#include <errno.h>
+
+ #include <net/if.h>
+ #include <netinet/in.h>
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-elf-rel.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-elf-rel.patch
new file mode 100644
index 000000000..c666afcac
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-elf-rel.patch
@@ -0,0 +1,61 @@
+--- a/kexec/kexec-elf-rel.c
++++ b/kexec/kexec-elf-rel.c
+@@ -4,7 +4,7 @@
+ #include <stdio.h>
+ #include <errno.h>
+ #include <stdlib.h>
+-#include "elf.h"
++#include "../include/elf.h"
+ #include <boot/elf_boot.h>
+ #include "kexec.h"
+ #include "kexec-elf.h"
+
+--- a/kexec/arch/arm/kexec-elf-rel-arm.c
++++ b/kexec/arch/arm/kexec-elf-rel-arm.c
+@@ -1,5 +1,5 @@
+ #include <stdio.h>
+-#include <elf.h>
++#include "../../../include/elf.h"
+ #include "../../kexec.h"
+ #include "../../kexec-elf.h"
+
+
+--- a/kexec/arch/i386/kexec-elf-rel-x86.c
++++ b/kexec/arch/i386/kexec-elf-rel-x86.c
+@@ -1,5 +1,5 @@
+ #include <stdio.h>
+-#include <elf.h>
++#include "../../../include/elf.h"
+ #include "../../kexec.h"
+ #include "../../kexec-elf.h"
+
+
+--- a/kexec/arch/ppc/kexec-elf-rel-ppc.c
++++ b/kexec/arch/ppc/kexec-elf-rel-ppc.c
+@@ -1,5 +1,5 @@
+ #include <stdio.h>
+-#include <elf.h>
++#include "../../../include/elf.h"
+ #include "../../kexec.h"
+ #include "../../kexec-elf.h"
+
+
+--- a/kexec/arch/ppc64/kexec-elf-rel-ppc64.c
++++ b/kexec/arch/ppc64/kexec-elf-rel-ppc64.c
+@@ -1,5 +1,5 @@
+ #include <stdio.h>
+-#include <elf.h>
++#include "../../../include/elf.h"
+ #include <string.h>
+ #include "../../kexec.h"
+ #include "../../kexec-elf.h"
+
+--- a/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
++++ b/kexec/arch/x86_64/kexec-elf-rel-x86_64.c
+@@ -1,5 +1,5 @@
+ #include <stdio.h>
+-#include <elf.h>
++#include "../../../include/elf.h"
+ #include "../../kexec.h"
+ #include "../../kexec-elf.h"
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-syscall.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-syscall.patch
new file mode 100644
index 000000000..081de1bb5
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/kexec-syscall.patch
@@ -0,0 +1,44 @@
+--- a/kexec/kexec-syscall.h
++++ b/kexec/kexec-syscall.h
+@@ -2,7 +2,7 @@
+ #define KEXEC_SYSCALL_H
+
+ #define __LIBRARY__
+-#include <syscall.h>
++/*#include <syscall.h>*/
+ #include <sys/syscall.h>
+ #include <unistd.h>
+
+@@ -23,6 +23,7 @@
+ #define LINUX_REBOOT_CMD_KEXEC 0x45584543
+
+ #ifndef __NR_kexec_load
++/*
+ #ifdef __i386__
+ #define __NR_kexec_load 283
+ #endif
+@@ -61,19 +62,21 @@
+ #ifndef __NR_kexec_load
+ #error Unknown processor architecture. Needs a kexec_load syscall number.
+ #endif
++*/
+ #endif /*ifndef __NR_kexec_load*/
+
+ struct kexec_segment;
+-
++/*
+ static inline long kexec_load(void *entry, unsigned long nr_segments,
+ struct kexec_segment *segments, unsigned long flags)
+ {
+ return (long) syscall(__NR_kexec_load, entry, nr_segments, segments, flags);
+ }
+-
++*/
+ static inline long kexec_reboot(void)
+ {
+- return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0);
++ //return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0);
++ return __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0);
+ }
+
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ppc__lshrdi3.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ppc__lshrdi3.patch
new file mode 100644
index 000000000..56cdfb08d
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/ppc__lshrdi3.patch
@@ -0,0 +1,18 @@
+--- a/purgatory/arch/ppc/crt.S
++++ b/purgatory/arch/ppc/crt.S
+@@ -249,6 +249,7 @@
+ *
+ */
+
++/* already defined in misc.S
+ _GLOBAL(__lshrdi3)
+ subfic 6,5,32
+ srw 4,4,5 # LSW = count > 31 ? 0 : LSW >> count
+@@ -259,5 +260,7 @@
+ srw 3,3,5 # MSW = MSW >> count
+ or 4,4,7 # LSW |= t2
+ blr
++*/
++
+ #endif
+ #endif
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_flags.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_flags.patch
new file mode 100644
index 000000000..41fc1168f
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_flags.patch
@@ -0,0 +1,21 @@
+--- a/purgatory/Makefile
++++ b/purgatory/Makefile
+@@ -47,7 +47,7 @@
+ $(PURGATORY): CC=$(TARGET_CC)
+ $(PURGATORY): CFLAGS+=$(PURGATORY_EXTRA_CFLAGS) \
+ $($(ARCH)_PURGATORY_EXTRA_CFLAGS) \
+- -Os -fno-builtin -ffreestanding
++ -Os -fno-builtin -ffreestanding -nostdinc
+
+ $(PURGATORY): CPPFLAGS=$($(ARCH)_PURGATORY_EXTRA_CFLAGS) \
+ -I$(srcdir)/purgatory/include \
+@@ -61,7 +61,8 @@
+
+ $(PURGATORY): $(PURGATORY_OBJS)
+ $(MKDIR) -p $(@D)
+- $(CC) $(LDFLAGS) -o $@ $^
++# $(CC) $(LDFLAGS) -o $@ $^
++ $(LD) $(LDFLAGS) -o $@ $^
+
+ # $(LD) $(LDFLAGS) $(EXTRA_LDFLAGS) --no-undefined -e purgatory_start -r -o $@ $(PURGATORY_OBJS) $(UTIL_LIB)
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_string.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_string.patch
new file mode 100644
index 000000000..5710561b1
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/purgatory_string.patch
@@ -0,0 +1,9 @@
+--- a/purgatory/string.c
++++ b/purgatory/string.c
+@@ -1,5 +1,5 @@
+ #include <stddef.h>
+-#include <string.h>
++/* #include <string.h> */
+
+ size_t strnlen(const char *s, size_t max)
+ {
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sha256.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sha256.patch
new file mode 100644
index 000000000..85bf7aa4f
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sha256.patch
@@ -0,0 +1,13 @@
+--- a/util_lib/include/sha256.h
++++ b/util_lib/include/sha256.h
+@@ -1,7 +1,8 @@
+ #ifndef SHA256_H
+ #define SHA256_H
+
+-#include <sys/types.h>
++//#include <sys/types.h>
++#include <stddef.h>
+ #include <stdint.h>
+
+ typedef struct
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sysconf_nrprocessors.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sysconf_nrprocessors.patch
new file mode 100644
index 000000000..04a97e6bc
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/sysconf_nrprocessors.patch
@@ -0,0 +1,13 @@
+--- a/kexec/crashdump-elf.c
++++ b/kexec/crashdump-elf.c
+@@ -47,7 +47,8 @@
+ if (xen_present())
+ nr_cpus = xen_get_nr_phys_cpus();
+ else
+- nr_cpus = sysconf(_SC_NPROCESSORS_CONF);
++ /*nr_cpus = sysconf(_SC_NPROCESSORS_CONF);*/
++ nr_cpus = 1;
+
+ if (nr_cpus < 0) {
+ return -1;
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_basename.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_basename.patch
new file mode 100644
index 000000000..77a1c01a1
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_basename.patch
@@ -0,0 +1,14 @@
+--- a/kexec/arch/i386/x86-linux-setup.c
++++ b/kexec/arch/i386/x86-linux-setup.c
+@@ -280,9 +280,9 @@ static int add_edd_entry(struct x86_linu
+ memset(edd_info, 0, sizeof(struct edd_info));
+
+ /* extract the device number */
+- if (sscanf(basename(sysfs_name), "int13_dev%hhx", &devnum) != 1) {
++ if (sscanf(strrchr(sysfs_name,'/') + 1, "int13_dev%hhx", &devnum) != 1) {
+ fprintf(stderr, "Invalid format of int13_dev dir "
+- "entry: %s\n", basename(sysfs_name));
++ "entry: %s\n", strrchr(sysfs_name,'/') + 1);
+ return -1;
+ }
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_kexec_test.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_kexec_test.patch
new file mode 100644
index 000000000..9500bd604
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_kexec_test.patch
@@ -0,0 +1,13 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -106,8 +106,8 @@
+
+ MAN_PAGES:= kexec/kexec.8
+ MAN_PAGES+= kdump/kdump.8
+-BINARIES_i386:= $(SBINDIR)/kexec $(PKGLIBDIR)/kexec_test
+-BINARIES_x86_64:=$(SBINDIR)/kexec $(PKGLIBDIR)/kexec_test
++BINARIES_i386:= $(SBINDIR)/kexec
++BINARIES_x86_64:=$(SBINDIR)/kexec
+ BINARIES:=$(SBINDIR)/kexec $(SBINDIR)/kdump $(BINARIES_$(ARCH))
+
+ TARGETS:=$(BINARIES) $(MAN_PAGES)
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_sys_io.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_sys_io.patch
new file mode 100644
index 000000000..a497c9a63
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_sys_io.patch
@@ -0,0 +1,21 @@
+--- a/purgatory/arch/i386/pic.c
++++ b/purgatory/arch/i386/pic.c
+@@ -16,7 +16,7 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+-#include <sys/io.h>
++#include "include/arch/io.h"
+ #include <purgatory.h>
+ #include "purgatory-x86.h"
+
+
+--- a/purgatory/arch/i386/vga.c
++++ b/purgatory/arch/i386/vga.c
+@@ -1,4 +1,4 @@
+-#include <sys/io.h>
++#include "include/arch/io.h"
+ #include <purgatory.h>
+ #include "purgatory-x86.h"
+
+
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_vfscanf.patch b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_vfscanf.patch
new file mode 100644
index 000000000..cad695154
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc-2.0.2/x86_vfscanf.patch
@@ -0,0 +1,27 @@
+--- a/kexec/arch/i386/x86-linux-setup.c
++++ b/kexec/arch/i386/x86-linux-setup.c
+@@ -176,6 +176,8 @@ static int file_scanf(const char *dir, c
+ FILE *fp;
+ int retno;
+ char filename[PATH_MAX];
++ long line_size = MAX_LINE;
++ char *line;
+
+ snprintf(filename, PATH_MAX, "%s/%s", dir, file);
+ filename[PATH_MAX-1] = 0;
+@@ -186,7 +188,14 @@ static int file_scanf(const char *dir, c
+ }
+
+ va_start(argptr, scanf_line);
+- retno = vfscanf(fp, scanf_line, argptr);
++
++ line = xmalloc(sizeof(line) * line_size);
++ while(fgets(line, sizeof(line), fp) != NULL ) {
++ line_size += MAX_LINE;
++ line = xrealloc(line,line_size);
++ }
++ retno = vsscanf(line, scanf_line, argptr);
++
+ va_end(argptr);
+
+ fclose(fp);
diff --git a/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_2.0.2.bb b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_2.0.2.bb
new file mode 100644
index 000000000..2e2703382
--- /dev/null
+++ b/meta-openembedded/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc_2.0.2.bb
@@ -0,0 +1,69 @@
+# the binaries are statically linked against klibc
+SUMMARY = "Kexec tools, statically compiled against klibc"
+AUTHOR = "Eric Biederman"
+HOMEPAGE = "http://kernel.org/pub/linux/utils/kernel/kexec/"
+SECTION = "kernel/userland"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ea5bed2f60d357618ca161ad539f7c0a \
+ file://kexec/kexec.c;beginline=1;endline=20;md5=af10f6ae4a8715965e648aa687ad3e09"
+DEPENDS = "zlib xz"
+
+PR = "r1"
+
+inherit klibc autotools
+
+FILESPATH =. "${FILE_DIRNAME}/kexec-tools-${PV}:"
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz"
+
+SRC_URI += " \
+ file://kexec-elf-rel.patch \
+ file://kexec-syscall.patch \
+ file://cflags_static.patch \
+ file://ifdown_errno.patch \
+ file://purgatory_flags.patch \
+ file://purgatory_string.patch \
+ file://sha256.patch \
+ file://sysconf_nrprocessors.patch \
+ file://fix-out-of-tree-build.patch \
+ file://0001-Adjust-the-order-of-headers-to-fix-build-for-musl.patch \
+ "
+
+SRC_URI[md5sum] = "92eff93b097475b7767f8c98df84408a"
+SRC_URI[sha256sum] = "09e180ff36dee087182cdc939ba6c6917b6adbb5fc12d589f31fd3659b6471f2"
+
+SRC_URI_append_arm = " file://arm_crashdump.patch"
+SRC_URI_append_powerpc = " file://ppc__lshrdi3.patch"
+SRC_URI_append_x86 = " file://x86_sys_io.patch file://x86_basename.patch file://x86_vfscanf.patch file://x86_kexec_test.patch"
+SRC_URI_append_x86-64 = " file://x86_sys_io.patch file://x86_basename.patch file://x86_vfscanf.patch file://x86_kexec_test.patch"
+
+S = "${WORKDIR}/kexec-tools-${PV}"
+
+EXTRA_OECONF += "--without-zlib --without-lzma --without-xen"
+
+CFLAGS += "-I${STAGING_DIR_HOST}${libdir}/klibc/include -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits32"
+CFLAGS_x86-64 += "-I${STAGING_DIR_HOST}${libdir}/klibc/include -I${STAGING_DIR_HOST}${libdir}/klibc/include/bits64"
+
+do_compile_prepend() {
+ # Remove the prepackaged config.h from the source tree as it overrides
+ # the same file generated by configure and placed in the build tree
+ rm -f ${S}/include/config.h
+
+ # Remove the '*.d' file to make sure the recompile is OK
+ for dep in `find ${B} -type f -name '*.d'`; do
+ dep_no_d="`echo $dep | sed 's#.d$##'`"
+ # Remove file.d when there is a file.o
+ if [ -f "$dep_no_d.o" ]; then
+ rm -f $dep
+ fi
+ done
+}
+
+PACKAGES =+ "kexec-klibc kdump-klibc"
+
+FILES_kexec-klibc = "${sbindir}/kexec"
+FILES_kdump-klibc = "${sbindir}/kdump"
+
+INSANE_SKIP_${PN} = "arch"
+
+COMPATIBLE_HOST = '(x86_64.*|i.86.*|arm.*|aarch64.*|powerpc.*|mips.*)-(linux|freebsd.*)'
diff --git a/meta-openembedded/meta-multimedia/COPYING.MIT b/meta-openembedded/meta-multimedia/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/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-multimedia/README b/meta-openembedded/meta-multimedia/README
new file mode 100644
index 000000000..20f4fb863
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/README
@@ -0,0 +1,19 @@
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+branch: master
+revision: HEAD
+
+URI: git://github.com/openembedded/meta-oe.git
+layers: meta-oe
+branch: master
+revision: HEAD
+
+Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-multimedia]' 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-multimedia][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.
+
+Layer maintainer: Andreas Müller <schnitzeltony@googlemail.com>
diff --git a/meta-openembedded/meta-multimedia/classes/juce.bbclass b/meta-openembedded/meta-multimedia/classes/juce.bbclass
new file mode 100644
index 000000000..3927235ef
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/classes/juce.bbclass
@@ -0,0 +1,47 @@
+inherit pkgconfig
+
+# List of JUCE modules that requires external dependencies
+JUCE_MODULES ??= " \
+ juce_core \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'juce_audio_devices', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'juce_graphics juce_gui_basics', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'juce_opengl', '', d)} \
+"
+JUCE_X11_DEPS = "libx11 libxext libxinerama libxrandr libxcursor"
+
+PACKAGECONFIG_prepend= "${JUCE_MODULES} "
+PACKAGECONFIG[juce_core] = ",,curl,"
+PACKAGECONFIG[juce_audio_devices] = ",,alsa-lib,"
+PACKAGECONFIG[juce_graphics] = ",,${JUCE_X11_DEPS} freetype,"
+PACKAGECONFIG[juce_gui_basics] = ",,${JUCE_X11_DEPS},"
+PACKAGECONFIG[juce_opengl] = ",,virtual/libgl,"
+
+DEPENDS_prepend = "projucer-native "
+
+export OE_JUCE_PROJUCER = "${STAGING_BINDIR_NATIVE}/Projucer"
+
+juce_do_configure() {
+ if [ -z "${JUCE_JUCERS}" ]; then
+ JUCERS=`find . -type f -iname "*.jucer"` && IFS=$'\n'
+ else
+ JUCERS="${JUCE_JUCERS}"
+ fi
+
+ if [ -z "$JUCERS" ]; then
+ die "JUCE_JUCERS not set and no profiles found in $PWD"
+ fi
+
+ # XXX: Hack for Projucer, since it requires a X Display even when running in
+ # console mode. This will be fixed in future. Most cases DISPLAY=:0 will just work,
+ # the only case why we have JUCE_DISPLAY variable, is in case of a build system,
+ # such as jenkins, that can have multiple virtual X server running for each build.
+ test -z "${JUCE_DISPLAY}" && export DISPLAY=:0 || export DISPLAY=${JUCE_DISPLAY}
+
+ for i in $JUCERS; do
+ ${OE_JUCE_PROJUCER} --resave $i
+ done
+}
+
+EXPORT_FUNCTIONS do_configure
+
+addtask configure after do_unpack do_patch before do_compile
diff --git a/meta-openembedded/meta-multimedia/conf/layer.conf b/meta-openembedded/meta-multimedia/conf/layer.conf
new file mode 100644
index 000000000..cfedf2f6b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/conf/layer.conf
@@ -0,0 +1,32 @@
+# 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 += "multimedia-layer"
+BBFILE_PATTERN_multimedia-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_multimedia-layer = "6"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_multimedia-layer = "1"
+
+LAYERDEPENDS_multimedia-layer = "core"
+
+LAYERSERIES_COMPAT_multimedia-layer = "sumo"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch
new file mode 100644
index 000000000..9bfc31b8e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/files/move_vapigen.patch
@@ -0,0 +1,102 @@
+OE-Core's vala class known one type of vapigen.m4 and deletes it since its
+not cross compile friendly, but this is a different case here where its not
+same vapigen.m4 just name is same and it tends to inherit vala bbclass so
+save it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: gupnp-dlna-0.10.5/m4/vapigen-custom.m4
+===================================================================
+--- /dev/null
++++ gupnp-dlna-0.10.5/m4/vapigen-custom.m4
+@@ -0,0 +1,43 @@
++
++dnl vala.m4
++dnl
++dnl Copyright 2010 Marc-Andre Lureau
++dnl Copyright 2011 Rodney Dawes <dobey.pwns@gmail.com>
++dnl
++dnl This library is free software; you can redistribute it and/or
++dnl modify it under the terms of the GNU Lesser General Public
++dnl License as published by the Free Software Foundation; either
++dnl version 2.1 of the License, or (at your option) any later version.
++dnl
++dnl This library is distributed in the hope that it will be useful,
++dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
++dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++dnl Lesser General Public License for more details.
++dnl
++dnl You should have received a copy of the GNU Lesser General Public
++dnl License along with this library; if not, write to the Free Software
++dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++
++dnl dropped everything but VALA_PROG_VAPIGEN - Jens Georg <mail@jensge.org>
++
++# Check whether the Vala API Generator exists in `PATH'. If it is found,
++# the variable VAPIGEN is set. Optionally a minimum release number of the
++# generator can be requested.
++#
++# VALA_PROG_VAPIGEN([MINIMUM-VERSION])
++# ------------------------------------
++AC_DEFUN([GUPNP_PROG_VAPIGEN],
++[AC_PATH_PROG([VAPIGEN], [vapigen], [])
++ AS_IF([test -z "$VAPIGEN"],
++ [AC_MSG_WARN([No Vala API Generator found. You will not be able to generate .vapi files.])],
++ [AS_IF([test -n "$1"],
++ [AC_MSG_CHECKING([$VAPIGEN is at least version $1])
++ am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator *//'`
++ AS_VERSION_COMPARE([$1], ["$am__vapigen_version"],
++ [AC_MSG_RESULT([yes])],
++ [AC_MSG_RESULT([yes])],
++ [AC_MSG_RESULT([no])
++ AC_MSG_WARN([Vala API Generator $1 not found.])
++ VAPIGEN=""
++ ])])])
++])
+Index: gupnp-dlna-0.10.5/m4/vapigen.m4
+===================================================================
+--- gupnp-dlna-0.10.5.orig/m4/vapigen.m4
++++ /dev/null
+@@ -1,43 +0,0 @@
+-
+-dnl vala.m4
+-dnl
+-dnl Copyright 2010 Marc-Andre Lureau
+-dnl Copyright 2011 Rodney Dawes <dobey.pwns@gmail.com>
+-dnl
+-dnl This library is free software; you can redistribute it and/or
+-dnl modify it under the terms of the GNU Lesser General Public
+-dnl License as published by the Free Software Foundation; either
+-dnl version 2.1 of the License, or (at your option) any later version.
+-dnl
+-dnl This library is distributed in the hope that it will be useful,
+-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+-dnl Lesser General Public License for more details.
+-dnl
+-dnl You should have received a copy of the GNU Lesser General Public
+-dnl License along with this library; if not, write to the Free Software
+-dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-
+-dnl dropped everything but VALA_PROG_VAPIGEN - Jens Georg <mail@jensge.org>
+-
+-# Check whether the Vala API Generator exists in `PATH'. If it is found,
+-# the variable VAPIGEN is set. Optionally a minimum release number of the
+-# generator can be requested.
+-#
+-# VALA_PROG_VAPIGEN([MINIMUM-VERSION])
+-# ------------------------------------
+-AC_DEFUN([GUPNP_PROG_VAPIGEN],
+-[AC_PATH_PROG([VAPIGEN], [vapigen], [])
+- AS_IF([test -z "$VAPIGEN"],
+- [AC_MSG_WARN([No Vala API Generator found. You will not be able to generate .vapi files.])],
+- [AS_IF([test -n "$1"],
+- [AC_MSG_CHECKING([$VAPIGEN is at least version $1])
+- am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator *//'`
+- AS_VERSION_COMPARE([$1], ["$am__vapigen_version"],
+- [AC_MSG_RESULT([yes])],
+- [AC_MSG_RESULT([yes])],
+- [AC_MSG_RESULT([no])
+- AC_MSG_WARN([Vala API Generator $1 not found.])
+- VAPIGEN=""
+- ])])])
+-])
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc
new file mode 100644
index 000000000..23f17eddf
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp.inc
@@ -0,0 +1,20 @@
+SUMMARY = "Resource discovery and announcement over SSDP"
+DESCRIPTION = "GSSDP implements resource discovery and announcement over SSDP (Simpe Service Discovery Protocol)."
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7"
+DEPENDS = "glib-2.0 libsoup-2.4"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gssdp the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+ cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gtk', '', d)}"
+PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk,gtk+"
+
+PACKAGES =+ "gssdp-tools"
+
+FILES_gssdp-tools = "${bindir}/gssdp* ${datadir}/gssdp/*.glade"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb
new file mode 100644
index 000000000..b60d1ea44
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gssdp_1.0.2.bb
@@ -0,0 +1,9 @@
+require gssdp.inc
+
+inherit gtk-doc
+
+PACKAGECONFIG[gtk] = "--with-gtk,--without-gtk,gtk+3"
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/1.0/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "b30c9a406853c6a3a012d151d6e7ad2c"
+SRC_URI[sha256sum] = "a1e17c09c7e1a185b0bd84fd6ff3794045a3cd729b707c23e422ff66471535dc"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc
new file mode 100644
index 000000000..054450156
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Helpers for AV applications using UPnP"
+DESCRIPTION = "GUPnP-AV is a collection of helpers for building AV (audio/video) applications using GUPnP."
+LICENSE = "LGPLv2"
+DEPENDS = "gupnp"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gupnp-av the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+ cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb
new file mode 100644
index 000000000..cfd0227e4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-av_0.12.10.bb
@@ -0,0 +1,7 @@
+require gupnp-av.inc
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/0.12/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "215f626508d76b767f5da7c9b92e87d8"
+SRC_URI[sha256sum] = "8038ef84dddbe7ad91c205bf91dddf684f072df8623f39b6555a6bb72837b85a"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+ file://libgupnp-av/gupnp-av.h;beginline=1;endline=22;md5=2b47b7b5f799d2ebabe62b895e848820"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb
new file mode 100644
index 000000000..3cafd6976
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-dlna_0.10.5.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Helpers for AV applications using DLNA"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libgupnp-dlna/gupnp-dlna-profile.h;beginline=1;endline=22;md5=1b85459f65cb1e73a885ca137aab6274"
+
+DEPENDS = "libxml2 glib-2.0"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.10/${BPN}-${PV}.tar.xz \
+ file://move_vapigen.patch \
+"
+SRC_URI[md5sum] = "2d0dc1e4189d0243ac3838ece1e8fea0"
+SRC_URI[sha256sum] = "123e368227c11d5c17fc1aa76cbdaffa345355eb51d172cd39fc74a5b468ff6a"
+
+inherit autotools pkgconfig gobject-introspection vala
+
+PACKAGECONFIG ?= "gstreamer"
+PACKAGECONFIG[gstreamer] = "--enable-gstreamer-metadata-backend,--disable-gstreamer-metadata-backend,gstreamer1.0 gstreamer1.0-plugins-base"
+
+FILES_${PN} += "${datadir}/gupnp-dlna-2.0/dlna-profiles"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb
new file mode 100644
index 000000000..0aa594dc7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-igd_0.2.4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Helpers for interacting with Internet Gateway Devices over UPnP"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://libgupnp-igd/gupnp-simple-igd.c;beginline=1;endline=21;md5=aa292c0d9390463a6e1055dc5fc68e80"
+
+DEPENDS = "glib-2.0 gupnp sqlite3"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.2/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "124371136b5a7b1056a3681780a62772"
+SRC_URI[sha256sum] = "38c4a6d7718d17eac17df95a3a8c337677eda77e58978129ad3182d769c38e44"
+
+inherit autotools pkgconfig gtk-doc gobject-introspection
+
+EXTRA_OECONF = "--disable-python"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb
new file mode 100644
index 000000000..3ddb818df
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp-tools_0.8.13.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Tools for GUPnP"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe \
+ file://src/network-light/main.c;beginline=1;endline=21;md5=2c39b3a000495dabd4932f231c7efed8"
+DEPENDS = "gupnp gupnp-av gtk+3 intltool-native"
+RRECOMMENDS_${PN} = "adwaita-icon-theme"
+
+SRC_URI = "http://download.gnome.org/sources/${BPN}/0.8/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "212d85ebce89b32468b59e1164050d40"
+SRC_URI[sha256sum] = "aa3decb9d532c0e2e505adc592f431fd81c0231ded2981129e87da13712479ed"
+inherit distro_features_check autotools pkgconfig gettext
+
+REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc
new file mode 100644
index 000000000..6ce963161
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp.inc
@@ -0,0 +1,25 @@
+SUMMARY = "UPnP framework"
+DESCRIPTION = "GUPnP is an elegant, object-oriented open source framework for creating UPnP devices and control points, written in C using GObject and libsoup. The GUPnP API is intended to be easy to use, efficient and flexible. It provides the same set of features as libupnp, but shields the developer from most of UPnP's internals."
+LICENSE = "LGPLv2+"
+
+DEPENDS = "e2fsprogs gssdp libsoup-2.4 libxml2"
+
+inherit autotools pkgconfig vala gobject-introspection
+
+# Copy vapigen.m4 so that it doesn't get removed by vala class
+# (normally this would be the right thing to do, but in gupnp the vapigen.m4 has only a custom macro)
+do_configure_prepend() {
+ cp -f ${S}/m4/vapigen.m4 ${S}/m4/vapigen-custom.m4 || true
+}
+
+FILES_${PN} = "${libdir}/*.so.*"
+FILES_${PN}-dev += "${bindir}/gupnp-binding-tool"
+
+RDEPENDS_${PN}-dev = "python-textutils python-xml"
+
+SYSROOT_PREPROCESS_FUNCS += "gupnp_sysroot_preprocess"
+
+gupnp_sysroot_preprocess () {
+ install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 755 ${D}${bindir}/gupnp-binding-tool ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb
new file mode 100644
index 000000000..1bdf7d79b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/gupnp/gupnp_1.0.2.bb
@@ -0,0 +1,8 @@
+require gupnp.inc
+
+SRC_URI = "${GNOME_MIRROR}/${BPN}/1.0/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "afd96fe73856b38aaf1baf7526e08edd"
+SRC_URI[sha256sum] = "5173fda779111c6b01cd4a5e41b594322be9d04f8c74d3361f0a0c2069c77610"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+ file://libgupnp/gupnp.h;beginline=1;endline=20;md5=d78a69d9b6e63ee2dc72e7b674d97520"
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb
new file mode 100644
index 000000000..7a524f2d5
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/libupnp/libupnp_git.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Portable SDK for UPnP* Devices"
+DESCRIPTION = "The Portable SDK for UPnP Devices is an SDK for development of \
+UPnP device and control point applications. It consists of the core UPnP \
+protocols along with a UPnP-specific eXtensible Markup Language (XML) parser \
+supporting the Document Object Model (DOM) Level 2 API and an optional, \
+integrated mini web server for serving UPnP related documents."
+HOMEPAGE = "http://pupnp.sourceforge.net/"
+LICENSE = "BSD"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b3190d5244e08e78e4c8ee78544f4863"
+
+PV = "1.8.2+git${SRCPV}"
+SRCREV = "56d6042abae861e8838a4e6b6b5b575b99e38f34"
+SRC_URI = "git://github.com/mrjimenez/pupnp.git;protocol=https"
+
+S="${WORKDIR}/git"
+
+inherit autotools
+
+EXTRA_OECONF += "--enable-reuseaddr" \ No newline at end of file
diff --git a/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb b/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb
new file mode 100644
index 000000000..e94c9ff8d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-connectivity/rygel/rygel_0.34.0.bb
@@ -0,0 +1,68 @@
+SUMMARY = "A UPnP AV media server and renderer"
+DESCRIPTION = "Rygel is a home media solution (UPnP AV MediaServer) that \
+allow you to easily share audio, video and pictures to other devices. \
+Additionally, media player software may use Rygel to become a MediaRenderer \
+that may be controlled remotely by a UPnP or DLNA Controller."
+HOMEPAGE = "http://live.gnome.org/Rygel"
+
+LICENSE = "LGPL1.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libxml2 glib-2.0 gssdp gupnp gupnp-av gupnp-dlna gstreamer1.0 gstreamer1.0-plugins-base ossp-uuid libgee libsoup-2.4 libmediaart-2.0 libunistring sqlite3 intltool-native"
+RDEPENDS_${PN} = "gstreamer1.0-plugins-base-playback shared-mime-info"
+RRECOMMENDS_${PN} = "rygel-plugin-media-export"
+
+GNOME_COMPRESS_TYPE = "xz"
+SRC_URI[archive.md5sum] = "7d8923324b280cd5452803d61176a34a"
+SRC_URI[archive.sha256sum] = "fbb2d46cbe4e750df6610b4c66b2278f06d1f71a257c7903e676ccb394dad418"
+
+inherit gnomebase vala gobject-introspection gettext systemd
+
+EXTRA_OECONF = "--disable-tracker-plugin --with-media-engine=gstreamer"
+
+PACKAGECONFIG ?= "external mpris ruih media-export gst-launch"
+
+PACKAGECONFIG_append = "${@bb.utils.contains("DISTRO_FEATURES", "x11", " gtk+3", "", d)}"
+
+PACKAGECONFIG[external] = "--enable-external-plugin,--disable-external-plugin"
+PACKAGECONFIG[mpris] = "--enable-mpris-plugin,--disable-mpris-plugin"
+PACKAGECONFIG[ruih] = "--enable-ruih-plugin,--disable-ruih-plugin"
+PACKAGECONFIG[media-export] = "--enable-media-export-plugin,--disable-media-export-plugin"
+PACKAGECONFIG[gst-launch] = "--enable-gst-launch-plugin,--disable-gst-launch-plugin"
+PACKAGECONFIG[gtk+3] = ",--without-ui,gtk+3"
+PACKAGECONFIG[lms] = "--enable-lms-plugin,--disable-lms-plugin"
+
+LIBV = "2.6"
+
+do_install_append() {
+ # Remove .la files for loadable modules
+ rm -f ${D}/${libdir}/rygel-${LIBV}/engines/*.la
+ rm -f ${D}/${libdir}/rygel-${LIBV}/plugins/*.la
+ if [ -e ${D}${libdir}/systemd/user/rygel.service ]; then
+ mkdir -p ${D}${systemd_unitdir}/system
+ mv ${D}${libdir}/systemd/user/rygel.service ${D}${systemd_unitdir}/system
+ rmdir ${D}${libdir}/systemd/user ${D}${libdir}/systemd
+ fi
+}
+
+FILES_${PN} += "${libdir}/rygel-${LIBV}/engines ${datadir}/dbus-1 ${datadir}/icons"
+FILES_${PN}-dbg += "${libdir}/rygel-${LIBV}/engines/.debug ${libdir}/rygel-${LIBV}/plugins/.debug"
+
+PACKAGES += "${PN}-meta"
+ALLOW_EMPTY_${PN}-meta = "1"
+
+PACKAGES_DYNAMIC = "${PN}-plugin-*"
+
+SYSTEMD_SERVICE_${PN} = "rygel.service"
+
+python populate_packages_prepend () {
+ rygel_libdir = d.expand('${libdir}/rygel-${LIBV}')
+ postinst = d.getVar('plugin_postinst')
+ pkgs = []
+
+ pkgs += do_split_packages(d, oe.path.join(rygel_libdir, "plugins"), 'librygel-(.*)\.so$', d.expand('${PN}-plugin-%s'), 'Rygel plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+ pkgs += do_split_packages(d, oe.path.join(rygel_libdir, "plugins"), '(.*)\.plugin$', d.expand('${PN}-plugin-%s'), 'Rygel plugin for %s', postinst=postinst, extra_depends=d.expand('${PN}'))
+
+ metapkg = d.getVar('PN') + '-meta'
+ d.setVar('RDEPENDS_' + metapkg, ' '.join(pkgs))
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch
new file mode 100644
index 000000000..179d04a55
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam/respect-cflags.patch
@@ -0,0 +1,38 @@
+Upstream-Status: Backport
+http://www.streamboard.tv/oscam/changeset/10068
+http://www.streamboard.tv/oscam/changeset/10070
+
+Index: /CMakeLists.txt
+===================================================================
+--- a/CMakeLists.txt (revision 10067)
++++ b/CMakeLists.txt (revision 10068)
+@@ -625,8 +625,8 @@
+ list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
+ add_definitions ("-W -Wall ")
+- set (CMAKE_C_FLAGS "-Wall -O2")
+- set (CMAKE_CXX_FLAGS "-Wall -O2")
+- set (CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
+- set (CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
++ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
++ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
++ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ # some optimisations
+Index: /csctapi/CMakeLists.txt
+===================================================================
+--- a/csctapi/CMakeLists.txt (revision 10069)
++++ b/csctapi/CMakeLists.txt (revision 10070)
+@@ -6,8 +6,8 @@
+ list(GET GCC_VERSION_COMPONENTS 0 GCC_MINOR)
+ add_definitions ("-W -Wall ")
+- set (CMAKE_C_FLAGS "-Wall -O2")
+- set (CMAKE_CXX_FLAGS "-Wall -O2")
+- set (CMAKE_C_FLAGS_DEBUG "-O0 -ggdb")
+- set (CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb")
++ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
++ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
++ set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -ggdb")
++ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -ggdb")
+ endif (CMAKE_COMPILER_IS_GNUCC)
+ # Mac extra removes to avoid ranlib warnings in some situations
diff --git a/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb
new file mode 100644
index 000000000..cac517ff5
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-dvb/oscam/oscam_svn.bb
@@ -0,0 +1,20 @@
+SUMMARY = "OSCam: Open Source Conditional Access Module"
+HOMEPAGE = "http://www.streamboard.tv/oscam/"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = "libusb1 openssl pcsc-lite"
+
+SRC_URI = "svn://www.streamboard.tv/svn/oscam;module=trunk;protocol=http \
+ file://respect-cflags.patch \
+"
+SRCREV = "9164"
+PV = "1.10+${SRCPV}"
+
+S = "${WORKDIR}/trunk"
+
+inherit cmake
+
+EXTRA_OECMAKE = "-DDEFAULT_CS_CONFDIR=${sysconfdir} -DCMAKE_BUILD_TYPE=Debug"
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb
new file mode 100644
index 000000000..fdb769943
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/jsonschemabuilder-native.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Kodi Media Center"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://JsonSchemaBuilder.cpp;beginline=2;endline=18;md5=1f67721215c03f66545390f6e45b99c7"
+
+SRCREV = "661dd08d221f5b2bf509a696a6aca5ee7d45bb27"
+
+PV = "17.1+gitr${SRCPV}"
+SRC_URI = "git://github.com/xbmc/xbmc.git;branch=Krypton"
+
+inherit autotools-brokensep gettext native
+
+S = "${WORKDIR}/git/tools/depends/native/JsonSchemaBuilder/src"
+
+do_compile_prepend() {
+ for i in $(find . -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' $i
+ done
+
+ for i in $(find . -name "*.mak*" -o -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' -e 's:-rpath \$(libdir):-rpath ${libdir}:g' $i
+ done
+}
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch
new file mode 100644
index 000000000..20b637788
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-Fix-file_Emu-on-musl.patch
@@ -0,0 +1,496 @@
+From 7ae4fcf290ffb0b76374efafeaee575456ac9023 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 6 Nov 2016 23:08:27 -0800
+Subject: [PATCH 01/10] Fix file_Emu on musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/cores/DllLoader/exports/emu_msvcrt.cpp | 28 ++--
+ xbmc/cores/DllLoader/exports/emu_msvcrt.h | 2 +-
+ .../DllLoader/exports/util/EmuFileWrapper.cpp | 172 +++++++++------------
+ xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h | 27 ++--
+ xbmc/cores/DllLoader/exports/wrapper.c | 4 +-
+ 5 files changed, 99 insertions(+), 134 deletions(-)
+
+diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
+index ab14942..a39014a 100644
+--- a/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
++++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.cpp
+@@ -51,6 +51,7 @@
+ #include <fcntl.h>
+ #include <time.h>
+ #include <signal.h>
++#include <paths.h>
+ #ifdef TARGET_POSIX
+ #include "PlatformDefs.h" // for __stat64
+ #include "XFileUtils.h"
+@@ -476,13 +477,10 @@ extern "C"
+ EmuFileObject* o = g_emuFileWrapper.GetFileObjectByDescriptor(fd);
+ if (o)
+ {
+- if(!o->used)
+- return NULL;
+-
+ int nmode = convert_fmode(mode);
+ if( (o->mode & nmode) != nmode)
+ CLog::Log(LOGWARNING, "dll_fdopen - mode 0x%x differs from fd mode 0x%x", nmode, o->mode);
+- return &o->file_emu;
++ return g_emuFileWrapper.GetStreamByFileObject(o);
+ }
+ else if (!IS_STD_DESCRIPTOR(fd))
+ {
+@@ -545,7 +543,7 @@ extern "C"
+ return -1;
+ }
+ object->mode = iMode;
+- return g_emuFileWrapper.GetDescriptorByStream(&object->file_emu);
++ return g_emuFileWrapper.GetDescriptorByFileObject(object);
+ }
+ delete pFile;
+ return -1;
+@@ -1214,8 +1212,8 @@ extern "C"
+ {
+ FILE* file = NULL;
+ #if defined(TARGET_LINUX) && !defined(TARGET_ANDROID)
+- if (strcmp(filename, MOUNTED) == 0
+- || strcmp(filename, MNTTAB) == 0)
++ if (strcmp(filename, _PATH_MOUNTED) == 0
++ || strcmp(filename, _PATH_MNTTAB) == 0)
+ {
+ CLog::Log(LOGINFO, "%s - something opened the mount file, let's hope it knows what it's doing", __FUNCTION__);
+ return fopen(filename, mode);
+@@ -1622,7 +1620,7 @@ extern "C"
+ int ret;
+
+ ret = dll_fgetpos64(stream, &tmpPos);
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+ *pos = (fpos_t)tmpPos;
+ #else
+ pos->__pos = (off_t)tmpPos.__pos;
+@@ -1635,8 +1633,9 @@ extern "C"
+ CFile* pFile = g_emuFileWrapper.GetFileXbmcByStream(stream);
+ if (pFile != NULL)
+ {
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+- *pos = pFile->GetPosition();
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++ uint64_t *ppos = (uint64_t *) pos;
++ *ppos = pFile->GetPosition();
+ #else
+ pos->__pos = pFile->GetPosition();
+ #endif
+@@ -1657,8 +1656,9 @@ extern "C"
+ int fd = g_emuFileWrapper.GetDescriptorByStream(stream);
+ if (fd >= 0)
+ {
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+- if (dll_lseeki64(fd, *pos, SEEK_SET) >= 0)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++ const uint64_t *ppos = (const uint64_t *) pos;
++ if (dll_lseeki64(fd, *ppos, SEEK_SET) >= 0)
+ #else
+ if (dll_lseeki64(fd, (__off64_t)pos->__pos, SEEK_SET) >= 0)
+ #endif
+@@ -1674,7 +1674,7 @@ extern "C"
+ {
+ // it might be something else than a file, or the file is not emulated
+ // let the operating system handle it
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+ return fsetpos(stream, pos);
+ #else
+ return fsetpos64(stream, pos);
+@@ -1690,7 +1690,7 @@ extern "C"
+ if (fd >= 0)
+ {
+ fpos64_t tmpPos;
+-#if !defined(TARGET_POSIX) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if !defined(__GLIBC__) || defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
+ tmpPos= *pos;
+ #else
+ tmpPos.__pos = (off64_t)(pos->__pos);
+diff --git a/xbmc/cores/DllLoader/exports/emu_msvcrt.h b/xbmc/cores/DllLoader/exports/emu_msvcrt.h
+index 3294d9a..c7c483f 100644
+--- a/xbmc/cores/DllLoader/exports/emu_msvcrt.h
++++ b/xbmc/cores/DllLoader/exports/emu_msvcrt.h
+@@ -24,7 +24,7 @@
+ #define _onexit_t void*
+ #endif
+
+-#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) || !defined(__GLIBC__)
+ typedef off_t __off_t;
+ typedef int64_t off64_t;
+ typedef off64_t __off64_t;
+diff --git a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp
+index 8927d41..e9a2ab0 100644
+--- a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp
++++ b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.cpp
+@@ -52,16 +52,7 @@ constexpr bool isValidFilePtr(FILE* f)
+ }
+ CEmuFileWrapper::CEmuFileWrapper()
+ {
+- // since we always use dlls we might just initialize it directly
+- for (int i = 0; i < MAX_EMULATED_FILES; i++)
+- {
+- memset(&m_files[i], 0, sizeof(EmuFileObject));
+- m_files[i].used = false;
+-#if defined(TARGET_WINDOWS) && (_MSC_VER >= 1900)
+- m_files[i].file_emu._Placeholder = new kodi_iobuf();
+-#endif
+- FileDescriptor(m_files[i].file_emu)->_file = -1;
+- }
++ memset(m_files, 0, sizeof(m_files));
+ }
+
+ CEmuFileWrapper::~CEmuFileWrapper()
+@@ -73,29 +64,7 @@ void CEmuFileWrapper::CleanUp()
+ {
+ CSingleLock lock(m_criticalSection);
+ for (int i = 0; i < MAX_EMULATED_FILES; i++)
+- {
+- if (m_files[i].used)
+- {
+- m_files[i].file_xbmc->Close();
+- delete m_files[i].file_xbmc;
+-
+- if (m_files[i].file_lock)
+- {
+- delete m_files[i].file_lock;
+- m_files[i].file_lock = nullptr;
+- }
+-#if !defined(TARGET_WINDOWS)
+- //Don't memset on Windows as it overwrites our pointer
+- memset(&m_files[i], 0, sizeof(EmuFileObject));
+-#endif
+- m_files[i].used = false;
+- FileDescriptor(m_files[i].file_emu)->_file = -1;
+- }
+-#if defined(TARGET_WINDOWS) && (_MSC_VER >= 1900)
+- delete static_cast<kodi_iobuf*>(m_files[i].file_emu._Placeholder);
+- m_files[i].file_emu._Placeholder = nullptr;
+-#endif
+- }
++ UnRegisterFileObject(&m_files[i], true);
+ }
+
+ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile)
+@@ -106,13 +75,11 @@ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile)
+
+ for (int i = 0; i < MAX_EMULATED_FILES; i++)
+ {
+- if (!m_files[i].used)
++ if (!m_files[i].file_xbmc)
+ {
+ // found a free location
+ object = &m_files[i];
+- object->used = true;
+ object->file_xbmc = pFile;
+- FileDescriptor(object->file_emu)->_file = (i + FILE_WRAPPER_OFFSET);
+ object->file_lock = new CCriticalSection();
+ break;
+ }
+@@ -121,82 +88,74 @@ EmuFileObject* CEmuFileWrapper::RegisterFileObject(XFILE::CFile* pFile)
+ return object;
+ }
+
+-void CEmuFileWrapper::UnRegisterFileObjectByDescriptor(int fd)
++void CEmuFileWrapper::UnRegisterFileObject(EmuFileObject *object, bool free_file)
++
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (! (i >= 0 && i < MAX_EMULATED_FILES))
+- return;
++ if (object && object->file_xbmc)
++ {
++ if (object->file_xbmc && free_file)
++ {
++ object->file_xbmc->Close();
++ delete object->file_xbmc;
++ }
++ if (object->file_lock)
++ {
++ delete object->file_lock;
++ }
+
+- if (!m_files[i].used)
+- return;
++ memset(object, 0, sizeof(*object));
++ }
++}
+
++void CEmuFileWrapper::UnRegisterFileObjectByDescriptor(int fd)
++{
+ CSingleLock lock(m_criticalSection);
+-
+- // we assume the emulated function alreay deleted the CFile object
+- if (m_files[i].file_lock)
+- {
+- delete m_files[i].file_lock;
+- m_files[i].file_lock = nullptr;
+- }
+-#if !defined(TARGET_WINDOWS)
+- //Don't memset on Windows as it overwrites our pointer
+- memset(&m_files[i], 0, sizeof(EmuFileObject));
+-#endif
+- m_files[i].used = false;
+- FileDescriptor(m_files[i].file_emu)->_file = -1;
++ UnRegisterFileObject(GetFileObjectByDescriptor(fd), false);
+ }
+
+ void CEmuFileWrapper::UnRegisterFileObjectByStream(FILE* stream)
+ {
+ if (isValidFilePtr(stream))
+ {
+- return UnRegisterFileObjectByDescriptor(FileDescriptor(*stream)->_file);
++ CSingleLock lock(m_criticalSection);
++ UnRegisterFileObject(GetFileObjectByStream(stream), false);
+ }
+ }
+
+ void CEmuFileWrapper::LockFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
++ EmuFileObject* object = GetFileObjectByDescriptor(fd);
++ if (object && object->file_xbmc)
+ {
+- if (m_files[i].used)
+- {
+- m_files[i].file_lock->lock();
+- }
++ object->file_lock->lock();
+ }
+ }
+
+ bool CEmuFileWrapper::TryLockFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
++ EmuFileObject* object = GetFileObjectByDescriptor(fd);
++ if (object && object->file_xbmc)
+ {
+- if (m_files[i].used)
+- {
+- return m_files[i].file_lock->try_lock();
+- }
++ return object->file_lock->try_lock();
+ }
+ return false;
+ }
+
+ void CEmuFileWrapper::UnlockFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
++ EmuFileObject* object = GetFileObjectByDescriptor(fd);
++ if (object && object->file_xbmc)
+ {
+- if (m_files[i].used)
+- {
+- m_files[i].file_lock->unlock();
+- }
++ object->file_lock->unlock();
+ }
+ }
+
+ EmuFileObject* CEmuFileWrapper::GetFileObjectByDescriptor(int fd)
+ {
+- int i = fd - FILE_WRAPPER_OFFSET;
++ int i = fd - 0x7000000;
+ if (i >= 0 && i < MAX_EMULATED_FILES)
+ {
+- if (m_files[i].used)
++ if (m_files[i].file_xbmc)
+ {
+ return &m_files[i];
+ }
+@@ -204,20 +163,39 @@ EmuFileObject* CEmuFileWrapper::GetFileObjectByDescriptor(int fd)
+ return nullptr;
+ }
+
++int CEmuFileWrapper::GetDescriptorByFileObject(EmuFileObject *object)
++{
++ int i = object - m_files;
++ if (i >= 0 && i < MAX_EMULATED_FILES)
++ {
++ return 0x7000000 + i;
++ }
++
++ return -1;
++}
++
+ EmuFileObject* CEmuFileWrapper::GetFileObjectByStream(FILE* stream)
+ {
+- if (isValidFilePtr(stream))
++ EmuFileObject *object = (EmuFileObject*) stream;
++ if (object >= &m_files[0] || object < &m_files[MAX_EMULATED_FILES])
+ {
+- return GetFileObjectByDescriptor(FileDescriptor(*stream)->_file);
++ if (object->file_xbmc)
++ {
++ return object;
++ }
+ }
++ return NULL;
++}
+
+- return nullptr;
++FILE* CEmuFileWrapper::GetStreamByFileObject(EmuFileObject *object)
++{
++ return (FILE*) object;
+ }
+
+ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByDescriptor(int fd)
+ {
+ auto object = GetFileObjectByDescriptor(fd);
+- if (object != nullptr && object->used)
++ if (object != nullptr)
+ {
+ return object->file_xbmc;
+ }
+@@ -228,8 +206,9 @@ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByStream(FILE* stream)
+ {
+ if (isValidFilePtr(stream))
+ {
+- auto object = GetFileObjectByDescriptor(FileDescriptor(*stream)->_file);
+- if (object != nullptr && object->used)
++ EmuFileObject* object = GetFileObjectByStream(stream);
++ if (object != NULL)
++
+ {
+ return object->file_xbmc;
+ }
+@@ -239,32 +218,21 @@ XFILE::CFile* CEmuFileWrapper::GetFileXbmcByStream(FILE* stream)
+
+ int CEmuFileWrapper::GetDescriptorByStream(FILE* stream)
+ {
+- if (isValidFilePtr(stream))
+- {
+- int i = FileDescriptor(*stream)->_file - FILE_WRAPPER_OFFSET;
+- if (i >= 0 && i < MAX_EMULATED_FILES)
+- {
+- return i + FILE_WRAPPER_OFFSET;
+- }
+- }
+- return -1;
++ return GetDescriptorByFileObject(GetFileObjectByStream(stream));
+ }
+
+ FILE* CEmuFileWrapper::GetStreamByDescriptor(int fd)
+ {
+- auto object = GetFileObjectByDescriptor(fd);
+- if (object != nullptr && object->used)
+- {
+- return &object->file_emu;
+- }
+- return nullptr;
++ return GetStreamByFileObject(GetFileObjectByDescriptor(fd));
++}
++
++bool CEmuFileWrapper::DescriptorIsEmulatedFile(int fd)
++{
++ return GetFileObjectByDescriptor(fd) != NULL;
+ }
+
+ bool CEmuFileWrapper::StreamIsEmulatedFile(FILE* stream)
+ {
+- if (isValidFilePtr(stream))
+- {
+- return DescriptorIsEmulatedFile(FileDescriptor(*stream)->_file);
+- }
+- return false;
++ return GetFileObjectByStream(stream) != NULL;
+ }
++
+diff --git a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h
+index 786fa85..311a5cf 100644
+--- a/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h
++++ b/xbmc/cores/DllLoader/exports/util/EmuFileWrapper.h
+@@ -25,14 +25,14 @@
+ #include "system.h"
+ #include "threads/CriticalSection.h"
+
+-#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__)
+-#define _file _fileno
+-#elif defined(__UCLIBC__)
+-#define _file __filedes
+-#endif
++//#if defined(TARGET_POSIX) && !defined(TARGET_DARWIN) && !defined(TARGET_FREEBSD) && !defined(TARGET_ANDROID) && !defined(__UCLIBC__)
++//#define _file _fileno
++//#elif defined(__UCLIBC__)
++//#define _file __filedes
++//#endif
+
+ #define MAX_EMULATED_FILES 50
+-#define FILE_WRAPPER_OFFSET 0x00000200
++//#define FILE_WRAPPER_OFFSET 0x00000200
+
+ namespace XFILE
+ {
+@@ -47,12 +47,9 @@ struct kodi_iobuf {
+
+ typedef struct stEmuFileObject
+ {
+- FILE file_emu;
+ XFILE::CFile* file_xbmc;
+ CCriticalSection *file_lock;
+ int mode;
+- //Stick this last to avoid 3-7 bytes of padding
+- bool used;
+ } EmuFileObject;
+
+ class CEmuFileWrapper
+@@ -67,22 +64,22 @@ public:
+ void CleanUp();
+
+ EmuFileObject* RegisterFileObject(XFILE::CFile* pFile);
++ void UnRegisterFileObject(EmuFileObject*, bool free_file);
+ void UnRegisterFileObjectByDescriptor(int fd);
+ void UnRegisterFileObjectByStream(FILE* stream);
+ void LockFileObjectByDescriptor(int fd);
+ bool TryLockFileObjectByDescriptor(int fd);
+ void UnlockFileObjectByDescriptor(int fd);
+ EmuFileObject* GetFileObjectByDescriptor(int fd);
++ int GetDescriptorByFileObject(EmuFileObject*);
+ EmuFileObject* GetFileObjectByStream(FILE* stream);
++ FILE* GetStreamByFileObject(EmuFileObject*);
+ XFILE::CFile* GetFileXbmcByDescriptor(int fd);
+ XFILE::CFile* GetFileXbmcByStream(FILE* stream);
+- static int GetDescriptorByStream(FILE* stream);
++ int GetDescriptorByStream(FILE* stream);
+ FILE* GetStreamByDescriptor(int fd);
+- static constexpr bool DescriptorIsEmulatedFile(int fd)
+- {
+- return fd >= FILE_WRAPPER_OFFSET && fd < FILE_WRAPPER_OFFSET + MAX_EMULATED_FILES;
+- }
+- static bool StreamIsEmulatedFile(FILE* stream);
++ bool DescriptorIsEmulatedFile(int fd);
++ bool StreamIsEmulatedFile(FILE* stream);
+ private:
+ EmuFileObject m_files[MAX_EMULATED_FILES];
+ CCriticalSection m_criticalSection;
+diff --git a/xbmc/cores/DllLoader/exports/wrapper.c b/xbmc/cores/DllLoader/exports/wrapper.c
+index e363662..07825f3 100644
+--- a/xbmc/cores/DllLoader/exports/wrapper.c
++++ b/xbmc/cores/DllLoader/exports/wrapper.c
+@@ -39,13 +39,13 @@
+ #endif
+ #include <dlfcn.h>
+
+-#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID)
++#if defined(TARGET_DARWIN) || defined(TARGET_FREEBSD) || defined(TARGET_ANDROID) || !defined(__GLIBC__)
+ typedef off_t __off_t;
+ typedef int64_t off64_t;
+ typedef off64_t __off64_t;
+ typedef fpos_t fpos64_t;
+ #define stat64 stat
+-#if defined(TARGET_DARWIN) || defined(TARGET_ANDROID)
++#if defined(TARGET_DARWIN) || defined(TARGET_ANDROID) || !defined(__GLIBC__)
+ #define _G_va_list va_list
+ #endif
+ #endif
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch
new file mode 100644
index 000000000..12a6c06e8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0001-change-order-of-detecting-libegl-and-libgles2.patch
@@ -0,0 +1,32 @@
+From 21524598110e7a55113205dda4bc1a6d5987111c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 9 May 2017 06:41:33 +0000
+Subject: [PATCH] change order of detecting libegl and libgles2
+
+This actually helps building it on rpi/userland
+where libEGL depends on few functions from libGLESv2
+see
+https://www.raspberrypi.org/forums/viewtopic.php?t=7090
+
+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 b9e4240..1ca0297 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -951,8 +951,8 @@ if test "$use_gles" = "yes"; then
+ AC_MSG_RESULT(== WARNING: OpenGLES support is assumed.)
+ LIBS="$LIBS -lEGL -lGLESv2 -lbcm_host -lvcos -lvchiq_arm -lmmal -lmmal_core -lmmal_util -lvcsm"
+ else
+- AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library))
+ AC_CHECK_LIB([GLESv2],[main],, AC_MSG_ERROR($missing_library))
++ AC_CHECK_LIB([EGL], [main],, AC_MSG_ERROR($missing_library))
+ fi
+ fi
+ else
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch
new file mode 100644
index 000000000..463a5c4f8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0002-Remove-FILEWRAP.patch
@@ -0,0 +1,46 @@
+From ad1977a358319093b305df6d84be6db676ef1e4a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 6 Nov 2016 22:35:16 -0800
+Subject: [PATCH 02/10] Remove FILEWRAP
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/utils/posix/PosixInterfaceForCLog.cpp | 6 +-----
+ xbmc/utils/posix/PosixInterfaceForCLog.h | 4 +---
+ 2 files changed, 2 insertions(+), 8 deletions(-)
+
+Index: git/xbmc/utils/posix/PosixInterfaceForCLog.cpp
+===================================================================
+--- git.orig/xbmc/utils/posix/PosixInterfaceForCLog.cpp
++++ git/xbmc/utils/posix/PosixInterfaceForCLog.cpp
+@@ -29,10 +29,6 @@
+ #include "platform/android/activity/XBMCApp.h"
+ #endif // TARGET_ANDROID
+
+-struct FILEWRAP : public FILE
+-{};
+-
+-
+ CPosixInterfaceForCLog::CPosixInterfaceForCLog() :
+ m_file(NULL)
+ { }
+@@ -52,7 +48,7 @@ bool CPosixInterfaceForCLog::OpenLogFile
+ (void)remove(backupOldLogToFilename.c_str()); // if it's failed, try to continue
+ (void)rename(logFilename.c_str(), backupOldLogToFilename.c_str()); // if it's failed, try to continue
+
+- m_file = (FILEWRAP*)fopen(logFilename.c_str(), "wb");
++ m_file = fopen(logFilename.c_str(), "wb");
+ if (!m_file)
+ return false; // error, can't open log file
+
+Index: git/xbmc/utils/posix/PosixInterfaceForCLog.h
+===================================================================
+--- git.orig/xbmc/utils/posix/PosixInterfaceForCLog.h
++++ git/xbmc/utils/posix/PosixInterfaceForCLog.h
+@@ -34,5 +34,5 @@ public:
+ void PrintDebugString(const std::string& debugString);
+ static void GetCurrentLocalTime(int& hour, int& minute, int& second, double& millisecond);
+ private:
+- FILEWRAP* m_file;
++ FILE* m_file;
+ };
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch
new file mode 100644
index 000000000..49217a4f7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch
@@ -0,0 +1,25 @@
+From a91a3ba229dc5903935f7dd98dd03bbb4fe5ac1f Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sat, 6 Feb 2016 15:43:01 +0100
+Subject: [PATCH 03/10] configure: don't try to run stuff to find tinyxml
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 34fe643..3132dc1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1043,7 +1043,7 @@ fi
+ AC_LANG_PUSH([C++])
+ PKG_CHECK_MODULES([TINYXML], [tinyxml >= 2.6.2],
+ [INCLUDES="$INCLUDES $TINYXML_CFLAGS"; LIBS="$LIBS $TINYXML_LIBS"],
+- [AC_RUN_IFELSE(
++ [AC_COMPILE_IFELSE(
+ [AC_LANG_SOURCE([[
+ #include <stdlib.h>
+ #include <tinyxml.h>
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch
new file mode 100644
index 000000000..dc3743935
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0004-handle-SIGTERM.patch
@@ -0,0 +1,163 @@
+From 49046c1685465a5486fe9e1c04b99c585aab6862 Mon Sep 17 00:00:00 2001
+From: Stefan Saraev <stefan@saraev.ca>
+Date: Wed, 2 Nov 2016 11:28:34 -0700
+Subject: [PATCH 04/10] handle SIGTERM
+
+0. CApplication::Stop cant be trusted. (deadlocks crashes and boo)
+
+so, when shutdown/reboot is requested:
+
+1. save an exit code (for CEC...)
+2. call CPowerManager::{Reboot,PowerDown}
+3. ... then systemd sends TERM and waits xx seconds before sending KILL
+4. CApplication::Stop has xx seconds to save guisettings.xml and boo
+5. CEC thread has xx seconds to switch off after it received OnQuit
+6. addons / pvrmanager / cec / everything else.. are free to deadlock / crash now, we dont care
+7. KILL
+
+Signed-off-by: Stefan Saraev <stefan@saraev.ca>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/Application.cpp | 17 ++++++++++++-----
+ xbmc/Application.h | 1 +
+ xbmc/XBApplicationEx.cpp | 1 +
+ xbmc/XBApplicationEx.h | 1 +
+ xbmc/platform/posix/main.cpp | 15 +++++++++++++++
+ 5 files changed, 30 insertions(+), 5 deletions(-)
+
+diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
+index 100a2f2..fda892d 100644
+--- a/xbmc/Application.cpp
++++ b/xbmc/Application.cpp
+@@ -2426,12 +2426,12 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg)
+ switch (pMsg->dwMessage)
+ {
+ case TMSG_POWERDOWN:
+- Stop(EXITCODE_POWERDOWN);
++ SetExitCode(EXITCODE_POWERDOWN);
+ g_powerManager.Powerdown();
+ break;
+
+ case TMSG_QUIT:
+- Stop(EXITCODE_QUIT);
++ SetExitCode(EXITCODE_QUIT);
+ break;
+
+ case TMSG_SHUTDOWN:
+@@ -2452,12 +2452,13 @@ void CApplication::OnApplicationMessage(ThreadMessage* pMsg)
+
+ case TMSG_RESTART:
+ case TMSG_RESET:
+- Stop(EXITCODE_REBOOT);
++ SetExitCode(EXITCODE_REBOOT);
+ g_powerManager.Reboot();
+ break;
+
+ case TMSG_RESTARTAPP:
+ #if defined(TARGET_WINDOWS) || defined(TARGET_LINUX)
++ SetExitCode(EXITCODE_RESTARTAPP);
+ Stop(EXITCODE_RESTARTAPP);
+ #endif
+ break;
+@@ -2881,6 +2882,13 @@ bool CApplication::Cleanup()
+ }
+ }
+
++void CApplication::SetExitCode(int exitCode)
++{
++ // save it for CEC
++ m_ExitCode = exitCode;
++ m_ExitCodeSet = true;
++}
++
+ void CApplication::Stop(int exitCode)
+ {
+ try
+@@ -2888,7 +2896,7 @@ void CApplication::Stop(int exitCode)
+ m_frameMoveGuard.unlock();
+
+ CVariant vExitCode(CVariant::VariantTypeObject);
+- vExitCode["exitcode"] = exitCode;
++ vExitCode["exitcode"] = m_ExitCode;
+ CAnnouncementManager::GetInstance().Announce(System, "xbmc", "OnQuit", vExitCode);
+
+ // Abort any active screensaver
+@@ -2922,7 +2930,6 @@ void CApplication::Stop(int exitCode)
+
+ m_bStop = true;
+ m_AppFocused = false;
+- m_ExitCode = exitCode;
+ CLog::Log(LOGNOTICE, "stop all");
+
+ // cancel any jobs from the jobmanager
+diff --git a/xbmc/Application.h b/xbmc/Application.h
+index a9d9bf5..e536deb 100644
+--- a/xbmc/Application.h
++++ b/xbmc/Application.h
+@@ -159,6 +159,7 @@ public:
+ void StopPVRManager();
+ void ReinitPVRManager();
+ bool IsCurrentThread() const;
++ void SetExitCode(int exitCode);
+ void Stop(int exitCode);
+ void RestartApp();
+ void UnloadSkin(bool forReload = false);
+diff --git a/xbmc/XBApplicationEx.cpp b/xbmc/XBApplicationEx.cpp
+index 035aed2..34102f5 100644
+--- a/xbmc/XBApplicationEx.cpp
++++ b/xbmc/XBApplicationEx.cpp
+@@ -46,6 +46,7 @@ CXBApplicationEx::CXBApplicationEx()
+ m_bStop = false;
+ m_AppFocused = true;
+ m_ExitCode = EXITCODE_QUIT;
++ m_ExitCodeSet = false;
+ m_renderGUI = false;
+ }
+
+diff --git a/xbmc/XBApplicationEx.h b/xbmc/XBApplicationEx.h
+index 9bc14fa..f696b89 100644
+--- a/xbmc/XBApplicationEx.h
++++ b/xbmc/XBApplicationEx.h
+@@ -42,6 +42,7 @@ public:
+ // Variables for timing
+ bool m_bStop;
+ int m_ExitCode;
++ bool m_ExitCodeSet;
+ bool m_AppFocused;
+ bool m_renderGUI;
+
+diff --git a/xbmc/platform/posix/main.cpp b/xbmc/platform/posix/main.cpp
+index a8b64e5..3d80032 100644
+--- a/xbmc/platform/posix/main.cpp
++++ b/xbmc/platform/posix/main.cpp
+@@ -41,12 +41,27 @@
+ #include "input/linux/LIRC.h"
+ #endif
+ #include "platform/XbmcContext.h"
++#include "Application.h"
++
++void xbmc_term_handler(int signum)
++{
++ CLog::Log(LOGINFO, "Received SIGTERM...");
++ if (!g_application.m_ExitCodeSet)
++ g_application.SetExitCode(EXITCODE_RESTARTAPP);
++ g_application.Stop(EXITCODE_RESTARTAPP);
++}
+
+ #ifdef __cplusplus
+ extern "C"
+ #endif
+ int main(int argc, char* argv[])
+ {
++ // SIGTERM handler
++ struct sigaction action;
++ memset(&action, 0, sizeof(struct sigaction));
++ action.sa_handler = xbmc_term_handler;
++ sigaction(SIGTERM, &action, NULL);
++
+ // set up some xbmc specific relationships
+ XBMC::Context context;
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch
new file mode 100644
index 000000000..ee10c40ac
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0005-add-support-to-read-frequency-output-if-using-intel-.patch
@@ -0,0 +1,26 @@
+From 4d1368d20f04216aec9551d9845b305f96a21015 Mon Sep 17 00:00:00 2001
+From: Stephan Raue <stephan@openelec.tv>
+Date: Mon, 1 Sep 2014 03:16:37 +0200
+Subject: [PATCH 05/10] add support to read frequency output if using intel's
+ pstate driver
+
+---
+ xbmc/utils/CPUInfo.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/xbmc/utils/CPUInfo.cpp b/xbmc/utils/CPUInfo.cpp
+index 5e2ebbd..fd04d5a 100644
+--- a/xbmc/utils/CPUInfo.cpp
++++ b/xbmc/utils/CPUInfo.cpp
+@@ -274,6 +274,8 @@ CCPUInfo::CCPUInfo(void)
+ m_fProcTemperature = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); // On Raspberry PIs
+
+ m_fCPUFreq = fopen ("/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq", "r");
++ if (m_fCPUFreq == NULL)
++ m_fCPUFreq = fopen ("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq", "r");
+ if (!m_fCPUFreq)
+ {
+ m_cpuInfoForFreq = true;
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch
new file mode 100644
index 000000000..08dfac324
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0006-Disable-DVD-support.patch
@@ -0,0 +1,35 @@
+From 3d3ec391038c6ee73897a7fab753b11b589de1ed Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 2 Nov 2016 12:39:20 -0700
+Subject: [PATCH 06/10] Disable DVD support
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.in | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 0d70e9b..050c7ca 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -10,8 +10,7 @@ EC_DIRS= \
+ tools/EventClients
+
+ DVDPCODECS_DIRS= \
+- lib \
+- lib/libdvd
++ lib
+
+ VideoPlayer_ARCHIVES=xbmc/cores/VideoPlayer/VideoPlayer.a \
+ xbmc/cores/VideoPlayer/DVDCodecs/DVDCodecs.a \
+@@ -347,7 +346,6 @@ libaddon: exports
+ $(MAKE) -C lib/addons/library.xbmc.pvr
+ $(MAKE) -C lib/addons/library.kodi.inputstream
+ dvdpcodecs: dllloader
+- $(MAKE) -C lib/libdvd
+
+ dvdpextcodecs:
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch
new file mode 100644
index 000000000..8fd7ece05
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0007-Always-compile-libcpluff-as-PIC.patch
@@ -0,0 +1,30 @@
+From d989cbdb7686c3b95dc749967f89b93e47f955a6 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 3 Nov 2016 13:10:00 -0700
+Subject: [PATCH 07/10] Always compile libcpluff as PIC
+
+Fixes errors e.g.
+
+ld: lib/cpluff/libcpluff/.libs/libcpluff.a(pcontrol.o): relocation R_X86_64_PC32 against symbol `cp_stop_plugins' can not be used when making a shared object; recompile with -fPIC
+
+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 3132dc1..ab4eea3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2385,7 +2385,7 @@ XB_CONFIG_MODULE([lib/cpluff], [
+ --prefix="${prefix}" --includedir="${includedir}" --libdir="${libdir}" --datadir="${datadir}" \
+ --host=$host_alias \
+ --build=$build_alias \
+- --target=$target_alias CFLAGS="$CFLAGS" CC="$CC" CXX="$CXX" LDFLAGS="$LDFLAGS" LIBS=""
++ --target=$target_alias --with-pic=yes CFLAGS="$CFLAGS" CC="$CC" CXX="$CXX" LDFLAGS="$LDFLAGS" LIBS=""
+ #LDFLAGS="$LDFLAGS -Wl,-read_only_relocs,suppress"
+ ], [0])
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch
new file mode 100644
index 000000000..9390144ce
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch
@@ -0,0 +1,43 @@
+From 51cd8d5f084013360b29fe497193288ebde2f4f9 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Wed, 29 Jul 2015 23:13:33 +0200
+Subject: [PATCH 08/10] kodi-config.cmake: use CMAKE_FIND_ROOT_PATH to fix
+ cross-compilation
+
+When cross-compiling, the location at build time of the libraries is
+not the same as the one at run-time. The CMAKE_FIND_ROOT_PATH variable
+is here to handle this difference, so use it in kodi-config.cmake.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ project/cmake/KodiConfig.cmake.in | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/project/cmake/KodiConfig.cmake.in b/project/cmake/KodiConfig.cmake.in
+index c02a680..9d6a566 100644
+--- a/project/cmake/KodiConfig.cmake.in
++++ b/project/cmake/KodiConfig.cmake.in
+@@ -7,10 +7,10 @@ if(NOT @APP_NAME_UC@_PREFIX)
+ set(@APP_NAME_UC@_PREFIX @APP_PREFIX@)
+ endif()
+ if(NOT @APP_NAME_UC@_INCLUDE_DIR)
+- set(@APP_NAME_UC@_INCLUDE_DIR @APP_INCLUDE_DIR@)
++ set(@APP_NAME_UC@_INCLUDE_DIR ${CMAKE_FIND_ROOT_PATH}/@APP_INCLUDE_DIR@)
+ endif()
+ if(NOT @APP_NAME_UC@_LIB_DIR)
+- set(@APP_NAME_UC@_LIB_DIR @APP_LIB_DIR@)
++ set(@APP_NAME_UC@_LIB_DIR ${CMAKE_FIND_ROOT_PATH}/@APP_LIB_DIR@)
+ endif()
+ if(NOT @APP_NAME_UC@_DATA_DIR)
+ set(@APP_NAME_UC@_DATA_DIR @APP_DATA_DIR@)
+@@ -19,6 +19,7 @@ if(NOT WIN32)
+ set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} @CXX11_SWITCH@")
+ endif()
+ list(APPEND CMAKE_MODULE_PATH @APP_LIB_DIR@ @APP_DATA_DIR@/cmake)
++list(APPEND CMAKE_MODULE_PATH ${CMAKE_FIND_ROOT_PATH}/@APP_LIB_DIR@ ${CMAKE_FIND_ROOT_PATH}/@APP_DATA_DIR@/cmake)
+
+ string(REPLACE ";" " " ARCH_DEFINES "@ARCH_DEFINES@")
+ add_definitions(${ARCH_DEFINES} -DBUILD_KODI_ADDON)
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch
new file mode 100644
index 000000000..f3e739aed
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0009-build-Add-support-for-musl-triplets.patch
@@ -0,0 +1,180 @@
+From 8b2bad58585af0f829fb06e19c9bd2b6caf30808 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 6 Nov 2016 11:54:41 -0800
+Subject: [PATCH 09/10] build: Add support for musl triplets
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 12 ++++++------
+ m4/xbmc_arch.m4 | 22 +++++++++++-----------
+ tools/depends/configure.ac | 12 ++++++------
+ 3 files changed, 23 insertions(+), 23 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index ab4eea3..925466a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -526,7 +526,7 @@ case $host in
+ use_x11=no
+ build_shared_lib=yes
+ ;;
+- i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
++ i*86*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="i486-linux"
+@@ -549,7 +549,7 @@ case $host in
+ fi
+ fi
+ ;;
+- x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="x86_64-linux"
+@@ -601,17 +601,17 @@ case $host in
+ DEPENDS_ROOT_FOR_XCODE=$(echo ${prefix%/*})
+ AC_SUBST([DEPENDS_ROOT_FOR_XCODE])
+ ;;
+- powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
++ powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*|powerpc-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="powerpc-linux"
+ ;;
+- powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*)
++ powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*|powerpc64*-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="powerpc64-linux"
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ target_platform=target_linux
+ CORE_SYSTEM_NAME=linux
+ ARCH="arm"
+@@ -621,7 +621,7 @@ case $host in
+ use_gl=no
+ USE_STATIC_FFMPEG=1
+ ;;
+- aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*)
++ aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*|aarch64*-*-linux-musl*)
+ target_platform=target_linux
+ ARCH="aarch64"
+ use_arch="aarch64"
+diff --git a/m4/xbmc_arch.m4 b/m4/xbmc_arch.m4
+index d28f263..ff5dc20 100644
+--- a/m4/xbmc_arch.m4
++++ b/m4/xbmc_arch.m4
+@@ -2,10 +2,10 @@ AC_DEFUN([XBMC_SETUP_ARCH_DEFINES],[
+
+ # build detection and setup - this is the native arch
+ case $build in
+- i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
++ i*86*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+- x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ i386-*-freebsd*)
+@@ -17,13 +17,13 @@ case $build in
+ *86*-apple-darwin*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX -D_LINUX")
+ ;;
+- powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
++ powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*|powerpc-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC")
+ ;;
+- powerpc64-*-linux-gnu*|powerpc64-*-linux-uclibc*)
++ powerpc64-*-linux-gnu*|powerpc64-*-linux-uclibc*|powerpc64-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC64")
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ *)
+@@ -33,10 +33,10 @@ esac
+
+ # host detection and setup - this is the target arch
+ case $host in
+- i*86*-linux-gnu*|i*86*-*-linux-uclibc*)
++ i*86*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+- x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64-*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ i386-*-freebsd*)
+@@ -54,16 +54,16 @@ case $host in
+ powerpc-apple-darwin*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_DARWIN -DTARGET_DARWIN_OSX -D_LINUX")
+ ;;
+- powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*)
++ powerpc-*-linux-gnu*|powerpc-*-linux-uclibc*|powerpc-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC")
+ ;;
+- powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*)
++ powerpc64*-*-linux-gnu*|powerpc64*-*-linux-uclibc*|powerpc64*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -D_POWERPC64")
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*|aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*|aarch64*-*-linux-gnu*|aarch64*-*-linux-uclibc*|aarch64*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+- mips*-*-linux-gnu*|mips*-*-linux-uclibc*)
++ mips*-*-linux-gnu*|mips*-*-linux-uclibc*|mips*-*-linux-musl*)
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ *-*linux-android*)
+diff --git a/tools/depends/configure.ac b/tools/depends/configure.ac
+index f438e5d..409f4d7 100644
+--- a/tools/depends/configure.ac
++++ b/tools/depends/configure.ac
+@@ -120,13 +120,13 @@ platform_cc=gcc
+ platform_cxx=g++
+
+ case $build in
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ build_os="linux"
+ ;;
+- *i686*-linux-gnu*|i*86*-*-linux-uclibc*)
++ *i686*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ build_os="linux"
+ ;;
+- x86_64*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ build_os="linux"
+ ;;
+ *darwin*)
+@@ -186,7 +186,7 @@ case $host in
+ #android builds are always cross
+ cross_compiling="yes"
+ ;;
+- arm*-*-linux-gnu*|arm*-*-linux-uclibc*)
++ arm*-*-linux-gnu*|arm*-*-linux-uclibc*|arm*-*-linux-musl*)
+ if test "$use_platform" = "auto"; then
+ if test "x$use_cpu" = "xauto"; then
+ use_cpu=$host_cpu
+@@ -210,12 +210,12 @@ case $host in
+ platform_os="linux"
+ fi
+ ;;
+- *i686*-linux-gnu*|i*86*-*-linux-uclibc*)
++ *i686*-linux-gnu*|i*86*-*-linux-uclibc*|i*86*-*-linux-musl*)
+ use_cpu=$host_cpu
+ use_toolchain="${use_toolchain:-/usr}"
+ platform_os="linux"
+ ;;
+- x86_64*-linux-gnu*|x86_64-*-linux-uclibc*)
++ x86_64*-linux-gnu*|x86_64-*-linux-uclibc*|x86_64-*-linux-musl*)
+ use_cpu=$host_cpu
+ use_toolchain="${use_toolchain:-/usr}"
+ platform_cflags="-fPIC -DPIC"
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch
new file mode 100644
index 000000000..e34a5b71e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch
@@ -0,0 +1,40 @@
+From 55233024648b5673dbf223586968e71cc4c70711 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 16 Nov 2016 18:49:36 -0800
+Subject: [PATCH 10/10] RssReader: Fix compiler warning comparing pointer to
+ zero
+
+Clang finds this warning
+RssReader.cpp:272:19: error: ordered comparison between pointer and zero ('TiXmlElement *' and 'int')
+ while (itemNode > 0)
+ ~~~~~~~~ ^ ~
+RssReader.cpp:276:22: error: ordered comparison between pointer and zero ('TiXmlNode *' and 'int')
+ while (childNode > 0)
+ ~~~~~~~~~ ^ ~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ xbmc/utils/RssReader.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/xbmc/utils/RssReader.cpp b/xbmc/utils/RssReader.cpp
+index 9186f56..2494dc8 100644
+--- a/xbmc/utils/RssReader.cpp
++++ b/xbmc/utils/RssReader.cpp
+@@ -269,11 +269,11 @@ void CRssReader::GetNewsItems(TiXmlElement* channelXmlNode, int iFeed)
+ if (m_tagSet.empty())
+ AddTag("title");
+
+- while (itemNode > 0)
++ while (itemNode != NULL)
+ {
+ TiXmlNode* childNode = itemNode->FirstChild();
+ mTagElements.clear();
+- while (childNode > 0)
++ while (childNode != NULL)
+ {
+ std::string strName = childNode->ValueStr();
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch
new file mode 100644
index 000000000..7ee44f1c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0011-Let-configure-pass-on-unknown-architectures-setting-.patch
@@ -0,0 +1,54 @@
+From 19a1ffc1450bd3ecfb7419d74c733b2e16bf47f3 Mon Sep 17 00:00:00 2001
+From: Balint Reczey <balint@balintreczey.hu>
+Date: Wed, 26 Aug 2015 08:14:41 +0200
+Subject: [PATCH 11/12] Let configure pass on unknown architectures setting
+ sane defaults
+
+This helps porting Kodi to new architectures while emitting warnings about
+entering uncharted territory.
+---
+ configure.ac | 3 ++-
+ m4/xbmc_arch.m4 | 6 ++++--
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 925466a..8369615 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -658,7 +658,8 @@ case $host in
+ USE_STATIC_FFMPEG=1
+ ;;
+ *)
+- AC_MSG_ERROR(unsupported host ($host))
++ ARCH=$host_cpu"-"$host_os
++ AC_MSG_WARN([unsupported host ($host), guessing ARCH as $ARCH.])
+ esac
+ AC_SUBST([ARCH])
+
+diff --git a/m4/xbmc_arch.m4 b/m4/xbmc_arch.m4
+index ff5dc20..dfb45fd 100644
+--- a/m4/xbmc_arch.m4
++++ b/m4/xbmc_arch.m4
+@@ -27,7 +27,8 @@ case $build in
+ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ ;;
+ *)
+- AC_MSG_ERROR(unsupported native build platform: $build)
++ AC_MSG_WARN([unsupported native build platform: $build])
++ AC_SUBST(NATIVE_ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ esac
+
+
+@@ -70,7 +71,8 @@ case $host in
+ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX -DTARGET_ANDROID")
+ ;;
+ *)
+- AC_MSG_ERROR(unsupported build target: $host)
++ AC_MSG_WARN([unsupported native build platform: $build])
++ AC_SUBST(ARCH_DEFINES, "-DTARGET_POSIX -DTARGET_LINUX -D_LINUX")
+ esac
+
+ if test "$target_platform" = "target_android" ; then
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch
new file mode 100644
index 000000000..8d70b3f8f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0012-Revert-droid-fix-builds-with-AML-disabled.patch
@@ -0,0 +1,87 @@
+From 9e88aa086083b80c05b2bf057b92682186c4e6dc Mon Sep 17 00:00:00 2001
+From: Balint Reczey <balint@balintreczey.hu>
+Date: Thu, 6 Oct 2016 18:12:18 +0200
+Subject: [PATCH 12/12] Revert "[droid] fix builds with AML disabled"
+
+This reverts commit 4733383b8f1c1dd0b95e9e5358425d8a0b7ba8fc.
+---
+ xbmc/utils/SystemInfo.cpp | 4 ----
+ xbmc/windowing/egl/EGLWrapper.cpp | 16 ++++++----------
+ 2 files changed, 6 insertions(+), 14 deletions(-)
+
+diff --git a/xbmc/utils/SystemInfo.cpp b/xbmc/utils/SystemInfo.cpp
+index fcc6733..52e7fa3 100644
+--- a/xbmc/utils/SystemInfo.cpp
++++ b/xbmc/utils/SystemInfo.cpp
+@@ -57,10 +57,8 @@
+ #include "utils/XMLUtils.h"
+ #if defined(TARGET_ANDROID)
+ #include "platform/android/jni/Build.h"
+-#if defined(HAS_LIBAMCODEC)
+ #include "utils/AMLUtils.h"
+ #endif
+-#endif
+
+ /* Platform identification */
+ #if defined(TARGET_DARWIN)
+@@ -873,11 +871,9 @@ bool CSysInfo::IsAeroDisabled()
+ bool CSysInfo::HasHW3DInterlaced()
+ {
+ #if defined(TARGET_ANDROID)
+-#if defined(HAS_LIBAMCODEC)
+ if (aml_hw3d_present())
+ return true;
+ #endif
+-#endif
+ return false;
+ }
+
+diff --git a/xbmc/windowing/egl/EGLWrapper.cpp b/xbmc/windowing/egl/EGLWrapper.cpp
+index 30f5757..583d43a 100644
+--- a/xbmc/windowing/egl/EGLWrapper.cpp
++++ b/xbmc/windowing/egl/EGLWrapper.cpp
+@@ -24,19 +24,15 @@
+ #include <assert.h>
+ #if defined(TARGET_ANDROID)
+ #include "EGLNativeTypeAndroid.h"
+-#if defined(HAS_LIBAMCODEC)
+ #include "EGLNativeTypeAmlAndroid.h"
+ #endif
+-#endif
+ #if defined(TARGET_RASPBERRY_PI)
+ #include "EGLNativeTypeRaspberryPI.h"
+ #endif
+ #if defined(HAS_IMXVPU)
+ #include "EGLNativeTypeIMX.h"
+ #endif
+-#if defined(TARGET_LINUX) && defined(HAS_LIBAMCODEC)
+ #include "EGLNativeTypeAmlogic.h"
+-#endif
+ #include "EGLWrapper.h"
+
+ #define CheckError() m_result = eglGetError(); if(m_result != EGL_SUCCESS) CLog::Log(LOGERROR, "EGL error in %s: %x",__FUNCTION__, m_result);
+@@ -91,15 +87,15 @@ bool CEGLWrapper::Initialize(const std::string &implementation)
+ // Try to create each backend in sequence and go with the first one
+ // that we know will work
+ if (
+-#if defined(TARGET_ANDROID) && defined(HAS_LIBAMCODEC)
+- (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAmlAndroid>(implementation))
+-#elif defined(TARGET_ANDROID)
+- (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAndroid>(implementation))
+-#elif defined(TARGET_RASPBERRY_PI)
++#if defined(TARGET_ANDROID)
++ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAmlAndroid>(implementation)) ||
++ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAndroid>(implementation)) ||
++#endif
++#if defined(TARGET_RASPBERRY_PI)
+ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeRaspberryPI>(implementation))
+ #elif defined(HAS_IMXVPU)
+ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeIMX>(implementation))
+-#elif defined(TARGET_LINUX) && defined(HAS_LIBAMCODEC)
++#else
+ (nativeGuess = CreateEGLNativeType<CEGLNativeTypeAmlogic>(implementation))
+ #endif
+ )
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch
new file mode 100644
index 000000000..c9c906644
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-17/0013-FTPParse.cpp-use-std-string.patch
@@ -0,0 +1,96 @@
+From 5fa10ff6b1b60abee172296d9c1dec8dfc10615c Mon Sep 17 00:00:00 2001
+From: Stefan Saraev <stefan@saraev.ca>
+Date: Sun, 7 May 2017 17:30:47 +0300
+Subject: [PATCH] FTPParse.cpp: use std::string
+
+Fixes build with newer gcc versions.
+
+Taken from [1]
+
+Upstream-Status: Backport [2]
+
+[1] https://git.busybox.net/buildroot/plain/package/kodi/0003-FTPParse.cpp-use-std-string.patch?id=e2f03a6bde19766a1ac047c5ccfb049b5c4f61ca
+[2] https://github.com/xbmc/xbmc/commit/5fa10ff6b1b60abee172296d9c1dec8dfc10615c
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ xbmc/filesystem/FTPParse.cpp | 44 ++++++++++++++++++++++----------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+diff --git a/xbmc/filesystem/FTPParse.cpp b/xbmc/filesystem/FTPParse.cpp
+index cfcc7c64ed..b0f676ae1a 100644
+--- a/xbmc/filesystem/FTPParse.cpp
++++ b/xbmc/filesystem/FTPParse.cpp
+@@ -34,7 +34,7 @@ CFTPParse::CFTPParse()
+ m_time = 0;
+ }
+
+-string CFTPParse::getName()
++std::string CFTPParse::getName()
+ {
+ return m_name;
+ }
+@@ -59,16 +59,16 @@ time_t CFTPParse::getTime()
+ return m_time;
+ }
+
+-void CFTPParse::setTime(string str)
++void CFTPParse::setTime(std::string str)
+ {
+ /* Variables used to capture patterns via the regexes */
+- string month;
+- string day;
+- string year;
+- string hour;
+- string minute;
+- string second;
+- string am_or_pm;
++ std::string month;
++ std::string day;
++ std::string year;
++ std::string hour;
++ std::string minute;
++ std::string second;
++ std::string am_or_pm;
+
+ /* time struct used to set the time_t variable */
+ struct tm time_struct = {};
+@@ -338,21 +338,21 @@ int CFTPParse::getDayOfWeek(int month, int date, int year)
+ return day_of_week;
+ }
+
+-int CFTPParse::FTPParse(string str)
++int CFTPParse::FTPParse(std::string str)
+ {
+ /* Various variable to capture patterns via the regexes */
+- string permissions;
+- string link_count;
+- string owner;
+- string group;
+- string size;
+- string date;
+- string name;
+- string type;
+- string stuff;
+- string facts;
+- string version;
+- string file_id;
++ std::string permissions;
++ std::string link_count;
++ std::string owner;
++ std::string group;
++ std::string size;
++ std::string date;
++ std::string name;
++ std::string type;
++ std::string stuff;
++ std::string facts;
++ std::string version;
++ std::string file_id;
+
+ /* Regex for standard Unix listing formats */
+ pcrecpp::RE unix_re("^([-bcdlps])" // type
+--
+2.11.0
+
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service
new file mode 100644
index 000000000..29d0394e4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi-startup/kodi.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Kodi media thing
+
+[Service]
+User=root
+Type=simple
+SuccessExitStatus=0 1
+IOSchedulingClass=realtime
+IOSchedulingPriority=0
+
+ExecStart=/usr/bin/xinit /usr/bin/kodi-standalone -- /usr/bin/X :0
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb
new file mode 100644
index 000000000..295618914
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mediacenter/kodi/kodi_17.bb
@@ -0,0 +1,216 @@
+SUMMARY = "Kodi Media Center"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=930e2a5f63425d8dd72dbd7391c43c46"
+
+FILESPATH =. "${FILE_DIRNAME}/kodi-17:"
+
+DEPENDS = " \
+ cmake-native \
+ curl-native \
+ gperf-native \
+ jsonschemabuilder-native \
+ nasm-native \
+ swig-native \
+ unzip-native \
+ yasm-native \
+ zip-native \
+ avahi \
+ boost \
+ bzip2 \
+ crossguid \
+ curl \
+ dcadec \
+ enca \
+ expat \
+ faad2 \
+ ffmpeg \
+ fontconfig \
+ fribidi \
+ giflib \
+ jasper \
+ libass \
+ libcdio \
+ libcec \
+ libmad \
+ libmicrohttpd \
+ libmms \
+ libmms \
+ libmodplug \
+ libpcre \
+ libplist \
+ libsamplerate0 \
+ libsdl-image \
+ libsdl-mixer \
+ libsquish \
+ libssh \
+ libtinyxml \
+ libusb1 \
+ libxslt \
+ lzo \
+ mpeg2dec \
+ python \
+ sqlite3 \
+ taglib \
+ virtual/egl \
+ virtual/libsdl \
+ wavpack \
+ yajl \
+ zlib \
+ ${@enable_glew(bb, d)} \
+"
+
+PROVIDES = "xbmc"
+
+SRCREV = "6abeebd5ba371547c8f04272296433f5e4e28e86"
+PV = "17.3+gitr${SRCPV}"
+ADDONSPV = "17.1"
+SRC_URI = "git://github.com/xbmc/xbmc.git;branch=Krypton \
+ https://repo.voidlinux.eu/distfiles/${BPN}-${ADDONSPV}-generated-addons.tar.xz;name=addons;unpack=0 \
+ file://0003-configure-don-t-try-to-run-stuff-to-find-tinyxml.patch \
+ file://0004-handle-SIGTERM.patch \
+ file://0005-add-support-to-read-frequency-output-if-using-intel-.patch \
+ file://0006-Disable-DVD-support.patch \
+ file://0007-Always-compile-libcpluff-as-PIC.patch \
+ file://0008-kodi-config.cmake-use-CMAKE_FIND_ROOT_PATH-to-fix-cr.patch \
+ file://0009-build-Add-support-for-musl-triplets.patch \
+ file://0010-RssReader-Fix-compiler-warning-comparing-pointer-to-.patch \
+ file://0011-Let-configure-pass-on-unknown-architectures-setting-.patch \
+ file://0012-Revert-droid-fix-builds-with-AML-disabled.patch \
+ file://0001-change-order-of-detecting-libegl-and-libgles2.patch \
+ file://0013-FTPParse.cpp-use-std-string.patch \
+"
+
+SRC_URI_append_libc-musl = " \
+ file://0001-Fix-file_Emu-on-musl.patch \
+ file://0002-Remove-FILEWRAP.patch \
+"
+SRC_URI[addons.md5sum] = "719614fa764011a18665d08af5c8c92f"
+SRC_URI[addons.sha256sum] = "350da57408c27473eaf40e7f544bc94841bf101dc4346085260c5c4af0adac97"
+
+inherit autotools-brokensep gettext pythonnative distro_features_check
+
+REQUIRED_DISTRO_FEATURES += "opengl"
+
+S = "${WORKDIR}/git"
+
+# breaks compilation
+ASNEEDED = ""
+
+ACCEL ?= ""
+ACCEL_x86 = "vaapi vdpau"
+ACCEL_x86-64 = "vaapi vdpau"
+
+PACKAGECONFIG ??= "${ACCEL} opengl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', 'openglesv2', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'samba', '', d)} \
+"
+
+PACKAGECONFIG[opengl] = "--enable-gl,--enable-gles,"
+PACKAGECONFIG[openglesv2] = "--enable-gles,--enable-gl,virtual/egl"
+PACKAGECONFIG[vaapi] = "--enable-vaapi,--disable-vaapi,libva"
+PACKAGECONFIG[vdpau] = "--enable-vdpau,--disable-vdpau,libvdpau"
+PACKAGECONFIG[mysql] = "--enable-mysql,--disable-mysql,mysql5"
+PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,libxinerama libxmu libxrandr libxtst"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[lcms] = "--enable-lcms2,--disable-lcms2,lcms"
+PACKAGECONFIG[samba] = "--enable-samba,--disable-samba,samba"
+
+EXTRA_OECONF = " \
+ --disable-debug \
+ --disable-libcap \
+ --disable-ccache \
+ --disable-mid \
+ --enable-libusb \
+ --enable-alsa \
+ --enable-airplay \
+ --disable-optical-drive \
+ --with-ffmpeg=shared \
+ --enable-texturepacker=no \
+ ac_cv_path_JAVA_EXE=/bin/true \
+"
+
+FULL_OPTIMIZATION_armv7a = "-fexpensive-optimizations -fomit-frame-pointer -O3 -ffast-math"
+FULL_OPTIMIZATION_armv7ve = "-fexpensive-optimizations -fomit-frame-pointer -O3 -ffast-math"
+BUILD_OPTIMIZATION = "${FULL_OPTIMIZATION}"
+
+LDFLAGS_append_mips = " -latomic"
+LDFLAGS_append_mipsel = " -latomic"
+LDFLAGS_append_powerpc = " -latomic"
+LDFLAGS_append_arm = " -latomic"
+
+EXTRA_OECONF_append = " LIBTOOL=${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool"
+
+# for python modules
+export HOST_SYS
+export BUILD_SYS
+export STAGING_LIBDIR
+export STAGING_INCDIR
+export PYTHON_DIR
+
+def enable_glew(bb, d):
+ if bb.utils.contains('PACKAGECONFIG', 'x11', True, False, d) and bb.utils.contains('DISTRO_FEATURES', 'opengl', True, False, d):
+ return "glew"
+ return ""
+
+do_configure() {
+ tar xf ${WORKDIR}/${BPN}-${ADDONSPV}-generated-addons.tar.xz -C ${S}/
+
+ ( for i in $(find ${S} -name configure.ac -or -name configure.in|grep -v ".pc") ; do
+ cd $(dirname $i) && gnu-configize --force || true
+ done )
+ ( for f in ${S}/xbmc/interfaces/python/generated/*.cpp; do
+ touch `echo $f|sed -e 's/.cpp$/.xml/g'`
+ done )
+
+ BOOTSTRAP_STANDALONE=1 make -f bootstrap.mk JSON_BUILDER="${STAGING_BINDIR_NATIVE}/JsonSchemaBuilder"
+ BOOTSTRAP_STANDALONE=1 make JAVA=/bin/true -f codegenerator.mk JSON_BUILDER="${STAGING_BINDIR_NATIVE}/JsonSchemaBuilder"
+ oe_runconf
+}
+
+do_compile_prepend() {
+ for i in $(find . -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' $i
+ done
+
+ for i in $(find . -name "*.mak*" -o -name "Makefile") ; do
+ sed -i -e 's:I/usr/include:I${STAGING_INCDIR}:g' -e 's:-rpath \$(libdir):-rpath ${libdir}:g' $i
+ done
+}
+
+INSANE_SKIP_${PN} = "rpaths"
+
+FILES_${PN} += "${datadir}/xsessions ${datadir}/icons ${libdir}/xbmc ${datadir}/xbmc"
+FILES_${PN}-dbg += "${libdir}/kodi/.debug ${libdir}/kodi/*/.debug ${libdir}/kodi/*/*/.debug ${libdir}/kodi/*/*/*/.debug"
+
+# kodi uses some kind of dlopen() method for libcec so we need to add it manually
+# OpenGL builds need glxinfo, that's in mesa-demos
+RRECOMMENDS_${PN}_append = " \
+ libcec \
+ python \
+ python-ctypes \
+ python-lang \
+ python-re \
+ python-netclient \
+ python-html \
+ python-difflib \
+ python-json \
+ python-zlib \
+ python-shell \
+ python-sqlite3 \
+ python-compression \
+ libcurl \
+ ${@bb.utils.contains('PACKAGECONFIG', 'x11', 'xrandr xdpyinfo', '', d)} \
+"
+RRECOMMENDS_${PN}_append_libc-glibc = " \
+ glibc-charmap-ibm850 \
+ glibc-gconv-ibm850 \
+ glibc-gconv-unicode \
+ glibc-gconv-utf-32 \
+ glibc-charmap-utf-8 \
+ glibc-localedata-en-us \
+"
+
+RPROVIDES_${PN} += "xbmc"
+
+TOOLCHAIN = "gcc"
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch
new file mode 100644
index 000000000..a01c7544b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/ldflags.patch
@@ -0,0 +1,57 @@
+Use LD and obey LDFLAGS
+
+Signed-off-by: Christopher Larson <chris_larson@mentor.com>
+Upstream-Status: Pending
+
+diff --git a/make/linux/Makefile b/make/linux/Makefile
+index 391b6e3..a2ac13e 100644
+--- a/make/linux/Makefile
++++ b/make/linux/Makefile
+@@ -64,6 +64,7 @@ objects_so:=$(patsubst %$(EXTENSION),%.lo,$(sources))
+ WARNINGFLAGS=-Wall -Wextra -Wno-unknown-pragmas -ansi -fno-gnu-keywords -Wshadow
+ COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
+ DEPENDFLAGS = $(CXXFLAGS) $(INCLUDE)
++LINKFLAGS=$(LDFLAGS)
+
+ ifeq (Darwin,$(shell uname -s))
+ all: staticlib
+@@ -91,7 +92,7 @@ $(LIBRARY): $(objects)
+ $(RANLIB) $@
+
+ $(LIBRARY_SO): $(objects_so)
+- $(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
++ $(LD) $(LINKFLAGS) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so)
+ rm -f $(LIBRARY_SO)
+ ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
+
+diff --git a/make/mingw32/Makefile b/make/mingw32/Makefile
+index e5986ef..6ca16aa 100644
+--- a/make/mingw32/Makefile
++++ b/make/mingw32/Makefile
+@@ -18,6 +18,7 @@ DEBUGFLAGS=-g -DDEBUG
+ endif
+ CROSS =
+ CXX = $(CROSS)g++
++LD = $(CXX)
+ CC = $(CROSS)gcc
+ WINDRES = $(CROSS)windres
+ RANLIB = $(CROSS)ranlib
+@@ -33,6 +34,7 @@ LIBS = libebml.a
+ endif
+ INCS = -I"$(shell pwd)/../.."
+ COMPILEFLAGS = $(DEBUGFLAGS) $(INCS) $(DLLFLAGS) $(CXXFLAGS)
++LINKFLAGS = $(LDFLAGS)
+
+ .PHONY: all all-before all-after clean clean-custom
+
+@@ -54,7 +56,7 @@ libebml.a: $(OBJ)
+ $(RANLIB) $@
+
+ libebml.dll: $(OBJ)
+- $(CXX) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
++ $(LD) $(LINKFLAGS) -shared -Wl,--export-all -Wl,--out-implib=$@.a -o $@ $(OBJ)
+
+ depend:
+ @echo Calculating dependecies:
+--
+2.8.0
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch
new file mode 100644
index 000000000..57eb3450d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml/override-uname.patch
@@ -0,0 +1,42 @@
+Allow override of the 'uname -s' for cross-compilation
+
+Signed-off-by: Christopher Larson <chris_larson@mentor.com>
+Upstream-Status: Pending
+
+diff --git a/make/linux/Makefile b/make/linux/Makefile
+index a2ac13e..4188bee 100644
+--- a/make/linux/Makefile
++++ b/make/linux/Makefile
+@@ -9,9 +9,11 @@
+ # 'make DEBUG=yes'.
+ #
+
++TARGET_OS ?= $(shell uname -s)
++
+ # Paths
+ # BeOS wants the libs and headers in /boot/home/config
+-ifeq (BeOS,$(shell uname -s))
++ifeq (BeOS,$(TARGET_OS))
+ prefix=/boot/home/config
+ else
+ prefix=/usr/local
+@@ -66,7 +68,7 @@ COMPILEFLAGS=$(WARNINGFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(DEBUGFLAGS) $(INCLUDE)
+ DEPENDFLAGS = $(CXXFLAGS) $(INCLUDE)
+ LINKFLAGS=$(LDFLAGS)
+
+-ifeq (Darwin,$(shell uname -s))
++ifeq (Darwin,$(TARGET_OS))
+ all: staticlib
+ else
+ all: staticlib sharedlib
+@@ -116,7 +118,7 @@ depend:
+ $(CXX) $(DEPENDFLAGS) -MM -MT $$o $$i >> .depend ; \
+ done
+
+-ifeq (Darwin,$(shell uname -s))
++ifeq (Darwin,$(TARGET_OS))
+ install: install_staticlib install_headers
+ else
+ install: install_staticlib install_sharedlib install_headers
+--
+2.8.0
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
new file mode 100644
index 000000000..16e17e9ab
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libebml/libebml_1.3.0.bb
@@ -0,0 +1,59 @@
+SUMMARY = "libebml is a C++ libary to parse EBML files"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=7fbc338309ac38fefcd64b04bb903e34"
+
+SRC_URI = "\
+ http://dl.matroska.org/downloads/libebml/libebml-${PV}.tar.bz2 \
+ file://ldflags.patch \
+ file://override-uname.patch \
+"
+SRC_URI[md5sum] = "efec729bf5a51e649e1d9d1f61c0ae7a"
+SRC_URI[sha256sum] = "83b074d6b62715aa0080406ea84d33df2e44b5d874096640233a4db49b8096de"
+
+inherit dos2unix
+
+LIBEBML_OS = "Unknown"
+LIBEBML_OS_linux = "Linux"
+LIBEBML_OS_darwin = "Darwin"
+LIBEBML_OS_mingw32 = "Windows"
+
+EXTRA_OEMAKE = "\
+ 'TARGET_OS=${LIBEBML_OS}' \
+ \
+ 'CXX=${CXX}' \
+ 'LD=${CXX}' \
+ 'AR=${AR}' \
+ 'RANLIB=${RANLIB}' \
+ \
+ 'DEBUGFLAGS=' \
+ 'CPPFLAGS=${CPPFLAGS}' \
+ 'CXXFLAGS=${CXXFLAGS}' \
+ 'LDFLAGS=${LDFLAGS}' \
+ \
+ 'prefix=${prefix}' \
+ 'libdir=${libdir}' \
+ 'includedir=${includedir}/ebml' \
+"
+
+do_compile () {
+ oe_runmake -C make/linux
+}
+
+do_install() {
+ cd ${S}/make/linux
+
+ install -d ${D}${libdir}
+ install -m 0644 libebml.a ${D}${libdir}
+ install -m 0755 libebml.so.* ${D}${libdir}
+ cp -R --no-dereference --preserve=mode,links -v libebml.so ${D}${libdir}
+
+ install -d ${D}${includedir}/ebml
+ for i in ../../ebml/*.h; do
+ install -m 0644 $i ${D}${includedir}/ebml
+ done
+
+ install -d ${D}${includedir}/ebml/c
+ for i in ../../ebml/c/*.h; do
+ install -m 0644 $i ${D}${includedir}/ebml/c
+ done
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch
new file mode 100644
index 000000000..90e997561
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska/0001-Makefile-Use-LINKFLAGS-during-link-step.patch
@@ -0,0 +1,28 @@
+From f0c879097c331d1dabe6ee92b583a8badb62ea6d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 08:26:35 -0700
+Subject: [PATCH] Makefile: Use LINKFLAGS during link step
+
+Adds much needed GNU_HASH section into the .so
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ make/linux/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/make/linux/Makefile b/make/linux/Makefile
+index 3ca7b0f..b5c9645 100644
+--- a/make/linux/Makefile
++++ b/make/linux/Makefile
+@@ -104,7 +104,7 @@ $(LIBRARY): $(objects)
+ $(RANLIB) $@
+
+ $(LIBRARY_SO): $(objects_so)
+- $(CXX) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so) -lebml
++ $(CXX) $(LINKFLAGS) -shared -Wl,-soname,$(LIBRARY_SO_VER) -o $(LIBRARY_SO_VER) $(objects_so) -lebml
+ rm -f $(LIBRARY_SO)
+ ln -s $(LIBRARY_SO_VER) $(LIBRARY_SO)
+
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
new file mode 100644
index 000000000..fdffa41ec
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-mkv/libmatroska/libmatroska_1.4.1.bb
@@ -0,0 +1,37 @@
+SUMMARY = "libmatroska is a C++ libary to parse Matroska files (.mkv and .mka)"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libebml"
+
+SRC_URI = "http://dl.matroska.org/downloads/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0001-Makefile-Use-LINKFLAGS-during-link-step.patch \
+ "
+SRC_URI[md5sum] = "f61b2e5086f4bb9d24a43cc8af43a719"
+SRC_URI[sha256sum] = "086f21873e925679babdabf793c3bb85c353d0cd79423543a3355e08e8a4efb7"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_compile() {
+ cd ${S}/make/linux
+ oe_runmake CROSS="${TARGET_PREFIX}"
+}
+
+do_install() {
+ cd ${S}/make/linux
+
+ install -d ${D}${libdir}
+ install -m 0644 libmatroska.a ${D}${libdir}
+ install -m 0755 libmatroska.so.* ${D}${libdir}
+ cp -R --no-dereference --preserve=mode,links -v libmatroska.so ${D}${libdir}
+
+ install -d ${D}${includedir}/matroska
+ for i in ../../matroska/*.h; do
+ install -m 0644 $i ${D}${includedir}/matroska
+ done
+
+ install -d ${D}${includedir}/matroska/c
+ for i in ../../matroska/c/*.h; do
+ install -m 0644 $i ${D}${includedir}/matroska/c
+ done
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch
new file mode 100644
index 000000000..64130d900
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0001-Fix-asneeded.patch
@@ -0,0 +1,37 @@
+From c17129561e784bb9efebee2380349f121db0a9db Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Wed, 5 Oct 2016 10:56:33 -0300
+Subject: [PATCH 1/3] Fix asneeded
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://git.backbone.ws/portage/overlay/commit/7a069112054fbb5dc94a857e9c020a38cb1c6fde
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 3b2aa7d..0489fc1 100644
+--- a/Makefile
++++ b/Makefile
+@@ -29,11 +29,11 @@ dep:
+
+ $(SND_PCM_BIN): $(SND_PCM_OBJECTS)
+ @echo LD $@
+- $(Q)$(LD) $(LDFLAGS) $(SND_PCM_LIBS) $(SND_PCM_OBJECTS) -o $(SND_PCM_BIN)
++ $(Q)$(LD) $(LDFLAGS) $(SND_PCM_OBJECTS) -o $(SND_PCM_BIN) $(SND_PCM_LIBS)
+
+ $(SND_CTL_BIN): $(SND_CTL_OBJECTS)
+ @echo LD $@
+- $(Q)$(LD) $(LDFLAGS) $(SND_CTL_LIBS) $(SND_CTL_OBJECTS) -o $(SND_CTL_BIN)
++ $(Q)$(LD) $(LDFLAGS) $(SND_CTL_OBJECTS) -o $(SND_CTL_BIN) $(SND_CTL_LIBS)
+
+ %.o: %.c
+ @echo GCC $<
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch
new file mode 100644
index 000000000..efce38070
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0002-Fix-Eq-CAPS-plugin-name.patch
@@ -0,0 +1,83 @@
+From d5c6c92045f9b6ad32365f39b8cc77f2fcd7d0f5 Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Wed, 5 Oct 2016 10:57:29 -0300
+Subject: [PATCH 2/3] Fix Eq CAPS plugin name
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://git.backbone.ws/portage/overlay/commit/7a069112054fbb5dc94a857e9c020a38cb1c6fde
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ README | 8 ++++----
+ ctl_equal.c | 2 +-
+ pcm_equal.c | 2 +-
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/README b/README
+index b77fd2d..2df3dc5 100644
+--- a/README
++++ b/README
+@@ -1,11 +1,11 @@
+ Alsaequal is a real-time adjustable equalizer plugin for ALSA. It can
+ be adjusted using any ALSA compatible mixer, e.g. alsamixergui.
+
+-Alsaequal uses the Eq CAPS LADSPA Plugin for audio processing, actually
++Alsaequal uses the Eq10 CAPS LADSPA Plugin for audio processing, actually
+ alsaequal is a generic LADSPA plugin interface with real-time access to
+ the LADSPA controls (the LADSPA plugin included with alsa doesn't allow
+ for real-time controls) but it was developed for and only tested with
+-Eq CAPS LADSPA plugin. You are welcome to try it with other plugins, it
++Eq10 CAPS LADSPA plugin. You are welcome to try it with other plugins, it
+ may work. Let me know how it goes, you can reach me at
+ <charles@thedigitalmachine.net>.
+
+@@ -66,7 +66,7 @@ ctl.<name_equal> {
+ library -- location of the LADSPA library, the default is
+ "/usr/lib/ladspa/caps.so"
+ module -- module name within the LADSPA library, the deafault
+- is "Eq"
++ is "Eq10"
+ channels -- number of channels, the default is 2
+ }
+
+@@ -81,7 +81,7 @@ pcm.<name_pcm> {
+ library -- location of the LADSPA library, the default is
+ "/usr/lib/ladspa/caps.so"
+ module -- module name within the LADSPA library, the deafault
+- is "Eq"
++ is "Eq10"
+ channels -- number of channels, the default is 2
+ }
+
+diff --git a/ctl_equal.c b/ctl_equal.c
+index 40747d4..afba793 100644
+--- a/ctl_equal.c
++++ b/ctl_equal.c
+@@ -167,7 +167,7 @@ SND_CTL_PLUGIN_DEFINE_FUNC(equal)
+ snd_ctl_equal_t *equal;
+ const char *controls = ".alsaequal.bin";
+ const char *library = "/usr/lib/ladspa/caps.so";
+- const char *module = "Eq";
++ const char *module = "Eq10";
+ long channels = 2;
+ const char *sufix = " Playback Volume";
+ int err, i, index;
+diff --git a/pcm_equal.c b/pcm_equal.c
+index 2bc87fb..b0b4265 100644
+--- a/pcm_equal.c
++++ b/pcm_equal.c
+@@ -151,7 +151,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(equal)
+ snd_config_t *sconf = NULL;
+ const char *controls = ".alsaequal.bin";
+ const char *library = "/usr/lib/ladspa/caps.so";
+- const char *module = "Eq";
++ const char *module = "Eq10";
+ long channels = 2;
+ int err;
+
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch
new file mode 100644
index 000000000..1c2503ed9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal/0003-Fix-mixer.patch
@@ -0,0 +1,92 @@
+From 665f68a863b4ac2e21b0a994dce7e2720c03aa9d Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Wed, 5 Oct 2016 11:02:18 -0300
+Subject: [PATCH 3/3] Fix mixer
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://git.backbone.ws/portage/overlay/commit/7a069112054fbb5dc94a857e9c020a38cb1c6fde
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ ctl_equal.c | 9 ++++++---
+ ladspa_utils.c | 6 ++++--
+ pcm_equal.c | 6 ++++--
+ 3 files changed, 14 insertions(+), 7 deletions(-)
+
+diff --git a/ctl_equal.c b/ctl_equal.c
+index afba793..dd90e88 100644
+--- a/ctl_equal.c
++++ b/ctl_equal.c
+@@ -263,7 +263,8 @@ SND_CTL_PLUGIN_DEFINE_FUNC(equal)
+ for(i = 0; i < equal->num_input_controls; i++) {
+ if(equal->control_data->control[i].type == LADSPA_CNTRL_INPUT) {
+ index = equal->control_data->control[i].index;
+- if(equal->klass->PortDescriptors[index] !=
++ if((equal->klass->PortDescriptors[index] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL)) !=
+ (LADSPA_PORT_INPUT | LADSPA_PORT_CONTROL)) {
+ SNDERR("Problem with control file %s, %d.", controls, index);
+ return -1;
+@@ -284,12 +285,14 @@ SND_CTL_PLUGIN_DEFINE_FUNC(equal)
+ }
+
+ /* Make sure that the control file makes sense */
+- if(equal->klass->PortDescriptors[equal->control_data->input_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->input_index] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO))!=
+ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+ }
+- if(equal->klass->PortDescriptors[equal->control_data->output_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->output_index] &
++ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO))!=
+ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+diff --git a/ladspa_utils.c b/ladspa_utils.c
+index 7b596da..0c00800 100644
+--- a/ladspa_utils.c
++++ b/ladspa_utils.c
+@@ -354,10 +354,12 @@ LADSPA_Control * LADSPAcontrolMMAP(const LADSPA_Descriptor *psDescriptor,
+ default_controls->control[index].type = LADSPA_CNTRL_OUTPUT;
+ }
+ index++;
+- } else if(psDescriptor->PortDescriptors[i] ==
++ } else if((psDescriptor->PortDescriptors[i] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) ==
+ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) {
+ default_controls->input_index = i;
+- } else if(psDescriptor->PortDescriptors[i] ==
++ } else if((psDescriptor->PortDescriptors[i] &
++ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) ==
+ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) {
+ default_controls->output_index = i;
+ }
+diff --git a/pcm_equal.c b/pcm_equal.c
+index b0b4265..8d98371 100644
+--- a/pcm_equal.c
++++ b/pcm_equal.c
+@@ -231,12 +231,14 @@ SND_PCM_PLUGIN_DEFINE_FUNC(equal)
+ }
+
+ /* Make sure that the control file makes sense */
+- if(equal->klass->PortDescriptors[equal->control_data->input_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->input_index] &
++ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) !=
+ (LADSPA_PORT_INPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+ }
+- if(equal->klass->PortDescriptors[equal->control_data->output_index] !=
++ if((equal->klass->PortDescriptors[equal->control_data->output_index] &
++ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) !=
+ (LADSPA_PORT_OUTPUT | LADSPA_PORT_AUDIO)) {
+ SNDERR("Problem with control file %s.", controls);
+ return -1;
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb
new file mode 100644
index 000000000..3bed70e1a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/alsa-equal/alsa-equal_0.6.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "A real-time adjustable equalizer plugin for ALSA"
+HOMEPAGE = "https://web.archive.org/web/20161105202833/http://thedigitalmachine.net/alsaequal.html"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
+
+DEPENDS = "alsa-lib"
+
+SRC_URI = " \
+ https://launchpad.net/ubuntu/+archive/primary/+files/alsaequal_${PV}.orig.tar.bz2 \
+ file://0001-Fix-asneeded.patch \
+ file://0002-Fix-Eq-CAPS-plugin-name.patch \
+ file://0003-Fix-mixer.patch \
+"
+
+SRC_URI[md5sum] = "d2edc7710c72cbf3ab297c414e35ebda"
+SRC_URI[sha256sum] = "916e7d152added24617efc350142438a46099efe062bd8781d36dbf10b4e6ff0"
+
+S = "${WORKDIR}/alsaequal"
+
+EXTRA_OEMAKE = " \
+ Q='' \
+ CC='${CC}' \
+ LD='${CC}' \
+ LDFLAGS='${LDFLAGS} -shared -lasound' \
+ CFLAGS='${CFLAGS} -I. -funroll-loops -ffast-math -fPIC -DPIC' \
+ SND_PCM_LIBS='-lasound' \
+ SND_CTL_LIBS='-lasound' \
+"
+
+do_compile() {
+ oe_runmake all
+}
+
+do_install() {
+ install -Dm 0644 libasound_module_ctl_equal.so ${D}${libdir}/alsa-lib/libasound_module_ctl_equal.so
+ install -Dm 0644 libasound_module_pcm_equal.so ${D}${libdir}/alsa-lib/libasound_module_pcm_equal.so
+}
+
+RDEPENDS_${PN} += " \
+ alsa-utils \
+ caps \
+"
+
+FILES_${PN} = "${libdir}/alsa-lib/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch
new file mode 100644
index 000000000..bd5e1b603
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-Do-not-use-obsolete-pow10f-function.patch
@@ -0,0 +1,50 @@
+From 0cc7362e171616dcfeb93c6e1576362761bf14e5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 31 Jan 2018 18:37:16 -0800
+Subject: [PATCH] Do not use obsolete pow10f() function
+
+exp10 name is standardized in TS 18661-4 and its
+available in glibc since version 2.1
+it has been now removed from glibc 2.27+
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ dsp/v4f_IIR2.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/dsp/v4f_IIR2.h b/dsp/v4f_IIR2.h
+index a68ecf5..ebd1234 100644
+--- a/dsp/v4f_IIR2.h
++++ b/dsp/v4f_IIR2.h
+@@ -33,7 +33,7 @@
+ namespace DSP {
+
+ #ifdef __APPLE__
+-inline float pow10f(float f) {return pow(10,f);}
++inline float exp10f(float f) {return __exp10f(f);}
+ #endif
+
+ class RBJv4
+@@ -142,7 +142,7 @@ class IIR2v4
+ /* A = pow (10, gain / 40) */
+ v4f_t A = (v4f_t) {.025,.025,.025,.025};
+ A *= gain;
+- A = v4f_map<pow10f> (A);
++ A = v4f_map<exp10f> (A);
+
+ RBJv4 p (f, Q);
+
+@@ -429,7 +429,7 @@ class IIR2v4Bank
+ /* A = pow (10, gain / 40) */
+ v4f_t A = (v4f_t) {.025,.025,.025,.025};
+ A *= gain[i];
+- A = v4f_map<pow10f> (A);
++ A = v4f_map<exp10f> (A);
+
+ RBJv4 p (f[i], Q[i]);
+
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch
new file mode 100644
index 000000000..1087b0e79
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/0001-basic.h-Use-c99-supported-stdint-types.patch
@@ -0,0 +1,46 @@
+From a5cea22294a9acb6eed955bd415f562a6cc36482 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 22 Mar 2017 11:54:23 -0700
+Subject: [PATCH] basic.h: Use c99 supported stdint types
+
+include stdint.h for getting the definitions for int types
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ basics.h | 17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/basics.h b/basics.h
+index 643d96e..1dc2fa7 100644
+--- a/basics.h
++++ b/basics.h
+@@ -46,17 +46,18 @@
+
+ #include <assert.h>
+ #include <stdio.h>
++#include <stdint.h>
+
+ #include "ladspa.h"
+
+-typedef __int8_t int8;
+-typedef __uint8_t uint8;
+-typedef __int16_t int16;
+-typedef __uint16_t uint16;
+-typedef __int32_t int32;
+-typedef __uint32_t uint32;
+-typedef __int64_t int64;
+-typedef __uint64_t uint64;
++typedef int8_t int8;
++typedef uint8_t uint8;
++typedef int16_t int16;
++typedef uint16_t uint16;
++typedef int32_t int32;
++typedef uint32_t uint32;
++typedef int64_t int64;
++typedef uint64_t uint64;
+
+ #define MIN_GAIN 1e-6 /* -120 dB */
+ /* smallest non-denormal 32 bit IEEE float is 1.18e-38 */
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch
new file mode 100644
index 000000000..1a050af91
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/Avoid-ambiguity-in-div-invocation.patch
@@ -0,0 +1,32 @@
+From 1ea09653692efdd6443fb6770e8523bf6c9e49b9 Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Thu, 6 Oct 2016 11:54:07 -0300
+Subject: Avoid ambiguity in div invocation
+Organization: O.S. Systems Software LTDA.
+
+Patch from:
+https://anonscm.debian.org/cgit/pkg-multimedia/caps.git/commit/?id=9a99c225fb813ae69f146e3d90f7b47bdbd97708
+
+Upstream-Status: Pending
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ AutoFilter.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/AutoFilter.cc b/AutoFilter.cc
+index fc087d0..bd6b12f 100644
+--- a/AutoFilter.cc
++++ b/AutoFilter.cc
+@@ -69,7 +69,7 @@ AutoFilter::activate()
+ void
+ AutoFilter::cycle (uint frames)
+ {
+- div_t qr = div (frames, blocksize);
++ div_t qr = div ((int)frames, (int)blocksize);
+ int blocks = qr.quot;
+ if (qr.rem) ++blocks;
+ double over_blocks = 1./blocks;
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch
new file mode 100644
index 000000000..3abd38189
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps/append_ldflags.patch
@@ -0,0 +1,18 @@
+Change the order of linker flags such that -shared is appearig after -pie/-fpie
+this helps in building the package when secuiry flags are enabled
+
+-Khem
+
+Index: caps-0.9.24/Makefile
+===================================================================
+--- caps-0.9.24.orig/Makefile
++++ caps-0.9.24/Makefile
+@@ -14,7 +14,7 @@ STRIP = strip
+ -include defines.make
+
+ CFLAGS += $(OPTS) $(_CFLAGS)
+-LDFLAGS += $(_LDFLAGS) $(CFLAGS)
++LDFLAGS += $(CFLAGS) $(_LDFLAGS)
+
+ PLUG = caps
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb
new file mode 100644
index 000000000..fe864c49c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/caps/caps_0.9.24.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "The CAPS Audio Plugin Suite - LADSPA plugin suite"
+HOMEPAGE = "http://quitte.de/dsp/caps.html"
+LICENSE = "GPL-3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "http://quitte.de/dsp/${PN}_${PV}.tar.bz2 \
+ file://Avoid-ambiguity-in-div-invocation.patch \
+ file://0001-basic.h-Use-c99-supported-stdint-types.patch \
+ file://append_ldflags.patch \
+ file://0001-Do-not-use-obsolete-pow10f-function.patch \
+ "
+
+SRC_URI[md5sum] = "c1d634038dcb54702306c0e30cb1c626"
+SRC_URI[sha256sum] = "f746feba57af316b159f0169de5d78b4fd1064c2c0c8017cb5856b2f22e83f20"
+
+S = "${WORKDIR}/${PN}-${PV}"
+
+EXTRA_OEMAKE = " \
+ CC='${CXX}' \
+ CFLAGS='${CFLAGS} -ffast-math -funroll-loops -fPIC -DPIC' \
+ ARCH='' \
+"
+do_compile() {
+ oe_runmake all
+}
+
+do_install() {
+ install -Dm 0644 caps.so ${D}${libdir}/ladspa/caps.so
+}
+
+FILES_${PN} = "${libdir}/ladspa/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
new file mode 100644
index 000000000..27fa0e585
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
@@ -0,0 +1,34 @@
+SUMMARY = "cdparanoia library"
+DESCRIPTION = "library used to read audio CDs, which is able to perform \
+error corrections, hence the name paranoia."
+HOMEPAGE = "https://www.xiph.org/"
+SECTION = "multimedia"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING-LGPL;md5=d370feaa1c9edcdbd29ca27ea3d2304d"
+
+SRC_URI = "http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-${PV}.src.tgz \
+ file://0001-Use-DESTDIR-in-install-Makefile-rule.patch \
+ file://0002-interface-remove-C-reserved-keyword.patch \
+ file://0003-Fix-missing-shared-object-LDFLAGS.patch \
+ file://dont-use-internal-configs.patch \
+ file://out-of-tree-build.patch \
+ file://0001-check-for-null-buffer-before-trying-a-byteswap.patch \
+ file://0002-Fix-printf-format-errors.patch \
+ file://0001-utils-Use-c99-compiler-independent-types.patch \
+ "
+SRC_URI[md5sum] = "b304bbe8ab63373924a744eac9ebc652"
+SRC_URI[sha256sum] = "005db45ef4ee017f5c32ec124f913a0546e77014266c6a1c50df902a55fe64df"
+
+# Uppercase letters are not allowed in the recipe name, thus the recipe can not be named cdparanoia-III and
+# we need to add the path to the extracted sources explicitely:
+S = "${WORKDIR}/cdparanoia-III-${PV}"
+
+# cdparanoia Makefile can not be used with several threads (because the static library target and the shared
+# library target use object files which are compiled in the same directory, the object files are just removed
+# between the compilation of those two targets)
+PARALLEL_MAKE = ""
+
+EXTRA_OECONF = "CC='${CC}' CFLAGS='${CFLAGS}'"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
new file mode 100644
index 000000000..7b0830034
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
@@ -0,0 +1,70 @@
+From 97c06ae955b270851f4fd2396c715f9c76591f37 Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Thu, 2 Apr 2015 10:15:08 +0200
+Subject: [PATCH] Use DESTDIR in "install" Makefile rule
+
+This change allows to perform installations in a sysroot folder, which is required e.g. by
+the recipes inheriting yocto autotool class, and is an autotool standard:
+make install DESTDIR=~/mysysroot
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ Makefile.in | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 3d235ad..df544c7 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -63,28 +63,28 @@ slib:
+ cd paranoia && $(MAKE) slib
+
+ install:
+- $(INSTALL) -d -m 0755 $(BINDIR)
+- $(INSTALL) -m 755 $(srcdir)/cdparanoia $(BINDIR)
+- $(INSTALL) -d -m 0755 $(MANDIR)
+- $(INSTALL) -d -m 0755 $(MANDIR)/man1
+- $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(MANDIR)/man1
+- $(INSTALL) -d -m 0755 $(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(INCLUDEDIR)
+- $(INSTALL) -d -m 0755 $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/utils.h $(INCLUDEDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR)
++ $(INSTALL) -m 755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)/man1
++ $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -d -m 0755 $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
+ ln -fs libcdda_interface.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_interface.so.0
++ $(DESTDIR)$(LIBDIR)/libcdda_interface.so.0
+ ln -fs libcdda_interface.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_interface.so
++ $(DESTDIR)$(LIBDIR)/libcdda_interface.so
+ ln -fs libcdda_paranoia.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_paranoia.so.0
++ $(DESTDIR)$(LIBDIR)/libcdda_paranoia.so.0
+ ln -fs libcdda_paranoia.so.0.$(VERSION) \
+- $(LIBDIR)/libcdda_paranoia.so
++ $(DESTDIR)$(LIBDIR)/libcdda_paranoia.so
+
+ cdparanoia: $(OFILES) $(LIBDEP)
+ $(LD) $(CFLAGS) $(LDFLAGS) $(OFILES) \
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch
new file mode 100644
index 000000000..682cf6e03
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-check-for-null-buffer-before-trying-a-byteswap.patch
@@ -0,0 +1,31 @@
+From c760c5d31f2412a5be5ac6896e6069d1cea08527 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 26 Jun 2017 22:31:45 -0700
+Subject: [PATCH 1/2] check for null buffer before trying a byteswap
+
+Author: Monty <paranoia@xiph.org>
+
+Patch from debian
+http://sources.debian.net/src/cdparanoia/3.10.2%2Bdebian-11/debian/patches/04-endian.patch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ interface/interface.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/interface/interface.c b/interface/interface.c
+index 526c2a9..763a0ea 100644
+--- a/interface/interface.c
++++ b/interface/interface.c
+@@ -118,7 +118,7 @@ long cdda_read_timed(cdrom_drive *d, void *buffer, long beginsector, long sector
+ if(d->bigendianp==-1) /* not determined yet */
+ d->bigendianp=data_bigendianp(d);
+
+- if(d->bigendianp!=bigendianp()){
++ if(buffer && d->bigendianp!=bigendianp()){
+ int i;
+ u_int16_t *p=(u_int16_t *)buffer;
+ long els=sectors*CD_FRAMESIZE_RAW/2;
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch
new file mode 100644
index 000000000..7699017f7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-utils-Use-c99-compiler-independent-types.patch
@@ -0,0 +1,49 @@
+From 89071cbc8d3ab9a15503f397580b7590338e5e91 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 17:23:45 -0700
+Subject: [PATCH] utils: Use c99 compiler independent types
+
+Make it portable across different platforms
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils.h | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/utils.h b/utils.h
+index 10dce58..73bba92 100644
+--- a/utils.h
++++ b/utils.h
+@@ -3,6 +3,7 @@
+ #include <stdio.h>
+ #include <errno.h>
+ #include <string.h>
++#include <stdint.h>
+
+ extern long buffering_write(int outf, char *buffer, long num);
+ extern int buffering_close(int fd);
+@@ -18,15 +19,15 @@ static inline int bigendianp(void){
+ }
+
+ static inline int32_t swap32(int32_t x){
+- return((((u_int32_t)x & 0x000000ffU) << 24) |
+- (((u_int32_t)x & 0x0000ff00U) << 8) |
+- (((u_int32_t)x & 0x00ff0000U) >> 8) |
+- (((u_int32_t)x & 0xff000000U) >> 24));
++ return((((uint32_t)x & 0x000000ffU) << 24) |
++ (((uint32_t)x & 0x0000ff00U) << 8) |
++ (((uint32_t)x & 0x00ff0000U) >> 8) |
++ (((uint32_t)x & 0xff000000U) >> 24));
+ }
+
+ static inline int16_t swap16(int16_t x){
+- return((((u_int16_t)x & 0x00ffU) << 8) |
+- (((u_int16_t)x & 0xff00U) >> 8));
++ return((((uint16_t)x & 0x00ffU) << 8) |
++ (((uint16_t)x & 0xff00U) >> 8));
+ }
+
+ #if BYTE_ORDER == LITTLE_ENDIAN
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch
new file mode 100644
index 000000000..024479ca7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-Fix-printf-format-errors.patch
@@ -0,0 +1,32 @@
+From f4f81bdadb9515938b3b5d13707bd4b9322fd967 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 26 Jun 2017 22:37:13 -0700
+Subject: [PATCH 2/2] Fix printf format errors
+
+error: format not a string literal and no format arguments
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ main.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/main.c b/main.c
+index 664acac..d568fb1 100644
+--- a/main.c
++++ b/main.c
+@@ -588,10 +588,10 @@ static void callback(long inpos, int function){
+ buffer[aheadposition+19]='>';
+ }
+
+- fprintf(stderr,buffer);
++ fprintf(stderr, "%s", buffer);
+
+ if (logfile != NULL && function==-1) {
+- fprintf(logfile,buffer+1);
++ fprintf(logfile, "%s", buffer+1);
+ fprintf(logfile,"\n\n");
+ fflush(logfile);
+ }
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
new file mode 100644
index 000000000..a5600a1c3
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
@@ -0,0 +1,605 @@
+From 12ea28398f8e5d4a4a23c62d511fc4f53584e51d Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Tue, 7 Apr 2015 11:07:56 +0200
+Subject: [PATCH] interface: remove C++ reserved keyword
+
+Because "private" was used in cdda_interface.h, this header file could not be
+compiled in C++.
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ interface/cdda_interface.h | 2 +-
+ interface/cooked_interface.c | 8 +--
+ interface/interface.c | 8 +--
+ interface/scan_devices.c | 22 ++++----
+ interface/scsi_interface.c | 128 +++++++++++++++++++++----------------------
+ interface/test_interface.c | 4 +-
+ 6 files changed, 86 insertions(+), 86 deletions(-)
+
+diff --git a/interface/cdda_interface.h b/interface/cdda_interface.h
+index 8487cb7..b738825 100644
+--- a/interface/cdda_interface.h
++++ b/interface/cdda_interface.h
+@@ -84,7 +84,7 @@ typedef struct cdrom_drive{
+ int is_atapi;
+ int is_mmc;
+
+- cdda_private_data_t *private;
++ cdda_private_data_t *priv; /* private is a C++ reserved keyword */
+ void *reserved;
+ unsigned char inqbytes[4];
+
+diff --git a/interface/cooked_interface.c b/interface/cooked_interface.c
+index de29055..ea9d0fc 100644
+--- a/interface/cooked_interface.c
++++ b/interface/cooked_interface.c
+@@ -13,13 +13,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+ struct timespec tv1;
+ struct timespec tv2;
+- int ret1=clock_gettime(d->private->clock,&tv1);
++ int ret1=clock_gettime(d->priv->clock,&tv1);
+ int ret2=ioctl(fd, command,arg);
+- int ret3=clock_gettime(d->private->clock,&tv2);
++ int ret3=clock_gettime(d->priv->clock,&tv2);
+ if(ret1<0 || ret3<0){
+- d->private->last_milliseconds=-1;
++ d->priv->last_milliseconds=-1;
+ }else{
+- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++ d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+ }
+ return ret2;
+ }
+diff --git a/interface/interface.c b/interface/interface.c
+index e8a90cd..526c2a9 100644
+--- a/interface/interface.c
++++ b/interface/interface.c
+@@ -39,9 +39,9 @@ int cdda_close(cdrom_drive *d){
+ if(d->drive_model)free(d->drive_model);
+ if(d->cdda_fd!=-1)close(d->cdda_fd);
+ if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd);
+- if(d->private){
+- if(d->private->sg_hd)free(d->private->sg_hd);
+- free(d->private);
++ if(d->priv){
++ if(d->priv->sg_hd)free(d->priv->sg_hd);
++ free(d->priv);
+ }
+
+ free(d);
+@@ -127,7 +127,7 @@ long cdda_read_timed(cdrom_drive *d, void *buffer, long beginsector, long sector
+ }
+ }
+ }
+- if(ms)*ms=d->private->last_milliseconds;
++ if(ms)*ms=d->priv->last_milliseconds;
+ return(sectors);
+ }
+
+diff --git a/interface/scan_devices.c b/interface/scan_devices.c
+index fc58110..5f6c4e3 100644
+--- a/interface/scan_devices.c
++++ b/interface/scan_devices.c
+@@ -264,11 +264,11 @@ cdrom_drive *cdda_identify_cooked(const char *dev, int messagedest,
+ d->interface=COOKED_IOCTL;
+ d->bigendianp=-1; /* We don't know yet... */
+ d->nsectors=-1;
+- d->private=calloc(1,sizeof(*d->private));
++ d->priv=calloc(1,sizeof(*d->priv));
+ {
+ /* goddamnit */
+ struct timespec tv;
+- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++ d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+ }
+ idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description);
+ return(d);
+@@ -674,15 +674,15 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+ d->bigendianp=-1; /* We don't know yet... */
+ d->nsectors=-1;
+ d->messagedest = messagedest;
+- d->private=calloc(1,sizeof(*d->private));
++ d->priv=calloc(1,sizeof(*d->priv));
+ {
+ /* goddamnit */
+ struct timespec tv;
+- d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++ d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+ }
+ if(use_sgio){
+ d->interface=SGIO_SCSI;
+- d->private->sg_buffer=(unsigned char *)(d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
++ d->priv->sg_buffer=(unsigned char *)(d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
+ g_fd=d->cdda_fd=dup(d->ioctl_fd);
+ }else{
+ version=verify_SG_version(d,messagedest,messages);
+@@ -696,8 +696,8 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+ }
+
+ /* malloc our big buffer for scsi commands */
+- d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
+- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++ d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
++ d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+ }
+
+ {
+@@ -772,9 +772,9 @@ cdda_identify_scsi_fail:
+ if(i_fd!=-1)close(i_fd);
+ if(g_fd!=-1)close(g_fd);
+ if(d){
+- if(d->private){
+- if(d->private->sg_hd)free(d->private->sg_hd);
+- free(d->private);
++ if(d->priv){
++ if(d->priv->sg_hd)free(d->priv->sg_hd);
++ free(d->priv);
+ }
+ free(d);
+ }
+@@ -821,7 +821,7 @@ cdrom_drive *cdda_identify_test(const char *filename, int messagedest,
+ d->interface=TEST_INTERFACE;
+ d->bigendianp=-1; /* We don't know yet... */
+ d->nsectors=-1;
+- d->private=calloc(1,sizeof(*d->private));
++ d->priv=calloc(1,sizeof(*d->priv));
+ d->drive_model=copystring("File based test interface");
+ idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model);
+
+diff --git a/interface/scsi_interface.c b/interface/scsi_interface.c
+index adbb9bf..75d90d4 100644
+--- a/interface/scsi_interface.c
++++ b/interface/scsi_interface.c
+@@ -15,13 +15,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+ struct timespec tv1;
+ struct timespec tv2;
+- int ret1=clock_gettime(d->private->clock,&tv1);
++ int ret1=clock_gettime(d->priv->clock,&tv1);
+ int ret2=ioctl(fd, command,arg);
+- int ret3=clock_gettime(d->private->clock,&tv2);
++ int ret3=clock_gettime(d->priv->clock,&tv2);
+ if(ret1<0 || ret3<0){
+- d->private->last_milliseconds=-1;
++ d->priv->last_milliseconds=-1;
+ }else{
+- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++ d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+ }
+ return ret2;
+ }
+@@ -96,7 +96,7 @@ static void tweak_SG_buffer(cdrom_drive *d) {
+ static void clear_garbage(cdrom_drive *d){
+ fd_set fdset;
+ struct timeval tv;
+- struct sg_header *sg_hd=d->private->sg_hd;
++ struct sg_header *sg_hd=d->priv->sg_hd;
+ int flag=0;
+
+ /* clear out any possibly preexisting garbage */
+@@ -185,7 +185,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ struct timespec tv2;
+ int tret1,tret2;
+ int status = 0;
+- struct sg_header *sg_hd=d->private->sg_hd;
++ struct sg_header *sg_hd=d->priv->sg_hd;
+ long writebytes=SG_OFF+cmd_len+in_size;
+
+ /* generic scsi device services */
+@@ -195,7 +195,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+
+ memset(sg_hd,0,sizeof(sg_hd));
+ memset(sense_buffer,0,SG_MAX_SENSE);
+- memcpy(d->private->sg_buffer,cmd,cmd_len+in_size);
++ memcpy(d->priv->sg_buffer,cmd,cmd_len+in_size);
+ sg_hd->twelve_byte = cmd_len == 12;
+ sg_hd->result = 0;
+ sg_hd->reply_len = SG_OFF + out_size;
+@@ -209,7 +209,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ tell if the command failed. Scared yet? */
+
+ if(bytecheck && out_size>in_size){
+- memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size);
++ memset(d->priv->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size);
+ /* the size does not remove cmd_len due to the way the kernel
+ driver copies buffers */
+ writebytes+=(out_size-in_size);
+@@ -243,7 +243,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ }
+
+ sigprocmask (SIG_BLOCK, &(d->sigset), NULL );
+- tret1=clock_gettime(d->private->clock,&tv1);
++ tret1=clock_gettime(d->priv->clock,&tv1);
+ errno=0;
+ status = write(d->cdda_fd, sg_hd, writebytes );
+
+@@ -289,7 +289,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ }
+ }
+
+- tret2=clock_gettime(d->private->clock,&tv2);
++ tret2=clock_gettime(d->priv->clock,&tv2);
+ errno=0;
+ status = read(d->cdda_fd, sg_hd, SG_OFF + out_size);
+ sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL );
+@@ -313,7 +313,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ if(bytecheck && in_size+cmd_len<out_size){
+ long i,flag=0;
+ for(i=in_size;i<out_size;i++)
+- if(d->private->sg_buffer[i]!=bytefill){
++ if(d->priv->sg_buffer[i]!=bytefill){
+ flag=1;
+ break;
+ }
+@@ -326,9 +326,9 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+
+ errno=0;
+ if(tret1<0 || tret2<0){
+- d->private->last_milliseconds=-1;
++ d->priv->last_milliseconds=-1;
+ }else{
+- d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
++ d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
+ }
+ return(0);
+ }
+@@ -347,7 +347,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+
+ memset(&hdr,0,sizeof(hdr));
+ memset(sense,0,sizeof(sense));
+- memcpy(d->private->sg_buffer,cmd+cmd_len,in_size);
++ memcpy(d->priv->sg_buffer,cmd+cmd_len,in_size);
+
+ hdr.cmdp = cmd;
+ hdr.cmd_len = cmd_len;
+@@ -355,7 +355,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ hdr.mx_sb_len = SG_MAX_SENSE;
+ hdr.timeout = 50000;
+ hdr.interface_id = 'S';
+- hdr.dxferp = d->private->sg_buffer;
++ hdr.dxferp = d->priv->sg_buffer;
+ hdr.flags = SG_FLAG_DIRECT_IO; /* direct IO if we can get it */
+
+ /* scary buffer fill hack */
+@@ -400,7 +400,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ if(bytecheck && in_size<out_size){
+ long i,flag=0;
+ for(i=in_size;i<out_size;i++)
+- if(d->private->sg_buffer[i]!=bytefill){
++ if(d->priv->sg_buffer[i]!=bytefill){
+ flag=1;
+ break;
+ }
+@@ -412,7 +412,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ }
+
+ /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */
+- /* d->private->last_milliseconds = hdr.duration; */
++ /* d->priv->last_milliseconds = hdr.duration; */
+
+ errno = 0;
+ return 0;
+@@ -445,9 +445,9 @@ static int test_unit_ready(cdrom_drive *d){
+
+ handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense);
+
+- key = d->private->sg_buffer[2] & 0xf;
+- ASC = d->private->sg_buffer[12];
+- ASCQ = d->private->sg_buffer[13];
++ key = d->priv->sg_buffer[2] & 0xf;
++ ASC = d->priv->sg_buffer[12];
++ ASCQ = d->priv->sg_buffer[13];
+
+ if(key == 2 && ASC == 4 && ASCQ == 1) return 0;
+ return 1;
+@@ -492,7 +492,7 @@ static int mode_sense_atapi(cdrom_drive *d,int size,int page){
+ if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1);
+
+ {
+- unsigned char *b=d->private->sg_buffer;
++ unsigned char *b=d->priv->sg_buffer;
+ if(b[0])return(1); /* Handles only up to 256 bytes */
+ if(b[6])return(1); /* Handles only up to 256 bytes */
+
+@@ -604,8 +604,8 @@ static int mode_select(cdrom_drive *d,int density,int secsize){
+ static unsigned int get_orig_sectorsize(cdrom_drive *d){
+ if(mode_sense(d,12,0x01))return(-1);
+
+- d->orgdens = d->private->sg_buffer[4];
+- return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]);
++ d->orgdens = d->priv->sg_buffer[4];
++ return(d->orgsize = ((int)(d->priv->sg_buffer[10])<<8)+d->priv->sg_buffer[11]);
+ }
+
+ /* switch CDROM scsi drives to given sector size */
+@@ -664,8 +664,8 @@ static int scsi_read_toc (cdrom_drive *d){
+ return(-4);
+ }
+
+- first=d->private->sg_buffer[2];
+- last=d->private->sg_buffer[3];
++ first=d->priv->sg_buffer[2];
++ last=d->priv->sg_buffer[3];
+ tracks=last-first+1;
+
+ if (last > MAXTRK || first > MAXTRK || last<0 || first<0) {
+@@ -683,7 +683,7 @@ static int scsi_read_toc (cdrom_drive *d){
+ return(-5);
+ }
+ {
+- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++ scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+
+ d->disc_toc[i-first].bFlags=toc->bFlags;
+ d->disc_toc[i-first].bTrack=i;
+@@ -704,7 +704,7 @@ static int scsi_read_toc (cdrom_drive *d){
+ return(-2);
+ }
+ {
+- scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++ scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+
+ d->disc_toc[i-first].bFlags=toc->bFlags;
+ d->disc_toc[i-first].bTrack=0xAA;
+@@ -738,7 +738,7 @@ static int scsi_read_toc2 (cdrom_drive *d){
+ }
+
+ /* copy to our structure and convert start sector */
+- tracks = d->private->sg_buffer[1];
++ tracks = d->priv->sg_buffer[1];
+ if (tracks > MAXTRK) {
+ cderror(d,"003: CDROM reporting illegal number of tracks\n");
+ return(-3);
+@@ -754,33 +754,33 @@ static int scsi_read_toc2 (cdrom_drive *d){
+ return(-5);
+ }
+
+- d->disc_toc[i].bFlags = d->private->sg_buffer[10];
++ d->disc_toc[i].bFlags = d->priv->sg_buffer[10];
+ d->disc_toc[i].bTrack = i + 1;
+
+ d->disc_toc[i].dwStartSector= d->adjust_ssize *
+- (((signed char)(d->private->sg_buffer[2])<<24) |
+- (d->private->sg_buffer[3]<<16)|
+- (d->private->sg_buffer[4]<<8)|
+- (d->private->sg_buffer[5]));
++ (((signed char)(d->priv->sg_buffer[2])<<24) |
++ (d->priv->sg_buffer[3]<<16)|
++ (d->priv->sg_buffer[4]<<8)|
++ (d->priv->sg_buffer[5]));
+ }
+
+ d->disc_toc[i].bFlags = 0;
+ d->disc_toc[i].bTrack = i + 1;
+- memcpy (&foo, d->private->sg_buffer+2, 4);
+- memcpy (&bar, d->private->sg_buffer+6, 4);
++ memcpy (&foo, d->priv->sg_buffer+2, 4);
++ memcpy (&bar, d->priv->sg_buffer+6, 4);
+ d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) +
+ be32_to_cpu(bar));
+
+ d->disc_toc[i].dwStartSector= d->adjust_ssize *
+- ((((signed char)(d->private->sg_buffer[2])<<24) |
+- (d->private->sg_buffer[3]<<16)|
+- (d->private->sg_buffer[4]<<8)|
+- (d->private->sg_buffer[5]))+
++ ((((signed char)(d->priv->sg_buffer[2])<<24) |
++ (d->priv->sg_buffer[3]<<16)|
++ (d->priv->sg_buffer[4]<<8)|
++ (d->priv->sg_buffer[5]))+
+
+- ((((signed char)(d->private->sg_buffer[6])<<24) |
+- (d->private->sg_buffer[7]<<16)|
+- (d->private->sg_buffer[8]<<8)|
+- (d->private->sg_buffer[9]))));
++ ((((signed char)(d->priv->sg_buffer[6])<<24) |
++ (d->priv->sg_buffer[7]<<16)|
++ (d->priv->sg_buffer[8]<<8)|
++ (d->priv->sg_buffer[9]))));
+
+
+ d->cd_extra = FixupTOC(d,tracks+1);
+@@ -817,7 +817,7 @@ static int i_read_28 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -836,7 +836,7 @@ static int i_read_A8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[9] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -854,7 +854,7 @@ static int i_read_D4_10 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -872,7 +872,7 @@ static int i_read_D4_12 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[9] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -890,7 +890,7 @@ static int i_read_D5 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -908,7 +908,7 @@ static int i_read_D8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+ cmd[9] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -922,7 +922,7 @@ static int i_read_mmc (cdrom_drive *d, void *p, long begin, long sectors, unsign
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -936,7 +936,7 @@ static int i_read_mmcB (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -950,7 +950,7 @@ static int i_read_mmc2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -964,7 +964,7 @@ static int i_read_mmc2B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -978,7 +978,7 @@ static int i_read_mmc3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -992,7 +992,7 @@ static int i_read_mmc3B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+ cmd[8] = sectors;
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1026,7 +1026,7 @@ static int i_read_msf (cdrom_drive *d, void *p, long begin, long sectors, unsign
+
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1039,7 +1039,7 @@ static int i_read_msf2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1052,7 +1052,7 @@ static int i_read_msf3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+
+ if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+ return(ret);
+- if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++ if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+ return(0);
+ }
+
+@@ -1275,7 +1275,7 @@ long scsi_read_msf3 (cdrom_drive *d, void *p, long begin,
+ static int count_2352_bytes(cdrom_drive *d){
+ long i;
+ for(i=2351;i>=0;i--)
+- if(d->private->sg_buffer[i]!=(unsigned char)'\177')
++ if(d->priv->sg_buffer[i]!=(unsigned char)'\177')
+ return(((i+3)>>2)<<2);
+
+ return(0);
+@@ -1284,7 +1284,7 @@ static int count_2352_bytes(cdrom_drive *d){
+ static int verify_nonzero(cdrom_drive *d){
+ long i,flag=0;
+ for(i=0;i<2352;i++)
+- if(d->private->sg_buffer[i]!=0){
++ if(d->priv->sg_buffer[i]!=0){
+ flag=1;
+ break;
+ }
+@@ -1625,7 +1625,7 @@ static int check_mmc(cdrom_drive *d){
+ d->is_mmc=0;
+ if(mode_sense(d,22,0x2A)==0){
+
+- b=d->private->sg_buffer;
++ b=d->priv->sg_buffer;
+ b+=b[3]+4;
+
+ if((b[0]&0x3F)==0x2A){
+@@ -1673,7 +1673,7 @@ unsigned char *scsi_inquiry(cdrom_drive *d){
+ cderror(d,"008: Unable to identify CDROM model\n");
+ return(NULL);
+ }
+- return (d->private->sg_buffer);
++ return (d->priv->sg_buffer);
+ }
+
+ int scsi_init_drive(cdrom_drive *d){
+@@ -1742,8 +1742,8 @@ int scsi_init_drive(cdrom_drive *d){
+ check_cache(d);
+
+ d->error_retry=1;
+- d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
+- d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++ d->priv->sg_hd=realloc(d->priv->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
++ d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+ d->report_all=1;
+ return(0);
+ }
+diff --git a/interface/test_interface.c b/interface/test_interface.c
+index 11bec25..e1cefaa 100644
+--- a/interface/test_interface.c
++++ b/interface/test_interface.c
+@@ -66,9 +66,9 @@ static long test_read(cdrom_drive *d, void *p, long begin, long sectors){
+ if(!fd)fd=fdopen(d->cdda_fd,"r");
+
+ if(begin<lastread)
+- d->private->last_milliseconds=20;
++ d->priv->last_milliseconds=20;
+ else
+- d->private->last_milliseconds=sectors;
++ d->priv->last_milliseconds=sectors;
+
+ #ifdef CDDA_TEST_UNDERRUN
+ sectors-=1;
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch
new file mode 100644
index 000000000..5298a3dcf
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0003-Fix-missing-shared-object-LDFLAGS.patch
@@ -0,0 +1,42 @@
+From c0b77aeb2127da821ae1c03c2f98aaf4db65277d Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Sat, 10 Sep 2016 21:15:18 +0200
+Subject: [PATCH] Fix missing shared object LDFLAGS
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ interface/Makefile.in | 2 +-
+ paranoia/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/interface/Makefile.in b/interface/Makefile.in
+index 40c6098..020bf2a 100644
+--- a/interface/Makefile.in
++++ b/interface/Makefile.in
+@@ -46,7 +46,7 @@ libcdda_interface.a: $(OFILES)
+ $(RANLIB) libcdda_interface.a
+
+ libcdda_interface.so: $(OFILES)
+- $(CC) -fpic -shared -o libcdda_interface.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_interface.so.0 $(OFILES) $(LIBS)
++ $(CC) -fpic -shared -o libcdda_interface.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_interface.so.0 $(LDFLAGS) $(OFILES) $(LIBS)
+ [ -e libcdda_interface.so.0 ] || ln -s libcdda_interface.so.0.$(VERSION) libcdda_interface.so.0
+ [ -e libcdda_interface.so ] || ln -s libcdda_interface.so.0.$(VERSION) libcdda_interface.so
+
+diff --git a/paranoia/Makefile.in b/paranoia/Makefile.in
+index 89d0328..ffb4e70 100644
+--- a/paranoia/Makefile.in
++++ b/paranoia/Makefile.in
+@@ -44,7 +44,7 @@ libcdda_paranoia.a: $(OFILES)
+ $(RANLIB) libcdda_paranoia.a
+
+ libcdda_paranoia.so: $(OFILES)
+- $(CC) -fpic -shared -o libcdda_paranoia.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_paranoia.so.0 $(OFILES) -L ../interface -lcdda_interface
++ $(CC) -fpic -shared -o libcdda_paranoia.so.0.$(VERSION) -Wl,-soname -Wl,libcdda_paranoia.so.0 $(LDFLAGS) $(OFILES) -L ../interface -lcdda_interface
+ [ -e libcdda_paranoia.so.0 ] || ln -s libcdda_paranoia.so.0.$(VERSION) libcdda_paranoia.so.0
+ [ -e libcdda_paranoia.so ] || ln -s libcdda_paranoia.so.0.$(VERSION) libcdda_paranoia.so
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch
new file mode 100644
index 000000000..9b268b7ed
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/dont-use-internal-configs.patch
@@ -0,0 +1,30 @@
+Index: cdparanoia-III-10.2/configure.in
+===================================================================
+--- cdparanoia-III-10.2.orig/configure.in
++++ cdparanoia-III-10.2/configure.in
+@@ -1,13 +1,8 @@
+ AC_INIT(interface/interface.c)
+
+-cp $srcdir/configure.guess $srcdir/config.guess
+-cp $srcdir/configure.sub $srcdir/config.sub
+-
+ AC_CANONICAL_HOST
+
+-if test -z "$CC"; then
+- AC_PROG_CC
+-fi
++AC_PROG_CC
+ AC_PROG_RANLIB
+ AC_CHECK_PROG(AR,ar,ar)
+ AC_CHECK_PROG(INSTALL,install,install)
+@@ -44,8 +39,8 @@ case 4 in
+ $ac_cv_sizeof_long) SIZE32="long";;
+ esac
+
+-AC_CHECK_TYPE(int16_t,SIZE16="int16_t",,)
+-AC_CHECK_TYPE(int32_t,SIZE32="size32_t",,)
++AC_CHECK_TYPES([int16_t], [SIZE16="int16_t"], [], [[#include <stdint.h>]])
++AC_CHECK_TYPES([int32_t], [SIZE32="int32_t"], [], [[#include <stdint.h>]])
+
+ if test -z "$SIZE16"; then
+ AC_MSG_ERROR(No 16 bit type found on this platform!)
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch
new file mode 100644
index 000000000..06ee82099
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/out-of-tree-build.patch
@@ -0,0 +1,42 @@
+Index: cdparanoia-III-10.2/Makefile.in
+===================================================================
+--- cdparanoia-III-10.2.orig/Makefile.in
++++ cdparanoia-III-10.2/Makefile.in
+@@ -6,6 +6,8 @@
+ VERSION=10.2
+ VPATH=@srcdir@
+ srcdir=@srcdir@
++top_srcdir=@top_srcdir@
++top_builddir=@top_builddir@
+
+ @SET_MAKE@
+ FLAGS=@TYPESIZES@ @CFLAGS@
+@@ -64,19 +66,19 @@ slib:
+
+ install:
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR)
+- $(INSTALL) -m 755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR)
++ $(INSTALL) -m 755 $(top_builddir)/cdparanoia $(DESTDIR)$(BINDIR)
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)/man1
+- $(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
++ $(INSTALL) -m 0644 $(top_srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(top_srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
+ $(INSTALL) -d -m 0755 $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
+- $(INSTALL) -m 0644 $(srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_builddir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
++ $(INSTALL) -m 0644 $(top_srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
+ ln -fs libcdda_interface.so.0.$(VERSION) \
+ $(DESTDIR)$(LIBDIR)/libcdda_interface.so.0
+ ln -fs libcdda_interface.so.0.$(VERSION) \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb
new file mode 100644
index 000000000..45b53c119
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dca/dcadec_0.2.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "DTS Coherent Acoustics decoder with support for HD extensions"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LGPLv2.1;md5=4fbd65380cdd255951079008b364516c"
+
+SRCREV = "b93deed1a231dd6dd7e39b9fe7d2abe05aa00158"
+SRC_URI = "git://github.com/foo86/dcadec.git;protocol=http"
+
+S = "${WORKDIR}/git"
+
+inherit lib_package
+
+EXTRA_OEMAKE = "CONFIG_SHARED=1"
+
+do_install() {
+ oe_runmake install DESTDIR="${D}" PREFIX="${prefix}"
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
new file mode 100644
index 000000000..f23bc6ca8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "D-Bus connector for dLeyna libraries"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://src/connector-dbus.c;endline=21;md5=0a1695cef53beefc36651de439f643b5"
+
+DEPENDS = "glib-2.0 dbus dleyna-core"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "de913c35e5c936e2d40ddbd276ee902cd802bd3a"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${libdir}/dleyna-1.0/connectors/*.so"
+FILES_${PN}-dev += "${libdir}/dleyna-1.0/connectors/*.la"
+FILES_${PN}-dbg += "${libdir}/dleyna-1.0/connectors/.debug/*.so"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
new file mode 100644
index 000000000..a3b279372
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Utility functions for dLeyna libraries"
+DESCRIPTION = "dleyna-core is a library of utility functions that are used \
+by the higher level dLeyna libraries that communicate with DLNA devices, \
+e.g., dleyna-server. In brief, it provides APIs for logging, error, settings \
+and task management and an IPC asbstraction API."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libdleyna/core/core.c;endline=21;md5=139cba0c634344abc9456694fbb5083b"
+
+DEPENDS = "glib-2.0 gupnp"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "27a3786ec013f64fd58243410a60798f824acec3"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
new file mode 100644
index 000000000..b30aee9fb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "DLNA renderer libraries"
+DESCRIPTION = "dleyna-renderer is a library for implementing services \
+that allow clients to discover and manipulate Digital Media Renderers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libdleyna/renderer/server.c;endline=21;md5=f51acd4757fb6a779a87122c43cf1346"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "50fd1ec9d51328e7dea98874129dc8d6fe3ea1dd"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+CFLAGS += " -I${S}"
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
new file mode 100644
index 000000000..a8e5406d0
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "DLNA server libraries"
+DESCRIPTION = "dleyna-server is a library for implementing services that \
+allow clients to discover, browse and manipulate Digital Media Servers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+ file://libdleyna/server/server.c;endline=22;md5=437455d8aeff69ebd0996a76c67397bb"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 libxml2 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "776950d5d96ac9dbf5c5c47bde8ac06f50a3cf46"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb
new file mode 100644
index 000000000..4765c6c9c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.29.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Freeware Advanced Audio Coder (MPEG2-AAC, MPEG4-AAC)"
+SECTION = "libs"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+ file://libfaac/coder.h;beginline=5;endline=17;md5=fa1fd6a5fa8cdc877d63a12530d273e0"
+
+inherit autotools
+
+SRC_URI = " \
+ ${SOURCEFORGE_MIRROR}/faac/${BP}.tar.gz \
+ file://0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch \
+"
+
+SRC_URI[md5sum] = "78603720f655180059d6970c582a3005"
+SRC_URI[sha256sum] = "8cc7b03ceb2722223a6457e95d4c994731d80214a03ba33d1af76ba53f4b3197"
+
+EXTRA_OECONF += "--without-mp4v2"
+
+PACKAGES =+ "lib${BPN} lib${BPN}-dev"
+
+FILES_${PN} = " ${bindir}/faac "
+FILES_lib${PN} = " ${libdir}/*.so.*"
+FILES_lib${PN}-dev = " \
+ ${includedir} \
+ ${libdir}/*.so \
+ ${libdir}/*.la \
+"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch
new file mode 100644
index 000000000..d845ddf59
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/0001-mp4v2-Define-__STRING-if-cdefs.h-does-not-exist.patch
@@ -0,0 +1,28 @@
+From 46cc9298c38b9dd735fec3f39aa2d6e56a362410 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 21:33:36 -0700
+Subject: [PATCH 2/2] mp4v2: Define __STRING if cdefs.h does not exist
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ common/mp4v2/mp4util.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/common/mp4v2/mp4util.h b/common/mp4v2/mp4util.h
+index 1f9cb64..1e7aced 100644
+--- a/common/mp4v2/mp4util.h
++++ b/common/mp4v2/mp4util.h
+@@ -23,6 +23,10 @@
+ #define __MP4_UTIL_INCLUDED__
+ #include <assert.h>
+
++#ifndef __STRING
++#define __STRING(x) #x
++#endif
++
+ #ifndef ASSERT
+ #define ASSERT(expr) \
+ if (!(expr)) { \
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch
new file mode 100644
index 000000000..0e1846e31
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/files/0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch
@@ -0,0 +1,76 @@
+From 2de7e128fbdf528716b500cf27ed9a4358c931c9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Fri, 24 Nov 2017 00:05:35 +0100
+Subject: [PATCH 2/2] Use ARM-NEON accelaration for float-multithreaded setups
+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@gmail.com>
+---
+ src/rvoice/fluid_rvoice_mixer.c | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/src/rvoice/fluid_rvoice_mixer.c b/src/rvoice/fluid_rvoice_mixer.c
+index 9616518..dbf8057 100644
+--- a/src/rvoice/fluid_rvoice_mixer.c
++++ b/src/rvoice/fluid_rvoice_mixer.c
+@@ -27,6 +27,10 @@
+ #include "fluid_ladspa.h"
+ #include "fluid_synth.h"
+
++#if defined(__ARM_NEON__)
++#include "arm_neon.h"
++#endif
++
+
+ #define ENABLE_MIXER_THREADS 1
+
+@@ -794,20 +798,42 @@ fluid_mixer_buffers_mix(fluid_mixer_buffers_t* dest, fluid_mixer_buffers_t* src)
+ if (minbuf > src->buf_count)
+ minbuf = src->buf_count;
+ for (i=0; i < minbuf; i++) {
++#if defined(__ARM_NEON__) && defined(WITH_FLOAT)
++ for (j=0; j < scount; j+=4) {
++ float32x4_t vleft = vld1q_f32(&dest->left_buf[i][j]);
++ float32x4_t vright = vld1q_f32(&dest->right_buf[i][j]);
++ vleft = vaddq_f32(vleft, vld1q_f32(&src->left_buf[i][j]));
++ vright = vaddq_f32(vright, vld1q_f32(&src->right_buf[i][j]));
++ vst1q_f32(&dest->left_buf[i][j], vleft);
++ vst1q_f32(&dest->right_buf[i][j], vright);
++ }
++#else
+ for (j=0; j < scount; j++) {
+ dest->left_buf[i][j] += src->left_buf[i][j];
+ dest->right_buf[i][j] += src->right_buf[i][j];
+ }
++#endif
+ }
+
+ minbuf = dest->fx_buf_count;
+ if (minbuf > src->fx_buf_count)
+ minbuf = src->fx_buf_count;
+ for (i=0; i < minbuf; i++) {
++#if defined(__ARM_NEON__) && defined(WITH_FLOAT)
++ for (j=0; j < scount; j+=4) {
++ float32x4_t vleft = vld1q_f32(&dest->fx_left_buf[i][j]);
++ float32x4_t vright = vld1q_f32(&dest->fx_right_buf[i][j]);
++ vleft = vaddq_f32(vleft, vld1q_f32(&src->fx_left_buf[i][j]));
++ vright = vaddq_f32(vright, vld1q_f32(&src->fx_right_buf[i][j]));
++ vst1q_f32(&dest->fx_left_buf[i][j], vleft);
++ vst1q_f32(&dest->fx_right_buf[i][j], vright);
++ }
++#else
+ for (j=0; j < scount; j++) {
+ dest->fx_left_buf[i][j] += src->fx_left_buf[i][j];
+ dest->fx_right_buf[i][j] += src->fx_right_buf[i][j];
+ }
++#endif
+ }
+ }
+
+--
+2.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb
new file mode 100644
index 000000000..0ec4c49ce
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.10.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Fluidsynth is a software synthesizer"
+HOMEPAGE = "http://www.fluidsynth.org/"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fc178bcd425090939a8b634d1d6a9594"
+
+DEPENDS = "alsa-lib ncurses glib-2.0"
+
+SRC_URI = " \
+ git://github.com/FluidSynth/fluidsynth.git;branch=1.1.x \
+ file://0001-Use-ARM-NEON-accelaration-for-float-multithreaded-se.patch \
+"
+SRCREV = "f5a0fee6f7f2b2ab4c866df1acb649333464b3fd"
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig lib_package
+
+EXTRA_OECMAKE = "-Denable-floats=ON -DLIB_SUFFIX=${@d.getVar('baselib').replace('lib', '')}"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio', d)}"
+PACKAGECONFIG[sndfile] = "-Denable-libsndfile-support=ON,-Denable-libsndfile-support=OFF,libsndfile1"
+PACKAGECONFIG[jack] = "-Denable-jack-support=ON,-Denable-jack-support=OFF,jack"
+PACKAGECONFIG[pulseaudio] = "-Denable-pulseaudio=ON,--Denable-pulseaudio=OFF,pulseaudio"
+PACKAGECONFIG[portaudio] = "-Denable-portaudio=ON,-Denable-portaudio=OFF,portaudio-v19"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service
new file mode 100644
index 000000000..1b5a3ad3e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/files/gerbera.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Start Gerbera, an UPnP media server
+After=multi-user.target network-online.target
+Wants=network-online.target
+
+[Service]
+ExecStart=/usr/bin/gerbera
+Environment='HOME=/root'
+Type=simple
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target \ No newline at end of file
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb
new file mode 100644
index 000000000..f763cf1e4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gerbera/gerbera_git.bb
@@ -0,0 +1,32 @@
+Description = "Gerbera - An UPnP media server"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=25cdec9afe3f1f26212ead6bd2f7fac8"
+
+SRC_URI = "git://github.com/v00d00/gerbera.git;protocol=https \
+ file://gerbera.service \
+"
+
+PV = "1.0+git${SRCPV}"
+SRCREV = "4435b165d121195aefd67d0287f7f9349e181d45"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "expat zlib curl libupnp e2fsprogs sqlite3 "
+
+SYSTEMD_SERVICE_${PN} = "gerbera.service"
+
+inherit cmake systemd
+
+PACKAGECONFIG = ""
+PACKAGECONFIG[taglib] = "-DWITH_TAGLIB=TRUE,-DWITH_TAGLIB=FALSE,taglib"
+
+EXTRA_OECMAKE = "-DWITH_JS=FALSE -DWITH_MAGIC=FALSE -DWITH_EXIF=FALSE -DLIBUUID_INCLUDE_DIRS=${STAGING_INCDIR} -DLIBUUID_LIBRARIES=-luuid"
+
+do_install_append() {
+ install -d ${D}/root/.config/
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/gerbera.service ${D}${systemd_system_unitdir}/
+}
+
+FILES_${PN} += "/root/.config/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
new file mode 100644
index 000000000..1e2cd2a4a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
@@ -0,0 +1,14 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo closed-format mp3 GStreamer plug-in"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=259a43dd1c9854b71fc396f74699f4d2"
+LICENSE_FLAGS = "commercial"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF += "${GSTREAMER_DEBUG} --with-gstreamer-api=0.10"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "adf0390f3416bb72f91c358528be0c38"
+SRC_URI[sha256sum] = "dae0d0559a4e159c0dd92b7e18de059a5783f8d038904c7de4ca6393f7d55c7d"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
new file mode 100644
index 000000000..7bba41a34
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
@@ -0,0 +1,12 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo MPEG Transport Stream and Program Stream demuxer for GStreamer"
+LICENSE = "MPLv1.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=be282f1c3cc9a98cc0dc5c2b25dfc510 \
+ file://src/gstmpegdemux.h;beginline=1;endline=19;md5=a9e90033f59897b91664d9f2a2ff01dd"
+LICENSE_FLAGS = "commercial"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "7c4fb993f80b9ae631b11897733f0970"
+SRC_URI[sha256sum] = "df04c91cc8e5d9a892c2492ed989974b4547beaa2a3647649e85113317897424"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
new file mode 100644
index 000000000..7a77d624f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Fluendo closed-format GStreamer plug-in"
+SECTION = "multimedia"
+HOMEPAGE = "https://core.fluendo.com/gstreamer/trac/wiki"
+DEPENDS = "gstreamer gst-plugins-base zlib"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://core.fluendo.com/gstreamer/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+
+EXTRA_OECONF = "--disable-valgrind"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
new file mode 100644
index 000000000..88f1abf68
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
@@ -0,0 +1,73 @@
+SUMMARY = "GStreamer package groups"
+LICENSE = "MIT"
+
+COMMERCIAL_PLUGINS = "${COMMERCIAL_AUDIO_PLUGINS} ${COMMERCIAL_VIDEO_PLUGINS}"
+DEPENDS_UGLY="${@'gst-plugins-ugly' if 'ugly' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS_BAD="${@'gst-plugins-bad' if 'bad' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS = "gstreamer gst-plugins-base gst-plugins-good ${DEPENDS_UGLY} ${DEPENDS_BAD}"
+
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
+ file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+
+PR = "r13"
+
+PACKAGES = "\
+ gst-meta-base \
+ gst-meta-x11-base \
+ gst-meta-audio \
+ gst-meta-debug \
+ gst-meta-video"
+
+ALLOW_EMPTY_gst-meta-base = "1"
+ALLOW_EMPTY_gst-meta-x11-base = "1"
+ALLOW_EMPTY_gst-meta-audio = "1"
+ALLOW_EMPTY_gst-meta-debug = "1"
+ALLOW_EMPTY_gst-meta-video = "1"
+
+RDEPENDS_gst-meta-base = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gst-meta-x11-base', '', d)} \
+ gstreamer \
+ gst-plugins-base-playbin \
+ gst-plugins-base-decodebin \
+ gst-plugins-base-decodebin2 \
+ gst-plugins-base-gio \
+ gst-plugins-base-alsa \
+ gst-plugins-base-volume \
+ gst-plugins-base-audioconvert \
+ gst-plugins-base-audioresample \
+ gst-plugins-base-typefindfunctions \
+ gst-plugins-base-videoscale \
+ gst-plugins-base-ffmpegcolorspace \
+ gst-plugins-good-autodetect \
+ gst-plugins-good-souphttpsrc"
+
+RRECOMMENDS_gst-meta-x11-base = "\
+ gst-plugins-base-ximagesink \
+ gst-plugins-base-xvimagesink"
+
+RDEPENDS_gst-meta-audio = "\
+ gst-meta-base \
+ gst-plugins-base-vorbis \
+ gst-plugins-base-ogg \
+ gst-plugins-good-wavparse \
+ gst-plugins-good-flac \
+ ${COMMERCIAL_AUDIO_PLUGINS}"
+
+
+RDEPENDS_gst-meta-debug = "\
+ gst-meta-base \
+ gst-plugins-good-debug \
+ gst-plugins-base-audiotestsrc \
+ gst-plugins-base-videotestsrc"
+
+
+RDEPENDS_gst-meta-video = "\
+ gst-meta-base \
+ gst-plugins-good-avi \
+ gst-plugins-good-matroska \
+ gst-plugins-base-theora \
+ ${COMMERCIAL_VIDEO_PLUGINS}"
+
+RRECOMMENDS_gst-meta-video = "\
+ gst-meta-audio"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
new file mode 100644
index 000000000..57a63b5a0
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
@@ -0,0 +1,18 @@
+Upstream-Status: Pending
+
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+
+Index: gst-openmax-0.10.1/omx/gstomx.c
+===================================================================
+--- gst-openmax-0.10.1.orig/omx/gstomx.c 2010-09-30 18:00:24.000000000 -0700
++++ gst-openmax-0.10.1/omx/gstomx.c 2011-05-17 23:08:08.794535872 -0700
+@@ -238,7 +238,8 @@
+ const gchar *element_name = gst_structure_nth_field_name (element_table, i);
+ GstStructure *element = get_element_entry (element_name);
+ const gchar *type_name, *parent_type_name;
+- const gchar *component_name, *component_role, *library_name;
++ const gchar *component_name, *library_name;
++ const gchar __attribute__((__unused__)) *component_role;
+ GType type;
+ gint rank;
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
new file mode 100644
index 000000000..5965bbafb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
@@ -0,0 +1,46 @@
+Rename static functions that use GLib naming conventions as one of them
+(g_ptr_array_insert) has now been added to GLib.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c
+index 423e441..579dbf5 100644
+--- a/omx/gstomx_util.c
++++ b/omx/gstomx_util.c
+@@ -85,7 +85,7 @@ static gboolean initialized;
+ */
+
+ static void
+-g_ptr_array_clear (GPtrArray * array)
++omx_g_ptr_array_clear (GPtrArray * array)
+ {
+ guint index;
+ for (index = 0; index < array->len; index++)
+@@ -93,7 +93,7 @@ g_ptr_array_clear (GPtrArray * array)
+ }
+
+ static void
+-g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
++omx_g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
+ {
+ if (index + 1 > array->len) {
+ g_ptr_array_set_size (array, index + 1);
+@@ -394,7 +394,7 @@ g_omx_core_unload (GOmxCore * core)
+ }
+
+ core_for_each_port (core, g_omx_port_free);
+- g_ptr_array_clear (core->ports);
++ omx_g_ptr_array_clear (core->ports);
+ }
+
+ static inline GOmxPort *
+@@ -418,7 +418,7 @@ g_omx_core_new_port (GOmxCore * core, guint index)
+ }
+
+ port = g_omx_port_new (core, index);
+- g_ptr_array_insert (core->ports, index, port);
++ omx_g_ptr_array_insert (core->ports, index, port);
+
+ return port;
+ }
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
new file mode 100644
index 000000000..2e0157956
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "GStreamer plug-in for communication with OpenMAX IL components"
+DESCRIPTION = "GstOpenMAX is a GStreamer plug-in that allows \
+communication with OpenMAX Integration Layer (IL) components. OpenMAX \
+IL is an industry standard that provides an abstraction layer for \
+computer graphics, video, and sound routines."
+HOMEPAGE = "http://freedesktop.org/wiki/GstOpenMAX"
+DEPENDS = "gstreamer"
+RDEPENDS_${PN} = "libomxil"
+LICENSE = "LGPLv2.1"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \
+ file://util/sem.h;beginline=1;endline=20;md5=accce5550d5583b839b441a0623f09fc"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gst-openmax/gst-openmax-${PV}.tar.bz2 \
+ file://gcc_4.6.patch \
+ file://ptr-array.patch \
+ "
+
+inherit autotools pkgconfig
+
+# Tell configure that this isn't a development snapshot so we don't want
+# -Werror (hopefully fixed in 0.10.2)
+export GST_CVS="no"
+
+EXTRA_OECONF += "--disable-valgrind"
+
+PR = "r4"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/libgstomx.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/libgstomx.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/libgstomx.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug/"
+
+SRC_URI[md5sum] = "4d0370bfe99dea20918c84347abadb4e"
+SRC_URI[sha256sum] = "9074d5a0591995133d19cfb15144f19664f902c1623f996595695cf2c2070e1f"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
new file mode 100644
index 000000000..235acda8b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
@@ -0,0 +1,36 @@
+Description: Fix buffer overflow in mp4 parsing
+Author: Ralph Giles <giles@mozilla.com>
+---
+Backport patch from debian to fix CVE-2015-0797.
+https://sources.debian.net/data/main/g/gst-plugins-bad0.10/0.10.23-7.1+deb7u2/debian/patches/buffer-overflow-mp4.patch
+
+Upstream-Status: Backport
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+--- gst-plugins-bad0.10-0.10.23.orig/gst/videoparsers/gsth264parse.c
++++ gst-plugins-bad0.10-0.10.23/gst/videoparsers/gsth264parse.c
+@@ -384,6 +384,11 @@ gst_h264_parse_wrap_nal (GstH264Parse *
+
+ GST_DEBUG_OBJECT (h264parse, "nal length %d", size);
+
++ if (size > G_MAXUINT32 - nl) {
++ GST_ELEMENT_ERROR (h264parse, STREAM, FAILED, (NULL),
++ ("overflow in nal size"));
++ return NULL;
++ }
+ buf = gst_buffer_new_and_alloc (size + nl + 4);
+ if (format == GST_H264_PARSE_FORMAT_AVC) {
+ GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf), size << (32 - 8 * nl));
+@@ -452,6 +457,11 @@ gst_h264_parse_process_nal (GstH264Parse
+ GST_DEBUG_OBJECT (h264parse, "not processing nal size %u", nalu->size);
+ return;
+ }
++ if (G_UNLIKELY (nalu->size > 20 * 1024 * 1024)) {
++ GST_DEBUG_OBJECT (h264parse, "not processing nal size %u (too big)",
++ nalu->size);
++ return;
++ }
+
+ /* we have a peek as well */
+ nal_type = nalu->type;
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
new file mode 100644
index 000000000..38fccc8d0
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
@@ -0,0 +1,61 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+ file://gst/tta/filters.h;beginline=12;endline=29;md5=629b0c7a665d155a6677778f4460ec06 \
+ file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+ file://gst/tta/crc32.h;beginline=12;endline=29;md5=71a904d99ce7ae0c1cf129891b98145c"
+
+DEPENDS += "gst-plugins-base"
+
+PR = "r4"
+
+SRC_URI += "file://buffer-overflow-mp4.patch"
+
+inherit gettext gsettings
+
+EXTRA_OECONF += "--disable-experimental \
+ --disable-sdl --disable-cdaudio --disable-directfb \
+ --disable-vdpau --disable-apexsink"
+
+PACKAGECONFIG ??= "bzip curl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'rsvg', '', d)}"
+
+PACKAGECONFIG[bzip] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
+PACKAGECONFIG[rsvg] = "--enable-rsvg,--disable-rsvg,librsvg,"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[neon] = "--enable-neon,--disable-neon,neon"
+PACKAGECONFIG[mms] = "--enable-libmms,--disable-libmms,libmms"
+PACKAGECONFIG[cog] = "--enable-cog,--disable-cog,libpng"
+PACKAGECONFIG[faad] = "--enable-faad,--disable-faad,faad2"
+PACKAGECONFIG[jp2k] = "--enable-jp2k,--disable-jp2k,jasper"
+PACKAGECONFIG[modplug] = "--enable-modplug,--disable-modplug,libmodplug"
+PACKAGECONFIG[opus] = "--enable-opus,--disable-opus,libopus"
+PACKAGECONFIG[sndfile] = "--enable-sndfile,--disable-sndfile,libsndfile1"
+PACKAGECONFIG[vp8] = "--enable-vp8,--disable-vp8,libvpx"
+PACKAGECONFIG[ass] = "--enable-assrender,--disable-assrender,libass"
+PACKAGECONFIG[openal] = "--enable-openal,--disable-openal,openal-soft"
+PACKAGECONFIG[schro] = "--enable-schro,--disable-schro,schroedinger"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[faac] = "--enable-faac,--disable-faac,faac"
+PACKAGECONFIG[rtmp] = "--enable-rtmp,--disable-rtmp,rtmpdump"
+PACKAGECONFIG[voamrwbenc] = "--enable-voamrwbenc,--disable-voamrwbenc,vo-amrwbenc"
+PACKAGECONFIG[voaacenc] = "--enable-voaacenc,--disable-voaacenc,vo-aacenc"
+PACKAGECONFIG[resindvd] = "--enable-resindvd,--disable-resindvd,libdvdnav libdvdread"
+PACKAGECONFIG[zbar] = "--enable-zbar,--disable-zbar,zbar jpeg"
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGES =+ "${PN}-resindvd"
+FILES_${PN}-resindvd = "${libdir}/gstreamer-${LIBV}/libresindvd.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-${LIBV}/libresindvd.la"
+FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-${LIBV}/presets/GstVoAmrwbEnc.prs"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "fcb09798114461955260e4d940db5987"
+SRC_URI[sha256sum] = "0eae7d1a1357ae8377fded6a1b42e663887beabe0e6cc336e2ef9ada42e11491"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
new file mode 100644
index 000000000..29fbec5f8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
@@ -0,0 +1,32 @@
+From 5478eafecf618cd8e742cc1b96d688a2c7ce5a79 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Sun, 2 Oct 2016 21:49:33 +0200
+Subject: [PATCH] gst-glib2.m4: don't do crazy things to GLIB_CFLAGS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+we are definitely not one of those poor souls mentioned
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ common/m4/gst-glib2.m4 | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
+index b01f02f..4569ae5 100644
+--- a/common/m4/gst-glib2.m4
++++ b/common/m4/gst-glib2.m4
+@@ -69,7 +69,6 @@ AC_DEFUN([AG_GST_GLIB_CHECK],
+ fi
+
+ dnl for the poor souls who for example have glib in /usr/local
+- AS_SCRUB_INCLUDE(GLIB_CFLAGS)
+
+ AC_SUBST(GLIB_EXTRA_CFLAGS)
+ ])
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
new file mode 100644
index 000000000..52142562a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
@@ -0,0 +1,37 @@
+audioresample: Fix build on x86 if emmintrin.h is available but can't be used
+
+On x86, EMMINTRIN is defined but not usable without SSE so check for
+__SSE__ and __SSE2__ as well.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=670690
+
+Upstream-Status: Backport
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ gst/audioresample/resample.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gst/audioresample/resample.c b/gst/audioresample/resample.c
+index 98d006c..481fa01 100644
+--- a/gst/audioresample/resample.c
++++ b/gst/audioresample/resample.c
+@@ -77,13 +77,13 @@
+ #define EXPORT G_GNUC_INTERNAL
+
+ #ifdef _USE_SSE
+-#ifndef HAVE_XMMINTRIN_H
++#if !defined(__SSE__) || !defined(HAVE_XMMINTRIN_H)
+ #undef _USE_SSE
+ #endif
+ #endif
+
+ #ifdef _USE_SSE2
+-#ifndef HAVE_EMMINTRIN_H
++#if !defined(__SSE2__) || !defined(HAVE_EMMINTRIN_H)
+ #undef _USE_SSE2
+ #endif
+ #endif
+--
+1.7.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
new file mode 100644
index 000000000..b8602c80d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
@@ -0,0 +1,27 @@
+Upstream-Status: Submitted [similar patch by other author, bugzilla]
+Bugtracker-URL: https://bugzilla.gnome.org/show_bug.cgi?id=663600
+
+Prepend PKG_CONFIG_SYSROOT to includedir, so configure doesn't
+search for gstconfig.h in /usr/include.
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+---
+ configure.ac | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1901bcf..460fb0a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -435,7 +435,7 @@ AG_GST_CHECK_PLUGIN(volume)
+ dnl check for gstreamer core features (subsystems)
+ dnl FIXME: this assumes srcdir == builddir for uninstalled setups
+ GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h"
+-AG_GST_PARSE_SUBSYSTEM_DISABLES($GST_CONFIGPATH)
++AG_GST_PARSE_SUBSYSTEM_DISABLES($PKG_CONFIG_SYSROOT_DIR$GST_CONFIGPATH)
+ AM_CONDITIONAL(USE_XML, test $GST_DISABLE_XML != "1")
+
+ dnl disable plug-ins that require libxml2's HTML support if it is not available
+--
+1.7.5.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
new file mode 100644
index 000000000..99dbc9d52
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
@@ -0,0 +1,20 @@
+Remove -DTREMOR option since Tremor has dropped its internal
+libogg2, and gst-plugins-base has dependency on that.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Shane Wang <shane.wang@intel.com>
+
+diff -r 70065fb4e085 ext/vorbis/Makefile.am
+--- a/ext/vorbis/Makefile.am Tue Mar 13 16:36:56 2012 +0800
++++ b/ext/vorbis/Makefile.am Tue Mar 13 16:38:53 2012 +0800
+@@ -30,7 +30,7 @@
+ gstvorbisdec.c gstvorbisdeclib.c gstvorbiscommon.c
+ libgstivorbisdec_la_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+- -DTREMOR $(IVORBIS_CFLAGS)
++ $(IVORBIS_CFLAGS)
+ libgstivorbisdec_la_LIBADD = \
+ $(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+ $(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
new file mode 100644
index 000000000..f2354648d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
@@ -0,0 +1,43 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+ file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+ file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+ file://gst/ffmpegcolorspace/utils.c;beginline=1;endline=20;md5=9c83a200b8e597b26ca29df20fc6ecd0"
+
+DEPENDS += "alsa-lib libogg libvorbis libtheora util-linux tremor glib-2.0-native"
+
+SRC_URI += "file://gst-plugins-base-tremor.patch \
+ file://configure.ac-fix-subparse-plugin.patch \
+ file://audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch \
+ file://0001-aclocal.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch \
+"
+
+SRC_URI[md5sum] = "776c73883e567f67b9c4a2847d8d041a"
+SRC_URI[sha256sum] = "2cd3b0fa8e9b595db8f514ef7c2bdbcd639a0d63d154c00f8c9b609321f49976"
+
+PR = "r8"
+
+inherit gettext
+
+EXTRA_OECONF += "--disable-freetypetest"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'x11', d)}"
+
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango"
+PACKAGECONFIG[x11] = "--enable-x --enable-xvideo,--disable-x --disable-xvideo,virtual/libx11 libxv libsm libice"
+PACKAGECONFIG[cdparanoia] = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm -f ${S}/m4/lib-link.m4
+}
+
+FILES_${PN} += "${datadir}/${BPN}"
+
+CACHED_CONFIGUREVARS_append_x86 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no"
+
+# /usr/bin/gst-visualise-0.10 is a perl script.
+RDEPENDS_${PN}-apps += "perl"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
new file mode 100644
index 000000000..bc2f88b24
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
@@ -0,0 +1,35 @@
+From 14d51cbefef19737e7ab2b6818ee1d3bdb248d12 Mon Sep 17 00:00:00 2001
+From: Jeremy Stashluk <jstashluk@dekaresearch.com>
+Date: Wed, 6 Feb 2013 09:59:48 -0500
+Subject: [PATCH] conditional gl framebuffer undefined use
+
+The OpenGL extension GL_ARB_framebuffer_object defines the macro
+GL_FRAMEBUFFER_UNDEFINED. The macro will only need to map to an error
+string if the extension provides functions that might return the macro.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jeremy Stashluk <jstashluk@dekaresearch.com>
+---
+ gst-libs/gst/gl/gstgldisplay.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
+index 3ed0b71..64c6c2c 100644
+--- a/gst-libs/gst/gl/gstgldisplay.c
++++ b/gst-libs/gst/gl/gstgldisplay.c
+@@ -2177,9 +2177,11 @@ gst_gl_display_check_framebuffer_status (void)
+ GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS");
+ break;
+
++#if defined(GL_ARB_framebuffer_object)
+ case GL_FRAMEBUFFER_UNDEFINED:
+ GST_ERROR ("GL_FRAMEBUFFER_UNDEFINED");
+ break;
++#endif
+
+ default:
+ GST_ERROR ("General FBO error");
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch
new file mode 100644
index 000000000..7db1c5afc
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/rpi-egl-gles2-dep.patch
@@ -0,0 +1,22 @@
+Check for header and library separately and check for GLESv2 before egl
+this is to overcome an annoying issue with rpi/userland where egl depends
+on sysmbols from libGLESv2
+
+-Khem
+Index: gst-plugins-gl-0.10.3/configure.ac
+===================================================================
+--- gst-plugins-gl-0.10.3.orig/configure.ac
++++ gst-plugins-gl-0.10.3/configure.ac
+@@ -183,8 +183,10 @@ case $host in
+ else
+ AC_CHECK_HEADERS([EGL/egl.h], [HAVE_EGL=yes], [HAVE_EGL=no])
+ if test "x$HAVE_EGL" = "xyes"; then
+- AG_GST_CHECK_LIBHEADER(EGL, EGL, eglGetError,, EGL/egl.h,, AC_MSG_ERROR([EGL is required]))
+- AG_GST_CHECK_LIBHEADER(GLES2, GLESv2, glTexImage2D,, GLES2/gl2.h,, AC_MSG_ERROR([OpenGLES2 is required]))
++ AC_CHECK_HEADERS([GLES2/gl2.h],, AC_MSG_ERROR([OpenGLES2 is required]))
++ AC_CHECK_LIB(GLESv2,[glTexImage2D],, AC_MSG_ERROR([OpenGLES2 is required]))
++ AC_CHECK_HEADERS([EGL/egl.h],, AC_MSG_ERROR([EGL is required]))
++ AC_CHECK_LIB(EGL,[eglGetError],, AC_MSG_ERROR([EGL is required]))
+ GL_LIBS="$LIBS $X_LIBS -lEGL -lGLESv2"
+ GL_BACKEND=x11ES2
+ GL_TYPE=gles
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
new file mode 100644
index 000000000..f3eaf3094
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
@@ -0,0 +1,29 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI[md5sum] = "ac70ede13f79978d56eaed8abaa3c938"
+SRC_URI[sha256sum] = "48340b6a4b8abce16344a7bc33e74a94fdcce4f57ef6342cdf2f941c429bf210"
+
+SRC_URI += " file://0001-conditional-gl-framebuffer-undefined-use.patch \
+ file://rpi-egl-gles2-dep.patch \
+"
+
+DEPENDS += "gst-plugins-base virtual/libgles2 virtual/egl jpeg libpng glew"
+
+PR = "r4"
+
+inherit gettext distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "opengl"
+
+# This package doesn't have a configure switch for EGL or GL, so forcibly tell
+# configure that it can't find gl.h so it always uses EGL. If/when we have some
+# way for machines to specify their preferred GL flavour this can be
+# automatically adapted.
+EXTRA_OECONF += "ac_cv_header_GL_gl_h=no"
+
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-apps = "1"
+ALLOW_EMPTY_${PN}-glib = "1"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
new file mode 100644
index 000000000..6456d3c6c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
@@ -0,0 +1,33 @@
+From 12d18fe4e98e7c232d59b56d529a0521f293fe6d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Wed, 5 Sep 2012 18:54:42 +0200
+Subject: [PATCH] v4l2: fix build with recent kernels, the v4l2_buffer input
+ field was removed
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Backport
+
+[1] http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=9f2aa8d47f835ea155aaf635f618c0fc1ca87012
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ sys/v4l2/gstv4l2bufferpool.c | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
+index b81c6a4..51cc0ce 100644
+--- a/sys/v4l2/gstv4l2bufferpool.c
++++ b/sys/v4l2/gstv4l2bufferpool.c
+@@ -181,7 +181,6 @@ gst_v4l2_buffer_new (GstV4l2BufferPool * pool, guint index, GstCaps * caps)
+ GST_LOG_OBJECT (pool->v4l2elem, " MMAP offset: %u",
+ ret->vbuffer.m.offset);
+ GST_LOG_OBJECT (pool->v4l2elem, " length: %u", ret->vbuffer.length);
+- GST_LOG_OBJECT (pool->v4l2elem, " input: %u", ret->vbuffer.input);
+
+ data = (guint8 *) v4l2_mmap (0, ret->vbuffer.length,
+ PROT_READ | PROT_WRITE, MAP_SHARED, pool->video_fd,
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
new file mode 100644
index 000000000..bd0de583a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
@@ -0,0 +1,45 @@
+From ccb01de8096a32d86d47b0d92ec3416c57ee4d25 Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@windriver.com>
+Date: Thu, 22 Aug 2013 12:15:54 -0400
+Subject: [PATCH] v4l2_calls: define V4L2_CID_HCENTER and V4L2_CID_VCENTER
+
+kernel commit 24b9f5017 [[media] V4L: Remove deprecated image centering controls]
+removed the definitions of V4L2_CID_HCENTER and V4L2_CID_VCENTER after three
+years of depreciation.
+
+The ioctl values are still free, and the case statement which processess them
+in v4l2 userspace falls through to the proper replacement. So in the short
+term, we can explicitly define them using the old absolute values, and everything
+will work.
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
+---
+ sys/v4l2/v4l2_calls.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
+index 309bfb6..3c64544 100644
+--- a/sys/v4l2/v4l2_calls.c
++++ b/sys/v4l2/v4l2_calls.c
+@@ -54,11 +54,16 @@
+ #include "gst/gst-i18n-plugin.h"
+
+ /* Those are ioctl calls */
++
++/* V4L2_CID_HCENTER has been removed from the mainline kernel, but
++ the ioctl space is still present. Since these values fall through
++ to their replacement, it is safe (in the short term) to re-use the
++ old values explictily */
+ #ifndef V4L2_CID_HCENTER
+-#define V4L2_CID_HCENTER V4L2_CID_HCENTER_DEPRECATED
++#define V4L2_CID_HCENTER V4L2_CID_BASE+22
+ #endif
+ #ifndef V4L2_CID_VCENTER
+-#define V4L2_CID_VCENTER V4L2_CID_VCENTER_DEPRECATED
++#define V4L2_CID_VCENTER V4L2_CID_BASE+23
+ #endif
+
+ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
new file mode 100644
index 000000000..48b8e98b8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
@@ -0,0 +1,47 @@
+From ce94b2c2b91b6db190c121860e12a6afafce7ae1 Mon Sep 17 00:00:00 2001
+From: Roland Krikava <rkrikava@gmail.com>
+Date: Fri, 2 Nov 2012 12:38:44 -0400
+Subject: [PATCH 407/440] mulawdec: fix integer overrun
+
+There might be more than 65535 samples in a chunk of data.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=687469
+
+Commit - 3be45f70220310ec1c60d819f90b5f2ae03b5d83 in 0.10 branch
+
+Upstream Status: Backported
+
+Signed-off-by: Roland Krikava <rkrikava@gmail.com>
+---
+ gst/law/mulaw-conversion.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/gst/law/mulaw-conversion.c b/gst/law/mulaw-conversion.c
+index 8afae80..190a9f5 100644
+--- a/gst/law/mulaw-conversion.c
++++ b/gst/law/mulaw-conversion.c
+@@ -51,9 +51,10 @@ mulaw_encode (gint16 * in, guint8 * out, gint numsamples)
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
+ };
+- gint16 sign, exponent, mantissa, i;
++ gint16 sign, exponent, mantissa;
+ gint16 sample;
+ guint8 ulawbyte;
++ gint i;
+
+ for (i = 0; i < numsamples; i++) {
+ sample = in[i];
+@@ -102,7 +103,8 @@ mulaw_decode (guint8 * in, gint16 * out, gint numsamples)
+ static gint16 exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
+ gint16 sign, exponent, mantissa;
+ guint8 ulawbyte;
+- gint16 linear, i;
++ gint16 linear;
++ gint i;
+
+ for (i = 0; i < numsamples; i++) {
+ ulawbyte = in[i];
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
new file mode 100644
index 000000000..f993cfc11
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
@@ -0,0 +1,47 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+ file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
+
+PR = "r8"
+
+PACKAGECONFIG ?= "jpeg v4l \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio x11', d)} \
+"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[wavpack] = "--enable-wavpack,--disable-wavpack,wavpack"
+PACKAGECONFIG[gdkpixbuf] = "--enable-gdk_pixbuf,--disable-gdk_pixbuf,gdk-pixbuf"
+PACKAGECONFIG[v4l] = "--enable-gst_v4l2 --with-gudev,--disable-gst_v4l2 --without-gudev,libgudev"
+# sub-feature of v4l, but control separately since libv4l is not part of oe-core
+PACKAGECONFIG[libv4l] = "--with-libv4l2,--without-libv4l2,libv4l"
+PACKAGECONFIG[bzip2] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[x11] = "--enable-x,--disable-x,virtual/libx11 libxfixes libxdamage"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libiec61883 libavc1394"
+
+DEPENDS += "gst-plugins-base gconf cairo libpng zlib libid3tag flac \
+ speex libsoup-2.4 libcap"
+
+inherit gettext gconf
+
+SRC_URI += "file://0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch \
+ file://0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch \
+ file://0407-mulawdec-fix-integer-overrun.patch \
+"
+EXTRA_OECONF += "--disable-aalib --disable-esd --disable-shout2 --disable-libcaca --disable-hal \
+ --disable-examples --disable-taglib"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "24f98a294a2b521e1b29412bdadae2e6"
+SRC_URI[sha256sum] = "7e27840e40a7932ef2dc032d7201f9f41afcaf0b437daf5d1d44dc96d9e35ac6"
+
+FILES_${PN}-gconfelements += "${sysconfdir}/gconf/schemas/gstreamer-0.10.schemas"
+FILES_${PN}-equalizer += "${datadir}/gstreamer-0.10/presets/*.prs"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
new file mode 100644
index 000000000..1f72fc036
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
@@ -0,0 +1,193 @@
+From 649bd92cd2600719862ad5189899212409dd0a67 Mon Sep 17 00:00:00 2001
+From: Leon Merten Lohse <leon@green-side.de>
+Date: Thu, 3 May 2012 23:50:30 +0100
+Subject: [PATCH] cdio: compensate for libcdio's recent cd-text api changes
+
+https://bugzilla.gnome.org/show_bug.cgi?id=675112
+
+Conflicts:
+
+ ext/cdio/gstcdiocddasrc.c
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
+Upstream-Status: Backport
+---
+ ext/cdio/gstcdio.c | 35 ++++++++++++++++++++++++++++-------
+ ext/cdio/gstcdio.h | 16 ++++++++++++++++
+ ext/cdio/gstcdiocddasrc.c | 19 +++++++++++++++++++
+ 3 files changed, 63 insertions(+), 7 deletions(-)
+
+diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c
+index 2f58d18..483ebf5 100644
+--- a/ext/cdio/gstcdio.c
++++ b/ext/cdio/gstcdio.c
+@@ -30,12 +30,16 @@
+ GST_DEBUG_CATEGORY (gst_cdio_debug);
+
+ void
+-gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
++gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
+ cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
+ {
+ const gchar *txt;
+
++#if LIBCDIO_VERSION_NUM > 83
++ txt = cdtext_get_const (cdtext, field, track);
++#else
+ txt = cdtext_get_const (field, cdtext);
++#endif
+ if (txt == NULL || *txt == '\0') {
+ GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
+ return;
+@@ -57,6 +61,12 @@ gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
+ }
+
+ GstTagList *
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
++{
++ GstTagList *tags = NULL;
++
++#else
+ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+ {
+ GstTagList *tags = NULL;
+@@ -67,14 +77,22 @@ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+ GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
+ return NULL;
+ }
++#endif
+
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_PERFORMER, GST_TAG_ARTIST, &tags);
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_TITLE, &tags);
++ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
++ GST_TAG_ARTIST, &tags);
++ gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
++ &tags);
+
+ return tags;
+ }
+
+ void
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
++ GstTagList * tags)
++{
++#else
+ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+ {
+ cdtext_t *t;
+@@ -84,11 +102,14 @@ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+ GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
+ return;
+ }
++#endif
+
+- /* FIXME: map CDTEXT_PERFORMER to GST_TAG_ALBUM_ARTIST once we have that */
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_ALBUM, &tags);
+- gst_cdio_add_cdtext_field (src, t, CDTEXT_GENRE, GST_TAG_GENRE, &tags);
+-
++ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
++ GST_TAG_ALBUM_ARTIST, &tags);
++ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
++ &tags);
++ gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
++ &tags);
+ GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
+ }
+
+diff --git a/ext/cdio/gstcdio.h b/ext/cdio/gstcdio.h
+index ef31ed0..c6da580 100644
+--- a/ext/cdio/gstcdio.h
++++ b/ext/cdio/gstcdio.h
+@@ -24,22 +24,38 @@
+ #include <gst/gst.h>
+ #include <cdio/cdio.h>
+ #include <cdio/cdtext.h>
++#include <cdio/version.h>
++
++#if LIBCDIO_VERSION_NUM <= 83
++ #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
++ #define CDTEXT_FIELD_GENRE CDTEXT_GENRE
++ #define CDTEXT_FIELD_TITLE CDTEXT_TITLE
++#endif
+
+ GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
+ #define GST_CAT_DEFAULT gst_cdio_debug
+
+ void gst_cdio_add_cdtext_field (GstObject * src,
+ cdtext_t * cdtext,
++ track_t track,
+ cdtext_field_t field,
+ const gchar * gst_tag,
+ GstTagList ** p_tags);
+
+ GstTagList * gst_cdio_get_cdtext (GstObject * src,
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext_t * t,
++#else
+ CdIo * cdio,
++#endif
+ track_t track);
+
+ void gst_cdio_add_cdtext_album_tags (GstObject * src,
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext_t * t,
++#else
+ CdIo * cdio,
++#endif
+ GstTagList * tags);
+
+ #endif /* __GST_CDIO_H__ */
+diff --git a/ext/cdio/gstcdiocddasrc.c b/ext/cdio/gstcdiocddasrc.c
+index 615a0c8..830839e 100644
+--- a/ext/cdio/gstcdiocddasrc.c
++++ b/ext/cdio/gstcdiocddasrc.c
+@@ -206,6 +206,9 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+ GstCdioCddaSrc *src;
+ discmode_t discmode;
+ gint first_track, num_tracks, i;
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext_t *cdtext;
++#endif
+
+ src = GST_CDIO_CDDA_SRC (audiocdsrc);
+
+@@ -244,8 +244,18 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device)
+ if (src->read_speed != -1)
+ cdio_set_speed (src->cdio, src->read_speed);
+
++#if LIBCDIO_VERSION_NUM > 83
++ cdtext = cdio_get_cdtext (src->cdio);
++
++ if (NULL == cdtext)
++ GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
++ else
++ gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
++ cddabasesrc->tags);
++#else
+ gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
+ cddabasesrc->tags);
++#endif
+
+ GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
+
+@@ -250,8 +263,14 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+ * the right thing here (for cddb id calculations etc. as well) */
+ track.start = cdio_get_track_lsn (src->cdio, i + first_track);
+ track.end = track.start + len_sectors - 1; /* -1? */
++#if LIBCDIO_VERSION_NUM > 83
++ if (NULL != cdtext)
++ track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
++ i + first_track);
++#else
+ track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
+ i + first_track);
++#endif
+
+ gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
+ }
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
new file mode 100644
index 000000000..3fd6a2697
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
@@ -0,0 +1,58 @@
+From e634bc6420826f760f6519a9f134c6a4d3412ef8 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Mon, 19 Oct 2015 15:26:24 +0200
+Subject: [PATCH] Fix opencore include paths
+
+Upstream-Status: Inappropriate [no upstream - GStreamer 0.10 is no longer being maintained]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ ext/amrnb/amrnbdec.h | 2 +-
+ ext/amrnb/amrnbenc.h | 2 +-
+ ext/amrwbdec/amrwbdec.h | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/ext/amrnb/amrnbdec.h b/ext/amrnb/amrnbdec.h
+index 1e81839..01b7154 100644
+--- a/ext/amrnb/amrnbdec.h
++++ b/ext/amrnb/amrnbdec.h
+@@ -22,7 +22,7 @@
+
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <interf_dec.h>
++#include <opencore-amrnb/interf_dec.h>
+
+ G_BEGIN_DECLS
+
+diff --git a/ext/amrnb/amrnbenc.h b/ext/amrnb/amrnbenc.h
+index 7f673ac..5be39b5 100644
+--- a/ext/amrnb/amrnbenc.h
++++ b/ext/amrnb/amrnbenc.h
+@@ -21,7 +21,7 @@
+ #define __GST_AMRNBENC_H__
+
+ #include <gst/gst.h>
+-#include <interf_enc.h>
++#include <opencore-amrnb/interf_enc.h>
+ #include <gst/audio/gstaudioencoder.h>
+
+ G_BEGIN_DECLS
+diff --git a/ext/amrwbdec/amrwbdec.h b/ext/amrwbdec/amrwbdec.h
+index c3528fc..f27c6d2 100644
+--- a/ext/amrwbdec/amrwbdec.h
++++ b/ext/amrwbdec/amrwbdec.h
+@@ -22,8 +22,8 @@
+
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <dec_if.h>
+-#include <if_rom.h>
++#include <opencore-amrwb/dec_if.h>
++#include <opencore-amrwb/if_rom.h>
+
+ G_BEGIN_DECLS
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
new file mode 100644
index 000000000..199b47d76
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
@@ -0,0 +1,35 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+ file://gst/synaesthesia/synaescope.h;beginline=1;endline=20;md5=99f301df7b80490c6ff8305fcc712838 \
+ file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 \
+ file://gst/mpegstream/gstmpegparse.h;beginline=1;endline=18;md5=ff65467b0c53cdfa98d0684c1bc240a9"
+
+DEPENDS += "gst-plugins-base libid3tag libmad mpeg2dec liba52 lame"
+PR = "r3"
+
+inherit gettext
+
+EXTRA_OECONF += "--with-plugins=a52dec,lame,id3tag,mad,mpeg2dec,mpegstream,mpegaudioparse,asfdemux,realmedia \
+ --disable-orc"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x264] = "--enable-x264,--disable-x264,x264"
+PACKAGECONFIG[cdio] = "--enable-cdio,--disable-cdio,libcdio"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread,libdvdread"
+PACKAGECONFIG[amrnb] = "--enable-amrnb,--disable-amrnb,opencore-amr"
+PACKAGECONFIG[amrwb] = "--enable-amrwb,--disable-amrwb,opencore-amr"
+
+do_configure_prepend() {
+ # This m4 file contains nastiness which conflicts with libtool 2.2.2
+ rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "1d81c593e22a6cdf0f2b4f57eae93df2"
+SRC_URI[sha256sum] = "1ca90059275c0f5dca71d4d1601a8f429b7852baed0723e820703b977e2c8df0"
+SRC_URI += "file://0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch \
+ file://0002-Fix-opencore-include-paths.patch"
+
+FILES_${PN}-amrnb += "${datadir}/gstreamer-0.10/presets/GstAmrnbEnc.prs"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
new file mode 100644
index 000000000..6e163a8c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Plugins for the GStreamer multimedia framework"
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+DEPENDS = "gstreamer"
+
+# gobject-introspection to get --disable-introspection into UNKNOWN_CONFIGURE_WHITELIST
+inherit autotools pkgconfig gobject-introspection
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-valgrind ${GSTREAMER_DEBUG} --disable-examples --disable-introspection"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+LIBV = "0.10"
+require recipes-multimedia/gstreamer/gst-plugins-package.inc
+
+PACKAGES_DYNAMIC += "^${PN}-.*"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+ if [ -e ${S}/po/Makefile.in.in ]; then
+ sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+ fi
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
new file mode 100644
index 000000000..69b21dd87
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
@@ -0,0 +1,38 @@
+index gst-rtsp_0.10.8/bindings/python/Makefile.am
+Index: gst-rtsp-0.10.8/bindings/python/Makefile.am
+===================================================================
+--- gst-rtsp-0.10.8.orig/bindings/python/Makefile.am
++++ gst-rtsp-0.10.8/bindings/python/Makefile.am
+@@ -14,7 +14,7 @@ defs_DATA = $(DEFS)
+ defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs
+ OVERRIDES = rtspserver.override
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
+
+ rtspserver_la_CFLAGS = -I$(top_srcdir)/src \
+ $(PYGOBJECT_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+Index: gst-rtsp-0.10.8/examples/Makefile.am
+===================================================================
+--- gst-rtsp-0.10.8.orig/examples/Makefile.am
++++ gst-rtsp-0.10.8/examples/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-video test-ogg test-mp4 test-readme test-launch test-sdp test-uri test-auth
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
+Index: gst-rtsp-0.10.8/tests/Makefile.am
+===================================================================
+--- gst-rtsp-0.10.8.orig/tests/Makefile.am
++++ gst-rtsp-0.10.8/tests/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-cleanup
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
new file mode 100644
index 000000000..b78bcaf5a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
@@ -0,0 +1,18 @@
+SUMMARY = "GStreamer RTSP server"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2 \
+ file://0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch"
+SRC_URI[md5sum] = "b511af07000595f63c3a705946221643"
+SRC_URI[sha256sum] = "9915887cf8515bda87462c69738646afb715b597613edc7340477ccab63a6617"
+
+DEPENDS = "gst-plugins-base gstreamer"
+
+EXTRA_OECONF = "--disable-introspection"
+
+# Configure always checks for Python so inherit pythonnative. Better solution
+# would be to disable the checks entirely.
+inherit autotools pythonnative gettext
+
+FILES_${PN}-dev += "${datadir}/vala/vapi/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
new file mode 100644
index 000000000..d07749682
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
@@ -0,0 +1,32 @@
+From ed7f4802222234eef192aa3f74bc92268f338f97 Mon Sep 17 00:00:00 2001
+From: Sebastian Droege <sebastian.droege@collabora.co.uk>
+Date: Tue, 6 Mar 2012 12:28:02 +0100
+Subject: [PATCH] baseparse: Fix 'self-comparison always evaluates to true'
+
+This was really a bug.
+
+Commit is ed7f4802222234eef192aa3f74bc92268f338f97 in 0.10 branch
+
+Upstream Status: Backported
+
+Signed-off-by: Sebastian Droege <sebastian.droege@collabora.co.uk>
+---
+ libs/gst/base/gstbaseparse.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
+index 851ec1d..108ee89 100644
+--- a/libs/gst/base/gstbaseparse.c
++++ b/libs/gst/base/gstbaseparse.c
+@@ -3899,7 +3899,7 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
+ seek event (in bytes) to upstream. Segment / flush handling happens
+ in corresponding src event handlers */
+ GST_DEBUG_OBJECT (parse, "seek in PUSH mode");
+- if (seekstop >= 0 && seekpos <= seekpos)
++ if (seekstop >= 0 && seekstop <= seekpos)
+ seekstop = seekpos;
+ new_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
+ GST_SEEK_TYPE_SET, seekpos, stop_type, seekstop);
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
new file mode 100644
index 000000000..dc2d60612
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
@@ -0,0 +1,35 @@
+From 60516f4798894f958fc53b470e1283318d0f8706 Mon Sep 17 00:00:00 2001
+From: Kerrick Staley <kerrick@kerrickstaley.com>
+Date: Tue, 20 Aug 2013 23:59:29 -0700
+Subject: [PATCH 1/2] parse: make grammar.y work with Bison 3
+
+YYLEX_PARAM is no longer supported in Bison 3.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=706462
+---
+ gst/parse/grammar.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst/parse/grammar.y b/gst/parse/grammar.y
+index 24fc87b..7f9dd16 100644
+--- a/gst/parse/grammar.y
++++ b/gst/parse/grammar.y
+@@ -26,7 +26,6 @@
+ */
+
+ #define YYERROR_VERBOSE 1
+-#define YYLEX_PARAM scanner
+
+ #define YYENABLE_NLS 0
+
+@@ -648,6 +647,7 @@ static int yyerror (void *scanner, graph_t *graph, const char *s);
+ %right '.'
+ %left '!' '='
+
++%lex-param { void *scanner }
+ %parse-param { void *scanner }
+ %parse-param { graph_t *graph }
+ %pure-parser
+--
+2.7.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
new file mode 100644
index 000000000..8db396631
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch
@@ -0,0 +1,32 @@
+From 4b145ceb22bbce7ba6e209c6ab61f2d5867e69f9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Tue, 1 Nov 2016 19:02:30 +0100
+Subject: [PATCH] gst-glib2.m4: don't do crazy things to GLIB_CFLAGS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+we are definitely not one of those poor souls mentioned
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ common/m4/gst-glib2.m4 | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4
+index b01f02f..4569ae5 100644
+--- a/common/m4/gst-glib2.m4
++++ b/common/m4/gst-glib2.m4
+@@ -69,7 +69,6 @@ AC_DEFUN([AG_GST_GLIB_CHECK],
+ fi
+
+ dnl for the poor souls who for example have glib in /usr/local
+- AS_SCRUB_INCLUDE(GLIB_CFLAGS)
+
+ AC_SUBST(GLIB_EXTRA_CFLAGS)
+ ])
+--
+2.5.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
new file mode 100644
index 000000000..5d8bb1340
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
@@ -0,0 +1,19 @@
+# gstreamer: Fix a problem with configure if check has already been built
+# Richard Purdie <rpurdie@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+diff -urN gstreamer-0.10.29-orig/configure.ac gstreamer-0.10.29/configure.ac
+--- gstreamer-0.10.29-orig/configure.ac 2010-06-26 12:49:27.774930773 +0800
++++ gstreamer-0.10.29/configure.ac 2010-06-26 12:51:12.899200233 +0800
+@@ -543,8 +543,10 @@
+ *) BUILD_CHECK=yes ;;
+ esac
+ ])
++
+ dnl bit of a misnomer, but keep the conditional named like this so we don't
+ dnl have to change too much elsewhere
++HAVE_CHECK=no
+ AM_CONDITIONAL(HAVE_CHECK, test "x$BUILD_CHECK" = "xyes")
+
+ dnl configure the desired buffer alignment
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
new file mode 100644
index 000000000..30be85f59
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
@@ -0,0 +1,16 @@
+# Fix crash with gst-inspect
+# Chris Lord <chris@openedhand.com>
+
+Upstream-Status: Pending
+
+--- gstreamer-0.10.9/tools/gst-inspect.c.old 2006-09-12 11:56:53.000000000 +0100
++++ gstreamer-0.10.9/tools/gst-inspect.c 2006-09-12 11:57:27.000000000 +0100
+@@ -1123,7 +1123,7 @@
+ g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
+ g_option_context_add_group (ctx, gst_init_get_option_group ());
+ if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+- g_print ("Error initializing: %s\n", err->message);
++ g_print ("Error initializing: %s\n", err ? err->message : "(null)");
+ exit (1);
+ }
+ g_option_context_free (ctx);
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
new file mode 100644
index 000000000..c1f3e71af
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
@@ -0,0 +1,487 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ * 2000 Wim Taymans <wtay@chello.be>
+ * 2005 David A. Schleef <ds@schleef.org>
+ *
+ * gstregistryxml.c: GstRegistry object, support routines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it ulnder 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#include <gst/gstregistrybinary.h>
+
+/*
+** Simple handy function to write a memory location to the registry cache file
+*/
+inline static gboolean
+gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size)
+{
+ if (write(registry->cache_file, mem, size) != size)
+ {
+ GST_ERROR("Failed to write binary registry element: ptr=%p size=%u error=%s\n",
+ mem, size, strerror(errno));
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*
+** Save features GstBinary style
+*/
+static gboolean
+gst_registry_binary_fill_feature(GList **list, GstPluginFeature *orig, GstBinaryPluginFeature *dest, const char *name)
+{
+ GstBinaryChunck *chk;
+
+ if ((chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+ return FALSE;
+
+ chk->data = dest;
+ chk->size = sizeof (GstBinaryPluginFeature);
+
+ *list = g_list_append(*list, chk);
+
+ dest->rank = orig->rank;
+ if (!strncpy(dest->typename, name, GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN) ||
+ !strncpy(dest->name, orig->name, GST_BINARY_REGISTRY_TYPENAME_NAME_LEN))
+ {
+ GST_ERROR("Failed to write binary registry feature");
+ goto fail;
+ }
+
+ if (GST_IS_ELEMENT_FACTORY(orig))
+ {
+ GstElementFactory *factory = GST_ELEMENT_FACTORY(orig);
+
+ if (!strncpy(dest->longname, factory->details.longname, GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN) ||
+ !strncpy(dest->class, factory->details.klass, GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN) ||
+ !strncpy(dest->description, factory->details.description, GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN) ||
+ !strncpy(dest->author, factory->details.author, GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN))
+ {
+ GST_ERROR("Failed to write binary registry feature");
+ goto fail;
+ }
+ }
+
+ dest->npadtemplates = dest->ninterfaces = dest->nuritypes = 0;
+ return TRUE;
+
+ fail:
+ free(chk);
+ return FALSE;
+}
+
+
+/*
+** Initialize the GstBinaryRegistryMagic, setting both our magic number and gstreamer major/minor version
+*/
+inline static gboolean
+gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m)
+{
+ if (!strncpy(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) ||
+ !strncpy(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+ {
+ GST_ERROR("Failed to write magic to the registry magic structure");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/*
+** Check GstBinaryRegistryMagic validity.
+** Return a pointer pointing right after the magic structure
+*/
+static gchar *
+gst_registry_binary_check_magic(gchar *in)
+{
+ GstBinaryRegistryMagic *m = (GstBinaryRegistryMagic *) in;
+
+ if (m == NULL || m->magic == NULL || m->version == NULL)
+ {
+ GST_ERROR("Binary registry magic structure is broken");
+ return NULL;
+ }
+ if (strncmp(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) != 0)
+ {
+ GST_ERROR("Binary registry magic is different : %02x%02x%02x%02x != %02x%02x%02x%02x",
+ GST_MAGIC_BINARY_REGISTRY_STR[0] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[1] & 0xff,
+ GST_MAGIC_BINARY_REGISTRY_STR[2] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[3] & 0xff,
+ m->magic[0] & 0xff, m->magic[1] & 0xff, m->magic[2] & 0xff, m->magic[3] & 0xff);
+ return NULL;
+ }
+ if (strncmp(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+ {
+ GST_ERROR("Binary registry magic version is different : %s != %s",
+ GST_MAJORMINOR, m->version);
+ return NULL;
+ }
+ return (in + sizeof (GstBinaryRegistryMagic));
+}
+
+/*
+** Adapt a GstPlugin to our GstBinaryPluginElement structure, and write it to the
+** registry file.
+*/
+static gboolean
+gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin)
+{
+ GstBinaryPluginElement *e;
+ GstBinaryChunck *chk;
+ GList *walk;
+
+ if ((e = calloc(1, sizeof (GstBinaryPluginElement))) == NULL ||
+ (chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+ return FALSE;
+
+ chk->data = e;
+ chk->size = sizeof (GstBinaryPluginElement);
+ *list = g_list_append(*list, chk);
+
+ if (!strncpy(e->name, plugin->desc.name, GST_BINARY_REGISTRY_NAME_LEN) ||
+ !strncpy(e->description, plugin->desc.description, GST_BINARY_REGISTRY_DESCRIPTION_LEN) ||
+ !strncpy(e->filename, plugin->filename, _POSIX_PATH_MAX) ||
+ !strncpy(e->version, plugin->desc.version, GST_BINARY_REGISTRY_VERSION_LEN) ||
+ !strncpy(e->license, plugin->desc.license, GST_BINARY_REGISTRY_LICENSE_LEN) ||
+ !strncpy(e->source, plugin->desc.source, GST_BINARY_REGISTRY_SOURCE_LEN) ||
+ !strncpy(e->package, plugin->desc.package, GST_BINARY_REGISTRY_PACKAGE_LEN) ||
+ !strncpy(e->origin, plugin->desc.origin, GST_BINARY_REGISTRY_ORIGIN_LEN))
+ {
+ GST_DEBUG("Can't adapt GstPlugin to GstBinaryPluginElement");
+ goto fail;
+ }
+
+ e->size = plugin->file_size;
+ e->m32p = plugin->file_mtime;
+
+ GList *ft_list = gst_registry_get_feature_list_by_plugin(registry, plugin->desc.name);
+
+ for (walk = ft_list; walk; walk = g_list_next(walk), e->nfeatures++)
+ {
+ GstPluginFeature *curfeat = GST_PLUGIN_FEATURE (walk->data);
+ GstBinaryPluginFeature *newfeat;
+ const char *feat_name = g_type_name(G_OBJECT_TYPE(curfeat));
+
+ if ((newfeat = calloc(1, sizeof (GstBinaryPluginFeature))) == NULL)
+ goto fail;
+
+ if (!feat_name || !gst_registry_binary_fill_feature(list, curfeat, newfeat, feat_name))
+ {
+ GST_ERROR("Can't fill plugin feature, aborting.");
+ goto fail;
+ }
+ }
+
+ GST_DEBUG("Found %d features in plugin \"%s\"\n", e->nfeatures, e->name);
+ return TRUE;
+
+ fail:
+ free(chk);
+ free(e);
+ return FALSE;
+}
+
+/*
+** Write the cache to file. Part of the code was taken from gstregistryxml.c
+*/
+gboolean
+gst_registry_binary_write_cache(GstRegistry *registry, const char *location)
+{
+ GList *walk;
+ char *tmp_location;
+ GstBinaryRegistryMagic *magic;
+ GstBinaryChunck *magic_chunck;
+ GList *to_write = NULL;
+
+ GST_INFO("Writing binary registry cache");
+
+ g_return_val_if_fail (GST_IS_REGISTRY (registry), FALSE);
+ tmp_location = g_strconcat (location, ".tmpXXXXXX", NULL);
+ registry->cache_file = g_mkstemp (tmp_location);
+ if (registry->cache_file == -1)
+ {
+ char *dir;
+
+ /* oops, I bet the directory doesn't exist */
+ dir = g_path_get_dirname (location);
+ g_mkdir_with_parents (dir, 0777);
+ g_free (dir);
+
+ registry->cache_file = g_mkstemp (tmp_location);
+ }
+
+ if (registry->cache_file == -1)
+ goto fail;
+
+ if ((magic = calloc(1, sizeof (GstBinaryRegistryMagic))) == NULL ||
+ !gst_registry_binary_initialize_magic(magic))
+ goto fail;
+
+ if ((magic_chunck = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+ goto fail;
+
+ magic_chunck->data = magic;
+ magic_chunck->size = sizeof (GstBinaryRegistryMagic);
+ to_write = g_list_append(to_write, magic_chunck);
+
+ /* Iterate trough the list of plugins in the GstRegistry and adapt them to our structures */
+ for (walk = g_list_last(registry->plugins); walk; walk = g_list_previous(walk))
+ {
+ GstPlugin *plugin = GST_PLUGIN(walk->data);
+
+ if (!plugin->filename)
+ continue;
+
+ if (plugin->flags & GST_PLUGIN_FLAG_CACHED)
+ {
+ int ret;
+ struct stat statbuf;
+
+ ret = g_stat (plugin->filename, &statbuf);
+ if ((ret = g_stat (plugin->filename, &statbuf)) < 0 ||
+ plugin->file_mtime != statbuf.st_mtime ||
+ plugin->file_size != statbuf.st_size)
+ continue;
+ }
+
+ if (!gst_registry_binary_save_plugin(&to_write, registry, plugin))
+ {
+ GST_ERROR("Can't write binary plugin information for \"%s\"", plugin->filename);
+ continue; /* Try anyway */
+ }
+ }
+
+ for (walk = g_list_first(to_write); walk; walk = g_list_next(walk))
+ {
+ GstBinaryChunck *cur = walk->data;
+
+ if (!gst_registry_binary_write(registry, cur->data, cur->size))
+ {
+ free(cur->data);
+ free(cur);
+ g_list_free(to_write);
+ goto fail;
+ }
+ free(cur->data);
+ free(cur);
+ }
+ g_list_free(to_write);
+
+ if (close(registry->cache_file) < 0)
+ {
+ GST_DEBUG("Can't close registry file : %s", strerror(errno));
+ goto fail;
+ }
+
+ if (g_file_test (tmp_location, G_FILE_TEST_EXISTS)) {
+#ifdef WIN32
+ remove (location);
+#endif
+ rename (tmp_location, location);
+ }
+
+ g_free (tmp_location);
+ return TRUE;
+
+ fail:
+ g_free(tmp_location);
+ return FALSE;
+}
+
+static GstPluginFeature*
+gst_registry_binary_load_feature(GstBinaryPluginFeature *in)
+{
+ GstPluginFeature *feature;
+ GType type;
+
+ if (!in->typename || !*(in->typename))
+ return NULL;
+
+ /* GST_INFO("Plugin feature typename : %s", in->typename);*/
+
+ if (!(type = g_type_from_name(in->typename)))
+ {
+ GST_ERROR("Unknown type from typename");
+ return NULL;
+ }
+ feature = g_object_new (type, NULL);
+
+ if (!feature) {
+ GST_ERROR("Can't create feature from type");
+ return NULL;
+ }
+
+ if (!GST_IS_PLUGIN_FEATURE (feature)) {
+ /* don't really know what it is */
+ if (GST_IS_OBJECT (feature))
+ gst_object_unref (feature);
+ else
+ g_object_unref (feature);
+ return NULL;
+ }
+
+ feature->name = g_strdup(in->name);
+ feature->rank = in->rank;
+
+ if (GST_IS_ELEMENT_FACTORY(feature))
+ {
+ GstElementFactory *factory = GST_ELEMENT_FACTORY(feature);
+
+ factory->details.longname = g_strdup(in->longname);
+ factory->details.klass = g_strdup(in->class);
+ factory->details.description = g_strdup(in->description);
+ factory->details.author = g_strdup(in->author);
+
+ /* GST_INFO("Element factory : %s", factory->details.longname); */
+ }
+
+ GST_DEBUG("Added feature %p with name %s", feature, feature->name);
+ return feature;
+}
+
+/*
+** Make a new plugin from current GstBinaryPluginElement structure
+** and save it to the GstRegistry. Return an offset to the next
+** GstBinaryPluginElement structure.
+*/
+static unsigned long
+gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in)
+{
+ GstBinaryPluginElement *p = (GstBinaryPluginElement *) in;
+ GstPlugin *plugin = NULL;
+ GList *plugin_features = NULL;
+ GstBinaryPluginFeature *feat;
+ unsigned int i;
+ unsigned long offset;
+
+ plugin = g_object_new (GST_TYPE_PLUGIN, NULL);
+
+ plugin->flags |= GST_PLUGIN_FLAG_CACHED;
+
+ plugin->desc.name = g_strdup(p->name);
+ plugin->desc.description= g_strdup(p->description);
+ plugin->filename = g_strdup(p->filename);
+ plugin->desc.version = g_strdup(p->version);
+ plugin->desc.license = g_strdup(p->license);
+ plugin->desc.source = g_strdup(p->source);
+ plugin->desc.package = g_strdup(p->package);
+ plugin->desc.origin = g_strdup(p->origin);
+ plugin->file_mtime = p->m32p;
+ plugin->file_size = p->size;
+ plugin->basename = g_path_get_basename (plugin->filename);
+
+ if (plugin->file_mtime < 0 || plugin->file_size < 0)
+ {
+ GST_ERROR("Plugin time or file size is not valid !");
+ g_free(plugin);
+ return -1;
+ }
+
+ if (p->nfeatures < 0)
+ {
+ GST_ERROR("The number of feature structure is not valid !");
+ gst_object_unref(plugin);
+ return -1;
+ }
+
+ for (feat = (GstBinaryPluginFeature *) (in + sizeof (GstBinaryPluginElement)), i = 0;
+ i < p->nfeatures; i++, feat++)
+ {
+ GstPluginFeature *gstfeat;
+
+ if ((gstfeat = gst_registry_binary_load_feature(feat)) == NULL)
+ {
+ g_list_free(plugin_features);
+ g_free(plugin);
+ GST_ERROR("Error while loading binary feature");
+ return -1;
+ }
+ gstfeat->plugin_name = g_strdup(plugin->desc.name);
+ plugin_features = g_list_prepend(plugin_features, gstfeat);
+ }
+
+ GST_DEBUG("Added plugin \"%s\" to global registry from binary registry", plugin->desc.name);
+ GList *g;
+
+ gst_registry_add_plugin (registry, plugin);
+ for (g = plugin_features; g; g = g_list_next (g))
+ gst_registry_add_feature (registry, GST_PLUGIN_FEATURE (g->data));
+ /* g_list_free(plugin_features); */
+
+ offset = sizeof (GstBinaryPluginElement) + p->nfeatures * sizeof (GstBinaryPluginFeature);
+ return offset;
+}
+
+
+/*
+** Read the cache and adapt it to fill GstRegistry
+*/
+gboolean
+gst_registry_binary_read_cache(GstRegistry *registry, const char *location)
+{
+ GMappedFile *mapped = NULL;
+ GTimer *timer = NULL;
+ gchar *contents = NULL;
+ gdouble seconds;
+ unsigned long offset, inc;
+ gsize size;
+
+ /* make sure these types exist */
+ GST_TYPE_ELEMENT_FACTORY;
+ GST_TYPE_TYPE_FIND_FACTORY;
+ GST_TYPE_INDEX_FACTORY;
+
+ timer = g_timer_new ();
+
+ if ((mapped = g_mapped_file_new(location, FALSE, NULL)) == NULL ||
+ (contents = g_mapped_file_get_contents(mapped)) == NULL)
+ {
+ GST_ERROR("Can't load file : %s", strerror(errno));
+ return FALSE;
+ }
+ if ((contents = gst_registry_binary_check_magic(contents)) == NULL)
+ {
+ GST_ERROR("Binary registry type not recognized (invalid magic)");
+ g_mapped_file_free(mapped);
+ return FALSE;
+ }
+
+ if ((size = g_mapped_file_get_length(mapped)) < sizeof (GstBinaryPluginElement))
+ {
+ GST_INFO("No binary plugins structure to read");
+ return TRUE; /* This is not really an error */
+ }
+
+ for (offset = inc = 0; (offset + sizeof (GstBinaryPluginElement)) < size &&
+ (inc = gst_registry_binary_get_binary_plugin(registry, contents + offset)) > 0;
+ offset += inc)
+ ; /* May want in the future to do something here */
+ if (inc < 0)
+ {
+ GST_DEBUG("Problem while reading binary registry");
+ return FALSE;
+ }
+
+ g_timer_stop (timer);
+ seconds = g_timer_elapsed (timer, NULL);
+ g_timer_destroy (timer);
+
+ GST_INFO ("loaded %s in %f seconds", location, seconds);
+
+ if (mapped)
+ g_mapped_file_free (mapped);
+ return TRUE;
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
new file mode 100644
index 000000000..2ef24d765
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
@@ -0,0 +1,194 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ * 2000 Wim Taymans <wim.taymans@chello.be>
+ *
+ * gstregistry.h: Header for registry handling
+ *
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* SUGGESTIONS AND TODO :
+** ====================
+** - Use a compressed registry, but would induce performance loss
+** - Encrypt the registry, for security purpose, but would also reduce performances
+** - Also have a non-mmap based cache reading (work with file descriptors)
+*/
+
+#ifndef __GST_REGISTRYBINARY_H__
+#define __GST_REGISTRYBINARY_H__
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <gst/gst_private.h>
+#include <gst/gstelement.h>
+#include <gst/gsttypefind.h>
+#include <gst/gsttypefindfactory.h>
+#include <gst/gsturi.h>
+#include <gst/gstinfo.h>
+#include <gst/gstenumtypes.h>
+#include <gst/gstregistry.h>
+#include <gst/gstpadtemplate.h>
+
+#include "glib-compat-private.h"
+#include <glib/gstdio.h>
+
+/* A magic, written at the beginning of the file */
+#define GST_MAGIC_BINARY_REGISTRY_STR "\xc0\xde\xf0\x0d"
+#define GST_MAGIC_BINARY_REGISTRY_LEN (4)
+#define GST_MAGIC_BINARY_VERSION_LEN (64)
+
+typedef struct _GstBinaryRegistryMagic
+{
+ char magic[GST_MAGIC_BINARY_REGISTRY_LEN];
+ char version[GST_MAGIC_BINARY_VERSION_LEN];
+} GstBinaryRegistryMagic;
+
+
+/* Used to store pointers to write */
+typedef struct _GstBinaryChunck
+{
+ void *data;
+ unsigned int size;
+} GstBinaryChunck;
+
+
+/* A structure containing (staticely) every information needed for a plugin
+**
+** Notes :
+** "nfeatures" is used to say how many GstBinaryPluginFeature structures we will have
+** right after the structure itself.
+*/
+
+/* Various lenght defines for our GstBinaryPluginElement structure
+** Note : We could eventually use smaller size
+*/
+#define GST_BINARY_REGISTRY_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_VERSION_LEN (64)
+#define GST_BINARY_REGISTRY_LICENSE_LEN (256)
+#define GST_BINARY_REGISTRY_SOURCE_LEN (256)
+#define GST_BINARY_REGISTRY_PACKAGE_LEN (1024)
+#define GST_BINARY_REGISTRY_ORIGIN_LEN (1024)
+
+typedef struct _GstBinaryPluginElement
+{
+ char name[GST_BINARY_REGISTRY_NAME_LEN];
+ char description[GST_BINARY_REGISTRY_DESCRIPTION_LEN];
+ char filename[_POSIX_PATH_MAX];
+ char version[GST_BINARY_REGISTRY_VERSION_LEN];
+ char license[GST_BINARY_REGISTRY_LICENSE_LEN];
+ char source[GST_BINARY_REGISTRY_SOURCE_LEN];
+ char package[GST_BINARY_REGISTRY_PACKAGE_LEN];
+ char origin[GST_BINARY_REGISTRY_ORIGIN_LEN];
+ unsigned long size;
+ unsigned long m32p;
+ unsigned int nfeatures;
+} GstBinaryPluginElement;
+
+
+/* A structure containing the plugin features
+**
+** Note :
+** "npadtemplates" is used to store the number of GstBinaryPadTemplate structures following the structure itself.
+** "ninterfaces" is used to store the number of GstBinaryInterface structures following the structure itself.
+** "nuritypes" is used to store the number of GstBinaryUriType structures following the structure itself.
+*/
+#define GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN (512)
+#define GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN (256)
+
+typedef struct _GstBinaryPluginFeature
+{
+ char typename[GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN];
+ char name[GST_BINARY_REGISTRY_TYPENAME_NAME_LEN];
+ unsigned long rank;
+ char longname[GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN];
+ char class[GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN];
+ char description[GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN];
+ char author[GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN];
+ unsigned int npadtemplates;
+ unsigned int ninterfaces;
+ unsigned int nuritypes;
+} GstBinaryPluginFeature;
+
+
+/*
+** A structure containing the static pad templates of a plugin feature
+*/
+#define GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN (1024)
+
+typedef struct _GstBinaryPadTemplate
+{
+ char name[GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN];
+ char cap[GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN];
+ int direction; /* Either 0:"sink" or 1:"src" */
+ GstPadPresence presence;
+} GstBinaryPadTemplate;
+
+/*
+** A very simple structure defining the plugin feature interface string
+*/
+#define GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN (512)
+typedef struct _GstBinaryInterface
+{
+ char interface[GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN];
+ unsigned long size;
+} GstBinaryInterface;
+
+/* Uri Type */
+typedef struct _GstBinaryUriType
+{
+ GstURIType type;
+ unsigned long nuriprotocols;
+} GstBinaryUriType;
+
+/*
+** Function prototypes
+*/
+
+/* Local prototypes */
+inline static gboolean gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size);
+inline static gboolean gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m);
+static gboolean gst_registry_binary_fill_feature(GList **list, GstPluginFeature *, GstBinaryPluginFeature *, const char *);
+static gboolean gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin);
+static gchar *gst_registry_binary_check_magic(gchar *in);
+static GstPluginFeature *gst_registry_binary_load_feature(GstBinaryPluginFeature *);
+static unsigned long gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in);
+
+/* Exportable */
+gboolean gst_registry_binary_write_cache(GstRegistry *registry, const char *location);
+gboolean gst_registry_binary_read_cache(GstRegistry *registry, const char *location);
+
+#endif /* !__GST_REGISTRYBINARY_H__ */
+
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
new file mode 100644
index 000000000..5f97a20fd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
@@ -0,0 +1,53 @@
+SUMMARY = "GStreamer multimedia framework"
+DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
+It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605 \
+ file://gst/gst.h;beginline=1;endline=21;md5=8e5fe5e87d33a04479fde862e238eaa4"
+DEPENDS = "glib-2.0 libxml2 bison-native flex-native glib-2.0-native"
+
+PR = "r2"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2 \
+ file://check_fix.patch \
+ file://gst-inspect-check-error.patch \
+ file://0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch \
+ file://0001-parse-make-grammar.y-work-with-Bison-3.patch \
+ file://0002-gst-glib2.m4-don-t-do-crazy-things-to-GLIB_CFLAGS.patch \
+"
+
+SRC_URI[md5sum] = "a0cf7d6877f694a1a2ad2b4d1ecb890b"
+SRC_URI[sha256sum] = "e556a529e0a8cf1cd0afd0cab2af5488c9524e7c3f409de29b5d82bb41ae7a30"
+
+inherit autotools pkgconfig gettext
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-docbook --disable-gtk-doc \
+ --disable-dependency-tracking --disable-check \
+ --disable-examples --disable-tests \
+ --disable-valgrind ${GSTREAMER_DEBUG} \
+ --disable-introspection \
+ "
+
+CACHED_CONFIGUREVARS += "ac_cv_header_valgrind_valgrind_h=no"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+ sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+}
+
+#do_compile_prepend () {
+# mv ${WORKDIR}/gstregistrybinary.[ch] ${S}/gst/
+#}
+
+RRECOMMENDS_${PN}_qemux86 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+RRECOMMENDS_${PN}_qemux86-64 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+
+FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+FILES_${PN}-dbg += " ${libdir}/gstreamer-0.10/.debug/ ${libexecdir}/gstreamer-0.10/.debug/"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc
new file mode 100644
index 000000000..10ee5bcb2
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "Gstreamer Daemon 1.0"
+SUMMARY = "GStreamer framework for controlling audio and video streaming using TCP connection messages"
+HOMEPAGE = "https://developer.ridgerun.com/wiki/index.php?title=Gstd-1.0"
+SECTION = "multimedia"
+LICENSE = "GPLv2+"
+
+DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-rtsp-server json-glib libdaemon"
+
+SRCBRANCH ?= "master"
+SRCREV = "097a086a8606dcb368c7d38c7ec4fefc2497401b"
+SRC_URI = "git://git@github.com/RidgeRun/gstd-1.x.git;protocol=https;branch=${SRCBRANCH} \
+ file://0001-gstd-yocto-compatibility.patch"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG_CONFARGS = " \
+ --disable-gtk-doc \
+"
+
+inherit autotools pkgconfig gettext
+
+do_configure() {
+${S}/autogen.sh
+oe_runconf
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch
new file mode 100644
index 000000000..ddc183193
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd/0001-gstd-yocto-compatibility.patch
@@ -0,0 +1,63 @@
+From eaf51d6420c63713f62025583681007c3502d387 Mon Sep 17 00:00:00 2001
+From: Carlos <carlos.rodriguez@ridgerun.com>
+Date: Fri, 15 Dec 2017 10:14:05 -0600
+Subject: [PATCH] gstd:yocto compatibility
+
+---
+ autogen.sh | 8 +++++++-
+ docs/reference/gstd/Makefile.am | 2 +-
+ gstd/Makefile.am | 2 +-
+ 3 files changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/autogen.sh b/autogen.sh
+index 66dbd42..793ee2f 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -21,7 +21,11 @@
+ # ACLOCAL, AUTOPOINT and/or LIBTOOLIZE to the right versions, or leave them
+ # unset and get the defaults
+
+-gtkdocize || exit 1
++test -n "$srcdir" || srcdir=`dirname "$0"`
++test -n "$srcdir" || srcdir=.
++
++olddir=`pwd`
++cd "$srcdir"
+
+ autoreconf --verbose --force --install || {
+ echo 'autogen.sh failed';
+@@ -31,3 +35,5 @@ autoreconf --verbose --force --install || {
+ echo
+ echo "Now run './configure' with your system settings followed by 'make' to compile this module."
+ echo
++
++cd "$olddir"
+diff --git a/docs/reference/gstd/Makefile.am b/docs/reference/gstd/Makefile.am
+index f860fa1..153a13b 100644
+--- a/docs/reference/gstd/Makefile.am
++++ b/docs/reference/gstd/Makefile.am
+@@ -66,7 +66,7 @@ GTKDOC_LIBS=$(top_builddir)/gstd/libgstd-core.la
+
+
+ # This includes the standard gtk-doc make rules, copied by gtkdocize.
+-include $(top_srcdir)/docs/gtk-doc.make
++# include $(top_srcdir)/docs/gtk-doc.make
+
+ # Comment this out if you want 'make check' to test you doc status
+ # and run some sanity checks
+diff --git a/gstd/Makefile.am b/gstd/Makefile.am
+index 13c551d..11fe202 100644
+--- a/gstd/Makefile.am
++++ b/gstd/Makefile.am
+@@ -49,7 +49,7 @@ bin_PROGRAMS = gstd
+
+ gstd_SOURCES = gstd.c
+ gstd_CFLAGS = $(GST_CFLAGS) $(GIO_CFLAGS) $(GJSON_CFLAGS)
+-gstd_LDFLAGS = $(GST_LIBS) $(GIO_LIBS) $(GJSON_LIBS) -Wl,-rpath -Wl,$(libdir)
++gstd_LDFLAGS = $(GST_LIBS) $(GIO_LIBS) $(GJSON_LIBS)
+ gstd_LDADD = libgstd-core.la
+
+ gstdincludedir = $(includedir)/gstd
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb
new file mode 100644
index 000000000..94f6b575b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-1.0/gstd_1.0.bb
@@ -0,0 +1,3 @@
+require gstd.inc
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb
new file mode 100644
index 000000000..7836bae69
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/nativesdk-projucer_git.bb
@@ -0,0 +1,3 @@
+inherit nativesdk
+include projucer.inc
+BBCLASSEXTEND = "nativesdk"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb
new file mode 100644
index 000000000..fb54fb9e9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer-native_git.bb
@@ -0,0 +1,3 @@
+inherit native
+include projucer.inc
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc
new file mode 100644
index 000000000..63ed9e90e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/juce/projucer.inc
@@ -0,0 +1,37 @@
+SUMMARY = "JUCE's Projucer"
+DESCRIPTION = "Projucer is used to build and generate support files and build infrastructure for all \
+JUCE supported platforms, including Linux and Embedded Linux."
+SECTION = "utils"
+HOMEPAGE = "http://juce.com/"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://README.md;md5=65c50b4ff3522b99436da100536ccd1c"
+
+inherit pkgconfig
+
+DEPENDS = "libx11 libxext libxinerama libxrandr libxcursor freetype alsa-lib curl"
+
+SRCREV = "4f41f28b47d01b939559123d145b4e5860528bb7"
+BRANCH = "master"
+SRC_URI = "git://github.com/WeAreROLI/JUCE.git;protocol=https;branch=${BRANCH}"
+
+S = "${WORKDIR}/git"
+PV = "5.0.1"
+
+JUCE_PROJUCER_BUILD_PATH = "${B}/extras/Projucer/Builds"
+JUCE_PROJUCER_MAKEFILE_PATH = "${JUCE_PROJUCER_BUILD_PATH}/LinuxMakefile"
+JUCE_PROJUCER = "${JUCE_PROJUCER_MAKEFILE_PATH}/build/Projucer"
+
+do_configure() {
+ cd ${JUCE_PROJUCER_MAKEFILE_PATH}
+ CONFIG=Release oe_runmake clean
+}
+
+do_compile() {
+ cd ${JUCE_PROJUCER_MAKEFILE_PATH}
+ CONFIG=Release oe_runmake
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 ${JUCE_PROJUCER} ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
new file mode 100644
index 000000000..4c0976e43
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Cross-platform audio output library and plugins"
+DESCRIPTION = "Libao is a cross-platform audio library that allows programs to \
+ output audio using a simple API on a wide variety of platforms."
+SECTION = "multimedia"
+HOMEPAGE = "https://www.xiph.org/ao/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI="http://downloads.xiph.org/releases/ao/${BP}.tar.gz"
+SRC_URI[md5sum] = "9f5dd20d7e95fd0dd72df5353829f097"
+SRC_URI[sha256sum] = "03ad231ad1f9d64b52474392d63c31197b0bc7bd416e58b1c10a329a5ed89caf"
+
+inherit autotools
+
+PACKAGES += "${BPN}-ckport"
+PACKAGES_DYNAMIC += "^${BPN}-plugin-.*"
+
+do_install_append () {
+ find "${D}" -name '*.la' -exec rm -f {} +
+}
+
+python populate_packages_prepend () {
+ rootdir = bb.data.expand('${libdir}/ao/plugins-4', d)
+ rootdir_dbg = bb.data.expand('${libdir}/ao/plugins-4/.debug', d)
+ do_split_packages(d, rootdir, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s', description='AO %s plugin')
+ do_split_packages(d, rootdir_dbg, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s-dbg', description='AO %s plugin debug data')
+}
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)}"
+PACKAGECONFIG[esound] = "--enable-esd,--disable-esd,esound"
+PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+FILES_${BPN}-ckport = "${libdir}/ckport"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
new file mode 100644
index 000000000..f5b0d48c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "libavc1394 is a programming interface for the 1394 Trade \
+Association AV/C (Audio/Video Control) Digital Interface Command Set"
+HOMEPAGE = "http://sourceforge.net/projects/libavc1394/"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+DEPENDS_append_libc-musl = " argp-standalone"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dcf3c825659e82539645da41a7908589"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "caf0db059d8b8d35d6f08e6c0e1c7dfe"
+SRC_URI[sha256sum] = "7cb1ff09506ae911ca9860bef4af08c2403f3e131f6c913a2cbd6ddca4215b53"
+
+inherit autotools pkgconfig
+
+LDFLAGS_append_libc-musl = " -largp"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
new file mode 100755
index 000000000..df0c2355d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
@@ -0,0 +1,14 @@
+Index: libdc1394/examples/Makefile.am
+===================================================================
+--- libdc1394.orig/examples/Makefile.am
++++ libdc1394/examples/Makefile.am
+@@ -36,8 +36,7 @@ if HAVE_MACOSX
+ AM_LDFLAGS = -framework CoreFoundation $(FRAMEWORK_IOKIT)
+ endif
+
+-noinst_PROGRAMS = $(A)
+-bin_PROGRAMS = $(B)
++bin_PROGRAMS = $(A) $(B)
+
+ LDADD = ../dc1394/libdc1394.la
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
new file mode 100755
index 000000000..8a9e9a1d7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Capture and control API for IIDC compliant cameras"
+HOMEPAGE = "http://sourceforge.net/projects/libdc1394/"
+SECTION = "libs"
+LICENSE = "LGPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c848e78d9a4a5cc69906178e4d6fbd64"
+
+# libsdl to provide sdl.m4 with AM_PATH_SDL
+DEPENDS += "libusb1 libraw1394 libsdl \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'libxv virtual/libx11', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'virtual/libgl libglu', '', d)} \
+"
+
+PV = "2.2.5+gitr${SRCPV}"
+
+SRCREV = "5e78f51936fd09db0c0f742c7d2c0e5bdbbeed56"
+
+SRC_URI = "git://git.code.sf.net/p/libdc1394/code;branch=master;protocol=git \
+ file://install_examples.patch \
+ "
+
+S = "${WORKDIR}/git/${PN}"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_OECONF += "--disable-doxygen-doc --disable-examples"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb
new file mode 100644
index 000000000..cd075ffe1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libde265/libde265_1.0.2.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "libde265 is an open source implementation of the h.265 \
+video codec. It is written from scratch and has a plain C API to enable a \
+simple integration into other software."
+HOMEPAGE = "http://www.libde265.org/"
+SECTION = "libs/multimedia"
+
+LICENSE = "LGPLv3"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=852f345c1c52c9160f9a7c36bb997546"
+
+SRC_URI = "https://github.com/strukturag/libde265/releases/download/v${PV}/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "93520b378df25f3a94e962f2b54872cc"
+SRC_URI[sha256sum] = "eaa0348839c2935dd90647d72c6dd4a043e36361cb3c33d2b04df10fbcebd3cb"
+
+EXTRA_OECONF = "--disable-sherlock265 --disable-dec265"
+
+inherit autotools-brokensep pkgconfig
+
+PACKAGES =+ "${PN}-tools"
+FILES_${PN}-tools = "${bindir}/*"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
new file mode 100644
index 000000000..48b011104
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvbpsi is a simple library designed for decoding \
+and generation of MPEG TS and DVB PSI tables according to standards \
+ISO/IEC 13818 and ITU-T H.222.0."
+HOMEPAGE = "http://www.videolan.org/developers/libdvbpsi.html"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "http://download.videolan.org/pub/libdvbpsi/${PV}/libdvbpsi-${PV}.tar.bz2"
+SRC_URI[md5sum] = "2b217039a1299000c39423441f77e76a"
+SRC_URI[sha256sum] = "a2fed1d11980662f919bbd1f29e2462719e0f6227e1a531310bd5a706db0a1fe"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
new file mode 100644
index 000000000..c2dd96f9d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "library for DVD navigation features"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "libdvdread"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.bz2"
+SRC_URI[md5sum] = "e9ea4de3bd8f204e61301d407d09f033"
+SRC_URI[sha256sum] = "5097023e3d2b36944c763f1df707ee06b19dc639b2b68fb30113a5f2cbf60b6d"
+
+inherit autotools lib_package binconfig pkgconfig
+
+CONFIGUREOPTS_remove = "--disable-silent-rules"
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
new file mode 100644
index 000000000..e6079bd75
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "An implementation of the most relevant parts of IEC 61883 over \
+libraw1394 for transmission, reception, and management of media streams and \
+devices such as DV, MPEG2-TS, audio, and MIDI"
+HOMEPAGE = "https://ieee1394.wiki.kernel.org/index.php/Libraries#libiec61883"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=771782cb6245c7fbbe74bc0ec059beff"
+
+SRC_URI = "https://www.kernel.org/pub/linux/libs/ieee1394/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "ed91bc1727fac8e019402fc3724a283d"
+SRC_URI[sha256sum] = "d1e02c7e276fac37313a2f8c1c33d7a9e19282ff16f32e72435428ff5121f09e"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb
new file mode 100644
index 000000000..f060f1e80
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/libsquish/libsquish_git.bb
@@ -0,0 +1,19 @@
+SUMMARY = "The squish library (abbreviated to libsquish) is an open source DXT compression library written in C++ "
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://alpha.cpp;beginline=3;endline=22;md5=6665e479f71feb92d590ea9ae9b9f6d5"
+
+PV = "1.10+git${SRCPV}"
+
+SRCREV = "52e7d93c5947f72380521116c05d97c528863ba8"
+SRC_URI = "git://github.com/OpenELEC/libsquish.git;protocol=https"
+
+S = "${WORKDIR}/git"
+
+EXTRA_OEMAKE = "INSTALL_DIR=${D}${prefix}"
+
+do_install() {
+ install -d ${D}${includedir}
+ install -d ${D}${libdir}/pkgconfig
+ oe_runmake install
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
new file mode 100644
index 000000000..db4d6e8c9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
@@ -0,0 +1,21 @@
+Allow LIB_INSTALL_DIR to be set by the the cmake configure invocation. We dont
+easily have a way of determining something that patches ${LIB_SUFFIX} so we'll
+set LIB_INSTALL_DIR.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+Index: git/CMakeLists.txt
+===================================================================
+--- git.orig/CMakeLists.txt
++++ git/CMakeLists.txt
+@@ -36,7 +36,7 @@ FIND_PACKAGE(LibXml2 REQUIRED)
+ SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
+ SET(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix for executables and object code libraries" FORCE)
+ SET(BIN_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/bin CACHE PATH "Installation prefix for user executables" FORCE)
+-SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Installation prefix for object code libraries" FORCE)
++SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Installation prefix for object code libraries")
+ SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include CACHE PATH "Installation prefix for C header files" FORCE)
+
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/libmusicbrainz5.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libmusicbrainz5.pc)
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
new file mode 100644
index 000000000..16e52134b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
@@ -0,0 +1,38 @@
+SUMMARY = "MusicBrainz client library"
+DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs. The library allows you to access the data held on the MusicBrainz server."
+HOMEPAGE = "http://musicbrainz.org"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
+DEPENDS = "expat libxml2 libxml2-native neon neon-native"
+
+PV = "5.1.0+git${SRCPV}"
+
+SRCREV = "44c05779dd996035758f5ec426766aeedce29cc3"
+SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
+ file://allow-libdir-override.patch "
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+do_configure_prepend() {
+ # The native build really doesn't like being rebuilt, so delete
+ # it if it's already present. Also delete all other files not
+ # known to Git to fix subsequent invocations of do_configure.
+ git clean -dfx -e /.pc/ -e /patches/ .
+ mkdir build-native
+ cd build-native
+ cmake -DCMAKE_C_FLAGS=${BUILD_CFLAGS} \
+ -DCMAKE_C_COMPILER=${BUILD_CC} \
+ -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
+ -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
+ ..
+ make make-c-interface
+ cd ..
+}
+
+EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:PATH=${libdir} \
+ -DIMPORT_EXECUTABLES=build-native/ImportExecutables.cmake"
+
+# out-of-tree building doesn't appear to work for this package.
+B = "${S}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
new file mode 100644
index 000000000..4a2b25cdd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
@@ -0,0 +1,10 @@
+--- libmpd-11.8.17/src/libmpd-internal.h.orig 2014-09-30 04:08:50.963292427 +0200
++++ libmpd-11.8.17/src/libmpd-internal.h 2014-09-30 04:08:30.595292223 +0200
+@@ -21,6 +21,7 @@
+ #define __MPD_INTERNAL_LIB_
+
+ #include "libmpdclient.h"
++#include "config.h"
+ struct _MpdData_real;
+
+ typedef struct _MpdData_real {
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
new file mode 100644
index 000000000..54d79109d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Music Player Daemon library"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://sourceforge.net/projects/musicpd"
+DEPENDS = "glib-2.0"
+
+SRC_URI = "http://www.musicpd.org/download/${BPN}/${PV}/${BP}.tar.gz \
+ file://glibc-2.20.patch \
+"
+SRC_URI[md5sum] = "5ae3d87467d52aef3345407adb0a2488"
+SRC_URI[sha256sum] = "fe20326b0d10641f71c4673fae637bf9222a96e1712f71f170fca2fc34bf7a83"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
new file mode 100644
index 000000000..f9f92c98b
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
@@ -0,0 +1,420 @@
+# An example configuration file for MPD
+# See the mpd.conf man page for a more detailed description of each parameter.
+
+
+# Files and directories #######################################################
+#
+# This setting controls the top directory which MPD will search to discover the
+# available audio files and add them to the daemon's online database. This
+# setting defaults to the XDG directory, otherwise the music directory will be
+# be disabled and audio files will only be accepted over ipc socket (using
+# file:// protocol) or streaming files over an accepted protocol.
+#
+music_directory "%music_directory%"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format. This setting defaults to playlist saving being disabled.
+#
+playlist_directory "%playlist_directory%"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up. This setting defaults to disabled which will allow
+# MPD to accept files over ipc socket (using file:// protocol) or streaming
+# files over an accepted protocol.
+#
+db_file "%db_file%"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+# The special value "syslog" makes MPD use the local syslog daemon. This
+# setting defaults to logging to syslog, otherwise logging is disabled.
+#
+log_file "%log_file%"
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default and the pid file will not be stored.
+#
+#pid_file "/var/run/mpd/mpd.pid"
+#
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default and the server
+# state will be reset on server start up.
+#
+state_file "%state_file%"
+#
+# The location of the sticker database. This is a database which
+# manages dynamic information attached to songs.
+#
+#sticker_file "~/.mpd/sticker.sql"
+#
+###############################################################################
+
+
+# General music daemon options ################################################
+#
+# This setting specifies the user that MPD will run as. MPD should never run as
+# root and you may use this setting to make MPD change its user ID after
+# initialization. This setting is disabled by default and MPD is run as the
+# current user.
+#
+user "mpd"
+#
+# This setting specifies the group that MPD will run as. If not specified
+# primary group of user specified with "user" setting will be used (if set).
+# This is useful if MPD needs to be a member of group such as "audio" to
+# have permission to use sound card.
+#
+group "audio"
+#
+# This setting sets the address for the daemon to listen on. Careful attention
+# should be paid if this is assigned to anything other then the default, any.
+# This setting can deny access to control of the daemon.
+#
+# For network
+bind_to_address "any"
+#
+# And for Unix Socket
+#bind_to_address "~/.mpd/socket"
+#
+# This setting is the TCP port that is desired for the daemon to get assigned
+# to.
+#
+#port "6600"
+#
+# This setting controls the type of information which is logged. Available
+# setting arguments are "default", "secure" or "verbose". The "verbose" setting
+# argument is recommended for troubleshooting, though can quickly stretch
+# available resources on limited hardware storage.
+#
+#log_level "default"
+#
+# If you have a problem with your MP3s ending abruptly it is recommended that
+# you set this argument to "no" to attempt to fix the problem. If this solves
+# the problem, it is highly recommended to fix the MP3 files with vbrfix
+# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
+# point gapless MP3 playback can be enabled.
+#
+#gapless_mp3_playback "yes"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists "no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. Optionally, 'comment' can be added to this
+# list.
+#
+#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+# This setting enables automatic update of MPD's database when files in
+# music_directory are changed.
+#
+#auto_update "yes"
+#
+# Limit the depth of the directories being watched, 0 means only watch
+# the music directory itself. There is no limit by default.
+#
+#auto_update_depth "3"
+#
+###############################################################################
+
+
+# Symbolic link behavior ######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links outside of the configured music_directory.
+#
+#follow_outside_symlinks "yes"
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
+#
+#follow_inside_symlinks "yes"
+#
+###############################################################################
+
+
+# Zeroconf / Avahi Service Discovery ##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
+#
+#zeroconf_enabled "yes"
+#
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network.
+#
+#zeroconf_name "Music Player"
+#
+###############################################################################
+
+
+# Permissions #################################################################
+#
+# If this setting is set, MPD will require password authorization. The password
+# can setting can be specified multiple times for different password profiles.
+#
+#password "password@read,add,control,admin"
+#
+# This setting specifies the permissions a user has who has not yet logged in.
+#
+#default_permissions "read,add,control,admin"
+#
+###############################################################################
+
+
+# Input #######################################################################
+#
+
+input {
+ plugin "curl"
+# proxy "proxy.isp.com:8080"
+# proxy_user "user"
+# proxy_password "password"
+}
+
+#
+###############################################################################
+
+# Audio Output ################################################################
+#
+# MPD supports various audio output types, as well as playing through multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
+#
+# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of
+# other audio outputs.
+#
+# board specific examples #####################################################
+# (feel free to add futher)
+#
+# gumstix overo (tested with TOBI expansion board)
+#audio_output {
+# type "alsa"
+# name "overo"
+# mixer_control "Headset"
+# mixer_index "0"
+#}
+#
+# general examples ############################################################
+#
+# An example of an ALSA output:
+#
+#audio_output {
+# type "alsa"
+# name "My ALSA Device"
+## device "hw:0,0" # optional
+## format "44100:16:2" # optional
+## mixer_type "hardware" # optional
+## mixer_device "default" # optional
+## mixer_control "PCM" # optional
+## mixer_index "0" # optional
+#}
+#
+# An example of an OSS output:
+#
+#audio_output {
+# type "oss"
+# name "My OSS Device"
+## device "/dev/dsp" # optional
+## format "44100:16:2" # optional
+## mixer_type "hardware" # optional
+## mixer_device "/dev/mixer" # optional
+## mixer_control "PCM" # optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+# type "shout"
+# encoding "ogg" # optional
+# name "My Shout Stream"
+# host "localhost"
+# port "8000"
+# mount "/mpd.ogg"
+# password "hackme"
+# quality "5.0"
+# bitrate "128"
+# format "44100:16:1"
+## protocol "icecast2" # optional
+## user "source" # optional
+## description "My Stream Description" # optional
+## genre "jazz" # optional
+## public "no" # optional
+## timeout "2" # optional
+## mixer_type "software" # optional
+#}
+#
+# An example of a recorder output:
+#
+#audio_output {
+# type "recorder"
+# name "My recorder"
+# encoder "vorbis" # optional, vorbis or lame
+# path "/var/lib/mpd/recorder/mpd.ogg"
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+#}
+#
+# An example of a httpd output (built-in HTTP streaming server):
+#
+#audio_output {
+# type "httpd"
+# name "My HTTP Stream"
+# encoder "vorbis" # optional, vorbis or lame
+# port "8000"
+# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+# max_clients "0" # optional 0=no limit
+#}
+#
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
+#
+#audio_output {
+# type "pulse"
+# name "My Pulse Output"
+## server "remote_server" # optional
+## sink "remote_server_sink" # optional
+#}
+#
+## Example "pipe" output:
+#
+#audio_output {
+# type "pipe"
+# name "my pipe"
+# command "aplay -f cd 2>/dev/null"
+## Or if you're want to use AudioCompress
+# command "AudioCompress -m | aplay -f cd 2>/dev/null"
+## Or to send raw PCM stream through PCM:
+# command "nc example.org 8765"
+# format "44100:16:2"
+#}
+#
+## An example of a null output (for no audio output):
+#
+#audio_output {
+# type "null"
+# name "My Null Output"
+# mixer_type "none" # optional
+#}
+#
+# This setting will change all decoded audio to be converted to the specified
+# format before being passed to the audio outputs. By default, this setting is
+# disabled.
+#
+#audio_output_format "44100:16:2"
+#
+# If MPD has been compiled with libsamplerate support, this setting specifies
+# the sample rate converter to use. Possible values can be found in the
+# mpd.conf man page or the libsamplerate documentation. By default, this is
+# setting is disabled.
+#
+#samplerate_converter "Fastest Sinc Interpolator"
+#
+###############################################################################
+
+
+# Normalization automatic volume adjustments ##################################
+#
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "off", "album" or "track". See <http://www.replaygain.org>
+# for more details. This setting is off by default.
+#
+#replaygain "album"
+#
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
+#
+#replaygain_preamp "0"
+#
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness". This setting is disabled by default.
+#
+#volume_normalization "no"
+#
+###############################################################################
+
+
+# MPD Internal Buffering ######################################################
+#
+# This setting adjusts the size of internal decoded audio buffering. Changing
+# this may have undesired effects. Don't change this if you don't know what you
+# are doing.
+#
+#audio_buffer_size "2048"
+#
+# This setting controls the percentage of the buffer which is filled before
+# beginning to play. Increasing this reduces the chance of audio file skipping,
+# at the cost of increased time prior to audio playback.
+#
+#buffer_before_play "10%"
+#
+###############################################################################
+
+
+# Resource Limitations ########################################################
+#
+# These settings are various limitations to prevent MPD from using too many
+# resources. Generally, these settings should be minimized to prevent security
+# risks, depending on the operating resources.
+#
+#connection_timeout "60"
+#max_connections "10"
+#max_playlist_length "16384"
+#max_command_list_size "2048"
+#max_output_buffer_size "8192"
+#
+###############################################################################
+
+
+# Character Encoding ##########################################################
+#
+# If file or directory names do not display correctly for your locale then you
+# may need to modify this setting.
+#
+#filesystem_charset "UTF-8"
+#
+# This setting controls the encoding that ID3v1 tags should be converted from.
+#
+#id3v1_encoding "ISO-8859-1"
+#
+###############################################################################
+
+
+# SIDPlay decoder #############################################################
+#
+# songlength_database:
+# Location of your songlengths file, as distributed with the HVSC.
+# The sidplay plugin checks this for matching MD5 fingerprints.
+# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
+#
+# default_songlength:
+# This is the default playing time in seconds for songs not in the
+# songlength database, or in case you're not using a database.
+# A value of 0 means play indefinitely.
+#
+# filter:
+# Turns the SID filter emulation on or off.
+#
+#decoder {
+# plugin "sidplay"
+# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt"
+# default_songlength "120"
+# filter "true"
+#}
+#
+###############################################################################
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb
new file mode 100644
index 000000000..6754f347e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.20.18.bb
@@ -0,0 +1,100 @@
+SUMMARY = "Music Player Daemon"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://www.musicpd.org"
+
+inherit autotools useradd systemd pkgconfig
+
+DEPENDS += " \
+ alsa-lib \
+ libsamplerate0 \
+ libsndfile1 \
+ libvorbis \
+ libogg \
+ faad2 \
+ ffmpeg \
+ curl \
+ sqlite \
+ bzip2 \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio', d)} \
+ tcp-wrappers \
+ openal-soft \
+ yajl \
+ jack \
+ faad2 \
+ flac \
+ libao \
+ fluidsynth \
+ libcdio \
+ wavpack \
+ libopus \
+ mpg123 \
+ libmms \
+ libmodplug \
+ boost \
+ icu \
+ dbus \
+ expat \
+ zlib \
+ libupnp \
+"
+
+# While this item does not require it, it depends on mpg123 which does
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = " \
+ http://www.musicpd.org/download/${BPN}/0.20/${BP}.tar.xz \
+ file://mpd.conf.in \
+"
+SRC_URI[md5sum] = "8dc87ba95473fd738f2aff9bd69cc212"
+SRC_URI[sha256sum] = "6a582dc2ae90b94ff3853f9ffd7d80b2c2b5fe2e2c35cb1da0b36f3f3dfad434"
+
+EXTRA_OECONF = "enable_bzip2=yes"
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}"
+
+PACKAGECONFIG[audiofile] = "--enable-audiofile,--disable-audiofile,audiofile"
+PACKAGECONFIG[cdioparanoia] = "--enable-cdio-paranoia,--disable-cdio-paranoia,libcdio-paranoia"
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[id3tag] = "--enable-id3,--disable-id3,libid3tag"
+PACKAGECONFIG[lame] = "--enable-lame-encoder,--disable-lame-encoder,lame"
+PACKAGECONFIG[smb] = "--enable-smbclient,--disable-smbclient,samba"
+
+do_configure_prepend() {
+ sed -i -e 's|libsystemd-daemon|libsystemd|' ${S}/configure.ac
+}
+
+do_install_append() {
+ install -d ${D}/${localstatedir}/lib/mpd/music
+ chmod 775 ${D}/${localstatedir}/lib/mpd/music
+ install -d ${D}/${localstatedir}/lib/mpd/playlists
+ chown -R mpd ${D}/${localstatedir}/lib/mpd
+ chown mpd:mpd ${D}/${localstatedir}/lib/mpd/music
+
+ install -d ${D}/${sysconfdir}
+ install -m 644 ${WORKDIR}/mpd.conf.in ${D}/${sysconfdir}/mpd.conf
+ sed -i \
+ -e 's|%music_directory%|${localstatedir}/lib/mpd/music|' \
+ -e 's|%playlist_directory%|${localstatedir}/lib/mpd/playlists|' \
+ -e 's|%db_file%|${localstatedir}/lib/mpd/mpd.db|' \
+ -e 's|%log_file%|${localstatedir}/log/mpd.log|' \
+ -e 's|%state_file%|${localstatedir}/lib/mpd/state|' \
+ ${D}/${sysconfdir}/mpd.conf
+
+ if [ -e ${D}/${systemd_unitdir}/system/mpd.service ] ; then
+ sed -i \
+ 's|^ExecStart=.*|ExecStart=${bindir}/mpd --no-daemon|' \
+ ${D}/${systemd_unitdir}/system/mpd.service
+ fi
+}
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "mpd.socket"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = " \
+ --system --no-create-home \
+ --home ${localstatedir}/lib/mpd \
+ --groups audio \
+ --user-group mpd"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
new file mode 100644
index 000000000..e0f1a26de
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "OpenAL is a cross-platform 3D audio API"
+HOMEPAGE = "http://kcat.strangesoft.net/openal.html"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=facc3a8f452930083bbb95d82b989c35"
+
+inherit cmake
+
+SRC_URI = "http://kcat.strangesoft.net/openal-releases/${BP}.tar.bz2"
+SRC_URI[md5sum] = "ea83dec3b9655a27d28e7bc7cae9cd71"
+SRC_URI[sha256sum] = "0e29a162f0841ccb4135ce76e92e8a704589b680a85eddf76f898de5236eb056"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)}"
+PACKAGECONFIG[alsa] = "-DALSA=TRUE, -DALSA=FALSE, alsa-lib"
+PACKAGECONFIG[pulseaudio] = "-DPULSEAUDIO=TRUE, -DPULSEAUDIO=FALSE, pulseaudio"
+# currently doesn't work with libav-9
+# PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
+# but alffmpeg.c:418:44: error: 'AV_CH_LAYOUT_MONO' undeclared (first use in this function)
+PACKAGECONFIG[examples] = "-DEXAMPLES=TRUE, -DEXAMPLES=FALSE, libav"
+
+FILES_${PN} += "${datadir}/openal"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
new file mode 100644
index 000000000..ab5813ebe
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "OpenCORE Adaptive Multi Rate (AMR) speech codec library implementation"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "09d2c5dfb43a9f6e9fec8b1ae678e725"
+SRC_URI[sha256sum] = "106bf811c1f36444d7671d8fd2589f8b2e0cca58a2c764da62ffc4a070595385"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
new file mode 100644
index 000000000..ce3736294
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Advanced Audio Coding (AAC) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "b574da1d92d75fc40b0b75aa16f24ac4"
+SRC_URI[sha256sum] = "e51a7477a359f18df7c4f82d195dab4e14e7414cbd48cf79cc195fc446850f36"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
new file mode 100644
index 000000000..cc049edb8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Adaptive Multi Rate Wideband (AMR-WB) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "f63bb92bde0b1583cb3cb344c12922e0"
+SRC_URI[sha256sum] = "5652b391e0f0e296417b841b02987d3fd33e6c0af342c69542cbb016a71d9d4e"
+
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb
new file mode 100644
index 000000000..44c46f81e
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/openh264/openh264_1.7.0.bb
@@ -0,0 +1,42 @@
+DESCRIPTION = "OpenH264 is a codec library which supports H.264 encoding and \
+decoding. It is suitable for use in real time applications such as WebRTC."
+HOMEPAGE = "http://www.openh264.org/"
+SECTION = "libs/multimedia"
+
+DEPENDS_x86 += "nasm-native"
+DEPENDS_x86-64 += "nasm-native"
+
+LICENSE = "BSD-2-Clause"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=bb6d3771da6a07d33fd50d4d9aa73bcf"
+
+S = "${WORKDIR}/git"
+SRCREV = "a180c9d4d6f1a4830ca9eed9d159d54996bd63cb"
+BRANCH = "openh264v1.7"
+SRC_URI = "git://github.com/cisco/openh264.git;protocol=https;branch=${BRANCH};"
+
+COMPATIBLE_MACHINE_armv7a = "(.*)"
+COMPATIBLE_MACHINE_aarch64 = "(.*)"
+COMPATIBLE_MACHINE_x86 = "(.*)"
+COMPATIBLE_MACHINE_x86-64 = "(.*)"
+COMPATIBLE_MACHINE_mips = "(.*)"
+COMPATIBLE_MACHINE_mips64 = "(.*)"
+
+EXTRA_OEMAKE_armv7a = "ARCH=arm"
+EXTRA_OEMAKE_aarch64 = "ARCH=arm64"
+EXTRA_OEMAKE_x86 = "ARCH=i386"
+EXTRA_OEMAKE_x86-64 = "ARCH=x86_64"
+EXTRA_OEMAKE_mips = "ARCH=mips"
+EXTRA_OEMAKE_mips64 = "ARCH=mips64"
+
+do_configure() {
+ :
+}
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} PREFIX=${prefix}
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb
new file mode 100644
index 000000000..189dc87c4
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/opusfile/opusfile_0.10.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Library for opening, seeking, and decoding opus audio files"
+HOMEPAGE = "https://www.opus-codec.org/"
+SECTION = "audio"
+
+DEPENDS = "libogg openssl libopus"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6ac22b992dde6a891f8949c3e2da8576"
+
+SRC_URI = "https://downloads.xiph.org/releases/opus/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "ab3f7d15d766f5b36b0951ee435f9ebf"
+SRC_URI[sha256sum] = "48e03526ba87ef9cf5f1c47b5ebe3aa195bd89b912a57060c36184a6cd19412f"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
new file mode 100644
index 000000000..bb3d8b0ef
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
@@ -0,0 +1,18 @@
+Make sure libdir (SODIR) is created when running parallel make.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+Index: git/librtmp/Makefile
+===================================================================
+--- git.orig/librtmp/Makefile
++++ git/librtmp/Makefile
+@@ -107,6 +107,7 @@ install_base: librtmp.a librtmp.pc
+ cp librtmp.3 $(MANDIR)/man3
+
+ install_so: librtmp.$(SO_EXT)
++ -mkdir -p $(SODIR)
+ cp librtmp.$(SO_EXT) $(SODIR)
+ cd $(SODIR); ln -sf librtmp.$(SO_EXT) librtmp.$(SOX)
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
new file mode 100644
index 000000000..c5513b025
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
@@ -0,0 +1,22 @@
+SUMMARY = "RTMP Dump"
+DESCRIPTION = "rtmpdump is a toolkit for RTMP streams. All forms of RTMP are \
+supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://."
+HOMEPAGE = "http://rtmpdump.mplayerhq.hu/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "openssl zlib"
+
+SRCREV = "3121324046e4ca1934e7e28293fc8326475d5053"
+SRC_URI = " \
+ git://git.ffmpeg.org/rtmpdump \
+ file://fix-racing-build-issue.patch"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep
+
+EXTRA_OEMAKE = " \
+ CC='${CC}' LD='${LD} ${STAGING_LIBDIR}' XCFLAGS='${CFLAGS}' XLDFLAGS='${LDFLAGS}' \
+ SYS=posix INC=-I=/usr/include DESTDIR=${D} \
+ prefix=${prefix} libdir=${libdir} incdir=${includedir}/librtmp bindir=${bindir} mandir=${mandir}"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
new file mode 100644
index 000000000..a80fc10ac
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 1080P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_surround.avi"
+SRC_URI[md5sum] = "223991c8b33564eb77988a4c13c1c76a"
+SRC_URI[sha256sum] = "69fe2cfe7154a6e752688e3a0d7d6b07b1605bbaf75b56f6470dc7b4c20c06ea"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_1080p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
new file mode 100644
index 000000000..59ac4788c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 480P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi"
+SRC_URI[md5sum] = "ed7ed01e9aefba8ddd77c13332cec120"
+SRC_URI[sha256sum] = "40d1cf5bc8e1b0e55dac7bb2e3fbc2aea05b6679444864781299b24db044634f"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_480p_surround-fix.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
new file mode 100644
index 000000000..21b8f8f0f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 720P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi"
+SRC_URI[md5sum] = "0da8fe124595f5b206d64cb1400bbefc"
+SRC_URI[sha256sum] = "b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/big_buck_bunny_720p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
new file mode 100644
index 000000000..0582a4856
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Tears of Steel movie - 1080P"
+LICENSE = "CC-BY-3.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://ftp.nluug.nl/pub/graphics/blender/demo/movies/ToS/ToS-4k-1920.mov"
+SRC_URI[md5sum] = "e3fee55b1779c553e37b1d3988e6fad6"
+SRC_URI[sha256sum] = "bd2b5bc6c16d4085034f47ef7e4b3938afe86b4eec4ac3cf2685367d3b0b23b0"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/movies
+ install -m 0644 ${WORKDIR}/ToS-4k-1920.mov ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
new file mode 100644
index 000000000..838400f07
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
@@ -0,0 +1,20 @@
+Use the version of orcc in the sysroot not the one from the host
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+Index: schroedinger-1.0.11/configure.ac
+===================================================================
+--- schroedinger-1.0.11.orig/configure.ac
++++ schroedinger-1.0.11/configure.ac
+@@ -54,7 +54,7 @@ if test "x${HAVE_ORC}" != xyes ; then
+ AC_ERROR([orc-0.4 >= $ORC_VER is required])
+ fi
+ SCHRO_PKG_DEPS="$SCHRO_PKG_DEPS orc-0.4 >= $ORC_VER"
+-ORCC=`$PKG_CONFIG --variable=orcc orc-0.4`
++ORCC=$STAGING_DIR`$PKG_CONFIG --variable=orcc orc-0.4`
+ AC_SUBST(ORCC)
+ AM_CONDITIONAL(HAVE_ORCC, test "x$cross_compiling" != xyes)
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
new file mode 100644
index 000000000..d38eb9477
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Dirac compressed video encoder/decoder"
+HOMEPAGE = "http://schrodinger.sourceforge.net/"
+LICENSE = "MPL-1.1 | GPLv2 | LGPLv2 | MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d91a46405fc074b88c963cc4f2a0aae9 \
+ file://COPYING.GPL;md5=e181e3b7c66f5f96921d813c1074f833 \
+ file://COPYING.LGPL;md5=38c893e21baec4cd75ad800ba9e2410a \
+ file://COPYING.MIT;md5=8b345371b3536b4ce37ead1eafc88221 \
+ file://COPYING.MPL;md5=0117647fecb9a932c25a7bbfc0333c37"
+
+DEPENDS = "liboil orc-native orc"
+
+SRC_URI = "http://www.diracvideo.org/download/schroedinger/${BP}.tar.gz \
+ file://configure.ac.patch"
+
+SRC_URI[md5sum] = "da6af08e564ca1157348fb8d92efc891"
+SRC_URI[sha256sum] = "1e572a0735b92aca5746c4528f9bebd35aa0ccf8619b22fa2756137a8cc9f912"
+
+EXTRA_OECONF += "STAGING_DIR=${STAGING_DIR_NATIVE}"
+
+inherit autotools-brokensep pkgconfig
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch
new file mode 100644
index 000000000..44c6b19be
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-Update-exported-symbol-list.patch
@@ -0,0 +1,34 @@
+From b1809d82031aa7c5bcaad58bcb4b59e082e0446e Mon Sep 17 00:00:00 2001
+From: Mans Rullgard <mans@mansr.com>
+Date: Sun, 5 Nov 2017 15:40:16 +0000
+Subject: [PATCH] Update exported symbol list
+
+commit 5c58413544 ("Don't export (most) internal libsox symbols")
+breaks dynamic flac builds as flac.c references lsx.error, so add it
+to the list of exceptions.
+
+| .libs/flac.o: In function `decoder_read_callback':
+| /usr/src/debug/sox/14.4.2-r0/sox-14.4.2/src/flac.c:63: undefined reference to `lsx_error'
+
+Upstream-Status: Backport [https://bogomips.org/sox.git ("pu" branch)]
+
+---
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 7cceaafd..a3a04ed1 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -95,7 +95,7 @@ libsox_la_LIBADD += @GOMP_LIBS@
+
+ libsox_la_CFLAGS = @WARN_CFLAGS@
+ libsox_la_LDFLAGS = @APP_LDFLAGS@ -version-info @SHLIB_VERSION@ \
+- -export-symbols-regex '^(sox_.*|lsx_(check_read_params|(close|open)_dllibrary|(debug(_more|_most)?|fail|report|warn)_impl|eof|fail_errno|filelength|find_(enum_(text|value)|file_extension)|getopt(_init)?|lpc10_(create_(de|en)coder_state|(de|en)code)|raw(read|write)|read(_b_buf|buf|chars)|realloc|rewind|seeki|sigfigs3p?|strcasecmp|tell|unreadb|write(b|_b_buf|buf|s)))$$'
++ -export-symbols-regex '^(sox_.*|lsx_(([cm]|re)alloc|check_read_params|(close|open)_dllibrary|(debug(_more|_most)?|fail|report|warn)_impl|eof|error|fail_errno|filelength|find_(enum_(text|value)|file_extension)|flush|getopt(_init)?|id3_read_tag|lpc10_(create_(de|en)coder_state|(de|en)code)|raw(read|write)|read(_b_buf|buf|chars)|rewind|seeki|sigfigs3p?|strcasecmp|strdup|tell|unreadb|write(b|_b_buf|buf|s)))$$'
+
+ if HAVE_WIN32_LTDL
+ libsox_la_SOURCES += win32-ltdl.c win32-ltdl.h
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch
new file mode 100644
index 000000000..4f02a66fc
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox/0001-remove-the-error-line-and-live-without-file-type-det.patch
@@ -0,0 +1,28 @@
+From d0313be5fb947df399a4db24a5f9244510d2ce87 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 16:36:06 -0700
+Subject: [PATCH] remove the #error line and live without file-type detection
+ with pipes
+
+this fallback is executed with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/formats.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/formats.c b/src/formats.c
+index 724a4cda..f683a922 100644
+--- a/src/formats.c
++++ b/src/formats.c
+@@ -422,7 +422,6 @@ static void UNUSED rewind_pipe(FILE * fp)
+ /* To fix this #error, either simply remove the #error line and live without
+ * file-type detection with pipes, or add support for your compiler in the
+ * lines above. Test with cat monkey.wav | ./sox --info - */
+- #error FIX NEEDED HERE
+ #define NO_REWIND_PIPE
+ (void)fp;
+ #endif
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb
new file mode 100644
index 000000000..21fddd1e1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.2.bb
@@ -0,0 +1,40 @@
+DESCRIPTION="SoX is the Swiss Army knife of sound processing tools. \
+It converts audio files among various standard audio file formats \
+and can apply different effects and filters to the audio data."
+HOMEPAGE = "http://sox.sourceforge.net"
+SECTION = "audio"
+
+DEPENDS = "libpng ffmpeg libsndfile1"
+
+# While this item does not require it, it depends on ffmpeg which does
+LICENSE_FLAGS = "commercial"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'alsa pulseaudio', d)} \
+ magic \
+"
+PACKAGECONFIG[pulseaudio] = "--with-pulseaudio=dyn,--with-pulseaudio=no,pulseaudio,"
+PACKAGECONFIG[alsa] = "--with-alsa=dyn,--with-alsa=no,alsa-lib,"
+PACKAGECONFIG[wavpack] = "--with-wavpack=dyn,--with-wavpack=no,wavpack,"
+PACKAGECONFIG[flac] = "--with-flac=dyn,--with-flac=no,flac,"
+PACKAGECONFIG[amrwb] = "--with-amrwb=dyn,--with-amrwb=no,opencore-amr,"
+PACKAGECONFIG[amrnb] = "--with-amrnb=dyn,--with-amrnb=no,opencore-amr,"
+PACKAGECONFIG[oggvorbis] = "--with-oggvorbis=dyn,--with-oggvorbis=no,libvorbis"
+PACKAGECONFIG[opus] = "--with-opus=dyn,--with-opus=no,opusfile"
+PACKAGECONFIG[magic] = "--with-magic,--without-magic,file,"
+PACKAGECONFIG[mad] = "--with-mad,--without-mad,libmad,"
+PACKAGECONFIG[id3tag] = "--with-id3tag,--without-id3tag,libid3tag,"
+PACKAGECONFIG[lame] = "--with-lame,--without-lame,lame,"
+PACKAGECONFIG[ao] = "--with-ao,--without-ao,libao,"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=751419260aa954499f7abaabaa882bbe \
+ file://LICENSE.LGPL;md5=fbc093901857fcd118f065f900982c24"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sox/sox-${PV}.tar.gz \
+ file://0001-remove-the-error-line-and-live-without-file-type-det.patch \
+ file://0001-Update-exported-symbol-list.patch \
+ "
+SRC_URI[md5sum] = "d04fba2d9245e661f245de0577f48a33"
+SRC_URI[sha256sum] = "b45f598643ffbd8e363ff24d61166ccec4836fea6d3888881b8df53e3bb55f6c"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch
new file mode 100644
index 000000000..c0f4692d1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0001-build-these-are-foreign-automake-projects.patch
@@ -0,0 +1,49 @@
+From 4c7165b3fbc0e99e7cdd77031e8a001440d0629d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Thu, 3 Nov 2016 20:53:21 +0000
+Subject: [PATCH 1/3] build: these are 'foreign' automake projects
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+In order to prevent automake from complaining about missing
+
+files ChangeLog, AUTHORS, etc., use the 'foreign' automake
+option to instruct it so.
+
+Upstream-Status: Inappropriate [no upstream activity for 7+ years]
+Signed-off-by: André Draszik <git@andred.net>
+---
+ configure.ac | 2 +-
+ libmad-0.15.1b/configure.ac | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index b12d11f..96300d6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -11,7 +11,7 @@ dnl AC_CHECK_FUNC: defines a shell variable
+
+ AC_PREREQ(2.59)
+ AC_INIT(streamripper,1.64.6)
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+
+ AC_CONFIG_HEADERS([lib/config.h])
+
+diff --git a/libmad-0.15.1b/configure.ac b/libmad-0.15.1b/configure.ac
+index 8fb35ee..ab116a6 100644
+--- a/libmad-0.15.1b/configure.ac
++++ b/libmad-0.15.1b/configure.ac
+@@ -26,7 +26,7 @@ AC_PREREQ(2.53)
+
+ AC_CONFIG_SRCDIR([decoder.h])
+
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+
+ AM_CONFIG_HEADER([config.h])
+
+--
+2.10.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch
new file mode 100644
index 000000000..58473f611
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0002-build-don-t-ignore-CPPFLAGS-from-environment.patch
@@ -0,0 +1,30 @@
+From 2fcf2b164e25c4b2523dea4b04094916e57ba19e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Thu, 3 Nov 2016 20:53:26 +0000
+Subject: [PATCH 2/3] build: don't ignore CPPFLAGS from environment
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Inappropriate [no upstream activity for 7+ years]
+Signed-off-by: André Draszik <git@andred.net>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 96300d6..1600c88 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -56,7 +56,7 @@ AC_ARG_WITH(curses,
+ [ --with-curses(=XXX) compile curses front-end (XXX is curses (default), ncurses, ncursesw, pdcurses or slang)])
+
+
+-CPPFLAGS="-D__UNIX__"
++CPPFLAGS="$CPPFLAGS -D__UNIX__"
+ AC_SUBST(CPPFLAGS)
+
+
+--
+2.10.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch
new file mode 100644
index 000000000..065254ec8
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper/0003-ripstream-fix-compilation.patch
@@ -0,0 +1,42 @@
+From 6d59b60ff5108357ad2c2951a97112e713ee5368 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git@andred.net>
+Date: Thu, 3 Nov 2016 20:53:32 +0000
+Subject: [PATCH 3/3] ripstream: fix compilation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+| ../../streamripper-1.64.6/lib/ripstream.c: In function 'write_id3v2_frame':
+| ../../streamripper-1.64.6/lib/ripstream.c:717:5: error: unknown type name '__uint32_t'
+| __uint32_t framesize = 0;
+| ^~~~~~~~~~
+
+The already included srtypes.h does the right thing for all
+platforms (I think). It certainly works well here.
+
+Upstream-Status: Inappropriate [no upstream activity for 7+ years]
+Signed-off-by: André Draszik <git@andred.net>
+---
+ lib/ripstream.c | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+diff --git a/lib/ripstream.c b/lib/ripstream.c
+index c671e18..7f311c6 100644
+--- a/lib/ripstream.c
++++ b/lib/ripstream.c
+@@ -713,11 +713,7 @@ write_id3v2_frame(RIP_MANAGER_INFO* rmi, char* tag_name, mchar* data,
+ int rc;
+ char bigbuf[HEADER_SIZE] = "";
+ ID3V2frame id3v2frame;
+-#ifndef WIN32
+- __uint32_t framesize = 0;
+-#else
+- unsigned long int framesize = 0;
+-#endif
++ uint32_t framesize = 0;
+
+ memset(&id3v2frame, '\000', sizeof(id3v2frame));
+ strncpy(id3v2frame.id, tag_name, 4);
+--
+2.10.1
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb
new file mode 100644
index 000000000..722815ab6
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/streamripper/streamripper_1.64.6.bb
@@ -0,0 +1,32 @@
+SUMMARY = "download online streams into audio files"
+DESCRIPTION = "This command-line tool can be used to record MPEG III \
+and OGG online radio-streams into track-separated audio files."
+HOMEPAGE = "http://streamripper.sourceforge.net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+DEPENDS = "glib-2.0 libmad libogg libvorbis"
+
+# While this item does not require it, it depends on libmad which does
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = "\
+ ${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://0001-build-these-are-foreign-automake-projects.patch \
+ file://0002-build-don-t-ignore-CPPFLAGS-from-environment.patch \
+ file://0003-ripstream-fix-compilation.patch \
+"
+SRC_URI[mdsum] = "a37a1a8b8f9228522196a122a1c2dd32"
+SRC_URI[sha256sum] = "c1d75f2e9c7b38fd4695be66eff4533395248132f3cc61f375196403c4d8de42"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--with-included-argv=yes --with-included-libmad=no"
+EXTRA_OECONF += "\
+ --with-ogg-includes=${STAGING_INCDIR} \
+ --with-ogg-libraries=${STAGING_LIBDIR} \
+ --with-vorbis-includes=${STAGING_INCDIR} \
+ --with-vorbis-libraries=${STAGING_LIBDIR} \
+"
+
+# the included argv library needs this
+CPPFLAGS_append = " -DANSI_PROTOTYPES"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb
new file mode 100644
index 000000000..66b95db00
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tinyalsa/tinyalsa_1.1.1.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "TinyALSA is a small library to interface with ALSA in \
+the Linux kernel. It is a lightweight alternative to libasound."
+HOMEPAGE = "https://github.com/tinyalsa/tinyalsa"
+SECTION = "libs/multimedia"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://NOTICE;md5=dbdefe400d894b510a9de14813181d0b"
+
+S = "${WORKDIR}/git"
+SRCREV = "df11091086b56e5fb71887f2fa320e1d2ffeff58"
+SRC_URI = "git://github.com/tinyalsa/tinyalsa.git;protocol=https;"
+
+do_configure() {
+ :
+}
+
+do_compile() {
+ oe_runmake CC='${CC}' LD='${CC}' AR='${AR}'
+}
+
+do_install() {
+ oe_runmake install \
+ PREFIX="${prefix}" DESTDIR="${D}" INCDIR="${includedir}/tinyalsa" \
+ LIBDIR="${libdir}" BINDIR="${bindir}" MANDIR="${mandir}"
+}
+
+PACKAGES =+ "${PN}-tools"
+FILES_${PN}-tools = "${bindir}/*"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch
new file mode 100644
index 000000000..7e5102903
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/obsolete_automake_macros.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Submitted [https://trac.xiph.org/ticket/1922]
+
+Signed-off-by: Marko Lindqvist <cazfi74@gmail.com>
+Index: configure.in
+===================================================================
+--- configure.in (revision 18764)
++++ configure.in (working copy)
+@@ -9,7 +9,7 @@
+ AC_CANONICAL_HOST
+ AC_CANONICAL_TARGET
+
+-AM_CONFIG_HEADER([config.h])
++AC_CONFIG_HEADERS([config.h])
+
+ AM_INIT_AUTOMAKE(libvorbisidec,1.2.1)
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch
new file mode 100644
index 000000000..204954222
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor/tremor-arm-thumb2.patch
@@ -0,0 +1,104 @@
+From: Xin Ouyang <Xin.Ouyang@windriver.com>
+Date: Mon, 16 Jul 2012 13:29:34 +0800
+Subject: [PATCH] tremor: add IT instructions for arm thumb2 tune flags.
+
+Upstream-Status: Pending
+
+In Thumb-2, most instructions do not have a built in condition code (except for
+conditional branches). Instead, short sequences of instructions which are to be
+executed conditionally can be preceded by a special "IT instruction" which
+describes the condition and which of the following instructions should be
+executed if the condition is false respectively.
+
+For the ARM/Thumb IT(If-Then) instruction:
+http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489c/Cjabicci.html
+
+Signed-off-by: Xin Ouyang <Xin.Ouyang@windriver.com>
+---
+ asm_arm.h | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/asm_arm.h b/asm_arm.h
+index c3bda00..823c54f 100755
+--- a/asm_arm.h
++++ b/asm_arm.h
+@@ -108,9 +108,11 @@ static inline void XNPROD31(ogg_int32_t a, ogg_int32_t b,
+ static inline ogg_int32_t CLIP_TO_15(ogg_int32_t x) {
+ int tmp;
+ asm volatile("subs %1, %0, #32768\n\t"
++ "itt pl\n\t"
+ "movpl %0, #0x7f00\n\t"
+ "orrpl %0, %0, #0xff\n"
+ "adds %1, %0, #32768\n\t"
++ "it mi\n\t"
+ "movmi %0, #0x8000"
+ : "+r"(x),"=r"(tmp)
+ :
+@@ -139,10 +141,12 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+
+ "ldmdb r0!,{r1,r3};"
+ "subs r1,r1,%4;" //ilsp[j]-wi
++ "it mi;"
+ "rsbmi r1,r1,#0;" //labs(ilsp[j]-wi)
+ "umull %0,r2,r1,%0;" //qi*=labs(ilsp[j]-wi)
+
+ "subs r1,r3,%4;" //ilsp[j+1]-wi
++ "it mi;"
+ "rsbmi r1,r1,#0;" //labs(ilsp[j+1]-wi)
+ "umull %1,r3,r1,%1;" //pi*=labs(ilsp[j+1]-wi)
+
+@@ -167,6 +171,7 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+ "mov r0,#0x4000;\n"
+
+ "subs r1,r1,%4;\n" //ilsp[j]-wi
++ "it mi;\n"
+ "rsbmi r1,r1,#0;\n" //labs(ilsp[j]-wi)
+ "umull %0,r2,r1,%0;\n" //qi*=labs(ilsp[j]-wi)
+ "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi)
+@@ -190,18 +195,23 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip,
+ "mov r2,#0;"
+ "orr r1,%0,%1;"
+ "tst r1,#0xff000000;"
++ "itt ne;"
+ "addne r2,r2,#8;"
+ "movne r1,r1,lsr #8;"
+ "tst r1,#0x00f00000;"
++ "itt ne;"
+ "addne r2,r2,#4;"
+ "movne r1,r1,lsr #4;"
+ "tst r1,#0x000c0000;"
++ "itt ne;"
+ "addne r2,r2,#2;"
+ "movne r1,r1,lsr #2;"
+ "tst r1,#0x00020000;"
++ "itt ne;"
+ "addne r2,r2,#1;"
+ "movne r1,r1,lsr #1;"
+ "tst r1,#0x00010000;"
++ "it ne;"
+ "addne r2,r2,#1;"
+ "mov %0,%0,lsr r2;"
+ "mov %1,%1,lsr r2;"
+@@ -222,15 +232,19 @@ static inline void lsp_norm_asm(ogg_uint32_t *qip,ogg_int32_t *qexpp){
+ ogg_int32_t qexp=*qexpp;
+
+ asm("tst %0,#0x0000ff00;"
++ "itt eq;"
+ "moveq %0,%0,lsl #8;"
+ "subeq %1,%1,#8;"
+ "tst %0,#0x0000f000;"
++ "itt eq;"
+ "moveq %0,%0,lsl #4;"
+ "subeq %1,%1,#4;"
+ "tst %0,#0x0000c000;"
++ "itt eq;"
+ "moveq %0,%0,lsl #2;"
+ "subeq %1,%1,#2;"
+ "tst %0,#0x00008000;"
++ "itt eq;"
+ "moveq %0,%0,lsl #1;"
+ "subeq %1,%1,#1;"
+ : "+r"(qi),"+r"(qexp)
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb
new file mode 100644
index 000000000..937894a73
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/tremor/tremor_20150107.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Fixed-point decoder"
+DESCRIPTION = "tremor is a fixed point implementation of the vorbis codec."
+SECTION = "libs"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=db1b7a668b2a6f47b2af88fb008ad555 \
+ file://os.h;beginline=3;endline=14;md5=5c0af5e1bedef3ce8178c89f48cd6f1f"
+DEPENDS = "libogg"
+SRCDATE = "${PV}"
+PR = "r1"
+
+# SVN support for upstream version check isn't implemented yet
+RECIPE_UPSTREAM_VERSION = "20150107"
+RECIPE_UPSTREAM_DATE = "Jan 07, 2015"
+CHECK_DATE = "Aug 12, 2015"
+
+SRC_URI = "svn://svn.xiph.org/trunk;module=Tremor;rev=19427;protocol=http \
+ file://obsolete_automake_macros.patch;striplevel=0 \
+ file://tremor-arm-thumb2.patch \
+"
+
+S = "${WORKDIR}/Tremor"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--enable-shared"
+
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
new file mode 100644
index 000000000..79e64aebd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvdcss is a simple library designed for accessing DVDs like a block device without having to bother about the decryption."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://download.videolan.org/pub/libdvdcss/${PV}/libdvdcss-${PV}.tar.bz2"
+
+inherit autotools
+
+EXTRA_OECONF = " --disable-doc "
+
+SRC_URI[md5sum] = "7f0fdb3ff91d638f5e45ed7536f7eb67"
+SRC_URI[sha256sum] = "7c414acd520c4e4dd7267952f72d738ff50321a7869af4d75c65aefad44f1395"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
new file mode 100644
index 000000000..8e82b3bd3
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
@@ -0,0 +1,113 @@
+DESCRIPTION = "Video player and streamer - davinci edition"
+HOMEPAGE = "http://www.videolan.org"
+SECTION = "multimedia"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "libfribidi libtool libgcrypt libgcrypt-native \
+ dbus dbus-glib libxml2 gnutls \
+ tremor faad2 ffmpeg flac fluidsynth alsa-lib \
+ lua-native lua libidn \
+ avahi jpeg xz libmodplug mpeg2dec \
+ libmtp libopus orc libsamplerate0 libusb1 schroedinger taglib \
+ tiff"
+
+# While this item does not require it, it depends on ffmpeg which does
+LICENSE_FLAGS = "commercial"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.xz"
+
+inherit autotools gettext pkgconfig distro_features_check
+
+ARM_INSTRUCTION_SET = "arm"
+
+EXTRA_OECONF = "\
+ --enable-run-as-root \
+ --enable-xvideo \
+ --disable-screen --disable-caca \
+ --enable-httpd --enable-vlm \
+ --enable-freetype \
+ --enable-tremor \
+ --enable-v4l2 --disable-aa --disable-faad \
+ --enable-dbus \
+ --without-contrib \
+ --without-kde-solid \
+ --enable-realrtsp \
+ --disable-libtar \
+ ac_cv_path_MOC=${STAGING_BINDIR_NATIVE}/moc4 \
+ ac_cv_path_RCC=${STAGING_BINDIR_NATIVE}/rcc4 \
+ ac_cv_path_UIC=${STAGING_BINDIR_NATIVE}/uic4 \
+"
+
+PACKAGECONFIG ?= " live555 dc1394 dv1394 notify fontconfig freetype dvdread png ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 sdl vdpau', '', d)}"
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[sdl] = "--enable-sdl,--disable-sdl,virtual/libsdl libsdl-image "
+PACKAGECONFIG[a52] = "--enable-a52,--disable-a52,liba52"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[live555] = "--enable-live555,--disable-live555,live555"
+PACKAGECONFIG[libass] = "--enable-libass,--disable-libass,libass"
+PACKAGECONFIG[mkv] = "--enable-mkv,--disable-mkv,libmatroska libebml"
+PACKAGECONFIG[postproc] = "--enable-postproc,--disable-postproc,libpostproc"
+PACKAGECONFIG[opencv] = "--enable-opencv,--disable-opencv,opencv"
+PACKAGECONFIG[libva] = "--enable-libva --enable-avcodec,--disable-libva --disable-avcodec,libva libav"
+PACKAGECONFIG[speex] = "--enable-speex,--disable-speex,speex"
+PACKAGECONFIG[gstreamer] = "--enable-gst-decode,--disable-gst-decode,gstreamer1.0 gstreamer1.0-plugins-base gst-plugins-bad"
+PACKAGECONFIG[vpx] = "--enable-vpx,--disable-vpx, libvpx"
+PACKAGECONFIG[qt4] = "--enable-qt,--disable-qt, qt4-x11-free"
+PACKAGECONFIG[freerdp] = "--enable-freerdp,--disable-freerdp, freerdp"
+PACKAGECONFIG[dvbpsi] = "--enable-dvbpsi,--disable-dvbpsi, libdvbpsi"
+PACKAGECONFIG[samba] = "--enable-smbclient,--disable-smbclient, samba"
+PACKAGECONFIG[upnp] = "--enable-upnp,--disable-upnp,libupnp"
+PACKAGECONFIG[dvdnav] = "--enable-dvdnav,--disable-dvdnav,libdvdnav libdvdcss"
+PACKAGECONFIG[sftp] = "--enable-sftp,--disable-sftp,libssh2"
+PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis libogg"
+PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libvorbis libogg"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libavc1394"
+PACKAGECONFIG[svg] = "--enable-svg,--disable-svg,librsvg"
+PACKAGECONFIG[svgdec] = "--enable-svgdec,--disable-svgdec,librsvg cairo"
+PACKAGECONFIG[notify] = "--enable-notify,--disable-notify, libnotify gtk+"
+PACKAGECONFIG[fontconfig] = "--enable-fontconfig,--disable-fontconfig, fontconfig"
+PACKAGECONFIG[freetype] = "--enable-freetype,--disable-freetype, freetype"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread, libdvdread libdvdcss"
+PACKAGECONFIG[vnc] = "--enable-vnc,--disable-vnc, libvncserver"
+PACKAGECONFIG[x11] = "--with-x --enable-xcb,--without-x --disable-xcb, xcb-util-keysyms libxpm libxinerama"
+PACKAGECONFIG[png] = "--enable-png,--disable-png,libpng"
+PACKAGECONFIG[vdpau] = "--enable-vdpau,--disable-vdpau,libvdpau"
+
+do_configure_prepend() {
+ cp ${STAGING_DATADIR}/libtool/config.* ${S}/autotools/ || true
+}
+
+do_configure_append() {
+ sed -i -e s:'$(MOC) $(DEFS) $(CPPFLAGS)':'$(MOC) $(DEFS)'\ -I${B}/include\ -DSYS_LINUX:g ${B}/modules/gui/qt4/Makefile
+ sed -i -e s:'${top_builddir_slash}libtool':'${top_builddir_slash}'${TARGET_SYS}-libtool:g ${B}/doltlibtool
+}
+
+# This recipe packages vlc as a library as well, so qt4 dependencies
+# can be avoided when only the library is installed.
+PACKAGES =+ "libvlc"
+
+LEAD_SONAME_libvlc = "libvlc.so.5"
+FILES_libvlc = "${libdir}/lib*.so.*"
+
+FILES_${PN} += "\
+ ${bindir}/vlc \
+ ${datadir}/applications \
+ ${datadir}/vlc/ \
+ ${datadir}/icons \
+ ${lindir}/vlc/vlc/libvlc_vdpau.so \
+"
+
+FILES_${PN}-dbg += "\
+ ${libdir}/vlc/*/.debug \
+ ${libdir}/vlc/plugins/*/.debug \
+"
+
+FILES_${PN}-staticdev += "\
+ ${libdir}/vlc/plugins/*/*.a \
+"
+
+INSANE_SKIP_${PN} = "dev-so"
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
new file mode 100644
index 000000000..9f0e708ed
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
@@ -0,0 +1,13 @@
+Index: vlc-2.1.2/configure.ac
+===================================================================
+--- vlc-2.1.2.orig/configure.ac
++++ vlc-2.1.2/configure.ac
+@@ -24,7 +24,7 @@ AC_CANONICAL_BUILD
+ AC_CANONICAL_HOST
+ AC_PRESERVE_HELP_ORDER
+
+-AM_INIT_AUTOMAKE(tar-ustar color-tests foreign)
++AM_INIT_AUTOMAKE(tar-ustar color-tests foreign subdir-objects)
+ AC_CONFIG_HEADERS([config.h])
+
+ # Disable with "./configure --disable-silent-rules" or "make V=1"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
new file mode 100644
index 000000000..6d2a46fb3
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
@@ -0,0 +1,17 @@
+Index: vlc-2.1.2/src/input/subtitles.c
+===================================================================
+--- vlc-2.1.2.orig/src/input/subtitles.c
++++ vlc-2.1.2/src/input/subtitles.c
+@@ -44,6 +44,12 @@
+ #include "input_internal.h"
+
+ /**
++ * Drepper's alternative
++ * http://en.wikibooks.org/wiki/C_Programming/C_Reference/nonstandard/strlcpy
++ */
++#define strlcpy(dst, src, n) *((char* ) mempcpy(dst, src, n)) = '\0'
++
++/**
+ * We are not going to autodetect more subtitle files than this.
+ */
+ #define MAX_SUBTITLE_FILES 128
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
new file mode 100644
index 000000000..8e881d093
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
@@ -0,0 +1,46 @@
+* The upstream tests for libgcrypt are awkward and not working.
+ - Requires libgcrypt-config, which seems broken?
+* AM_PATH_LIBGCRYPT exists for a reason, why not use it? KISS.
+* Upstream abandoned AM_PATH_LIBGCRYPT in the past...newer automake ok?
+
+Upstream status: Pending
+
+Index: vlc-2.2.1/configure.ac
+===================================================================
+--- vlc-2.2.1.orig/configure.ac
++++ vlc-2.2.1/configure.ac
+@@ -4017,25 +4017,19 @@ PKG_ENABLE_MODULES_VLC([LIBXML2], [xml],
+ dnl
+ dnl libgcrypt
+ dnl
++GCRYPT_LIBVER=1
++GCRYPT_REQ=1.1.94
+ AC_ARG_ENABLE(libgcrypt,
+ [ --disable-libgcrypt gcrypt support (default enabled)])
+ AS_IF([test "${enable_libgcrypt}" != "no"], [
+- AC_CHECK_DECL([GCRYCTL_SET_THREAD_CBS], [
+- libgcrypt-config --version >/dev/null || \
+- AC_MSG_ERROR([gcrypt.h present but libgcrypt-config could not be found])
+- AC_CHECK_LIB(gcrypt, gcry_control, [
+- have_libgcrypt="yes"
+- GCRYPT_CFLAGS="`libgcrypt-config --cflags`"
+- GCRYPT_LIBS="`libgcrypt-config --libs`"
+- ], [
+- AC_MSG_ERROR([libgcrypt not found. Install libgcrypt or pass --disable-libgcrypt.])
+- ], [`libgcrypt-config --libs`])
+- ], [
+- AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or pass --disable-libgcrypt.])
+- ], [#include <gcrypt.h>]
+- )
++ AM_PATH_LIBGCRYPT($GCRYPT_LIBVER:$GCRYPT_REQ,
++ [
++ GCRYPT_CFLAGS="$LIBGCRYPT_CFLAGS"
++ GCRYPT_LIBS="$LIBGCRYPT_LIBS"
++ ],[
++ AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or use --disable-libgcrypt. Have a nice day.])
++ ])
+ ])
+-
+ AC_SUBST(GCRYPT_CFLAGS)
+ AC_SUBST(GCRYPT_LIBS)
+ AM_CONDITIONAL([HAVE_GCRYPT], [test "${have_libgcrypt}" = "yes"])
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
new file mode 100644
index 000000000..53df1c6eb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
@@ -0,0 +1,19 @@
+* modules/gui/qt4/Makefile.am not B!=S friendly
+* Simple solution to missing directories in ${B}
+
+Upstream status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/gui/qt4/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/gui/qt4/Makefile.am
++++ vlc-2.2.1/modules/gui/qt4/Makefile.am
+@@ -127,6 +127,7 @@ moc_verbose_0 = @echo " MOC " $@;
+ moc_verbose__0 = $(moc_verbose_0)
+
+ .hpp.moc.cpp:
++ [ -d $(dir $@) ] || mkdir -p $(dir $@)
+ $(moc_verbose)$(MOC) $(MOC_CPPFLAGS) -o $@ $<
+
+ # These MOC files depend on the configure settings:
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
new file mode 100644
index 000000000..2d84ffd2f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
@@ -0,0 +1,17 @@
+* Also look for postprocess.h under libpostproc/
+
+Upstream-status: Pending
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -2444,7 +2444,7 @@ then
+ VLC_SAVE_FLAGS
+ CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
+ CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
+- AC_CHECK_HEADERS(postproc/postprocess.h)
++ AC_CHECK_HEADERS(postproc/postprocess.h,[],[AC_CHECK_HEADERS(libpostproc/postprocess.h)])
+ VLC_ADD_PLUGIN([postproc])
+ VLC_ADD_LIBS([postproc],[$POSTPROC_LIBS $AVUTIL_LIBS])
+ VLC_ADD_CFLAGS([postproc],[$POSTPROC_CFLAGS $AVUTIL_CFLAGS])
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
new file mode 100644
index 000000000..950c09b8a
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
@@ -0,0 +1,29 @@
+Recent opencv API changes break upstream filter and example.
+Make opencv explicitly configurable.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -1693,7 +1693,16 @@ PKG_ENABLE_MODULES_VLC([BLURAY], [libblu
+ dnl
+ dnl OpenCV wrapper and example filters
+ dnl
+-PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
++AC_ARG_ENABLE(opencv,
++ [AS_HELP_STRING([--disable-opencv],
++ [disable OpenCV computer vision filter and example (default auto)])])
++if test "${enable_opencv}" != "no"
++then
++ PKG_ENABLE_MODULES_VLC([OPENCV],
++ [opencv_example opencv_wrapper],
++ [opencv > 2.0],
++ (OpenCV (computer vision) filter), [auto])
++fi
+
+
+ dnl
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
new file mode 100644
index 000000000..d05cf02b7
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
@@ -0,0 +1,19 @@
+* tremor provides libvorbisidec, use it instead of libvorbisdec
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/codec/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/codec/Makefile.am
++++ vlc-2.2.1/modules/codec/Makefile.am
+@@ -234,7 +234,7 @@ codec_LTLIBRARIES += $(LTLIBtheora)
+ libtremor_plugin_la_SOURCES = codec/vorbis.c
+ libtremor_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -DMODULE_NAME_IS_tremor
+ libtremor_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(codecdir)'
+-libtremor_plugin_la_LIBADD = -lvorbisdec -logg
++libtremor_plugin_la_LIBADD = -lvorbisidec -logg
+ EXTRA_LTLIBRARIES += libtremor_plugin.la
+ codec_LTLIBRARIES += $(LTLIBtremor)
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
new file mode 100644
index 000000000..145e1ab82
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
@@ -0,0 +1,279 @@
+* luaL_checkint and luaL_optint were deprecated in lua 5.3
+* replacement functions are luaL_checkinteger and luaL_optinteger
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/lua/demux.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/demux.c
++++ vlc-2.2.1/modules/lua/demux.c
+@@ -52,7 +52,7 @@ struct demux_sys_t
+ static int vlclua_demux_peek( lua_State *L )
+ {
+ demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+- int n = luaL_checkint( L, 1 );
++ int n = luaL_checkinteger( L, 1 );
+ const uint8_t *p_peek;
+
+ int i_peek = stream_Peek( p_demux->s, &p_peek, n );
+@@ -67,7 +67,7 @@ static int vlclua_demux_read( lua_State
+ {
+ demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+ const uint8_t *p_read;
+- int n = luaL_checkint( L, 1 );
++ int n = luaL_checkinteger( L, 1 );
+ int i_read = stream_Peek( p_demux->s, &p_read, n );
+
+ if( i_read > 0 )
+Index: vlc-2.2.1/modules/lua/libs/configuration.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/configuration.c
++++ vlc-2.2.1/modules/lua/libs/configuration.c
+@@ -84,7 +84,7 @@ static int vlclua_config_set( lua_State
+ break;
+
+ case VLC_VAR_INTEGER:
+- config_PutInt( p_this, psz_name, luaL_checkint( L, 2 ) );
++ config_PutInt( p_this, psz_name, luaL_checkinteger( L, 2 ) );
+ break;
+
+ case VLC_VAR_BOOL:
+Index: vlc-2.2.1/modules/lua/libs/net.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/net.c
++++ vlc-2.2.1/modules/lua/libs/net.c
+@@ -202,7 +202,7 @@ static int vlclua_net_listen_tcp( lua_St
+ {
+ vlc_object_t *p_this = vlclua_get_this( L );
+ const char *psz_host = luaL_checkstring( L, 1 );
+- int i_port = luaL_checkint( L, 2 );
++ int i_port = luaL_checkinteger( L, 2 );
+ int *pi_fd = net_ListenTCP( p_this, psz_host, i_port );
+ if( pi_fd == NULL )
+ return luaL_error( L, "Cannot listen on %s:%d", psz_host, i_port );
+@@ -274,7 +274,7 @@ static int vlclua_net_connect_tcp( lua_S
+ {
+ vlc_object_t *p_this = vlclua_get_this( L );
+ const char *psz_host = luaL_checkstring( L, 1 );
+- int i_port = luaL_checkint( L, 2 );
++ int i_port = luaL_checkinteger( L, 2 );
+ int i_fd = net_Connect( p_this, psz_host, i_port, SOCK_STREAM, IPPROTO_TCP );
+ lua_pushinteger( L, vlclua_fd_map_safe( L, i_fd ) );
+ return 1;
+@@ -282,26 +282,26 @@ static int vlclua_net_connect_tcp( lua_S
+
+ static int vlclua_net_close( lua_State *L )
+ {
+- int i_fd = luaL_checkint( L, 1 );
++ int i_fd = luaL_checkinteger( L, 1 );
+ vlclua_fd_unmap_safe( L, i_fd );
+ return 0;
+ }
+
+ static int vlclua_net_send( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+ size_t i_len;
+ const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+
+- i_len = luaL_optint( L, 3, i_len );
++ i_len = luaL_optinteger( L, 3, i_len );
+ lua_pushinteger( L, (fd != -1) ? send( fd, psz_buffer, i_len, 0 ) : -1 );
+ return 1;
+ }
+
+ static int vlclua_net_recv( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+- size_t i_len = luaL_optint( L, 2, 1 );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++ size_t i_len = luaL_optinteger( L, 2, 1 );
+ char psz_buffer[i_len];
+
+ ssize_t i_ret = (fd != -1) ? recv( fd, psz_buffer, i_len, 0 ) : -1;
+@@ -382,19 +382,19 @@ static int vlclua_fd_open( lua_State *L
+ #ifndef _WIN32
+ static int vlclua_fd_write( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+ size_t i_len;
+ const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+
+- i_len = luaL_optint( L, 3, i_len );
++ i_len = luaL_optinteger( L, 3, i_len );
+ lua_pushinteger( L, (fd != -1) ? write( fd, psz_buffer, i_len ) : -1 );
+ return 1;
+ }
+
+ static int vlclua_fd_read( lua_State *L )
+ {
+- int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+- size_t i_len = luaL_optint( L, 2, 1 );
++ int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++ size_t i_len = luaL_optinteger( L, 2, 1 );
+ char psz_buffer[i_len];
+
+ ssize_t i_ret = (fd != -1) ? read( fd, psz_buffer, i_len ) : -1;
+Index: vlc-2.2.1/modules/lua/libs/osd.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/osd.c
++++ vlc-2.2.1/modules/lua/libs/osd.c
+@@ -67,7 +67,7 @@ static int vlclua_osd_icon( lua_State *L
+ {
+ const char *psz_icon = luaL_checkstring( L, 1 );
+ int i_icon = vlc_osd_icon_from_string( psz_icon );
+- int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++ int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+ if( !i_icon )
+ return luaL_error( L, "\"%s\" is not a valid osd icon.", psz_icon );
+
+@@ -114,9 +114,9 @@ static int vlc_osd_position_from_string(
+ static int vlclua_osd_message( lua_State *L )
+ {
+ const char *psz_message = luaL_checkstring( L, 1 );
+- int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++ int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+ const char *psz_position = luaL_optstring( L, 3, "top-right" );
+- mtime_t duration = luaL_optint( L, 4, 1000000 );
++ mtime_t duration = luaL_optinteger( L, 4, 1000000 );
+
+ input_thread_t *p_input = vlclua_get_input_internal( L );
+ if( p_input )
+@@ -154,10 +154,10 @@ static int vlc_osd_slider_type_from_stri
+
+ static int vlclua_osd_slider( lua_State *L )
+ {
+- int i_position = luaL_checkint( L, 1 );
++ int i_position = luaL_checkinteger( L, 1 );
+ const char *psz_type = luaL_checkstring( L, 2 );
+ int i_type = vlc_osd_slider_type_from_string( psz_type );
+- int i_chan = luaL_optint( L, 3, SPU_DEFAULT_CHANNEL );
++ int i_chan = luaL_optinteger( L, 3, SPU_DEFAULT_CHANNEL );
+ if( !i_type )
+ return luaL_error( L, "\"%s\" is not a valid slider type.",
+ psz_type );
+@@ -198,7 +198,7 @@ static int vlclua_spu_channel_register(
+
+ static int vlclua_spu_channel_clear( lua_State *L )
+ {
+- int i_chan = luaL_checkint( L, 1 );
++ int i_chan = luaL_checkinteger( L, 1 );
+ input_thread_t *p_input = vlclua_get_input_internal( L );
+ if( !p_input )
+ return luaL_error( L, "Unable to find input." );
+Index: vlc-2.2.1/modules/lua/libs/playlist.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/playlist.c
++++ vlc-2.2.1/modules/lua/libs/playlist.c
+@@ -69,7 +69,7 @@ static int vlclua_playlist_next( lua_Sta
+
+ static int vlclua_playlist_skip( lua_State * L )
+ {
+- int i_skip = luaL_checkint( L, 1 );
++ int i_skip = luaL_checkinteger( L, 1 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ playlist_Skip( p_playlist, i_skip );
+ return 0;
+@@ -127,7 +127,7 @@ static int vlclua_playlist_random( lua_S
+
+ static int vlclua_playlist_gotoitem( lua_State * L )
+ {
+- int i_id = luaL_checkint( L, 1 );
++ int i_id = luaL_checkinteger( L, 1 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ PL_LOCK;
+ int i_ret = playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
+@@ -139,7 +139,7 @@ static int vlclua_playlist_gotoitem( lua
+
+ static int vlclua_playlist_delete( lua_State * L )
+ {
+- int i_id = luaL_checkint( L, 1 );
++ int i_id = luaL_checkinteger( L, 1 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ PL_LOCK;
+ playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_id );
+@@ -155,8 +155,8 @@ static int vlclua_playlist_delete( lua_S
+
+ static int vlclua_playlist_move( lua_State * L )
+ {
+- int i_item = luaL_checkint( L, 1 );
+- int i_target = luaL_checkint( L, 2 );
++ int i_item = luaL_checkinteger( L, 1 );
++ int i_target = luaL_checkinteger( L, 2 );
+ playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+ PL_LOCK;
+ playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_item );
+Index: vlc-2.2.1/modules/lua/libs/stream.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/stream.c
++++ vlc-2.2.1/modules/lua/libs/stream.c
+@@ -101,7 +101,7 @@ static int vlclua_stream_read( lua_State
+ {
+ int i_read;
+ stream_t **pp_stream = (stream_t **)luaL_checkudata( L, 1, "stream" );
+- int n = luaL_checkint( L, 2 );
++ int n = luaL_checkinteger( L, 2 );
+ uint8_t *p_read = malloc( n );
+ if( !p_read ) return vlclua_error( L );
+
+Index: vlc-2.2.1/modules/lua/libs/variables.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/variables.c
++++ vlc-2.2.1/modules/lua/libs/variables.c
+@@ -103,7 +103,7 @@ static int vlclua_tovalue( lua_State *L,
+ val->b_bool = luaL_checkboolean( L, -1 );
+ break;
+ case VLC_VAR_INTEGER:
+- val->i_int = luaL_checkint( L, -1 );
++ val->i_int = luaL_checkinteger( L, -1 );
+ break;
+ case VLC_VAR_STRING:
+ val->psz_string = (char*)luaL_checkstring( L, -1 ); /* XXX: Beware, this only stays valid as long as (L,-1) stays in the stack */
+Index: vlc-2.2.1/modules/lua/libs/volume.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/volume.c
++++ vlc-2.2.1/modules/lua/libs/volume.c
+@@ -48,7 +48,7 @@
+ static int vlclua_volume_set( lua_State *L )
+ {
+ playlist_t *p_this = vlclua_get_playlist_internal( L );
+- int i_volume = luaL_checkint( L, 1 );
++ int i_volume = luaL_checkinteger( L, 1 );
+ if( i_volume < 0 )
+ i_volume = 0;
+ int i_ret = playlist_VolumeSet( p_this, i_volume/(float)AOUT_VOLUME_DEFAULT );
+@@ -68,7 +68,7 @@ static int vlclua_volume_up( lua_State *
+ playlist_t *p_this = vlclua_get_playlist_internal( L );
+ float volume;
+
+- playlist_VolumeUp( p_this, luaL_optint( L, 1, 1 ), &volume );
++ playlist_VolumeUp( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+ lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+ return 1;
+ }
+@@ -78,7 +78,7 @@ static int vlclua_volume_down( lua_State
+ playlist_t *p_this = vlclua_get_playlist_internal( L );
+ float volume;
+
+- playlist_VolumeDown( p_this, luaL_optint( L, 1, 1 ), &volume );
++ playlist_VolumeDown( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+ lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+ return 1;
+ }
+Index: vlc-2.2.1/modules/lua/libs/win.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/win.c
++++ vlc-2.2.1/modules/lua/libs/win.c
+@@ -123,7 +123,7 @@ static int vlclua_console_init( lua_Stat
+
+ static int vlclua_console_wait( lua_State *L )
+ {
+- int i_timeout = luaL_optint( L, 1, 0 );
++ int i_timeout = luaL_optinteger( L, 1, 0 );
+ DWORD status = WaitForSingleObject( GetConsole( L ), i_timeout );
+ lua_pushboolean( L, status == WAIT_OBJECT_0 );
+ return 1;
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
new file mode 100644
index 000000000..cb3ba71dd
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
@@ -0,0 +1,293 @@
+From 427732a379893491eac27aeadff0e0b3e252d158 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 08:19:00 +0200
+Subject: [PATCH] Avcodec/swscale: use AV_PIX_FMT consistently
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit faa7bd357b1f9e07a6ffbc451a188773fad7a275)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+
+Conflicts:
+ modules/codec/avcodec/chroma.c
+ modules/codec/avcodec/video.c
+---
+ modules/codec/avcodec/chroma.c | 104 ++++++++++++++++++++---------------------
+ modules/codec/avcodec/video.c | 10 ++--
+ modules/video_chroma/swscale.c | 28 +++++------
+ 3 files changed, 71 insertions(+), 71 deletions(-)
+
+diff --git a/modules/codec/avcodec/chroma.c b/modules/codec/avcodec/chroma.c
+index 393364b..c31f93d 100644
+--- a/modules/codec/avcodec/chroma.c
++++ b/modules/codec/avcodec/chroma.c
+@@ -62,77 +62,77 @@ static const struct
+ } chroma_table[] =
+ {
+ /* Planar YUV formats */
+- {VLC_CODEC_I444, PIX_FMT_YUV444P, 0, 0, 0 },
+- {VLC_CODEC_J444, PIX_FMT_YUVJ444P, 0, 0, 0 },
+-
+- {VLC_CODEC_I440, PIX_FMT_YUV440P, 0, 0, 0 },
+- {VLC_CODEC_J440, PIX_FMT_YUVJ440P, 0, 0, 0 },
+-
+- {VLC_CODEC_I422, PIX_FMT_YUV422P, 0, 0, 0 },
+- {VLC_CODEC_J422, PIX_FMT_YUVJ422P, 0, 0, 0 },
+-
+- {VLC_CODEC_I420, PIX_FMT_YUV420P, 0, 0, 0 },
+- {VLC_CODEC_YV12, PIX_FMT_YUV420P, 0, 0, 0 },
+- {VLC_FOURCC('I','Y','U','V'), PIX_FMT_YUV420P, 0, 0, 0 },
+- {VLC_CODEC_J420, PIX_FMT_YUVJ420P, 0, 0, 0 },
+- {VLC_CODEC_I411, PIX_FMT_YUV411P, 0, 0, 0 },
+- {VLC_CODEC_I410, PIX_FMT_YUV410P, 0, 0, 0 },
+- {VLC_FOURCC('Y','V','U','9'), PIX_FMT_YUV410P, 0, 0, 0 },
+-
+- {VLC_FOURCC('N','V','1','2'), PIX_FMT_NV12, 0, 0, 0 },
+- {VLC_FOURCC('N','V','2','1'), PIX_FMT_NV21, 0, 0, 0 },
+-
+- {VLC_CODEC_I420_9L, PIX_FMT_YUV420P9LE, 0, 0, 0 },
+- {VLC_CODEC_I420_9B, PIX_FMT_YUV420P9BE, 0, 0, 0 },
+- {VLC_CODEC_I420_10L, PIX_FMT_YUV420P10LE, 0, 0, 0 },
+- {VLC_CODEC_I420_10B, PIX_FMT_YUV420P10BE, 0, 0, 0 },
++ {VLC_CODEC_I444, AV_PIX_FMT_YUV444P, 0, 0, 0 },
++ {VLC_CODEC_J444, AV_PIX_FMT_YUVJ444P, 0, 0, 0 },
++
++ {VLC_CODEC_I440, AV_PIX_FMT_YUV440P, 0, 0, 0 },
++ {VLC_CODEC_J440, AV_PIX_FMT_YUVJ440P, 0, 0, 0 },
++
++ {VLC_CODEC_I422, AV_PIX_FMT_YUV422P, 0, 0, 0 },
++ {VLC_CODEC_J422, AV_PIX_FMT_YUVJ422P, 0, 0, 0 },
++
++ {VLC_CODEC_I420, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++ {VLC_CODEC_YV12, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++ {VLC_FOURCC('I','Y','U','V'), AV_PIX_FMT_YUV420P, 0, 0, 0 },
++ {VLC_CODEC_J420, AV_PIX_FMT_YUVJ420P, 0, 0, 0 },
++ {VLC_CODEC_I411, AV_PIX_FMT_YUV411P, 0, 0, 0 },
++ {VLC_CODEC_I410, AV_PIX_FMT_YUV410P, 0, 0, 0 },
++ {VLC_FOURCC('Y','V','U','9'), AV_PIX_FMT_YUV410P, 0, 0, 0 },
++
++ {VLC_FOURCC('N','V','1','2'), AV_PIX_FMT_NV12, 0, 0, 0 },
++ {VLC_FOURCC('N','V','2','1'), AV_PIX_FMT_NV21, 0, 0, 0 },
++
++ {VLC_CODEC_I420_9L, AV_PIX_FMT_YUV420P9LE, 0, 0, 0 },
++ {VLC_CODEC_I420_9B, AV_PIX_FMT_YUV420P9BE, 0, 0, 0 },
++ {VLC_CODEC_I420_10L, AV_PIX_FMT_YUV420P10LE, 0, 0, 0 },
++ {VLC_CODEC_I420_10B, AV_PIX_FMT_YUV420P10BE, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,13,0)
+- {VLC_CODEC_I422_9L, PIX_FMT_YUV422P9LE, 0, 0, 0 },
+- {VLC_CODEC_I422_9B, PIX_FMT_YUV422P9BE, 0, 0, 0 },
++ {VLC_CODEC_I422_9L, AV_PIX_FMT_YUV422P9LE, 0, 0, 0 },
++ {VLC_CODEC_I422_9B, AV_PIX_FMT_YUV422P9BE, 0, 0, 0 },
+ #endif
+- {VLC_CODEC_I422_10L, PIX_FMT_YUV422P10LE, 0, 0, 0 },
+- {VLC_CODEC_I422_10B, PIX_FMT_YUV422P10BE, 0, 0, 0 },
++ {VLC_CODEC_I422_10L, AV_PIX_FMT_YUV422P10LE, 0, 0, 0 },
++ {VLC_CODEC_I422_10B, AV_PIX_FMT_YUV422P10BE, 0, 0, 0 },
+
+- {VLC_CODEC_YUV420A, PIX_FMT_YUVA420P, 0, 0, 0 },
++ {VLC_CODEC_YUV420A, AV_PIX_FMT_YUVA420P, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_CHECK( 51, 45, 0, 74, 100 )
+ {VLC_CODEC_YUV422A, AV_PIX_FMT_YUVA422P, 0, 0, 0 },
+ #endif
+
+- {VLC_CODEC_I444_9L, PIX_FMT_YUV444P9LE, 0, 0, 0 },
+- {VLC_CODEC_I444_9B, PIX_FMT_YUV444P9BE, 0, 0, 0 },
+- {VLC_CODEC_I444_10L, PIX_FMT_YUV444P10LE, 0, 0, 0 },
+- {VLC_CODEC_I444_10B, PIX_FMT_YUV444P10BE, 0, 0, 0 },
+- {VLC_CODEC_I444_16L, PIX_FMT_YUV444P16LE, 0, 0, 0 },
+- {VLC_CODEC_I444_16B, PIX_FMT_YUV444P16BE, 0, 0, 0 },
++ {VLC_CODEC_I444_9L, AV_PIX_FMT_YUV444P9LE, 0, 0, 0 },
++ {VLC_CODEC_I444_9B, AV_PIX_FMT_YUV444P9BE, 0, 0, 0 },
++ {VLC_CODEC_I444_10L, AV_PIX_FMT_YUV444P10LE, 0, 0, 0 },
++ {VLC_CODEC_I444_10B, AV_PIX_FMT_YUV444P10BE, 0, 0, 0 },
++ {VLC_CODEC_I444_16L, AV_PIX_FMT_YUV444P16LE, 0, 0, 0 },
++ {VLC_CODEC_I444_16B, AV_PIX_FMT_YUV444P16BE, 0, 0, 0 },
+
+ /* Packed YUV formats */
+- {VLC_CODEC_YUYV, PIX_FMT_YUYV422, 0, 0, 0 },
+- {VLC_FOURCC('Y','U','Y','V'), PIX_FMT_YUYV422, 0, 0, 0 },
+- {VLC_CODEC_UYVY, PIX_FMT_UYVY422, 0, 0, 0 },
+- {VLC_FOURCC('Y','4','1','1'), PIX_FMT_UYYVYY411, 0, 0, 0 },
++ {VLC_CODEC_YUYV, AV_PIX_FMT_YUYV422, 0, 0, 0 },
++ {VLC_FOURCC('Y','U','Y','V'), AV_PIX_FMT_YUYV422, 0, 0, 0 },
++ {VLC_CODEC_UYVY, AV_PIX_FMT_UYVY422, 0, 0, 0 },
++ {VLC_FOURCC('Y','4','1','1'), AV_PIX_FMT_UYYVYY411, 0, 0, 0 },
+
+ /* Packed RGB formats */
+- VLC_RGB( VLC_FOURCC('R','G','B','4'), PIX_FMT_RGB4, PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
+- VLC_RGB( VLC_FOURCC('R','G','B','8'), PIX_FMT_RGB8, PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
++ VLC_RGB( VLC_FOURCC('R','G','B','4'), AV_PIX_FMT_RGB4, AV_PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
++ VLC_RGB( VLC_FOURCC('R','G','B','8'), AV_PIX_FMT_RGB8, AV_PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
+
+- VLC_RGB( VLC_CODEC_RGB15, PIX_FMT_RGB555, PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
+- VLC_RGB( VLC_CODEC_RGB16, PIX_FMT_RGB565, PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
+- VLC_RGB( VLC_CODEC_RGB24, PIX_FMT_BGR24, PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
++ VLC_RGB( VLC_CODEC_RGB15, AV_PIX_FMT_RGB555, AV_PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
++ VLC_RGB( VLC_CODEC_RGB16, AV_PIX_FMT_RGB565, AV_PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
++ VLC_RGB( VLC_CODEC_RGB24, AV_PIX_FMT_BGR24, AV_PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
+
+- VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32, PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
+- VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32_1, PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
++ VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32, AV_PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
++ VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32_1, AV_PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
+
+ #ifdef AV_PIX_FMT_0BGR32
+ VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_0BGR32, AV_PIX_FMT_0RGB32, 0x000000ff, 0x0000ff00, 0x00ff0000 )
+ #endif
+
+- {VLC_CODEC_RGBA, PIX_FMT_RGBA, 0, 0, 0 },
+- {VLC_CODEC_ARGB, PIX_FMT_ARGB, 0, 0, 0 },
+- {VLC_CODEC_BGRA, PIX_FMT_BGRA, 0, 0, 0 },
+- {VLC_CODEC_GREY, PIX_FMT_GRAY8, 0, 0, 0},
++ {VLC_CODEC_RGBA, AV_PIX_FMT_RGBA, 0, 0, 0 },
++ {VLC_CODEC_ARGB, AV_PIX_FMT_ARGB, 0, 0, 0 },
++ {VLC_CODEC_BGRA, AV_PIX_FMT_BGRA, 0, 0, 0 },
++ {VLC_CODEC_GREY, AV_PIX_FMT_GRAY8, 0, 0, 0},
+
+ /* Paletized RGB */
+- {VLC_CODEC_RGBP, PIX_FMT_PAL8, 0, 0, 0},
++ {VLC_CODEC_RGBP, AV_PIX_FMT_PAL8, 0, 0, 0},
+
+ #if LIBAVUTIL_VERSION_CHECK(51, 42, 0, 74,100)
+ {VLC_CODEC_GBR_PLANAR, AV_PIX_FMT_GBRP, 0, 0, 0 },
+@@ -201,5 +201,5 @@ int FindFfmpegChroma( vlc_fourcc_t fourcc )
+ for( int i = 0; chroma_table[i].i_chroma != 0; i++ )
+ if( chroma_table[i].i_chroma == fourcc )
+ return chroma_table[i].i_chroma_id;
+- return PIX_FMT_NONE;
++ return AV_PIX_FMT_NONE;
+ }
+diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
+index c115db9..ae600e8 100644
+--- a/modules/codec/avcodec/video.c
++++ b/modules/codec/avcodec/video.c
+@@ -1004,7 +1004,7 @@ static picture_t *lavc_dr_GetFrame(struct AVCodecContext *ctx,
+ if (GetVlcChroma(&dec->fmt_out.video, ctx->pix_fmt) != VLC_SUCCESS)
+ return NULL;
+ dec->fmt_out.i_codec = dec->fmt_out.video.i_chroma;
+- if (ctx->pix_fmt == PIX_FMT_PAL8)
++ if (ctx->pix_fmt == AV_PIX_FMT_PAL8)
+ return NULL;
+
+ int width = frame->width;
+@@ -1180,7 +1180,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+ if (GetVlcChroma(&p_dec->fmt_out.video, p_context->pix_fmt) != VLC_SUCCESS)
+ goto no_dr;
+
+- if (p_context->pix_fmt == PIX_FMT_PAL8)
++ if (p_context->pix_fmt == AV_PIX_FMT_PAL8)
+ goto no_dr;
+
+ p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma;
+@@ -1215,7 +1215,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+ goto no_dr;
+ }
+
+- if( p_context->pix_fmt == PIX_FMT_YUV422P )
++ if( p_context->pix_fmt == AV_PIX_FMT_YUV422P )
+ {
+ if( 2 * p_pic->p[1].i_pitch != p_pic->p[0].i_pitch ||
+ 2 * p_pic->p[2].i_pitch != p_pic->p[0].i_pitch )
+@@ -1325,7 +1325,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+
+ /* Enumerate available formats */
+ bool can_hwaccel = false;
+- for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++ for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+ {
+ const AVPixFmtDescriptor *dsc = av_pix_fmt_desc_get(pi_fmt[i]);
+ if (dsc == NULL)
+@@ -1352,7 +1352,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+ if( p_va == NULL )
+ goto end;
+
+- for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++ for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+ {
+ if( p_va->pix_fmt != pi_fmt[i] )
+ continue;
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 569e0f5..4e0ecf1 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -257,35 +257,35 @@ static void FixParameters( int *pi_fmt, bool *pb_has_a, bool *pb_swap_uv, vlc_fo
+ switch( fmt )
+ {
+ case VLC_CODEC_YUV422A:
+- *pi_fmt = PIX_FMT_YUV422P;
++ *pi_fmt = AV_PIX_FMT_YUV422P;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_YUV420A:
+- *pi_fmt = PIX_FMT_YUV420P;
++ *pi_fmt = AV_PIX_FMT_YUV420P;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_YUVA:
+- *pi_fmt = PIX_FMT_YUV444P;
++ *pi_fmt = AV_PIX_FMT_YUV444P;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_RGBA:
+- *pi_fmt = PIX_FMT_BGR32;
++ *pi_fmt = AV_PIX_FMT_BGR32;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_ARGB:
+- *pi_fmt = PIX_FMT_BGR32_1;
++ *pi_fmt = AV_PIX_FMT_BGR32_1;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_BGRA:
+- *pi_fmt = PIX_FMT_RGB32;
++ *pi_fmt = AV_PIX_FMT_RGB32;
+ *pb_has_a = true;
+ break;
+ case VLC_CODEC_YV12:
+- *pi_fmt = PIX_FMT_YUV420P;
++ *pi_fmt = AV_PIX_FMT_YUV420P;
+ *pb_swap_uv = true;
+ break;
+ case VLC_CODEC_YV9:
+- *pi_fmt = PIX_FMT_YUV410P;
++ *pi_fmt = AV_PIX_FMT_YUV410P;
+ *pb_swap_uv = true;
+ break;
+ default:
+@@ -314,7 +314,7 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+ {
+ if( p_fmti->i_chroma == VLC_CODEC_YUVP && ALLOW_YUVP )
+ {
+- i_fmti = i_fmto = PIX_FMT_GRAY8;
++ i_fmti = i_fmto = AV_PIX_FMT_GRAY8;
+ i_sws_flags = SWS_POINT;
+ }
+ }
+@@ -327,9 +327,9 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+ * Without SWS_ACCURATE_RND the quality is really bad for some conversions */
+ switch( i_fmto )
+ {
+- case PIX_FMT_ARGB:
+- case PIX_FMT_RGBA:
+- case PIX_FMT_ABGR:
++ case AV_PIX_FMT_ARGB:
++ case AV_PIX_FMT_RGBA:
++ case AV_PIX_FMT_ABGR:
+ i_sws_flags |= SWS_ACCURATE_RND;
+ break;
+ }
+@@ -403,8 +403,8 @@ static int Init( filter_t *p_filter )
+ const unsigned i_fmto_visible_width = p_fmto->i_visible_width * p_sys->i_extend_factor;
+ for( int n = 0; n < (cfg.b_has_a ? 2 : 1); n++ )
+ {
+- const int i_fmti = n == 0 ? cfg.i_fmti : PIX_FMT_GRAY8;
+- const int i_fmto = n == 0 ? cfg.i_fmto : PIX_FMT_GRAY8;
++ const int i_fmti = n == 0 ? cfg.i_fmti : AV_PIX_FMT_GRAY8;
++ const int i_fmto = n == 0 ? cfg.i_fmto : AV_PIX_FMT_GRAY8;
+ struct SwsContext *ctx;
+
+ ctx = sws_getContext( i_fmti_visible_width, p_fmti->i_visible_height, i_fmti,
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
new file mode 100644
index 000000000..56744e7de
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
@@ -0,0 +1,45 @@
+From 6fa8a4a9bb64ff34328aae46acd600f8502b2c05 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 09:07:39 +0200
+Subject: [PATCH] SWSCALE: fix compilation with 4.x
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit 2b23857c68622edda76b72b74aeb3d943ee277c9)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+---
+ modules/video_chroma/swscale.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 4e0ecf1..26d0d6f 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -36,6 +36,7 @@
+ #include <vlc_cpu.h>
+
+ #include <libswscale/swscale.h>
++#include <libswscale/version.h>
+
+ #ifdef __APPLE__
+ # include <TargetConditionals.h>
+@@ -235,6 +236,7 @@ static int GetSwsCpuMask(void)
+ {
+ int i_sws_cpu = 0;
+
++#if LIBSWSCALE_VERSION_MAJOR < 4
+ #if defined(__i386__) || defined(__x86_64__)
+ if( vlc_CPU_MMX() )
+ i_sws_cpu |= SWS_CPU_CAPS_MMX;
+@@ -248,6 +250,7 @@ static int GetSwsCpuMask(void)
+ if( vlc_CPU_ALTIVEC() )
+ i_sws_cpu |= SWS_CPU_CAPS_ALTIVEC;
+ #endif
++#endif
+
+ return i_sws_cpu;
+ }
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
new file mode 100644
index 000000000..b5be04cb9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
@@ -0,0 +1,19 @@
+require ${BPN}.inc
+
+# work around build failure
+EXTRA_OECONF += " --enable-libxml2=no"
+
+SRC_URI += "file://0001-enable-subdir-objects.patch \
+ file://0002-glibc-does-not-provide-strlcpy.patch \
+ file://0003-use-am-path-libgcrypt.patch \
+ file://0004-modules-gui-qt4-out-of-tree-build.patch \
+ file://0005-libpostproc-header-check.patch \
+ file://0006-make-opencv-configurable.patch \
+ file://0007-use-vorbisidec.patch \
+ file://0008-fix-luaL-checkint.patch \
+ file://0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch \
+ file://0010-SWSCALE-fix-compilation-with-4.x.patch \
+"
+
+SRC_URI[md5sum] = "f98d60f0f59ef72b6e3407f2ff09bda6"
+SRC_URI[sha256sum] = "9ad23128be16f9b40ed772961272cb0748ed8e4aa1bc79c129e589feebea5fb5"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
new file mode 100644
index 000000000..b623dbf37
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
@@ -0,0 +1,49 @@
+Upstream-Status: Backport
+
+Backport patch to fix CVE-2015-6749 from:
+
+https://trac.xiph.org/ticket/2212
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 04815d3e1bfae3a6cdfb2c25358a5a72b61299f7 Mon Sep 17 00:00:00 2001
+From: Mark Harris <mark.hsj@gmail.com>
+Date: Sun, 30 Aug 2015 05:54:46 -0700
+Subject: [PATCH] oggenc: Fix large alloca on bad AIFF input
+
+Fixes #2212
+---
+ oggenc/audio.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/oggenc/audio.c b/oggenc/audio.c
+index 477da8c..4921fb9 100644
+--- a/oggenc/audio.c
++++ b/oggenc/audio.c
+@@ -245,8 +245,8 @@ static int aiff_permute_matrix[6][6] =
+ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+ {
+ int aifc; /* AIFC or AIFF? */
+- unsigned int len;
+- unsigned char *buffer;
++ unsigned int len, readlen;
++ unsigned char buffer[22];
+ unsigned char buf2[8];
+ aiff_fmt format;
+ aifffile *aiff = malloc(sizeof(aifffile));
+@@ -269,9 +269,9 @@ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+ return 0; /* Weird common chunk */
+ }
+
+- buffer = alloca(len);
+-
+- if(fread(buffer,1,len,in) < len)
++ readlen = len < sizeof(buffer) ? len : sizeof(buffer);
++ if(fread(buffer,1,readlen,in) < readlen ||
++ (len > readlen && !seek_forward(in, len-readlen)))
+ {
+ fprintf(stderr, _("Warning: Unexpected EOF in reading AIFF header\n"));
+ return 0;
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch
new file mode 100644
index 000000000..111e98ac1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0004-Fix-format-error-blocking-compilation-with-hardening.patch
@@ -0,0 +1,26 @@
+From: Petter Reinholdtsen <pere@hungry.com>
+Date: Wed, 22 Oct 2014 13:25:21 +0200
+Subject: Fix format error blocking compilation with hardening
+
+Last-Update: 2014-10-22
+Forwarded: no
+
+Enabling hardening refuses to compile code with sprintf() calls
+with no formatting string. Adjust the code to work with hardening.
+---
+ ogg123/status.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ogg123/status.c b/ogg123/status.c
+index 92b8ff1..ccec389 100644
+--- a/ogg123/status.c
++++ b/ogg123/status.c
+@@ -148,7 +148,7 @@ int print_statistics_line (stat_format_t stats[])
+
+ switch (stats->type) {
+ case stat_noarg:
+- len += sprintf(str+len, stats->formatstr);
++ len += sprintf(str+len, "%s", stats->formatstr);
+ break;
+ case stat_intarg:
+ len += sprintf(str+len, stats->formatstr, stats->arg.intarg);
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
new file mode 100644
index 000000000..e43cb4032
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Vorbis Tools"
+DESCRIPTION = "Ogg Vorbis is a high-quality lossy audio codec \
+that is free of intellectual property restrictions. vorbis-tools \
+include some command line applications to use the libraries."
+HOMEPAGE = "http://www.vorbis.com/"
+BUGTRACKER = "https://trac.xiph.org"
+SECTION = "multimedia"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libogg libvorbis curl libao"
+
+SRC_URI = "http://downloads.xiph.org/releases/vorbis/${BP}.tar.gz \
+ file://0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch \
+ file://0004-Fix-format-error-blocking-compilation-with-hardening.patch \
+ "
+
+SRC_URI[md5sum] = "567e0fb8d321b2cd7124f8208b8b90e6"
+SRC_URI[sha256sum] = "a389395baa43f8e5a796c99daf62397e435a7e73531c9f44d9084055a05d22bc"
+
+inherit autotools pkgconfig gettext
+
+PACKAGECONFIG ??= "flac"
+PACKAGECONFIG[flac] = ",--without-flac,flac,libflac"
+PACKAGECONFIG[speex] = ",--without-speex,speex,speex"
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch
new file mode 100644
index 000000000..7668df35d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0001-build-Protect-against-unsupported-CPU-types.patch
@@ -0,0 +1,29 @@
+From 4945dca11bc4ddec60bd858f45212dc8f39638e0 Mon Sep 17 00:00:00 2001
+From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+Date: Tue, 5 Jul 2016 18:07:45 -0400
+Subject: [PATCH 1/6] build: Protect against unsupported CPU types
+
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+Upstream-Status: Accepted [expected in 0.4]
+---
+ configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6f9553b..f5304b8 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -70,8 +70,9 @@ AS_CASE(["${host_cpu}"],
+ [
+ HAVE_ARM=1
+ ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
+- ]
++ ],
+ # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
++ [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
+ )
+ AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"])
+ AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"])
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch
new file mode 100644
index 000000000..2e202b03c
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0002-build-Add-ARM-64bit-support.patch
@@ -0,0 +1,30 @@
+From b5bda3431159b6505dcd069641c863018c4d4309 Mon Sep 17 00:00:00 2001
+From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
+Date: Wed, 6 Jul 2016 15:18:15 -0400
+Subject: [PATCH 2/6] build: Add ARM 64bit support
+
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+Upstream-Status: Accepted [expected in 0.4]
+---
+ configure.ac | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index f5304b8..be20514 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -71,6 +71,11 @@ AS_CASE(["${host_cpu}"],
+ HAVE_ARM=1
+ ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
+ ],
++ [aarch64*],
++ [
++ HAVE_NEON=1
++ ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"
++ ],
+ # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
+ [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
+ )
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch
new file mode 100644
index 000000000..82e270fac
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0003-build-fix-architecture-detection.patch
@@ -0,0 +1,96 @@
+From 7722fb8a3189fea0f6381f02a0e4f63c847f0393 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Sat, 6 Aug 2016 11:02:43 +0200
+Subject: [PATCH 3/6] build: fix architecture detection
+
+The current architecture detection, based on the "host_cpu" part of the
+tuple does not work properly for a number of reason:
+
+ - The code assumes that if host_cpu starts with "arm" then ARM
+ instructions are available, which is incorrect. Indeed, Cortex-M
+ platforms can run Linux, they are ARM platforms (so host_cpu = arm),
+ but they don't support ARM instructions: they support only the
+ Thumb-2 instruction set.
+
+ - The armv7 case is also not very useful, as it is not standard at all
+ to pass armv7 as host_cpu even if the host system is actually ARMv7
+ based.
+
+ - For the same reason, the armv8 case is not very useful: ARMv8 is
+ AArch64, and there is already a separate case to handle this
+ architecture.
+
+So, this commit moves away from a host_cpu based logic, and instead
+tests using AC_CHECK_DECLS() the built-in definitions of the compiler:
+
+ - If we have __ARM_ARCH_ISA_ARM defined, then it's an ARM processor
+ that supports the ARM instruction set (this allows to exclude Thumb-2
+ only processors).
+
+ - If we have __ARM_ARCH_7A__, then we have an ARMv7-A processor, and
+ we can enable the corresponding optimizations
+
+ - Same for __aarch64__, __i386__ and __x86_64__.
+
+In addition, we remove the AC_MSG_ERROR() that makes the build fail for
+all architectures but the ones that are explicitly supported. Indeed,
+webrtc-audio-processing builds just fine for other architectures (tested
+on MIPS), it's just that none of the architecture-specific optimizations
+will be used.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+Upstream-Status: Accepted [expected in 0.4]
+---
+ configure.ac | 35 +++++++++++------------------------
+ 1 file changed, 11 insertions(+), 24 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index be20514..e898014 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,30 +55,17 @@ AS_CASE(["${host}"],
+ )
+ AC_SUBST(PLATFORM_CFLAGS)
+
+-AS_CASE(["${host_cpu}"],
+- [i?86|x86_64],
+- [
+- HAVE_X86=1
+- ],
+- [armv7*|armv8*],
+- [
+- HAVE_ARM=1
+- HAVE_ARMV7=1
+- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM -DWEBRTC_ARCH_ARM_V7"
+- ],
+- [arm*],
+- [
+- HAVE_ARM=1
+- ARCH_CFLAGS="-DWEBRTC_ARCH_ARM"
+- ],
+- [aarch64*],
+- [
+- HAVE_NEON=1
+- ARCH_CFLAGS="-DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"
+- ],
+- # FIXME: Add MIPS support, see webrtc/BUILD.gn for defines
+- [AC_MSG_ERROR([Unsupported CPU type $host_cpu])]
+-)
++# Testing __ARM_ARCH_ISA_ARM since the code contains ARM instructions,
++# which don't work on Thumb-2 only platforms (ARMv7-M).
++AC_CHECK_DECLS([__ARM_ARCH_ISA_ARM],
++ [HAVE_ARM=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM"])
++AC_CHECK_DECLS([__ARM_ARCH_7A__],
++ [HAVE_ARMV7=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_ARCH_ARM_V7"])
++AC_CHECK_DECLS([__aarch64__],
++ [HAVE_NEON=1; ARCH_CFLAGS="${ARCH_CFLAGS} -DWEBRTC_HAS_NEON -DWEBRTC_ARCH_ARM64"])
++AC_CHECK_DECLS([__i386__], [HAVE_X86=1])
++AC_CHECK_DECLS([__x86_64__], [HAVE_X86=1])
++
+ AM_CONDITIONAL(HAVE_X86, [test "x${HAVE_X86}" = "x1"])
+ AM_CONDITIONAL(HAVE_ARM, [test "x${HAVE_ARM}" = "x1"])
+ AM_CONDITIONAL(HAVE_ARMV7, [test "x${HAVE_ARMV7}" = "x1"])
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch
new file mode 100644
index 000000000..c96f10ed9
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch
@@ -0,0 +1,41 @@
+From 0c332b7d94f8425c4f33344ddf406b6eea458861 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@iki.fi>
+Date: Mon, 8 May 2017 17:01:49 +0300
+Subject: [PATCH 4/6] typedefs.h: add support for 64-bit and big endian MIPS
+
+The 64-bit check is taken from the upstream webrtc project, the big
+endian check is my own addition.
+
+Upstream-Status: Pending
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+---
+ webrtc/typedefs.h | 11 ++++++++++-
+ 1 file changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/webrtc/typedefs.h b/webrtc/typedefs.h
+index d875490..d1b2f54 100644
+--- a/webrtc/typedefs.h
++++ b/webrtc/typedefs.h
+@@ -41,9 +41,18 @@
+ //#define WEBRTC_ARCH_ARMEL
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
+-#elif defined(__MIPSEL__)
++#elif defined(__MIPSEL__) || defined(__MIPSEB__)
++#define WEBRTC_ARCH_MIPS_FAMILY
++#if defined(__LP64__)
++#define WEBRTC_ARCH_64_BITS
++#else
+ #define WEBRTC_ARCH_32_BITS
++#endif
++#if defined(__MIPSEL__)
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
++#else
++#define WEBRTC_ARCH_BIG_ENDIAN
++#endif
+ #elif defined(__pnacl__)
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch
new file mode 100644
index 000000000..e16b57ecb
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0005-typedefs.h-add-support-for-PowerPC.patch
@@ -0,0 +1,28 @@
+From db5f570e928c8ca5b0b8dc702e1af0a57277f092 Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@iki.fi>
+Date: Mon, 3 Jul 2017 16:20:08 +0300
+Subject: [PATCH 5/6] typedefs.h: add support for PowerPC
+
+Upstream-Status: Pending
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+---
+ webrtc/typedefs.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/webrtc/typedefs.h b/webrtc/typedefs.h
+index d1b2f54..6e34d9e 100644
+--- a/webrtc/typedefs.h
++++ b/webrtc/typedefs.h
+@@ -53,6 +53,9 @@
+ #else
+ #define WEBRTC_ARCH_BIG_ENDIAN
+ #endif
++#elif defined(__powerpc__)
++#define WEBRTC_ARCH_32_BITS
++#define WEBRTC_ARCH_BIG_ENDIAN
+ #elif defined(__pnacl__)
+ #define WEBRTC_ARCH_32_BITS
+ #define WEBRTC_ARCH_LITTLE_ENDIAN
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch
new file mode 100644
index 000000000..5826ab00d
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing/0006-common_audio-implement-endianness-conversion-in-wav-.patch
@@ -0,0 +1,116 @@
+From 7d31da8ef93987000f297d435dbacaf7d436107b Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@iki.fi>
+Date: Thu, 15 Jun 2017 18:38:30 +0300
+Subject: [PATCH 6/6] common_audio: implement endianness conversion in wav file
+ handling
+
+The code didn't build for big endian machines due to the missing
+endianness conversions.
+
+Upstream-Status: Pending
+Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
+---
+ webrtc/common_audio/wav_file.cc | 27 +++++++++++++++++++++------
+ webrtc/common_audio/wav_header.cc | 32 +++++++++++++++++++++++++++++++-
+ 2 files changed, 52 insertions(+), 7 deletions(-)
+
+diff --git a/webrtc/common_audio/wav_file.cc b/webrtc/common_audio/wav_file.cc
+index b14b620..e2f7738 100644
+--- a/webrtc/common_audio/wav_file.cc
++++ b/webrtc/common_audio/wav_file.cc
+@@ -64,9 +64,6 @@ WavReader::~WavReader() {
+ }
+
+ size_t WavReader::ReadSamples(size_t num_samples, int16_t* samples) {
+-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to big-endian when reading from WAV file"
+-#endif
+ // There could be metadata after the audio; ensure we don't read it.
+ num_samples = std::min(rtc::checked_cast<uint32_t>(num_samples),
+ num_samples_remaining_);
+@@ -76,6 +73,13 @@ size_t WavReader::ReadSamples(size_t num_samples, int16_t* samples) {
+ RTC_CHECK(read == num_samples || feof(file_handle_));
+ RTC_CHECK_LE(read, num_samples_remaining_);
+ num_samples_remaining_ -= rtc::checked_cast<uint32_t>(read);
++
++#ifdef WEBRTC_ARCH_BIG_ENDIAN
++ // Convert the read samples from little-endian to big-endian.
++ for (size_t i = 0; i < read; i++)
++ samples[i] = ((uint16_t) samples[i] >> 8) | ((uint16_t) samples[i] << 8);
++#endif
++
+ return read;
+ }
+
+@@ -119,11 +123,22 @@ WavWriter::~WavWriter() {
+ }
+
+ void WavWriter::WriteSamples(const int16_t* samples, size_t num_samples) {
+-#ifndef WEBRTC_ARCH_LITTLE_ENDIAN
+-#error "Need to convert samples to little-endian when writing to WAV file"
+-#endif
++#ifdef WEBRTC_ARCH_BIG_ENDIAN
++ // Convert the samples from big-endian samples to little-endian.
++ int16_t* converted_samples = static_cast<int16_t*>(malloc(num_samples * sizeof(*samples)));
++ RTC_CHECK(converted_samples) << "Out of memory.";
++ for (int i = 0; i < num_samples; i++)
++ converted_samples[i] =
++ ((uint16_t) samples[i] >> 8) | ((uint16_t) samples[i] << 8);
++
++ const size_t written =
++ fwrite(converted_samples, sizeof(*converted_samples), num_samples,
++ file_handle_);
++ free(converted_samples);
++#else
+ const size_t written =
+ fwrite(samples, sizeof(*samples), num_samples, file_handle_);
++#endif
+ RTC_CHECK_EQ(num_samples, written);
+ num_samples_ += static_cast<uint32_t>(written);
+ RTC_CHECK(written <= std::numeric_limits<uint32_t>::max() ||
+diff --git a/webrtc/common_audio/wav_header.cc b/webrtc/common_audio/wav_header.cc
+index 61cfffe..382bfc7 100644
+--- a/webrtc/common_audio/wav_header.cc
++++ b/webrtc/common_audio/wav_header.cc
+@@ -129,7 +129,37 @@ static inline std::string ReadFourCC(uint32_t x) {
+ return std::string(reinterpret_cast<char*>(&x), 4);
+ }
+ #else
+-#error "Write be-to-le conversion functions"
++static inline void WriteLE16(uint16_t* f, uint16_t x) {
++ *f = x >> 8 | x << 8;
++}
++static inline void WriteLE32(uint32_t* f, uint32_t x) {
++ *f = x >> 24
++ | (x && 0xFF0000) >> 8
++ | (x && 0xFF00) << 8
++ | x << 24;
++}
++static inline void WriteFourCC(uint32_t* f, char a, char b, char c, char d) {
++ *f = static_cast<uint32_t>(d)
++ | static_cast<uint32_t>(c) << 8
++ | static_cast<uint32_t>(b) << 16
++ | static_cast<uint32_t>(a) << 24;
++}
++
++static inline uint32_t ReadLE16(uint16_t x) {
++ return x >> 8 | x << 8;
++}
++
++static inline uint32_t ReadLE32(uint32_t x) {
++ return x >> 24
++ | (x && 0xFF0000) >> 8
++ | (x && 0xFF00) << 8
++ | x << 24;
++}
++
++static inline std::string ReadFourCC(uint32_t x) {
++ x = ReadLE32(x);
++ return std::string(reinterpret_cast<char*>(&x), 4);
++}
+ #endif
+
+ static inline uint32_t RiffChunkSize(uint32_t bytes_in_payload) {
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb
new file mode 100644
index 000000000..2b0f7c684
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-multimedia/webrtc-audio-processing/webrtc-audio-processing_0.3.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "Audio processing bits of the WebRTC reference implementation"
+HOMEPAGE = "https://www.freedesktop.org/software/pulseaudio/webrtc-audio-processing/"
+SECTION = "audio"
+
+DEPENDS_append_libc-musl = " libexecinfo"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=da08a38a32a340c5d91e13ee86a118f2 \
+ file://webrtc/common.h;beginline=1;endline=9;md5=41f7322d91deabaf0acbbd0b8d0bc548 \
+"
+
+# Note that patch 3 effectively reverts patches 1 and 2. The only reason
+# why patches 1 and 2 are included is that otherwise patch 3 wouldn't
+# apply cleanly.
+SRC_URI = "http://freedesktop.org/software/pulseaudio/webrtc-audio-processing/${BP}.tar.xz \
+ file://0001-build-Protect-against-unsupported-CPU-types.patch \
+ file://0002-build-Add-ARM-64bit-support.patch \
+ file://0003-build-fix-architecture-detection.patch \
+ file://0004-typedefs.h-add-support-for-64-bit-and-big-endian-MIP.patch \
+ file://0005-typedefs.h-add-support-for-PowerPC.patch \
+ file://0006-common_audio-implement-endianness-conversion-in-wav-.patch \
+"
+
+SRC_URI[md5sum] = "336ae032f608e65808ac577cde0ab72c"
+SRC_URI[sha256sum] = "756e291d4f557d88cd50c4fe3b8454ec238362d22cedb3e6173240d90f0a80fa"
+
+LDFLAGS_append_libc-musl = " -lexecinfo"
+inherit autotools
diff --git a/meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb b/meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb
new file mode 100644
index 000000000..228b8b654
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/crossguid/crossguid.bb
@@ -0,0 +1,25 @@
+# Copyright (C) 2017 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Lightweight cross platform C++ GUID/UUID library"
+HOMEPAGE = "https://github.com/graeme-hill/crossguid"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1373274bc8d8001edc54933919f36f68"
+DEPENDS += "util-linux"
+
+PV = "0.0+git${SRCPV}"
+
+SRCREV = "b56957ac453575e91ca1b63a80c0077c2b0d011a"
+SRC_URI = "git://github.com/graeme-hill/crossguid;protocol=https"
+
+S = "${WORKDIR}/git"
+
+do_compile() {
+ ${CXX} -c guid.cpp -o guid.o ${CXXFLAGS} -std=c++11 -DGUID_LIBUUID
+ ${AR} rvs libcrossguid.a guid.o
+}
+
+do_install() {
+ install -D -m 0644 ${B}/libcrossguid.a ${D}${libdir}/libcrossguid.a
+ install -D -m 0644 ${S}/guid.h ${D}${includedir}/guid.h
+}
diff --git a/meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb b/meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb
new file mode 100644
index 000000000..07d0c5561
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/gst-instruments/gst-instruments_0.2.3.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Profiling utilities for GStreamer 1.0 pipelines"
+HOMEPAGE = "https://github.com/kirushyk/gst-instruments"
+SECTION = "multimedia"
+
+LICENSE = "LGPL-3.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+DEPENDS = "gstreamer1.0"
+
+S = "${WORKDIR}/git"
+SRCREV = "4ce8092636ee6572148b5fa044080734cf5a6b8d"
+SRC_URI = "git://github.com/kirushyk/gst-instruments.git;protocol=https;"
+
+FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*a"
+FILES_${PN} += "${libdir}/*"
+
+INSANE_SKIP_${PN} = "dev-so"
+
+inherit autotools pkgconfig
+
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb
new file mode 100644
index 000000000..44f135a21
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart-2.0_1.9.0.bb
@@ -0,0 +1,7 @@
+require libmediaart.inc
+
+SRC_URI = "${GNOME_MIRROR}/libmediaart/1.9/libmediaart-${PV}.tar.xz"
+SRC_URI[md5sum] = "0b65d64398d2f3dff89534c9dfffab4f"
+SRC_URI[sha256sum] = "94668adb29d4dc3115b0fd105942ebd5ca6f5f9dbb2afa8a191a73a747dd506f"
+
+S = "${WORKDIR}/libmediaart-${PV}"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc
new file mode 100644
index 000000000..57dca9c17
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Library tasked with managing, extracting and handling media art caches"
+
+LICENSE = "LGPLv2+ & GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=4fbd65380cdd255951079008b364516c \
+ file://libmediaart/extract.c;endline=18;md5=dff2b6328ab067b5baadc135f9876c36 \
+ file://tests/mediaarttest.c;endline=18;md5=067106eaa1f7a9d918759a096667f18e"
+
+DEPENDS = "glib-2.0 gdk-pixbuf"
+
+GNOME_COMPRESS_TYPE = "xz"
+
+inherit gnomebase gtk-doc gobject-introspection
+
+EXTRA_OECONF = "--disable-qt --enable-gdkpixbuf"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb
new file mode 100644
index 000000000..ae95d4f69
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libmediaart/libmediaart_0.7.0.bb
@@ -0,0 +1,6 @@
+require libmediaart.inc
+
+SRC_URI[archive.md5sum] = "1a44933d4cd0064e3c76d8d0ddacddc9"
+SRC_URI[archive.sha256sum] = "3a9dffcad862aed7c0921579b93080d694b8a66f3676bfee8037867f653a1cd3"
+
+EXTRA_OECONF_append = " --disable-gtk-doc"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch
new file mode 100644
index 000000000..aff1cb184
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/0001-Fix-enable-vfp-flag.patch
@@ -0,0 +1,41 @@
+Upstream-Status: Inappropriate [configuration]
+
+From 1921498bcc06408e8b051a3a9e9ce4182998f748 Mon Sep 17 00:00:00 2001
+From: David Schleef <ds@schleef.org>
+Date: Fri, 8 Apr 2011 10:05:49 -0700
+Subject: [PATCH 10/10] Fix --enable-vfp flag
+
+Patch from Christophe Lyon, fixes #36084.
+---
+ configure.ac | 4 ++--
+ liboil/arm/Makefile.am | 1 +
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 98c81fb..407d88c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -188,8 +188,8 @@ fi
+ AC_ARG_ENABLE(vfp,
+ AC_HELP_STRING([--enable-vfp],[compile with Vector Floating-point unit support]),
+ enable_vfp=$enableval,enable_vfp=yes)
+-if test "x$enable-vfp" = xyes -a x$HAVE_GCC_ASM = xyes -a x$HAVE_ARM = xyes; then
+- AS_COMPILER_FLAG(["-Wa,-mfpu=vfp"],
++if test "x$enable_vfp" = xyes -a x$HAVE_GCC_ASM = xyes -a x$HAVE_ARM = xyes; then
++ AS_COMPILER_FLAG(["-mfpu=vfp"],
+ [VFP_CFLAGS="$VFP_CFLAGS -mfpu=vfp"],
+ true)
+ #AS_COMPILER_FLAG(["-Wa,-mfloat-abi=softfp"],
+diff --git a/liboil/arm/Makefile.am b/liboil/arm/Makefile.am
+index ead08ed..cd8d9fa 100644
+--- a/liboil/arm/Makefile.am
++++ b/liboil/arm/Makefile.am
+@@ -6,4 +6,5 @@ libarm_la_SOURCES = \
+ math_vfp_asm.S
+
+ libarm_la_CFLAGS = $(LIBOIL_CFLAGS) $(VFP_CFLAGS)
++libarm_la_CCASFLAGS = $(LIBOIL_CFLAGS) $(VFP_CFLAGS)
+
+--
+1.7.6
+
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch
new file mode 100644
index 000000000..c8e3c1f72
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/fix-unaligned-whitelist.patch
@@ -0,0 +1,19 @@
+Upstream: https://bugs.freedesktop.org/show_bug.cgi?id=31358
+
+configure: fix whitelisting of x86_64 unaligned memory access
+
+Fix typo in whitelist so cross-compile works for x86_64.
+
+Upstream-Status: Inappropriate [configuration]
+
+--- liboil-0.3.17/m4/as-unaligned-access.m4.orig 2009-02-26 14:40:08.000000000 -0500
++++ liboil-0.3.17/m4/as-unaligned-access.m4 2010-11-03 12:19:55.000000000 -0400
+@@ -9,7 +9,7 @@
+ _AS_ECHO_N([(blacklisted) ])
+ as_cv_unaligned_access=no
+ ;;
+- i?86*|x86_64|amd64|powerpc*|m68k*|cris*)
++ i?86*|x86_64*|amd64*|powerpc*|m68k*|cris*)
+ _AS_ECHO_N([(whitelisted) ])
+ as_cv_unaligned_access=yes
+ ;;
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch
new file mode 100644
index 000000000..473380e9f
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/liboil_fix_for_x32.patch
@@ -0,0 +1,222 @@
+Upstream-Status: Pending
+
+Make the assembly syntax compatible with x32 gcc. Othewise x32 gcc throws errors.
+
+Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
+2011/12/01
+
+
+Index: liboil-0.3.17/liboil/amd64/wavelet.c
+===================================================================
+--- liboil-0.3.17.orig/liboil/amd64/wavelet.c
++++ liboil-0.3.17/liboil/amd64/wavelet.c
+@@ -21,14 +21,14 @@ deinterleave2_asm (int16_t *d1, int16_t
+ asm volatile ("\n"
+ " sub $2, %%rcx\n"
+ "1:\n"
+- " movw (%1,%%rcx,4), %%ax\n"
+- " movw %%ax, (%0,%%rcx,2)\n"
+- " movw 2(%1,%%rcx,4), %%ax\n"
+- " movw %%ax, (%2,%%rcx,2)\n"
+- " movw 4(%1,%%rcx,4), %%ax\n"
+- " movw %%ax, 2(%0,%%rcx,2)\n"
+- " movw 6(%1,%%rcx,4), %%ax\n"
+- " movw %%ax, 2(%2,%%rcx,2)\n"
++ " movw (%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, (%q0,%%rcx,2)\n"
++ " movw 2(%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, (%q2,%%rcx,2)\n"
++ " movw 4(%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, 2(%q0,%%rcx,2)\n"
++ " movw 6(%q1,%%rcx,4), %%ax\n"
++ " movw %%ax, 2(%q2,%%rcx,2)\n"
+ " sub $2, %%rcx\n"
+ " jge 1b\n"
+ : "+r" (d1), "+r" (s_2xn), "+r" (d2), "+c" (n)
+@@ -53,20 +53,20 @@ deinterleave2_mmx (int16_t *d1, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,4), %%mm0\n"
+- " movq 8(%1,%%rcx,4), %%mm1\n"
++ " movq (%q1,%%rcx,4), %%mm0\n"
++ " movq 8(%q1,%%rcx,4), %%mm1\n"
+ " pslld $16, %%mm0\n"
+ " pslld $16, %%mm1\n"
+ " psrad $16, %%mm0\n"
+ " psrad $16, %%mm1\n"
+ " packssdw %%mm1, %%mm0\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
+- " movq (%1,%%rcx,4), %%mm0\n"
+- " movq 8(%1,%%rcx,4), %%mm1\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
++ " movq (%q1,%%rcx,4), %%mm0\n"
++ " movq 8(%q1,%%rcx,4), %%mm1\n"
+ " psrad $16, %%mm0\n"
+ " psrad $16, %%mm1\n"
+ " packssdw %%mm1, %%mm0\n"
+- " movq %%mm0, (%2,%%rcx,2)\n"
++ " movq %%mm0, (%q2,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -93,10 +93,10 @@ deinterleave2_mmx_2 (int16_t *d1, int16_
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " pshufw $0xd8, (%1,%%rcx,4), %%mm0\n"
+- " movd %%mm0, (%0,%%rcx,2)\n"
+- " pshufw $0x8d, (%1,%%rcx,4), %%mm0\n"
+- " movd %%mm0, (%2,%%rcx,2)\n"
++ " pshufw $0xd8, (%q1,%%rcx,4), %%mm0\n"
++ " movd %%mm0, (%q0,%%rcx,2)\n"
++ " pshufw $0x8d, (%q1,%%rcx,4), %%mm0\n"
++ " movd %%mm0, (%q2,%%rcx,2)\n"
+ " add $2, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -123,16 +123,16 @@ deinterleave2_mmx_3 (int16_t *d1, int16_
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,4), %%mm1\n"
+- " movq (%1,%%rcx,4), %%mm2\n"
+- " movq 8(%1,%%rcx,4), %%mm0\n"
++ " movq (%q1,%%rcx,4), %%mm1\n"
++ " movq (%q1,%%rcx,4), %%mm2\n"
++ " movq 8(%q1,%%rcx,4), %%mm0\n"
+ " punpcklwd %%mm0, %%mm1\n"
+ " punpckhwd %%mm0, %%mm2\n"
+ " movq %%mm1, %%mm0\n"
+ " punpcklwd %%mm2, %%mm0\n"
+ " punpckhwd %%mm2, %%mm1\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
+- " movq %%mm1, (%2,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
++ " movq %%mm1, (%q2,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -159,26 +159,26 @@ deinterleave2_mmx_4 (int16_t *d1, int16_
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,4), %%mm1\n"
++ " movq (%q1,%%rcx,4), %%mm1\n"
+ " movq %%mm1, %%mm2\n"
+- " movq 8(%1,%%rcx,4), %%mm0\n"
+- " movq 16(%1,%%rcx,4), %%mm5\n"
++ " movq 8(%q1,%%rcx,4), %%mm0\n"
++ " movq 16(%q1,%%rcx,4), %%mm5\n"
+ " punpcklwd %%mm0, %%mm1\n"
+ " movq %%mm5, %%mm6\n"
+ " punpckhwd %%mm0, %%mm2\n"
+- " movq 24(%1,%%rcx,4), %%mm4\n"
++ " movq 24(%q1,%%rcx,4), %%mm4\n"
+ " movq %%mm1, %%mm0\n"
+ " punpcklwd %%mm4, %%mm5\n"
+ " punpcklwd %%mm2, %%mm0\n"
+ " punpckhwd %%mm4, %%mm6\n"
+ " punpckhwd %%mm2, %%mm1\n"
+ " movq %%mm5, %%mm4\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
+ " punpcklwd %%mm6, %%mm4\n"
+- " movq %%mm1, (%2,%%rcx,2)\n"
++ " movq %%mm1, (%q2,%%rcx,2)\n"
+ " punpckhwd %%mm6, %%mm5\n"
+- " movq %%mm4, 8(%0,%%rcx,2)\n"
+- " movq %%mm5, 8(%2,%%rcx,2)\n"
++ " movq %%mm4, 8(%q0,%%rcx,2)\n"
++ " movq %%mm5, 8(%q2,%%rcx,2)\n"
+ " add $8, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -252,13 +252,13 @@ interleave2_mmx (int16_t *d_2xn, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%1,%%rcx,2), %%mm0\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
++ " movq (%q1,%%rcx,2), %%mm0\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
+ " movq %%mm0, %%mm2\n"
+ " punpckhwd %%mm1, %%mm0\n"
+ " punpcklwd %%mm1, %%mm2\n"
+- " movq %%mm2, (%0,%%rcx,4)\n"
+- " movq %%mm0, 8(%0,%%rcx,4)\n"
++ " movq %%mm2, (%q0,%%rcx,4)\n"
++ " movq %%mm0, 8(%q0,%%rcx,4)\n"
+ " add $4, %%rcx\n"
+ " cmp %3, %%ecx\n"
+ " jl 1b\n"
+@@ -285,12 +285,12 @@ lift_add_shift1_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $1, %%mm1\n"
+- " paddw (%1,%%rcx,2), %%mm1\n"
+- " movq %%mm1, (%0,%%rcx,2)\n"
++ " paddw (%q1,%%rcx,2), %%mm1\n"
++ " movq %%mm1, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
+@@ -317,13 +317,13 @@ lift_sub_shift1_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
+- " movq (%1,%%rcx,2), %%mm0\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
++ " movq (%q1,%%rcx,2), %%mm0\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $1, %%mm1\n"
+ " psubw %%mm1, %%mm0\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
+@@ -350,12 +350,12 @@ lift_add_shift2_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $2, %%mm1\n"
+- " paddw (%1,%%rcx,2), %%mm1\n"
+- " movq %%mm1, (%0,%%rcx,2)\n"
++ " paddw (%q1,%%rcx,2), %%mm1\n"
++ " movq %%mm1, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
+@@ -382,13 +382,13 @@ lift_sub_shift2_mmx (int16_t *d, int16_t
+ asm volatile ("\n"
+ " xor %%rcx, %%rcx\n"
+ "1:\n"
+- " movq (%2,%%rcx,2), %%mm1\n"
+- " movq (%3,%%rcx,2), %%mm2\n"
+- " movq (%1,%%rcx,2), %%mm0\n"
++ " movq (%q2,%%rcx,2), %%mm1\n"
++ " movq (%q3,%%rcx,2), %%mm2\n"
++ " movq (%q1,%%rcx,2), %%mm0\n"
+ " paddw %%mm2, %%mm1\n"
+ " psraw $2, %%mm1\n"
+ " psubw %%mm1, %%mm0\n"
+- " movq %%mm0, (%0,%%rcx,2)\n"
++ " movq %%mm0, (%q0,%%rcx,2)\n"
+ " add $4, %%rcx\n"
+ " cmp %4, %%ecx\n"
+ " jl 1b\n"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch
new file mode 100644
index 000000000..892d44131
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil-0.3.17/no-tests.patch
@@ -0,0 +1,24 @@
+Upstream-Status: Inappropriate [disable feature]
+
+--- liboil-0.3.9/liboil/liboilfunction.c.old 2006-09-18 13:03:20.000000000 +0100
++++ liboil-0.3.9/liboil/liboilfunction.c 2006-09-18 13:04:10.000000000 +0100
+@@ -345,7 +345,9 @@
+ return;
+ }
+
+- test = oil_test_new (klass);
++ klass->chosen_impl = klass->reference_impl;
++ klass->func = klass->reference_impl->func;
++/* test = oil_test_new (klass);
+ if (test == NULL) {
+ OIL_ERROR ("failed to test function class %s", klass->name);
+ return;
+@@ -385,7 +387,7 @@
+ klass->chosen_impl = min_impl;
+ klass->func = min_impl->func;
+
+- oil_test_free (test);
++ oil_test_free (test);*/
+ }
+
+ static void
diff --git a/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb
new file mode 100644
index 000000000..03b778521
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/liboil/liboil_0.3.17.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Library of simple functions optimized for various CPUs"
+HOMEPAGE = "http://liboil.freedesktop.org/"
+BUGTRACKER = "https://bugs.freedesktop.org/"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ad80780d9c5205d63481a0184e199a15 \
+ file://liboil/liboil.h;endline=28;md5=95c794a66b88800d949fed17e437d9fb \
+ file://liboil/liboilcpu.c;endline=28;md5=89da69a61d88eedcba066f42353fb75a \
+ file://examples/example1.c;endline=29;md5=9d4dad9fcbbdf0441ee063f8af5170c9 \
+ file://testsuite/trans.c;endline=29;md5=380ecd43121fe3dcc0d8d7e5984f283d"
+
+DEPENDS = "glib-2.0"
+PR = "r5"
+
+SRC_URI = "http://liboil.freedesktop.org/download/${BPN}-${PV}.tar.gz \
+ file://no-tests.patch \
+ file://fix-unaligned-whitelist.patch \
+ file://0001-Fix-enable-vfp-flag.patch \
+ file://liboil_fix_for_x32.patch \
+ "
+
+SRC_URI[md5sum] = "47dc734f82faeb2964d97771cfd2e701"
+SRC_URI[sha256sum] = "105f02079b0b50034c759db34b473ecb5704ffa20a5486b60a8b7698128bfc69"
+
+inherit autotools pkgconfig
+
+ARM_INSTRUCTION_SET = "arm"
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch
new file mode 100644
index 000000000..b56c78959
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp/0001-Rename-conflicting-variable-mips.patch
@@ -0,0 +1,73 @@
+From 3dc8a678a844247d0afcf7e30fb3cbd5ccbd828f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 29 Jun 2017 14:05:06 -0700
+Subject: [PATCH] Rename conflicting variable 'mips'
+
+Fixes
+test/srtp_driver.c:344:12: error: expected identifier or '(' before numeric constant
+ double mips = mips_estimate(1000000000, &ignore);
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ test/srtp_driver.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/test/srtp_driver.c b/test/srtp_driver.c
+index 8872971..d38ea19 100644
+--- a/test/srtp_driver.c
++++ b/test/srtp_driver.c
+@@ -341,7 +341,7 @@ main (int argc, char *argv[]) {
+ if (do_codec_timing) {
+ srtp_policy_t policy;
+ int ignore;
+- double mips = mips_estimate(1000000000, &ignore);
++ double est = mips_estimate(1000000000, &ignore);
+
+ crypto_policy_set_rtp_default(&policy.rtp);
+ crypto_policy_set_rtcp_default(&policy.rtcp);
+@@ -353,33 +353,33 @@ main (int argc, char *argv[]) {
+ policy.allow_repeat_tx = 0;
+ policy.next = NULL;
+
+- printf("mips estimate: %e\n", mips);
++ printf("mips estimate: %e\n", est);
+
+ printf("testing srtp processing time for voice codecs:\n");
+ printf("codec\t\tlength (octets)\t\tsrtp instructions/second\n");
+ printf("G.711\t\t%d\t\t\t%e\n", 80,
+- (double) mips * (80 * 8) /
++ (double) est * (80 * 8) /
+ srtp_bits_per_second(80, &policy) / .01 );
+ printf("G.711\t\t%d\t\t\t%e\n", 160,
+- (double) mips * (160 * 8) /
++ (double) est * (160 * 8) /
+ srtp_bits_per_second(160, &policy) / .02);
+ printf("G.726-32\t%d\t\t\t%e\n", 40,
+- (double) mips * (40 * 8) /
++ (double) est * (40 * 8) /
+ srtp_bits_per_second(40, &policy) / .01 );
+ printf("G.726-32\t%d\t\t\t%e\n", 80,
+- (double) mips * (80 * 8) /
++ (double) est * (80 * 8) /
+ srtp_bits_per_second(80, &policy) / .02);
+ printf("G.729\t\t%d\t\t\t%e\n", 10,
+- (double) mips * (10 * 8) /
++ (double) est * (10 * 8) /
+ srtp_bits_per_second(10, &policy) / .01 );
+ printf("G.729\t\t%d\t\t\t%e\n", 20,
+- (double) mips * (20 * 8) /
++ (double) est * (20 * 8) /
+ srtp_bits_per_second(20, &policy) / .02 );
+ printf("Wideband\t%d\t\t\t%e\n", 320,
+- (double) mips * (320 * 8) /
++ (double) est * (320 * 8) /
+ srtp_bits_per_second(320, &policy) / .01 );
+ printf("Wideband\t%d\t\t\t%e\n", 640,
+- (double) mips * (640 * 8) /
++ (double) est * (640 * 8) /
+ srtp_bits_per_second(640, &policy) / .02 );
+ }
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb
new file mode 100644
index 000000000..ee8c68bc1
--- /dev/null
+++ b/meta-openembedded/meta-multimedia/recipes-support/libsrtp/libsrtp_1.5.2.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "library implementing Secure RTP (RFC 3711)"
+HOMEPAGE = "https://github.com/cisco/libsrtp"
+SECTION = "libs"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=15bc16b9d2e305974dde47e733883714"
+
+S = "${WORKDIR}/git"
+SRCREV = "e806a66bad35f4b215b7a825c24ef0ec4cc19569"
+SRC_URI = "git://github.com/cisco/libsrtp.git;protocol=https; \
+ file://0001-Rename-conflicting-variable-mips.patch \
+ "
+
+inherit autotools
+
+do_install[postfuncs] += " rm_unused_bindir "
+
+rm_unused_bindir() {
+ rmdir ${D}/${bindir}
+}
+
+ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-openembedded/meta-networking/COPYING.MIT b/meta-openembedded/meta-networking/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-networking/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-networking/MAINTAINERS b/meta-openembedded/meta-networking/MAINTAINERS
new file mode 100644
index 000000000..bbb2d1b5b
--- /dev/null
+++ b/meta-openembedded/meta-networking/MAINTAINERS
@@ -0,0 +1,35 @@
+This file contains a list of maintainers for the meta-networking layer.
+
+Please submit any patches against meta-networking to the OpenEmbedded
+development mailing list (openembedded-devel@lists.openembedded.org) with
+'[meta-networking]' in the subject.
+
+When sending single patches, please use something like:
+
+ git send-email -1 -M \
+ --to openembedded-devel@lists.openembedded.org \
+ --subject-prefix=meta-networking][PATCH
+
+You may also contact the maintainers directly.
+
+Descriptions of section entries:
+
+ M: Mail patches to: FullName <address@domain>
+ F: Files and directories with wildcard patterns.
+ A trailing slash includes all files and subdirectory files.
+ F: recipes-devtools/ all files in and below recipes-devtools
+ F: recipes-selinux/* all files in recipes-selinux, but not below
+ One pattern per line. Multiple F: lines acceptable.
+
+Please keep this list in alphabetical order.
+
+Maintainers List (try to look for most precise areas first)
+
+COMMON
+M: Joe MacDonald <joe_macdonald@mentor.com>
+F: conf
+F: recipes-*
+
+NETKIT
+M: Armin Kuster <akuster808@gmail.com>
+F: recipes-netkit
diff --git a/meta-openembedded/meta-networking/README b/meta-openembedded/meta-networking/README
new file mode 100644
index 000000000..e1ba27d83
--- /dev/null
+++ b/meta-openembedded/meta-networking/README
@@ -0,0 +1,40 @@
+meta-networking
+===============
+
+This layer is intended to be a central point for networking-related
+packages and configuration. It should be useful directly on top of
+oe-core and compliments meta-openembedded. It should be primarily useful
+to the following groups:
+
+ - Anyone building a small networking device (eg. a home router /
+ bridge / switch).
+
+ - Anyone wanting to add network services to their device (eg.
+ anything that might benefit from a small ftp/tftp server)
+
+Dependencies
+------------
+
+This layer depends on:
+
+URI: git://github.com/openembedded/openembedded-core.git
+branch: master
+revision: HEAD
+
+For some recipes, the meta-oe layer is required:
+
+URI: git://github.com/openembedded/meta-openembedded.git
+subdirectory: meta-oe
+branch: master
+revision: HEAD
+
+URI: git://github.com/openembedded/meta-openembedded.git
+subdirectory: meta-python
+branch: master
+revision: HEAD
+
+Maintenance
+-----------
+
+Please see the MAINTAINERS file for information on contacting the
+maintainers of this layer, as well as instructions for submitting patches.
diff --git a/meta-openembedded/meta-networking/classes/waf-samba.bbclass b/meta-openembedded/meta-networking/classes/waf-samba.bbclass
new file mode 100644
index 000000000..1632c3c60
--- /dev/null
+++ b/meta-openembedded/meta-networking/classes/waf-samba.bbclass
@@ -0,0 +1,119 @@
+# waf is a build system which is used by samba related project.
+# Obtain details from https://wiki.samba.org/index.php/Waf
+#
+inherit qemu pythonnative
+
+DEPENDS += "qemu-native libxslt-native docbook-xsl-stylesheets-native python"
+
+CONFIGUREOPTS = " --prefix=${prefix} \
+ --bindir=${bindir} \
+ --sbindir=${sbindir} \
+ --libexecdir=${libexecdir} \
+ --datadir=${datadir} \
+ --sysconfdir=${sysconfdir} \
+ --sharedstatedir=${sharedstatedir} \
+ --localstatedir=${localstatedir} \
+ --libdir=${libdir} \
+ --includedir=${includedir} \
+ --oldincludedir=${oldincludedir} \
+ --infodir=${infodir} \
+ --mandir=${mandir} \
+ ${PACKAGECONFIG_CONFARGS} \
+ "
+
+# avoids build breaks when using no-static-libs.inc
+DISABLE_STATIC = ""
+
+def get_waf_parallel_make(d):
+ pm = d.getVar('PARALLEL_MAKE')
+ if pm:
+ # look for '-j' and throw other options (e.g. '-l') away
+ # because they might have different meaning in bjam
+ pm = pm.split()
+ while pm:
+ opt = pm.pop(0)
+ if opt == '-j':
+ v = pm.pop(0)
+ elif opt.startswith('-j'):
+ v = opt[2:].strip()
+ else:
+ continue
+
+ v = min(64, int(v))
+ return '-j' + str(v)
+
+ return ""
+
+# Three methods for waf cross compile:
+# 1. answers:
+# Only --cross-answers - try the cross-answers file, and if
+# there's no corresponding answer, add to the file and mark
+# the configure process as unfinished.
+# 2. exec:
+# Only --cross-execute - get the answer from cross-execute,
+# an emulator (qemu) is used to run cross-compiled binaries.
+# 3. both:
+# (notes: not supported in lower version of some packages,
+# please check buildtools/wafsamba/samba_cross.py in the
+# package source)
+# Try the cross-answers file first, and if there is no
+# corresponding answer, use cross-execute to get an answer,
+# and add that answer to the file.
+#
+# The first one is preferred since it may fail with 2 or 3 if
+# the target board is not suported by qemu, but we can use 2 or 3
+# to help generate the cross answer when adding new board support.
+CROSS_METHOD ?= "answer"
+
+do_configure() {
+
+ # Prepare the cross-answers file
+ WAF_CROSS_ANSWERS_PATH="${THISDIR}/../../files/waf-cross-answers"
+ CROSS_ANSWERS="${B}/cross-answers-${TARGET_ARCH}.txt"
+ if [ -e ${CROSS_ANSWERS} ]; then
+ rm -f ${CROSS_ANSWERS}
+ fi
+ echo 'Checking uname machine type: "${TARGET_ARCH}"' >> ${CROSS_ANSWERS}
+ echo 'Checking uname release type: "${OLDEST_KERNEL}"' >> ${CROSS_ANSWERS}
+ cat ${WAF_CROSS_ANSWERS_PATH}/cross-answers-${TARGET_ARCH}.txt >> ${CROSS_ANSWERS}
+
+ qemu_binary="${@qemu_target_binary(d)}"
+ if [ "${qemu_binary}" = "qemu-allarch" ]; then
+ qemu_binary="qemuwrapper"
+ fi
+
+ libdir_qemu="${STAGING_DIR_HOST}/${libdir}"
+ base_libdir_qemu="${STAGING_DIR_HOST}/${base_libdir}"
+
+ CROSS_EXEC="${qemu_binary} \
+ ${QEMU_OPTIONS} \
+ -L ${STAGING_DIR_HOST} \
+ -E LD_LIBRARY_PATH=${libdir_qemu}:${base_libdir_qemu}"
+
+ export BUILD_ARCH=${BUILD_ARCH}
+ export HOST_ARCH=${HOST_ARCH}
+ export STAGING_LIBDIR=${STAGING_LIBDIR}
+ export STAGING_INCDIR=${STAGING_INCDIR}
+ export PYTHONPATH=${STAGING_DIR_HOST}${PYTHON_SITEPACKAGES_DIR}
+
+ CONFIG_CMD="./configure ${CONFIGUREOPTS} ${EXTRA_OECONF} --cross-compile"
+ if [ "${CROSS_METHOD}" = "answer" ]; then
+ ${CONFIG_CMD} --cross-answers="${CROSS_ANSWERS}"
+ elif [ "${CROSS_METHOD}" = "exec" ]; then
+ ${CONFIG_CMD} --cross-exec="${CROSS_EXEC}"
+ elif [ "${CROSS_METHOD}" = "both" ]; then
+ ${CONFIG_CMD} --cross-answers="${CROSS_ANSWERS}" --cross-exec="${CROSS_EXEC}"
+ else
+ echo "ERROR: ${CROSS_METHOD} is not valid for cross-compile!"
+ exit 1
+ fi
+}
+
+do_compile[progress] = "outof:^\[\s*(\d+)/\s*(\d+)\]\s+"
+do_compile () {
+ python ./buildtools/bin/waf ${@oe.utils.parallel_make_argument(d, '-j%d', limit=64)}
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+}
diff --git a/meta-openembedded/meta-networking/conf/layer.conf b/meta-openembedded/meta-networking/conf/layer.conf
new file mode 100644
index 000000000..e594b7b95
--- /dev/null
+++ b/meta-openembedded/meta-networking/conf/layer.conf
@@ -0,0 +1,26 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have a packages directory, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "networking-layer"
+BBFILE_PATTERN_networking-layer := "^${LAYERDIR}/"
+BBFILE_PRIORITY_networking-layer = "5"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_networking-layer = "1"
+
+LAYERDEPENDS_networking-layer = "core"
+LAYERDEPENDS_networking-layer += "openembedded-layer"
+LAYERDEPENDS_networking-layer += "meta-python"
+
+LAYERSERIES_COMPAT_networking-layer = "sumo"
+
+LICENSE_PATH += "${LAYERDIR}/licenses"
+
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
+ wireguard-tools->wireguard-module \
+"
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/README b/meta-openembedded/meta-networking/files/waf-cross-answers/README
new file mode 100644
index 000000000..dda45c508
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/README
@@ -0,0 +1,3 @@
+The files in this directory are cross answers files
+used by waf-samba.bbclass, please see waf-samba.bbclass
+for details about how they are used.
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64.txt
new file mode 100644
index 000000000..1023f6aff
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64.txt
@@ -0,0 +1,39 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: OK
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64_be.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64_be.txt
new file mode 100644
index 000000000..1023f6aff
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-aarch64_be.txt
@@ -0,0 +1,39 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: OK
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-arm.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-arm.txt
new file mode 100644
index 000000000..a5cd9981a
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-arm.txt
@@ -0,0 +1,40 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: NO
+Checking for -D_FILE_OFFSET_BITS=64: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials with 32-bit system calls: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: NO
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i586.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i586.txt
new file mode 100644
index 000000000..a5cd9981a
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i586.txt
@@ -0,0 +1,40 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: NO
+Checking for -D_FILE_OFFSET_BITS=64: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials with 32-bit system calls: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: NO
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i686.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i686.txt
new file mode 100644
index 000000000..a5cd9981a
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-i686.txt
@@ -0,0 +1,40 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: NO
+Checking for -D_FILE_OFFSET_BITS=64: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials with 32-bit system calls: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: NO
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips.txt
new file mode 100644
index 000000000..3e239e727
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips.txt
@@ -0,0 +1,40 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: NO
+Checking for -D_FILE_OFFSET_BITS=64: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "128"
+Checking value of _NSIG: "128"
+Checking value of SIGRTMAX: "127"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: NO
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips64.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips64.txt
new file mode 100644
index 000000000..82e694fda
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mips64.txt
@@ -0,0 +1,39 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: OK
+Checking for HAVE_INCOHERENT_MMAP: OK
+Checking value of NSIG: "128"
+Checking value of _NSIG: "128"
+Checking value of SIGRTMAX: "127"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: OK
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mipsel.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mipsel.txt
new file mode 100644
index 000000000..3e239e727
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-mipsel.txt
@@ -0,0 +1,40 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: NO
+Checking for -D_FILE_OFFSET_BITS=64: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "128"
+Checking value of _NSIG: "128"
+Checking value of SIGRTMAX: "127"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: NO
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc.txt
new file mode 100644
index 000000000..27b9378a4
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc.txt
@@ -0,0 +1,40 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: NO
+Checking for -D_FILE_OFFSET_BITS=64: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: NO
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc64.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc64.txt
new file mode 100644
index 000000000..7fd3092cb
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-powerpc64.txt
@@ -0,0 +1,40 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: (255, "")
+Checking if can we convert from IBM850 to UCS-2LE: (255, "")
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: OK
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-riscv64.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-riscv64.txt
new file mode 100644
index 000000000..1023f6aff
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-riscv64.txt
@@ -0,0 +1,39 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: OK
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-x86_64.txt b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-x86_64.txt
new file mode 100644
index 000000000..1023f6aff
--- /dev/null
+++ b/meta-openembedded/meta-networking/files/waf-cross-answers/cross-answers-x86_64.txt
@@ -0,0 +1,39 @@
+Checking uname sysname type: "Linux"
+Checking uname version type: "# Wed May 20 10:34:39 UTC 2015"
+Checking simple C program: "hello world"
+rpath library support: OK
+-Wl,--version-script support: OK
+Checking getconf LFS_CFLAGS: NO
+Checking correct behavior of strtoll: NO
+Checking for working strptime: OK
+Checking for C99 vsnprintf: "1"
+Checking for HAVE_SHARED_MMAP: OK
+Checking for HAVE_MREMAP: OK
+Checking for HAVE_SECURE_MKSTEMP: OK
+Checking for HAVE_IFACE_GETIFADDRS: NO
+Checking for HAVE_IFACE_IFCONF: NO
+Checking for HAVE_IFACE_IFREQ: NO
+Checking for large file support without additional flags: OK
+Checking for HAVE_INCOHERENT_MMAP: NO
+Checking value of NSIG: "65"
+Checking value of _NSIG: "65"
+Checking value of SIGRTMAX: "64"
+Checking value of SIGRTMIN: "34"
+Checking whether the WRFILE -keytab is supported: OK
+Checking for kernel change notify support: OK
+Checking for Linux kernel oplocks: OK
+Checking for kernel share modes: OK
+Checking whether POSIX capabilities are available: OK
+Checking if can we convert from CP850 to UCS-2LE: OK
+Checking if can we convert from UTF-8 to UCS-2LE: OK
+vfs_fileid checking for statfs() and struct statfs.f_fsid: OK
+Checking whether we can use Linux thread-specific credentials: OK
+Checking whether fcntl locking is available: OK
+Checking for the maximum value of the 'time_t' type: OK
+Checking whether the realpath function allows a NULL argument: OK
+Checking for ftruncate extend: OK
+getcwd takes a NULL argument: OK
+Checking for small off_t: NO
+Checking whether blkcnt_t is 32 bit: NO
+Checking whether blkcnt_t is 64 bit: OK
+Checking whether fcntl lock supports open file description locks: OK
diff --git a/meta-openembedded/meta-networking/licenses/DMTF b/meta-openembedded/meta-networking/licenses/DMTF
new file mode 100644
index 000000000..54a28120e
--- /dev/null
+++ b/meta-openembedded/meta-networking/licenses/DMTF
@@ -0,0 +1,34 @@
+// Copyright 1998-2008 Distributed Management Task Force, Inc. (DMTF).
+// All rights reserved.
+// DMTF is a not-for-profit association of industry members dedicated
+// to promoting enterprise and systems management and interoperability.
+// DMTF specifications and documents may be reproduced by
+// members and non-members, provided that correct attribution is given.
+// As DMTF specifications may be revised from time to time,
+// the particular version and release date should always be noted.
+//
+// Implementation of certain elements of this standard or proposed
+// standard may be subject to third party patent rights, including
+// provisional patent rights (herein "patent rights"). DMTF makes
+// no representations to users of the standard as to the existence
+// of such rights, and is not responsible to recognize, disclose, or
+// identify any or all such third party patent right, owners or
+// claimants, nor for any incomplete or inaccurate identification or
+// disclosure of such rights, owners or claimants. DMTF shall have no
+// liability to any party, in any manner or circumstance, under any
+// legal theory whatsoever, for failure to recognize, disclose, or
+// identify any such third party patent rights, or for such party's
+// reliance on the standard or incorporation thereof in its product,
+// protocols or testing procedures. DMTF shall have no liability to
+// any party implementing such standard, whether such implementation
+// is foreseeable or not, nor to any patent owner or claimant, and shall
+// have no liability or responsibility for costs or losses incurred if
+// a standard is withdrawn or modified after publication, and shall be
+// indemnified and held harmless by any party implementing the
+// standard from any and all claims of infringement by a patent owner
+// for such implementations.
+//
+// For information about patents held by third-parties which have
+// notified the DMTF that, in their opinion, such patent may relate to
+// or impact implementations of DMTF standards, visit
+// http://www.dmtf.org/about/policies/disclosures.php.
diff --git a/meta-openembedded/meta-networking/licenses/copyleft-next-0.3.0 b/meta-openembedded/meta-networking/licenses/copyleft-next-0.3.0
new file mode 100644
index 000000000..a66d5bf5e
--- /dev/null
+++ b/meta-openembedded/meta-networking/licenses/copyleft-next-0.3.0
@@ -0,0 +1,219 @@
+ copyleft-next 0.3.0 ("this License")
+ Release date: 2013-05-16
+
+1. License Grants; No Trademark License
+
+ Subject to the terms of this License, I grant You:
+
+ a) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
+ copyright license, to reproduce, Distribute, prepare derivative works
+ of, publicly perform and publicly display My Work.
+
+ b) A non-exclusive, worldwide, perpetual, royalty-free, irrevocable
+ patent license under Licensed Patents to make, have made, use, sell,
+ offer for sale, and import Covered Works.
+
+ This License does not grant any rights in My name, trademarks, service
+ marks, or logos.
+
+2. Distribution: General Conditions
+
+ You may Distribute Covered Works, provided that You (i) inform
+ recipients how they can obtain a copy of this License; (ii) satisfy the
+ applicable conditions of sections 3 through 6; and (iii) preserve all
+ Legal Notices contained in My Work (to the extent they remain
+ pertinent). "Legal Notices" means copyright notices, license notices,
+ license texts, and author attributions, but does not include logos,
+ other graphical images, trademarks or trademark legends.
+
+3. Conditions for Distributing Derived Works; Outbound GPL Compatibility
+
+ If You Distribute a Derived Work, You must license the entire Derived
+ Work as a whole under this License, with prominent notice of such
+ licensing. This condition may not be avoided through such means as
+ separate Distribution of portions of the Derived Work. You may
+ additionally license the Derived Work under the GPL, so that the
+ recipient may further Distribute the Derived Work under either this
+ License or the GPL.
+
+4. Condition Against Further Restrictions; Inbound License Compatibility
+
+ When Distributing a Covered Work, You may not impose further
+ restrictions on the exercise of rights in the Covered Work granted under
+ this License. This condition is not excused merely because such
+ restrictions result from Your compliance with conditions or obligations
+ extrinsic to this License (such as a court order or an agreement with a
+ third party).
+
+ However, You may Distribute a Covered Work incorporating material
+ governed by a license that is both OSI-Approved and FSF-Free as of the
+ release date of this License, provided that Your Distribution complies
+ with such other license.
+
+5. Conditions for Distributing Object Code
+
+ You may Distribute an Object Code form of a Covered Work, provided that
+ you accompany the Object Code with a URL through which the Corresponding
+ Source is made available, at no charge, by some standard or customary
+ means of providing network access to source code.
+
+ If you Distribute the Object Code in a physical product or tangible
+ storage medium ("Product"), the Corresponding Source must be available
+ through such URL for two years from the date of Your most recent
+ Distribution of the Object Code in the Product. However, if the Product
+ itself contains or is accompanied by the Corresponding Source (made
+ available in a customarily accessible manner), You need not also comply
+ with the first paragraph of this section.
+
+ Each recipient of the Covered Work from You is an intended third-party
+ beneficiary of this License solely as to this section 5, with the right
+ to enforce its terms.
+
+6. Symmetrical Licensing Condition for Upstream Contributions
+
+ If You Distribute a work to Me specifically for inclusion in or
+ modification of a Covered Work (a "Patch"), and no explicit licensing
+ terms apply to the Patch, You license the Patch under this License, to
+ the extent of Your copyright in the Patch. This condition does not
+ negate the other conditions of this License, if applicable to the Patch.
+
+7. Nullification of Copyleft/Proprietary Dual Licensing
+
+ If I offer to license, for a fee, a Covered Work under terms other than
+ a license that is OSI-Approved or FSF-Free as of the release date of this
+ License or a numbered version of copyleft-next released by the
+ Copyleft-Next Project, then the license I grant You under section 1 is no
+ longer subject to the conditions in sections 2 through 5.
+
+8. Copyleft Sunset
+
+ The conditions in sections 2 through 5 no longer apply once fifteen
+ years have elapsed from the date of My first Distribution of My Work
+ under this License.
+
+9. Pass-Through
+
+ When You Distribute a Covered Work, the recipient automatically receives
+ a license to My Work from Me, subject to the terms of this License.
+
+10. Termination
+
+ Your license grants under section 1 are automatically terminated if You
+
+ a) fail to comply with the conditions of this License, unless You cure
+ such noncompliance within thirty days after becoming aware of it, or
+
+ b) initiate a patent infringement litigation claim (excluding
+ declaratory judgment actions, counterclaims, and cross-claims)
+ alleging that any part of My Work directly or indirectly infringes
+ any patent.
+
+ Termination of Your license grants extends to all copies of Covered
+ Works You subsequently obtain. Termination does not terminate the
+ rights of those who have received copies or rights from You subject to
+ this License.
+
+ To the extent permission to make copies of a Covered Work is necessary
+ merely for running it, such permission is not terminable.
+
+11. Later License Versions
+
+ The Copyleft-Next Project may release new versions of copyleft-next,
+ designated by a distinguishing version number ("Later Versions").
+ Unless I explicitly remove the option of Distributing Covered Works
+ under Later Versions, You may Distribute Covered Works under any Later
+ Version.
+
+** 12. No Warranty **
+** **
+** My Work is provided "as-is", without warranty. You bear the risk **
+** of using it. To the extent permitted by applicable law, each **
+** Distributor of My Work excludes the implied warranties of title, **
+** merchantability, fitness for a particular purpose and **
+** non-infringement. **
+
+** 13. Limitation of Liability **
+** **
+** To the extent permitted by applicable law, in no event will any **
+** Distributor of My Work be liable to You for any damages **
+** whatsoever, whether direct, indirect, special, incidental, or **
+** consequential damages, whether arising under contract, tort **
+** (including negligence), or otherwise, even where the Distributor **
+** knew or should have known about the possibility of such damages. **
+
+14. Severability
+
+ The invalidity or unenforceability of any provision of this License
+ does not affect the validity or enforceability of the remainder of
+ this License. Such provision is to be reformed to the minimum extent
+ necessary to make it valid and enforceable.
+
+15. Definitions
+
+ "Copyleft-Next Project" means the project that maintains the source
+ code repository at <https://gitorious.org/copyleft-next/> as of the
+ release date of this License.
+
+ "Corresponding Source" of a Covered Work in Object Code form means (i)
+ the Source Code form of the Covered Work; (ii) all scripts,
+ instructions and similar information that are reasonably necessary for
+ a skilled developer to generate such Object Code from the Source Code
+ provided under (i); and (iii) a list clearly identifying all Separate
+ Works (other than those provided in compliance with (ii)) that were
+ specifically used in building and (if applicable) installing the
+ Covered Work (for example, a specified proprietary compiler including
+ its version number). Corresponding Source must be machine-readable.
+
+ "Covered Work" means My Work or a Derived Work.
+
+ "Derived Work" means a work of authorship that copies from, modifies,
+ adapts, is based on, is a derivative work of, transforms, translates or
+ contains all or part of My Work, such that copyright permission is
+ required. The following are not Derived Works: (i) Mere Aggregation;
+ (ii) a mere reproduction of My Work; and (iii) if My Work fails to
+ explicitly state an expectation otherwise, a work that merely makes
+ reference to My Work.
+
+ "Distribute" means to distribute, transfer or make a copy available to
+ someone else, such that copyright permission is required.
+
+ "Distributor" means Me and anyone else who Distributes a Covered Work.
+
+ "FSF-Free" means classified as 'free' by the Free Software Foundation.
+
+ "GPL" means a version of the GNU General Public License or the GNU
+ Affero General Public License.
+
+ "I"/"Me"/"My" refers to the individual or legal entity that places My
+ Work under this License. "You"/"Your" refers to the individual or legal
+ entity exercising rights in My Work under this License. A legal entity
+ includes each entity that controls, is controlled by, or is under
+ common control with such legal entity. "Control" means (a) the power to
+ direct the actions of such legal entity, whether by contract or
+ otherwise, or (b) ownership of more than fifty percent of the
+ outstanding shares or beneficial ownership of such legal entity.
+
+ "Licensed Patents" means all patent claims licensable royalty-free by
+ Me, now or in the future, that are necessarily infringed by making,
+ using, or selling My Work, and excludes claims that would be infringed
+ only as a consequence of further modification of My Work.
+
+ "Mere Aggregation" means an aggregation of a Covered Work with a
+ Separate Work.
+
+ "My Work" means the particular work of authorship I license to You
+ under this License.
+
+ "Object Code" means any form of a work that is not Source Code.
+
+ "OSI-Approved" means approved as 'Open Source' by the Open Source
+ Initiative.
+
+ "Separate Work" means a work that is separate from and independent of a
+ particular Covered Work and is not by its nature an extension or
+ enhancement of the Covered Work, and/or a runtime library, standard
+ library or similar component that is used to generate an Object Code
+ form of a Covered Work.
+
+ "Source Code" means the preferred form of a work for making
+ modifications to it.
diff --git a/meta-openembedded/meta-networking/licenses/netperf b/meta-openembedded/meta-networking/licenses/netperf
new file mode 100644
index 000000000..3f3ceb2fc
--- /dev/null
+++ b/meta-openembedded/meta-networking/licenses/netperf
@@ -0,0 +1,43 @@
+
+
+ Copyright (C) 1993 Hewlett-Packard Company
+ ALL RIGHTS RESERVED.
+
+ The enclosed software and documentation includes copyrighted works
+ of Hewlett-Packard Co. For as long as you comply with the following
+ limitations, you are hereby authorized to (i) use, reproduce, and
+ modify the software and documentation, and to (ii) distribute the
+ software and documentation, including modifications, for
+ non-commercial purposes only.
+
+ 1. The enclosed software and documentation is made available at no
+ charge in order to advance the general development of
+ high-performance networking products.
+
+ 2. You may not delete any copyright notices contained in the
+ software or documentation. All hard copies, and copies in
+ source code or object code form, of the software or
+ documentation (including modifications) must contain at least
+ one of the copyright notices.
+
+ 3. The enclosed software and documentation has not been subjected
+ to testing and quality control and is not a Hewlett-Packard Co.
+ product. At a future time, Hewlett-Packard Co. may or may not
+ offer a version of the software and documentation as a product.
+
+ 4. THE SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS".
+ HEWLETT-PACKARD COMPANY DOES NOT WARRANT THAT THE USE,
+ REPRODUCTION, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR
+ DOCUMENTATION WILL NOT INFRINGE A THIRD PARTY'S INTELLECTUAL
+ PROPERTY RIGHTS. HP DOES NOT WARRANT THAT THE SOFTWARE OR
+ DOCUMENTATION IS ERROR FREE. HP DISCLAIMS ALL WARRANTIES,
+ EXPRESS AND IMPLIED, WITH REGARD TO THE SOFTWARE AND THE
+ DOCUMENTATION. HP SPECIFICALLY DISCLAIMS ALL WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ 5. HEWLETT-PACKARD COMPANY WILL NOT IN ANY EVENT BE LIABLE FOR ANY
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ (INCLUDING LOST PROFITS) RELATED TO ANY USE, REPRODUCTION,
+ MODIFICATION, OR DISTRIBUTION OF THE SOFTWARE OR DOCUMENTATION.
+
+
diff --git a/meta-openembedded/meta-networking/licenses/radvd b/meta-openembedded/meta-networking/licenses/radvd
new file mode 100644
index 000000000..03db0b6ce
--- /dev/null
+++ b/meta-openembedded/meta-networking/licenses/radvd
@@ -0,0 +1,37 @@
+The author(s) grant permission for redistribution and use in source and
+binary forms, with or without modification, of the software and documentation
+provided that the following conditions are met:
+
+0. If you receive a version of the software that is specifically labelled
+ as not being for redistribution (check the version message and/or README),
+ you are not permitted to redistribute that version of the software in any
+ way or form.
+1. All terms of all other applicable copyrights and licenses must be
+ followed.
+2. Redistributions of source code must retain the authors' copyright
+ notice(s), this list of conditions, and the following disclaimer.
+3. Redistributions in binary form must reproduce the authors' copyright
+ notice(s), this list of conditions, and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+4. All advertising materials mentioning features or use of this software
+ must display the following acknowledgement with the name(s) of the
+ authors as specified in the copyright notice(s) substituted where
+ indicated:
+
+ This product includes software developed by the authors which are
+ mentioned at the start of the source files and other contributors.
+
+5. Neither the name(s) of the author(s) 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 ITS AUTHORS 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 AUTHORS 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.
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/0001-Makefile-respect-LDFLAGS-for-libreg.patch b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/0001-Makefile-respect-LDFLAGS-for-libreg.patch
new file mode 100644
index 000000000..16800d506
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/0001-Makefile-respect-LDFLAGS-for-libreg.patch
@@ -0,0 +1,29 @@
+From 1e1a78b7b4fa1662b4447aa19c15b1e839b7e9db Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Stefan=20M=C3=BCller-Klieser?= <s.mueller-klieser@phytec.de>
+Date: Wed, 24 Aug 2016 10:58:45 +0200
+Subject: [PATCH] Makefile: respect LDFLAGS for libreg
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Signed-off-by: Stefan Müller-Klieser <s.mueller-klieser@phytec.de>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 2879896..1650db8 100644
+--- a/Makefile
++++ b/Makefile
+@@ -116,7 +116,7 @@ keys-%.c: utils/key2pub.py $(wildcard $(PUBKEY_DIR)/*.pem)
+
+ $(LIBREG): regdb.h reglib.h reglib.c
+ $(NQ) ' CC ' $@
+- $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -shared -Wl,-soname,$(LIBREG) $^ $(LIBREGLDLIBS)
++ $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -shared -Wl,-soname,$(LIBREG) $^ $(LDFLAGS) $(LIBREGLDLIBS)
+
+ install-libreg-headers:
+ $(NQ) ' INSTALL libreg-headers'
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/do-not-run-ldconfig-if-destdir-is-set.patch b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/do-not-run-ldconfig-if-destdir-is-set.patch
new file mode 100644
index 000000000..3ef35ee54
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/do-not-run-ldconfig-if-destdir-is-set.patch
@@ -0,0 +1,21 @@
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 23 Aug 2014 12:27:34 -0700
+Subject: crda: Do not run ldconfig if DESTDIR is set
+
+Upstream-Status: Backport [http://www.spinics.net/lists/linux-wireless/msg126028.html]
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+
+--- a/Makefile
++++ b/Makefile
+@@ -132,7 +132,9 @@ install-libreg:
+ $(NQ) ' INSTALL libreg'
+ $(Q)mkdir -p $(DESTDIR)/$(LIBDIR)
+ $(Q)cp $(LIBREG) $(DESTDIR)/$(LIBDIR)/
++ifndef DESTDIR
+ $(Q)ldconfig
++endif
+
+ %.o: %.c regdb.h $(LIBREG)
+ $(NQ) ' CC ' $@
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-gcc-6-unused-variables.patch b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-gcc-6-unused-variables.patch
new file mode 100644
index 000000000..747804d34
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-gcc-6-unused-variables.patch
@@ -0,0 +1,11 @@
+--- crda-3.18/utils/key2pub.py.orig 2016-06-18 09:54:23.671326113 -0400
++++ crda-3.18/utils/key2pub.py 2016-06-18 09:54:34.387326300 -0400
+@@ -115,7 +115,7 @@
+ .n = _n, .len_n = sizeof(_n), \
+ }
+
+-static const struct key_params keys[] = {
++static const struct key_params keys[] __attribute__((unused))= {
+ ''')
+ for n in xrange(n + 1):
+ output.write(' KEYS(e_%d, n_%d),\n' % (n, n))
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-issues-when-USE_OPENSSL-1.patch b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-issues-when-USE_OPENSSL-1.patch
new file mode 100644
index 000000000..1bb5c638f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-issues-when-USE_OPENSSL-1.patch
@@ -0,0 +1,58 @@
+From 8d2164a090f17286ea8291f30a123595cf447dc3 Mon Sep 17 00:00:00 2001
+From: Haiqing Bai <Haiqing.Bai@windriver.com>
+Date: Wed, 30 Nov 2016 10:27:36 +0800
+Subject: [PATCH] crda: fix issues when 'USE_OPENSSL=1'.
+
+Fxed the below issues if configured with 'USE_OPENSSL=1':
+a. keys-ssl.c uses BN_ULONG but doesn't include the openssl headers leading
+ to build failures:
+ keys-ssl.c:2:8: error: unknown type name 'BN_ULONG'
+ static BN_ULONG e_0[1] = {
+
+b. The large unqualified constants also break building:
+ keys-ssl.c:8:2: warning: overflow in implicit constant conversion [-Woverflow]
+ 0x63a2705416a0d8e1, 0xdc9fca11c8ba757b,
+
+c. keys-ssl.c: error: 'keys' defined but not used [-Werror=unused-variable]
+ static struct pubkey keys[] = {
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+Upstream-Status: Pending
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ utils/key2pub.py | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/utils/key2pub.py b/utils/key2pub.py
+index 401d58a..3ae00b8 100755
+--- a/utils/key2pub.py
++++ b/utils/key2pub.py
+@@ -24,7 +24,7 @@ def print_ssl_64(output, name, val):
+ for v1, v2, v3, v4, v5, v6, v7, v8 in vnew:
+ if not idx:
+ output.write('\t')
+- output.write('0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x, ' % (ord(v1), ord(v2), ord(v3), ord(v4), ord(v5), ord(v6), ord(v7), ord(v8)))
++ output.write('0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2xULL, ' % (ord(v1), ord(v2), ord(v3), ord(v4), ord(v5), ord(v6), ord(v7), ord(v8)))
+ idx += 1
+ if idx == 2:
+ idx = 0
+@@ -60,6 +60,7 @@ def print_ssl_32(output, name, val):
+ def print_ssl(output, name, val):
+ import os
+ output.write('#include <stdint.h>\n')
++ output.write('#include <openssl/bn.h>\n')
+ if os.getenv('TARGET_BITS') == '64':
+ return print_ssl_64(output, name, val)
+ else:
+@@ -78,7 +79,7 @@ struct pubkey {
+
+ #define KEYS(e,n) { KEY(e), KEY(n), }
+
+-static struct pubkey keys[] = {
++static struct pubkey keys[] __attribute__((unused))= {
+ ''')
+ for n in xrange(n + 1):
+ output.write(' KEYS(e_%d, n_%d),\n' % (n, n))
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-linking-of-libraries-used-by-reglib.patch b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-linking-of-libraries-used-by-reglib.patch
new file mode 100644
index 000000000..812e98379
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/fix-linking-of-libraries-used-by-reglib.patch
@@ -0,0 +1,57 @@
+From 890f5bf2654b695a866262d72bfa9750af921a3b Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <ben@decadent.org.uk>
+Date: Sat, 23 Aug 2014 12:26:37 -0700
+Subject: [PATCH] Fix linking of libraries used by libreg
+
+The math and crypto libraries are called by and need to be linked to
+libreg.so, not to the executables.
+
+Upstream-Status: Backport [http://www.spinics.net/lists/linux-wireless/msg126027.html]
+
+Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ Makefile | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index a3ead30..da2dcc3 100644
+--- a/Makefile
++++ b/Makefile
+@@ -30,7 +30,7 @@ CFLAGS += -std=gnu99 -Wall -Werror -pedantic
+ CFLAGS += -Wall -g
+ LDLIBREG += -lreg
+ LDLIBS += $(LDLIBREG)
+-LDLIBS += -lm
++LIBREGLDLIBS += -lm
+ LIBREG += libreg.so
+ LDFLAGS += -L ./
+
+@@ -40,13 +40,13 @@ all_noverify: $(LIBREG) crda intersect regdbdump db2rd optimize
+
+ ifeq ($(USE_OPENSSL),1)
+ CFLAGS += -DUSE_OPENSSL -DPUBKEY_DIR=\"$(RUNTIME_PUBKEY_DIR)\" `pkg-config --cflags openssl`
+-LDLIBS += `pkg-config --libs openssl`
++LIBREGLDLIBS += `pkg-config --libs openssl`
+
+ $(LIBREG): keys-ssl.c
+
+ else
+ CFLAGS += -DUSE_GCRYPT
+-LDLIBS += -lgcrypt
++LIBREGLDLIBS += -lgcrypt
+
+ $(LIBREG): keys-gcrypt.c
+
+@@ -116,7 +116,7 @@ keys-%.c: utils/key2pub.py $(wildcard $(PUBKEY_DIR)/*.pem)
+
+ $(LIBREG): regdb.h reglib.h reglib.c
+ $(NQ) ' CC ' $@
+- $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -shared -Wl,-soname,$(LIBREG) $^
++ $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -shared -Wl,-soname,$(LIBREG) $^ $(LIBREGLDLIBS)
+
+ install-libreg-headers:
+ $(NQ) ' INSTALL libreg-headers'
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/make.patch b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/make.patch
new file mode 100644
index 000000000..0b737852c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/make.patch
@@ -0,0 +1,25 @@
+These headers are not related to any Make rule but they do appear in
+compiling of libreg.so, specifying .h files in compiler cmdline is flagged
+as error by clang
+
+| clang-4.0: error: cannot specify -o when generating multiple output files
+| make: *** [libreg.so] Error 1
+
+This is how we see headers in cmdline
+-O2 -fpic -std=gnu
+99 -Wall -Werror -pedantic -Wall -g -DUSE_GCRYPT -DCONFIG_LIBNL30 `pkg-config --cflags libnl-3.0` -o libreg.so -shared -Wl,-soname,libreg.so
+regdb.h reglib.h reglib.c keys-gcrypt.c -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -L ./ -lm -lgcrypt
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- a/Makefile.kk 2016-11-15 04:54:53.338670000 +0000
++++ a/Makefile 2016-11-15 04:55:07.718670000 +0000
+@@ -114,7 +114,7 @@ keys-%.c: utils/key2pub.py $(wildcard $(
+ $(NQ) ' Trusted pubkeys:' $(wildcard $(PUBKEY_DIR)/*.pem)
+ $(Q)./utils/key2pub.py --$* $(wildcard $(PUBKEY_DIR)/*.pem) $@
+
+-$(LIBREG): regdb.h reglib.h reglib.c
++$(LIBREG): reglib.c
+ $(NQ) ' CC ' $@
+ $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -shared -Wl,-soname,$(LIBREG) $^ $(LDFLAGS) $(LIBREGLDLIBS)
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/use-target-word-size-instead-of-host-s.patch b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/use-target-word-size-instead-of-host-s.patch
new file mode 100644
index 000000000..100b765f2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda/use-target-word-size-instead-of-host-s.patch
@@ -0,0 +1,34 @@
+From c1c42513edd27c97341f2033af77c13a4724eb8f Mon Sep 17 00:00:00 2001
+From: Haiqing Bai <Haiqing.Bai@windriver.com>
+Date: Fri, 25 Nov 2016 16:48:01 +0800
+Subject: [PATCH] crda: Use target word size instead of host's.
+
+In key2pub.py, the codes check the wordsize
+of the host machine but not the target's, this fix
+fetches the wordsize of target from the build system.
+
+Upstream-Status: Pending
+Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
+---
+ utils/key2pub.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/utils/key2pub.py b/utils/key2pub.py
+index 3e84cd2..401d58a 100755
+--- a/utils/key2pub.py
++++ b/utils/key2pub.py
+@@ -58,9 +58,9 @@ def print_ssl_32(output, name, val):
+ output.write('};\n\n')
+
+ def print_ssl(output, name, val):
+- import struct
++ import os
+ output.write('#include <stdint.h>\n')
+- if len(struct.pack('@L', 0)) == 8:
++ if os.getenv('TARGET_BITS') == '64':
+ return print_ssl_64(output, name, val)
+ else:
+ return print_ssl_32(output, name, val)
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/crda/crda_3.18.bb b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda_3.18.bb
new file mode 100644
index 000000000..82a297b33
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/crda/crda_3.18.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Wireless Central Regulatory Domain Agent"
+HOMEPAGE = "http://wireless.kernel.org/en/developers/Regulatory/CRDA"
+SECTION = "net"
+LICENSE = "copyleft-next-0.3.0"
+LIC_FILES_CHKSUM = "file://copyleft-next-0.3.0;md5=8743a2c359037d4d329a31e79eabeffe"
+
+DEPENDS = "python-m2crypto-native python-typing-native python-native libgcrypt libnl openssl"
+
+SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz \
+ file://do-not-run-ldconfig-if-destdir-is-set.patch \
+ file://fix-linking-of-libraries-used-by-reglib.patch \
+ file://fix-gcc-6-unused-variables.patch \
+ file://0001-Makefile-respect-LDFLAGS-for-libreg.patch \
+ file://make.patch \
+ file://use-target-word-size-instead-of-host-s.patch \
+ file://fix-issues-when-USE_OPENSSL-1.patch \
+"
+SRC_URI[md5sum] = "0431fef3067bf503dfb464069f06163a"
+SRC_URI[sha256sum] = "43fcb9679f8b75ed87ad10944a506292def13e4afb194afa7aa921b01e8ecdbf"
+
+inherit python-dir pythonnative
+# Recursive make problem
+EXTRA_OEMAKE = "MAKEFLAGS= DESTDIR=${D} LIBDIR=${libdir}/crda LDLIBREG='-Wl,-rpath,${libdir}/crda -lreg'"
+EXTRA_OEMAKE_append = " USE_OPENSSL=1"
+TARGET_BITS = "${SITEINFO_BITS}"
+export TARGET_BITS
+
+do_compile() {
+ oe_runmake all_noverify
+}
+
+do_install() {
+ oe_runmake SBINDIR=${sbindir}/ install
+}
+
+RDEPENDS_${PN} = "udev wireless-regdb"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/daq/daq_2.0.6.bb b/meta-openembedded/meta-networking/recipes-connectivity/daq/daq_2.0.6.bb
new file mode 100644
index 000000000..ec35175a0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/daq/daq_2.0.6.bb
@@ -0,0 +1,35 @@
+SUMMARY = "The dump DAQ test the various inline mode features "
+HOMEPAGE = "http://www.snort.org"
+SECTION = "libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f9ce51a65dd738dc1ae631d8b21c40e0"
+
+PARALLEL_MAKE = ""
+
+DEPENDS = "libpcap libpcre libdnet"
+
+SRC_URI = "http://fossies.org/linux/misc/daq-${PV}.tar.gz \
+ file://disable-run-test-program-while-cross-compiling.patch \
+ file://0001-correct-the-location-of-unistd.h.patch \
+ "
+
+# these 2 create undeclared dependency on libdnet and libnetfilter-queue from meta-networking
+# this error from test-dependencies script:
+# daq/daq/latest lost dependency on libdnet libmnl libnetfilter-queue libnfnetlink
+#
+# never look to /usr/local lib while cross compiling
+
+EXTRA_OECONF = "--disable-nfq-module --disable-ipq-module --includedir=${includedir} \
+ --with-libpcap-includes=${STAGING_INCDIR} --with-dnet-includes=${STAGING_LIBDIR}"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+SRC_URI[md5sum] = "2cd6da422a72c129c685fc4bb848c24c"
+SRC_URI[sha256sum] = "b40e1d1273e08aaeaa86e69d4f28d535b7e53bdb3898adf539266b63137be7cb"
+
+inherit autotools
+
+DISABLE_STATIC = ""
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/daq/files/0001-correct-the-location-of-unistd.h.patch b/meta-openembedded/meta-networking/recipes-connectivity/daq/files/0001-correct-the-location-of-unistd.h.patch
new file mode 100644
index 000000000..4798a77f5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/daq/files/0001-correct-the-location-of-unistd.h.patch
@@ -0,0 +1,29 @@
+From 10e7d4e4bfcb70344d18f0d4ce36068475747f25 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 15:59:43 -0700
+Subject: [PATCH] correct the location of unistd.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ os-daq-modules/daq_ipfw.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/os-daq-modules/daq_ipfw.c b/os-daq-modules/daq_ipfw.c
+index 016beb0..c2a4175 100644
+--- a/os-daq-modules/daq_ipfw.c
++++ b/os-daq-modules/daq_ipfw.c
+@@ -23,10 +23,10 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <stdio.h>
++#include <unistd.h>
+
+ #include <sys/types.h>
+ #include <sys/time.h>
+-#include <sys/unistd.h>
+
+ #include <netinet/in.h>
+ #include <sys/socket.h>
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/daq/files/disable-run-test-program-while-cross-compiling.patch b/meta-openembedded/meta-networking/recipes-connectivity/daq/files/disable-run-test-program-while-cross-compiling.patch
new file mode 100644
index 000000000..a100b7cb8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/daq/files/disable-run-test-program-while-cross-compiling.patch
@@ -0,0 +1,31 @@
+Upstream-Status:Inappropriate [embedded specific]
+
+fix the below error:
+configure: error: cannot run test program while cross compiling
+
+Signed-off-by: Chunrong Guo <B40290@freescale.com>
+
+--- a/m4/sf.m4old 2015-10-28 10:21:20.270557986 +0800
++++ a/m4/sf.m4 2015-10-28 10:23:22.726551974 +0800
+@@ -135,20 +135,7 @@
+ echo
+ exit 1
+ fi
+- AC_CACHE_CHECK([for libpcap version >= $1], [daq_cv_libpcap_version_1x], [
+- AC_RUN_IFELSE(
+- [AC_LANG_PROGRAM(
+- [[
+- #include <pcap.h>
+- #include <string.h>
+- extern char pcap_version[];
+- ]],
+- [[
+- if (strcmp(pcap_version, $1) < 0)
+- return 1;
+- ]])],
+- [daq_cv_libpcap_version_1x="yes"],
+- [daq_cv_libpcap_version_1x="no"])])
++ AC_CACHE_CHECK([for libpcap version >= $1], [daq_cv_libpcap_version_1x])
+ if test "x$daq_cv_libpcap_version_1x" = "xno"; then
+ echo
+ echo " ERROR! Libpcap library version >= $1 not found."
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/dhcpcd_6.11.5.bb b/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/dhcpcd_6.11.5.bb
new file mode 100644
index 000000000..885c6c0e2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/dhcpcd/dhcpcd_6.11.5.bb
@@ -0,0 +1,24 @@
+SECTION = "console/network"
+SUMMARY = "dhcpcd - a DHCP client"
+DESCRIPTION = "dhcpcd runs on your machine and silently configures your computer to work on the attached networks without trouble and mostly without configuration."
+
+HOMEPAGE = "http://roy.marples.name/projects/dhcpcd/"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://dhcpcd.c;endline=26;md5=77c40d671aff804ca91ea99556da8e9b"
+
+SRC_URI = "http://roy.marples.name/downloads/${BPN}/${BPN}-${PV}.tar.xz"
+
+SRC_URI[md5sum] = "2465624b62c1154f0e89dc69c42c849b"
+SRC_URI[sha256sum] = "6f9674dc7e27e936cc787175404a6171618675ecfb6903ab9887b1b66a87d69e"
+
+inherit autotools-brokensep
+
+PACKAGECONFIG ?= "udev ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+
+PACKAGECONFIG[udev] = "--with-udev,--without-udev,udev,udev"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6"
+
+EXTRA_OECONF = "--enable-ipv4"
+
+FILES_${PN}-dbg += "${libdir}/dhcpcd/dev/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler/dibbler_fix_getSize_crash.patch b/meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler/dibbler_fix_getSize_crash.patch
new file mode 100644
index 000000000..42d2627a1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler/dibbler_fix_getSize_crash.patch
@@ -0,0 +1,48 @@
+Index: git/ClntMessages/ClntMsgRequest.cpp
+===================================================================
+--- git.orig/ClntMessages/ClntMsgRequest.cpp
++++ git/ClntMessages/ClntMsgRequest.cpp
+@@ -142,7 +142,10 @@ TClntMsgRequest::TClntMsgRequest(List(TA
+ IsDone=false;
+ SPtr<TOpt> ptr;
+ ptr = new TOptDUID(OPTION_CLIENTID, ClntCfgMgr().getDUID(), this );
+- Options.push_back( ptr );
++
++ if ( ptr ) {
++ Options.push_back( ptr );
++ }
+
+ if (!srvDUID) {
+ Log(Error) << "Unable to send REQUEST: ServerId not specified.\n" << LogEnd;
+@@ -153,7 +156,9 @@ TClntMsgRequest::TClntMsgRequest(List(TA
+ ptr = new TOptDUID(OPTION_SERVERID, srvDUID,this);
+ // all IAs provided by checkSolicit
+ SPtr<TAddrIA> ClntAddrIA;
+- Options.push_back( ptr );
++ if ( ptr ) {
++ Options.push_back( ptr );
++ }
+
+ IAs.first();
+ while (ClntAddrIA = IAs.get())
+Index: git/Messages/Msg.cpp
+===================================================================
+--- git.orig/Messages/Msg.cpp
++++ git/Messages/Msg.cpp
+@@ -69,10 +69,15 @@ int TMsg::getSize()
+ {
+ int pktsize=0;
+ TOptList::iterator opt;
++ int optionCount = 0;
+ for (opt = Options.begin(); opt!=Options.end(); ++opt)
+ {
+- pktsize += (*opt)->getSize();
++ Log(Info) << "### CPE Debug - Option with index " << optionCount++ << LogEnd ;
++ Log(Info) << "### CPE Debug - Option with type " << (*opt)->getOptType() << LogEnd ;
++ pktsize += (*opt)->getSize();
+ }
++ Log(Info) << "### CPE Debug - Packet size of option (Add 4) " << pktsize << LogEnd ;
++
+ return pktsize + 4;
+ }
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler_git.bb b/meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler_git.bb
new file mode 100644
index 000000000..8890e1431
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/dibbler/dibbler_git.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Dibbler DHCPv6 client"
+DESCRIPTION = "Dibbler is a portable DHCPv6 implementation. It supports stateful as well as stateless autoconfiguration for IPv6."
+HOMEPAGE = "http://klub.com.pl/dhcpv6"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7236695bb6d4461c105d685a8b61c4e3"
+
+SRCREV = "c4b0ed52e751da7823dd9a36e91f93a6310e5525"
+
+SRC_URI = "git://github.com/tomaszmrugalski/dibbler \
+ file://dibbler_fix_getSize_crash.patch \
+ "
+PV = "1.0.1+1.0.2RC1+git${SRCREV}"
+
+S = "${WORKDIR}/git"
+
+PACKAGECONFIG ??= "debug bind-reuse resolvconf dns-update"
+
+PACKAGECONFIG[debug] = "--enable-debug,,,"
+PACKAGECONFIG[efence] = "--enable-efence,,,"
+PACKAGECONFIG[bind-reuse] = "--enable-bind-reuse,,,"
+PACKAGECONFIG[dst-addr-filter] = "--enable-dst-addr-check,,,"
+PACKAGECONFIG[resolvconf] = "--enable-resolvconf,,,"
+PACKAGECONFIG[dns-update] = "--enable-dns-update,,,"
+PACKAGECONFIG[auth] = "--enable-auth,,,"
+PACKAGECONFIG[gtest] = "--enable-gtest-static,,,"
+
+inherit autotools
+
+DEPENDS += "flex-native"
+
+PACKAGES =+ "${PN}-requestor ${PN}-client ${PN}-relay ${PN}-server"
+
+FILES_${PN}-client = "${sbindir}/${PN}-client"
+FILES_${PN}-relay = "${sbindir}/${PN}-relay"
+FILES_${PN}-requestor = "${sbindir}/${PN}-requestor"
+FILES_${PN}-server = "${sbindir}/${PN}-server"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/ez-ipupdate_3.0.11b7.bb b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/ez-ipupdate_3.0.11b7.bb
new file mode 100644
index 000000000..51e220c9e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/ez-ipupdate_3.0.11b7.bb
@@ -0,0 +1,16 @@
+SUMMARY = "daemon that sends updates when your IP changes"
+HOMEPAGE = "http://sourceforge.net/projects/ez-ipupdate/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7783169b4be06b54e86730eb01bc3a31"
+
+SRC_URI = "http://sourceforge.net/projects/ez-ipupdate/files/${BPN}/${PV}/${BPN}-${PV}.tar.gz \
+ file://Makefile.am.patch \
+ file://cache_file.c.patch \
+ file://conf_file.c.patch \
+ file://wformat.patch \
+ "
+SRC_URI[md5sum] = "525be4550b4461fdf105aed8e753b020"
+SRC_URI[sha256sum] = "a15ec0dc0b78ec7578360987c68e43a67bc8d3591cbf528a323588830ae22c20"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/Makefile.am.patch b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/Makefile.am.patch
new file mode 100644
index 000000000..d80ed3e29
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/Makefile.am.patch
@@ -0,0 +1,14 @@
+Remove EXTRASRC and EXTRAOBJ from obj list
+
+--- ez-ipupdate-3.0.11b7/Makefile.am.orig 2014-07-02 13:47:50.758034983 -0600
++++ ez-ipupdate-3.0.11b7/Makefile.am 2014-07-02 13:48:38.406034650 -0600
+@@ -1,7 +1,7 @@
+
+ bin_PROGRAMS = ez-ipupdate
+-ez_ipupdate_SOURCES = ez-ipupdate.c conf_file.c conf_file.h md5.c md5.h cache_file.c cache_file.h error.h pid_file.c pid_file.h dprintf.h @EXTRASRC@
+-ez_ipupdate_LDADD = @EXTRAOBJ@
++ez_ipupdate_SOURCES = ez-ipupdate.c conf_file.c conf_file.h md5.c md5.h cache_file.c cache_file.h error.h pid_file.c pid_file.h dprintf.h
++ez_ipupdate_LDADD =
+
+ EXTRA_DIST = getpass.c ez-ipupdate.lsm example.conf example-pgpow.conf example-dhs.conf example-dyndns.conf example-ods.conf example-tzo.conf example-gnudip.conf example-easydns.conf example-justlinux.conf example-dyns.conf CHANGELOG mkbinary example-heipv6tb.conf
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/cache_file.c.patch b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/cache_file.c.patch
new file mode 100644
index 000000000..de5eb3a6d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/cache_file.c.patch
@@ -0,0 +1,32 @@
+Dont assume errno type
+
+--- ez-ipupdate-3.0.11b7/cache_file.c.orig 2014-07-02 14:01:07.126029412 -0600
++++ ez-ipupdate-3.0.11b7/cache_file.c 2014-07-02 14:08:27.422026332 -0600
+@@ -43,11 +43,11 @@
+ #include <cache_file.h>
+
+ #if HAVE_STRERROR
+-extern int errno;
++# include <errno.h>
+ # define error_string strerror(errno)
+ #elif HAVE_SYS_ERRLIST
+ extern const char *const sys_errlist[];
+-extern int errno;
++# include <errno.h>
+ # define error_string (sys_errlist[errno])
+ #else
+ # define error_string "error message not found"
+@@ -63,11 +63,11 @@
+ # define dprintf(x)
+ #endif
+ #if HAVE_STRERROR
+-extern int errno;
++# include <errno.h>
+ # define error_string strerror(errno)
+ #elif HAVE_SYS_ERRLIST
+ extern const char *const sys_errlist[];
+-extern int errno;
++# include <errno.h>
+ # define error_string (sys_errlist[errno])
+ #else
+ # define error_string "error message not found"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/conf_file.c.patch b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/conf_file.c.patch
new file mode 100644
index 000000000..02218a39e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/conf_file.c.patch
@@ -0,0 +1,18 @@
+Dont assume errno type
+
+--- ez-ipupdate-3.0.11b7/conf_file.c.orig 2014-07-02 14:01:19.174029328 -0600
++++ ez-ipupdate-3.0.11b7/conf_file.c 2014-07-02 14:08:42.982026223 -0600
+@@ -38,11 +38,11 @@
+ #include <conf_file.h>
+
+ #if HAVE_STRERROR
+-extern int errno;
++# include <errno.h>
+ # define error_string strerror(errno)
+ #elif HAVE_SYS_ERRLIST
+ extern const char *const sys_errlist[];
+-extern int errno;
++# include <errno.h>
+ # define error_string (sys_errlist[errno])
+ #else
+ # define error_string "error message not found"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/wformat.patch b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/wformat.patch
new file mode 100644
index 000000000..1de267f08
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ez-ipupdate/files/wformat.patch
@@ -0,0 +1,13 @@
+Index: ez-ipupdate-3.0.11b7/ez-ipupdate.c
+===================================================================
+--- ez-ipupdate-3.0.11b7.orig/ez-ipupdate.c
++++ ez-ipupdate-3.0.11b7/ez-ipupdate.c
+@@ -798,7 +798,7 @@ void show_message(char *fmt, ...)
+ sprintf(buf, "message incomplete because your OS sucks: %s\n", fmt);
+ #endif
+
+- syslog(LOG_NOTICE, buf);
++ syslog(LOG_NOTICE, "%s", buf);
+ }
+ else
+ {
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/0001-rlm_mschap-Use-includedir-instead-of-hardcoding-usr-.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/0001-rlm_mschap-Use-includedir-instead-of-hardcoding-usr-.patch
new file mode 100644
index 000000000..db8caab12
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/0001-rlm_mschap-Use-includedir-instead-of-hardcoding-usr-.patch
@@ -0,0 +1,28 @@
+From 66e8bcdcca8971b5c43c31755d56d7f675d8b5ff Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 20:10:49 -0700
+Subject: [PATCH] rlm_mschap: Use includedir instead of hardcoding /usr/include
+
+OE QA flags it correctly as a voilation of cross compilation
+namespace
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/modules/rlm_mschap/configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: freeradius-server-3.0.14/src/modules/rlm_mschap/configure.ac
+===================================================================
+--- freeradius-server-3.0.14.orig/src/modules/rlm_mschap/configure.ac
++++ freeradius-server-3.0.14/src/modules/rlm_mschap/configure.ac
+@@ -72,7 +72,7 @@ if test x$with_[]modname != xno; then
+ mod_ldflags="-framework DirectoryService"
+ fi
+
+- smart_try_dir="$winbind_include_dir /usr/include/samba-4.0"
++ smart_try_dir="$winbind_include_dir =/usr/include/samba-4.0"
+ FR_SMART_CHECK_INCLUDE(wbclient.h, [#include <stdint.h>
+ #include <stdbool.h>])
+ if test "x$ac_cv_header_wbclient_h" != "xyes"; then
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius
new file mode 100644
index 000000000..fa412e2aa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius
@@ -0,0 +1,110 @@
+#!/bin/sh
+# Start/stop the FreeRADIUS daemon.
+
+### BEGIN INIT INFO
+# Provides: freeradius
+# Required-Start: $remote_fs $network $syslog
+# Should-Start: $time mysql slapd postgresql samba krb5-kdc
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Radius Daemon
+# Description: Extensible, configurable radius daemon
+### END INIT INFO
+
+set -e
+
+# Source function library.
+. /etc/init.d/functions
+
+if [ -f /lib/lsb/init-functions ]; then
+ . /lib/lsb/init-functions
+fi
+
+PROG="radiusd"
+PROGRAM="/usr/sbin/radiusd"
+PIDFILE="/var/run/radiusd/radiusd.pid"
+DESCR="FreeRADIUS daemon"
+
+if [ -r /etc/default/$PROG ]; then
+ . /etc/default/$PROG
+fi
+
+test -f $PROGRAM || exit 0
+
+check_certs() {
+ if [ ! -f /etc/raddb/certs/server.pem ]; then
+ echo -n "Creating certificates for freeradius..."
+ if sudo -u radiusd /etc/raddb/certs/bootstrap 1> /dev/null 2> /dev/null; then
+ echo "done"
+ else
+ echo "failed!"
+ fi
+ fi
+
+}
+
+# /var/run may be a tmpfs
+if [ ! -d /var/run/radiusd ]; then
+ mkdir -p /var/run/radiusd
+ chown radiusd:radiusd /var/run/radiusd
+fi
+
+if [ ! -d /var/log/radius ]; then
+ mkdir -p /var/log/radius
+ touch /var/log/radius/radius.log
+ chown radiusd:radiusd /var/run/radius
+fi
+
+if [ ! -f ${PIDFILE} ]; then
+ touch ${PIDFILE}
+ chown radiusd:radiusd ${PIDFILE}
+fi
+
+export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
+
+ret=0
+
+case "$1" in
+ start)
+ check_certs
+ echo -n "Starting $DESCR" "$PROG"
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $PROGRAM -- $FREERADIUS_OPTIONS || ret=$?
+ [ "$ret" == 0 ] && echo " Success" || echo " Failed"
+ exit $ret
+ ;;
+ stop)
+ echo -n "Stopping $DESCR" "$PROG"
+ if [ -f "$PIDFILE" ] ; then
+ start-stop-daemon --stop --retry=TERM/30/KILL/5 --quiet --pidfile $PIDFILE || ret=$?
+ else
+ echo -n "$PIDFILE not found"
+ ret=1
+ fi
+ [ "$ret" == 0 ] && echo " Success" || echo " Failed"
+ ;;
+ status)
+ status $PROGRAM;
+ exit $?
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload|force-reload)
+ echo -n "Reloading $DESCR" "$PROG"
+ if [ -f "$PIDFILE" ] ; then
+ start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE || ret=$?
+ else
+ echo -n "$PIDFILE not found"
+ ret=1
+ fi
+ [ "$ret" == 0 ] && echo " Success" || echo " Failed"
+ ;;
+ *)
+ echo "Usage: $0 start|stop|status|restart|force-reload|reload"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-avoid-searching-host-dirs.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-avoid-searching-host-dirs.patch
new file mode 100644
index 000000000..9c997661f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-avoid-searching-host-dirs.patch
@@ -0,0 +1,197 @@
+From dc41591d5ceb18900ec85894f8f7b7bb44bb3bd9 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Mon, 4 Jan 2016 01:44:04 -0500
+Subject: [PATCH] avoid searching host dirs
+
+Don't search the hardcoded host dirs to avoid
+host contamination.
+
+Upstream-Status: Inappropriate [cross-compile specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ acinclude.m4 | 4 ++--
+ src/modules/rlm_sql/drivers/rlm_sql_db2/configure.ac | 4 ++--
+ src/modules/rlm_sql/drivers/rlm_sql_firebird/configure.ac | 4 ++--
+ src/modules/rlm_sql/drivers/rlm_sql_iodbc/configure.ac | 4 ++--
+ src/modules/rlm_sql/drivers/rlm_sql_mysql/configure.ac | 6 +++---
+ src/modules/rlm_sql/drivers/rlm_sql_oracle/configure.ac | 2 +-
+ src/modules/rlm_sql/drivers/rlm_sql_postgresql/configure.ac | 4 ++--
+ src/modules/rlm_sql/drivers/rlm_sql_unixodbc/configure.ac | 4 ++--
+ 8 files changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index da48acc..b513ae1 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -178,7 +178,7 @@ if test "x$smart_lib" = "x"; then
+ FR_LOCATE_DIR(smart_lib_dir,[lib$1${libltdl_cv_shlibext}])
+ FR_LOCATE_DIR(smart_lib_dir,[lib$1.a])
+
+- for try in $smart_lib_dir /usr/local/lib /opt/lib; do
++ for try in $smart_lib_dir; do
+ AC_MSG_CHECKING([for $2 in -l$1 in $try])
+ LIBS="-l$1 $old_LIBS"
+ CPPFLAGS="-L$try -Wl,-rpath,$try $old_CPPFLAGS"
+@@ -218,7 +218,7 @@ ac_safe=`echo "$1" | sed 'y%./+-%__pm%'`
+ old_CPPFLAGS="$CPPFLAGS"
+ smart_include=
+ dnl # The default directories we search in (in addition to the compilers search path)
+-smart_include_dir="/usr/local/include /opt/include"
++smart_include_dir=
+
+ dnl # Our local versions
+ _smart_try_dir=
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_db2/configure.ac b/src/modules/rlm_sql/drivers/rlm_sql_db2/configure.ac
+index 75c851a..a262d71 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_db2/configure.ac
++++ b/src/modules/rlm_sql/drivers/rlm_sql_db2/configure.ac
+@@ -57,14 +57,14 @@ if test x$with_[]modname != xno; then
+ esac])
+
+ dnl Check for SQLConnect in -ldb2
+- smart_try_dir="$ibmdb2_lib_dir /usr/local/db2/lib /usr/IBMdb2/V7.1/lib"
++ smart_try_dir="$ibmdb2_lib_dir"
+ FR_SMART_CHECK_LIB(db2, SQLConnect)
+ if test "x$ac_cv_lib_db2_SQLConnect" != xyes; then
+ fail="$fail libdb2"
+ fi
+
+ dnl Check for sqlcli.h
+- smart_try_dir="$ibmdb2_include_dir /usr/local/db2/include /usr/IBMdb2/V7.1/include"
++ smart_try_dir="$ibmdb2_include_dir"
+ FR_SMART_CHECK_INCLUDE(sqlcli.h)
+ if test "x$ac_cv_header_sqlcli_h" != xyes; then
+ fail="$fail sqlcli.h"
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_firebird/configure.ac b/src/modules/rlm_sql/drivers/rlm_sql_firebird/configure.ac
+index 4da57b3..752b043 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_firebird/configure.ac
++++ b/src/modules/rlm_sql/drivers/rlm_sql_firebird/configure.ac
+@@ -56,14 +56,14 @@ if test x$with_[]modname != xno; then
+ esac])
+
+ dnl Check for isc_attach_database in -lfbclient
+- smart_try_dir="$firebird_lib_dir /usr/lib/firebird2/lib /usr/local/firebird/lib"
++ smart_try_dir="$firebird_lib_dir"
+ FR_SMART_CHECK_LIB(fbclient, isc_attach_database)
+ if test "x$ac_cv_lib_fbclient_isc_attach_database" != xyes; then
+ fail="$fail libfbclient"
+ fi
+
+ dnl Check for ibase.h
+- smart_try_dir="$firebird_include_dir /usr/lib/firebird2/include /usr/local/firebird/include"
++ smart_try_dir="$firebird_include_dir"
+ FR_SMART_CHECK_INCLUDE(ibase.h)
+ if test "x$ac_cv_header_ibase_h" != xyes; then
+ fail="$fail ibase.h"
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_iodbc/configure.ac b/src/modules/rlm_sql/drivers/rlm_sql_iodbc/configure.ac
+index ba6304f..3393557 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_iodbc/configure.ac
++++ b/src/modules/rlm_sql/drivers/rlm_sql_iodbc/configure.ac
+@@ -57,14 +57,14 @@ if test x$with_[]modname != xno; then
+ esac])
+
+ dnl Check for SQLConnect in -liodbc
+- smart_try_dir="$iodbc_lib_dir /usr/lib /usr/lib/iodbc /usr/local/lib/iodbc /usr/local/iodbc/lib/iodbc"
++ smart_try_dir="$iodbc_lib_dir"
+ FR_SMART_CHECK_LIB(iodbc, SQLConnect)
+ if test "x$ac_cv_lib_iodbc_SQLConnect" != xyes; then
+ fail="$fail libiodbc"
+ fi
+
+ dnl Check for isql.h
+- smart_try_dir="$iodbc_include_dir /usr/include /usr/include/iodbc /usr/local/iodbc/include"
++ smart_try_dir="$iodbc_include_dir"
+ FR_SMART_CHECK_INCLUDE(isql.h)
+ if test "x$ac_cv_header_isql_h" != xyes; then
+ fail="$fail isql.h"
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_mysql/configure.ac b/src/modules/rlm_sql/drivers/rlm_sql_mysql/configure.ac
+index 1401677..2e7db44 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_mysql/configure.ac
++++ b/src/modules/rlm_sql/drivers/rlm_sql_mysql/configure.ac
+@@ -136,7 +136,7 @@ if test x$with_[]modname != xno; then
+
+ dnl # Check for libmysqlclient_r
+ if test "x$have_a_libmysqlclient" != "xyes"; then
+- smart_try_dir="$mysql_lib_dir /usr/lib /usr/lib/mysql /usr/local/lib/mysql /usr/local/mysql/lib/mysql"
++ smart_try_dir="$mysql_lib_dir"
+ FR_SMART_CHECK_LIB(mysqlclient_r, mysql_init)
+ if test "x$ac_cv_lib_mysqlclient_r_mysql_init" = "xyes"; then
+ have_a_libmysqlclient='yes'
+@@ -145,7 +145,7 @@ if test x$with_[]modname != xno; then
+
+ dnl # Check for libmysqlclient
+ if test "x$have_a_libmysqlclient" != "xyes"; then
+- smart_try_dir="$mysql_lib_dir /usr/lib /usr/lib/mysql /usr/local/lib/mysql /usr/local/mysql/lib/mysql"
++ smart_try_dir="$mysql_lib_dir"
+ FR_SMART_CHECK_LIB(mysqlclient, mysql_init)
+ if test "x$ac_cv_lib_mysqlclient_mysql_init" = "xyes"; then
+ have_a_libmysqlclient='yes'
+@@ -189,7 +189,7 @@ if test x$with_[]modname != xno; then
+ fi
+
+ if test "x$have_mysql_h" != "xyes"; then
+- smart_try_dir="$mysql_include_dir /usr/local/include /usr/local/mysql/include"
++ smart_try_dir="$mysql_include_dir"
+ FR_SMART_CHECK_INCLUDE(mysql/mysql.h)
+ if test "x$ac_cv_header_mysql_mysql_h" = "xyes"; then
+ AC_DEFINE(HAVE_MYSQL_MYSQL_H, [], [Define if you have <mysql/mysql.h>])
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_oracle/configure.ac b/src/modules/rlm_sql/drivers/rlm_sql_oracle/configure.ac
+index 3178462..5cbc8c2 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_oracle/configure.ac
++++ b/src/modules/rlm_sql/drivers/rlm_sql_oracle/configure.ac
+@@ -63,7 +63,7 @@ if test x$with_[]modname != xno; then
+ dnl # Check for header files
+ dnl ############################################################
+
+- smart_try_dir="$oracle_include_dir /usr/local/instaclient/include"
++ smart_try_dir="$oracle_include_dir"
+
+ if test "x$ORACLE_HOME" != "x"; then
+ smart_try_dir="${smart_try_dir} ${ORACLE_HOME}/include"
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/configure.ac b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/configure.ac
+index 4f9a890..e1cf811 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_postgresql/configure.ac
++++ b/src/modules/rlm_sql/drivers/rlm_sql_postgresql/configure.ac
+@@ -41,7 +41,7 @@ if test x$with_[]modname != xno; then
+ esac ]
+ )
+
+- smart_try_dir="$rlm_sql_postgresql_include_dir /usr/include/postgresql /usr/local/pgsql/include /usr/include/pgsql"
++ smart_try_dir="$rlm_sql_postgresql_include_dir"
+ FR_SMART_CHECK_INCLUDE(libpq-fe.h)
+ if test "x$ac_cv_header_libpqmfe_h" != "xyes"; then
+ fail="$fail libpq-fe.h"
+@@ -76,7 +76,7 @@ if test x$with_[]modname != xno; then
+ ])
+ fi
+
+- smart_try_dir="$rlm_sql_postgresql_lib_dir /usr/lib /usr/local/pgsql/lib"
++ smart_try_dir="$rlm_sql_postgresql_lib_dir"
+ FR_SMART_CHECK_LIB(pq, PQconnectdb)
+ if test "x$ac_cv_lib_pq_PQconnectdb" != "xyes"; then
+ fail="$fail libpq"
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/configure.ac b/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/configure.ac
+index 3545387..c543ed4 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/configure.ac
++++ b/src/modules/rlm_sql/drivers/rlm_sql_unixodbc/configure.ac
+@@ -57,14 +57,14 @@ if test x$with_[]modname != xno; then
+ esac])
+
+ dnl Check for SQLConnect in -lodbc
+- smart_try_dir="$unixodbc_lib_dir /usr/local/unixodbc/lib"
++ smart_try_dir="$unixodbc_lib_dir"
+ FR_SMART_CHECK_LIB(odbc, SQLConnect)
+ if test "x$ac_cv_lib_odbc_SQLConnect" != xyes; then
+ fail="$fail libodbc"
+ fi
+
+ dnl Check for sql.h
+- smart_try_dir="$unixodbc_include_dir /usr/local/unixodbc/include"
++ smart_try_dir="$unixodbc_include_dir"
+ FR_SMART_CHECK_INCLUDE(sql.h)
+ if test "x$ac_cv_header_sql_h" != xyes; then
+ fail="$fail sql.h"
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-add-option-for-libcap.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-add-option-for-libcap.patch
new file mode 100644
index 000000000..71b78090c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-add-option-for-libcap.patch
@@ -0,0 +1,70 @@
+From 74eed61dec8702c89f3e121d577ea9db25c961a4 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Mon, 11 Jan 2016 02:52:16 -0500
+Subject: [PATCH] configure.ac: add option for libcap
+
+Upstream-Status: Pending
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure.ac | 37 ++++++++++++++++++++++++++++---------
+ 1 file changed, 28 insertions(+), 9 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 066d3d7..6e4266b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -948,6 +948,23 @@ fi
+ dnl Set by FR_SMART_CHECKLIB
+ LIBS="${old_LIBS}"
+
++dnl #
++dnl # extra argument: --with-libcap
++dnl #
++WITH_LIBCAP=yes
++AC_ARG_WITH(libcap,
++[ --with-licap use licap for debugger checks. (default=yes)],
++[ case "$withval" in
++ no)
++ WITH_LIBCAP=no
++ ;;
++ *)
++ WITH_LIBCAP=yes
++ ;;
++ esac ]
++)
++
++
+ dnl Check for cap
+ dnl extra argument: --with-cap-lib-dir=DIR
+ cap_lib_dir=
+@@ -981,15 +998,17 @@ AC_ARG_WITH(cap-include-dir,
+ ;;
+ esac])
+
+-smart_try_dir="$cap_lib_dir"
+-FR_SMART_CHECK_LIB(cap, cap_get_proc)
+-if test "x$ac_cv_lib_cap_cap_get_proc" != "xyes"; then
+- AC_MSG_WARN([cap library not found, debugger checks will not be enabled. Use --with-cap-lib-dir=<path>.])
+-else
+- AC_DEFINE(HAVE_LIBCAP, 1,
+- [Define to 1 if you have the `cap' library (-lcap).]
+- )
+- HAVE_LIBCAP=1
++if test "x$WITH_LIBCAP" = xyes; then
++ smart_try_dir="$cap_lib_dir"
++ FR_SMART_CHECK_LIB(cap, cap_get_proc)
++ if test "x$ac_cv_lib_cap_cap_get_proc" != "xyes"; then
++ AC_MSG_WARN([cap library not found, debugger checks will not be enabled. Use --with-cap-lib-dir=<path>.])
++ else
++ AC_DEFINE(HAVE_LIBCAP, 1,
++ [Define to 1 if you have the `cap' library (-lcap).]
++ )
++ HAVE_LIBCAP=1
++ fi
+ fi
+
+ VL_LIB_READLINE
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-allow-cross-compilation.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-allow-cross-compilation.patch
new file mode 100644
index 000000000..30497a602
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-configure.ac-allow-cross-compilation.patch
@@ -0,0 +1,31 @@
+Subject: [PATCH] configure.ac: allow cross-compilation
+
+The checking OpenSSL library and header version consistency will
+always fail in cross compiling, skip the check and give a warning
+instead for cross compiling.
+
+Upstream-Status: Inappropriate[embedded specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ src/modules/rlm_krb5/configure.ac | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/modules/rlm_krb5/configure.ac b/src/modules/rlm_krb5/configure.ac
+index eb43534..113a079 100644
+--- a/src/modules/rlm_krb5/configure.ac
++++ b/src/modules/rlm_krb5/configure.ac
+@@ -137,7 +137,8 @@ if test x$with_[]modname != xno; then
+ FR_SMART_CHECK_LIB(krb5, krb5_is_thread_safe)
+ if test "x$ac_cv_lib_krb5_krb5_is_thread_safe" == xyes; then
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <krb5.h>]], [[return krb5_is_thread_safe() ? 0 : 1]])],
+- [krb5threadsafe="-DKRB5_IS_THREAD_SAFE"], [AC_MSG_WARN([[libkrb5 is not threadsafe]])])
++ [krb5threadsafe="-DKRB5_IS_THREAD_SAFE"], [AC_MSG_WARN([[libkrb5 is not threadsafe]])],
++ [AC_MSG_WARN(cross compiling: not checking)])
+ fi
+ else
+ krb5threadsafe=""
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-enble-user-in-conf.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-enble-user-in-conf.patch
new file mode 100644
index 000000000..4a62bf1fa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-enble-user-in-conf.patch
@@ -0,0 +1,28 @@
+Enable and change user and group of freeradius server to radiusd
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ raddb/radiusd.conf.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/raddb/radiusd.conf.in b/raddb/radiusd.conf.in
+index c62f4ff..0b4a84e 100644
+--- a/raddb/radiusd.conf.in
++++ b/raddb/radiusd.conf.in
+@@ -436,8 +436,8 @@ security {
+ # member. This can allow for some finer-grained access
+ # controls.
+ #
+-# user = radius
+-# group = radius
++ user = radiusd
++ group = radiusd
+
+ # Core dumps are a bad thing. This should only be set to
+ # 'yes' if you're debugging a problem with the server.
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-error-for-expansion-of-macro.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-error-for-expansion-of-macro.patch
new file mode 100644
index 000000000..af1bff051
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-error-for-expansion-of-macro.patch
@@ -0,0 +1,61 @@
+From 5b6d8b14f2696fcf1dca119212f9d0a0fa04defd Mon Sep 17 00:00:00 2001
+From: Yi Zhao <yi.zhao@windriver.com>
+Date: Wed, 18 Jan 2017 14:59:39 +0800
+Subject: [PATCH] fix error for expansion of macro in thread.h
+
+The parameter declaration is missing in expansion of macro
+which cause the build error:
+| In file included from src/freeradius-devel/libradius.h:80:0,
+| from src/lib/log.c:26:
+| src/lib/log.c: In function '__fr_thread_local_destroy_fr_strerror_buffer':
+| src/lib/log.c:37:31: error: 'fr_strerror_buffer' undeclared (first use in this function)
+| fr_thread_local_setup(char *, fr_strerror_buffer) /* macro */
+| ^
+
+Add the missing declaration in macro.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ src/include/threads.h | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/include/threads.h b/src/include/threads.h
+index e36d81d..2bcb6aa 100644
+--- a/src/include/threads.h
++++ b/src/include/threads.h
+@@ -89,7 +89,7 @@ static _t __fr_thread_local_init_##_n(pthread_destructor_t func)\
+ # define fr_thread_local_get(_n) _n
+ #elif defined(HAVE_PTHREAD_H)
+ # include <pthread.h>
+-# define fr_thread_local_setup(_t, _n) \
++# define fr_thread_local_setup(_t, _n) static __thread _t _n;\
+ static pthread_key_t __fr_thread_local_key_##_n;\
+ static pthread_once_t __fr_thread_local_once_##_n = PTHREAD_ONCE_INIT;\
+ static pthread_destructor_t __fr_thread_local_destructor_##_n = NULL;\
+@@ -100,17 +100,17 @@ static void __fr_thread_local_destroy_##_n(UNUSED void *unused)\
+ static void __fr_thread_local_key_init_##_n(void)\
+ {\
+ (void) pthread_key_create(&__fr_thread_local_key_##_n, __fr_thread_local_destroy_##_n);\
+- (void) pthread_setspecific(__fr_thread_local_key_##_n, &(_n));\
+ }\
+ static _t __fr_thread_local_init_##_n(pthread_destructor_t func)\
+ {\
+ __fr_thread_local_destructor_##_n = func;\
+ if (_n) return _n; \
+ (void) pthread_once(&__fr_thread_local_once_##_n, __fr_thread_local_key_init_##_n);\
++ (void) pthread_setspecific(__fr_thread_local_key_##_n, &(_n));\
+ return _n;\
+ }
+-# define fr_thread_local_init(_n, _f) __fr_thread_local_init_##_n(_f)
+-# define fr_thread_local_set(_n, _v) __fr_thread_local_set_##_n(_v)
+-# define fr_thread_local_get(_n) __fr_thread_local_get_##_n()
++# define fr_thread_local_init(_n, _f) __fr_thread_local_init_##_n(_f)
++# define fr_thread_local_set(_n, _v) ((int)!((_n = _v) || 1))
++# define fr_thread_local_get(_n) _n
+ #endif
+ #endif
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-issues-related-to-m4-include-path.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-issues-related-to-m4-include-path.patch
new file mode 100644
index 000000000..d29b2ac39
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-issues-related-to-m4-include-path.patch
@@ -0,0 +1,236 @@
+From d8e251ef97869ab2c1c82bd374016f402083997c Mon Sep 17 00:00:00 2001
+From: Jorge Pereira <jpereiran@gmail.com>
+Date: Mon, 7 Dec 2015 16:51:07 -0200
+Subject: [PATCH] Fixing issues related to m4 include path
+
+Upstream-Status: Submitted [1]
+
+[1]: https://github.com/FreeRADIUS/freeradius-server/pull/1428
+
+Submmited by: Jorge Pereira <jpereiran@gmail.com>
+---
+ src/modules/rlm_example/config.h.in | 39 ++--------------------
+ src/modules/rlm_ldap/configure | 2 +-
+ src/modules/rlm_pam/config.h.in | 3 ++
+ src/modules/rlm_perl/config.h.in | 3 ++
+ src/modules/rlm_perl/configure.ac | 2 +-
+ src/modules/rlm_radutmp/config.h.in | 3 ++
+ src/modules/rlm_ruby/configure | 1 +
+ src/modules/rlm_ruby/configure.ac | 9 ++---
+ src/modules/rlm_smsotp/config.h.in | 3 ++
+ .../rlm_sql/drivers/rlm_sql_mysql/config.h.in | 3 ++
+ src/modules/rlm_unix/config.h.in | 6 ++++
+ 11 files changed, 32 insertions(+), 42 deletions(-)
+
+diff --git a/src/modules/rlm_example/config.h.in b/src/modules/rlm_example/config.h.in
+index 2a81ef5..f80de9c 100644
+--- a/src/modules/rlm_example/config.h.in
++++ b/src/modules/rlm_example/config.h.in
+@@ -1,38 +1,5 @@
+ /* config.h.in. Generated from configure.ac by autoheader. */
+
+-/* Define to 1 if you have the <inttypes.h> header file. */
+-#undef HAVE_INTTYPES_H
+-
+-/* Define to 1 if you have the <memory.h> header file. */
+-#undef HAVE_MEMORY_H
+-
+-/* Define to 1 if you have the `printf' function. */
+-#undef HAVE_PRINTF
+-
+-/* Define to 1 if you have the <stdint.h> header file. */
+-#undef HAVE_STDINT_H
+-
+-/* Define to 1 if you have the <stdio.h> header file. */
+-#undef HAVE_STDIO_H
+-
+-/* Define to 1 if you have the <stdlib.h> header file. */
+-#undef HAVE_STDLIB_H
+-
+-/* Define to 1 if you have the <strings.h> header file. */
+-#undef HAVE_STRINGS_H
+-
+-/* Define to 1 if you have the <string.h> header file. */
+-#undef HAVE_STRING_H
+-
+-/* Define to 1 if you have the <sys/stat.h> header file. */
+-#undef HAVE_SYS_STAT_H
+-
+-/* Define to 1 if you have the <sys/types.h> header file. */
+-#undef HAVE_SYS_TYPES_H
+-
+-/* Define to 1 if you have the <unistd.h> header file. */
+-#undef HAVE_UNISTD_H
+-
+ /* Define to the address where bug reports for this package should be sent. */
+ #undef PACKAGE_BUGREPORT
+
+@@ -45,8 +12,8 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+-
+-/* Define to 1 if you have the ANSI C header files. */
+-#undef STDC_HEADERS
+diff --git a/src/modules/rlm_ldap/configure b/src/modules/rlm_ldap/configure
+index e0c15d9..cdf96d5 100755
+--- a/src/modules/rlm_ldap/configure
++++ b/src/modules/rlm_ldap/configure
+@@ -3992,7 +3992,7 @@ smart_prefix=
+ $as_echo "#define WITH_SASL 1" >>confdefs.h
+
+ SASL=sasl.c
+- fi
++ fi
+ fi
+
+ targetname=rlm_ldap
+diff --git a/src/modules/rlm_pam/config.h.in b/src/modules/rlm_pam/config.h.in
+index 32ef6ff..1ad20c5 100644
+--- a/src/modules/rlm_pam/config.h.in
++++ b/src/modules/rlm_pam/config.h.in
+@@ -45,6 +45,9 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+
+diff --git a/src/modules/rlm_perl/config.h.in b/src/modules/rlm_perl/config.h.in
+index 989ed53..f80de9c 100644
+--- a/src/modules/rlm_perl/config.h.in
++++ b/src/modules/rlm_perl/config.h.in
+@@ -12,5 +12,8 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+diff --git a/src/modules/rlm_perl/configure.ac b/src/modules/rlm_perl/configure.ac
+index 44c5fc9..6b2a043 100644
+--- a/src/modules/rlm_perl/configure.ac
++++ b/src/modules/rlm_perl/configure.ac
+@@ -3,7 +3,7 @@ AC_INIT(rlm_perl.c)
+ AC_REVISION($Revision$)
+ AC_DEFUN(modname,[rlm_perl])
+
+-m4_include([ax_with_prog.m4])
++m4_include([m4/ax_with_prog.m4])
+
+ if test x$with_[]modname != xno; then
+ AC_PROG_CC
+diff --git a/src/modules/rlm_radutmp/config.h.in b/src/modules/rlm_radutmp/config.h.in
+index 9a883cc..750b434 100644
+--- a/src/modules/rlm_radutmp/config.h.in
++++ b/src/modules/rlm_radutmp/config.h.in
+@@ -42,6 +42,9 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+
+diff --git a/src/modules/rlm_ruby/configure b/src/modules/rlm_ruby/configure
+index 15868ab..c728af2 100755
+--- a/src/modules/rlm_ruby/configure
++++ b/src/modules/rlm_ruby/configure
+@@ -1875,6 +1875,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
++
+ # ===========================================================================
+ # http://www.gnu.org/software/autoconf-archive/ax_compare_version.html
+ # ===========================================================================
+diff --git a/src/modules/rlm_ruby/configure.ac b/src/modules/rlm_ruby/configure.ac
+index 9306382..f1c8118 100644
+--- a/src/modules/rlm_ruby/configure.ac
++++ b/src/modules/rlm_ruby/configure.ac
+@@ -3,15 +3,16 @@ AC_INIT(rlm_ruby.c)
+ AC_REVISION($Revision: 1.9 $)
+ AC_DEFUN(modname,[rlm_ruby])
+
+-m4_include([ax_with_prog.m4])
++m4_include([m4/ax_with_prog.m4])
+
+ AC_DEFUN([AX_WITH_RUBY],[
+ AX_WITH_PROG([RUBY],[ruby],[not-found],[${PATH}:/usr/bin:/usr/local/bin])
+ ])
+
+-m4_include([ax_compare_version.m4])
+-m4_include([ax_prog_ruby_version.m4])
+-m4_include([ax_ruby_devel.m4])
++
++m4_include([m4/ax_compare_version.m4])
++m4_include([m4/ax_prog_ruby_version.m4])
++m4_include([m4/ax_ruby_devel.m4])
+
+ targetname=modname
+ mod_cflags=
+diff --git a/src/modules/rlm_smsotp/config.h.in b/src/modules/rlm_smsotp/config.h.in
+index 5feaf91..9e69f85 100644
+--- a/src/modules/rlm_smsotp/config.h.in
++++ b/src/modules/rlm_smsotp/config.h.in
+@@ -42,6 +42,9 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+
+diff --git a/src/modules/rlm_sql/drivers/rlm_sql_mysql/config.h.in b/src/modules/rlm_sql/drivers/rlm_sql_mysql/config.h.in
+index e03d1a9..6262c48 100644
+--- a/src/modules/rlm_sql/drivers/rlm_sql_mysql/config.h.in
++++ b/src/modules/rlm_sql/drivers/rlm_sql_mysql/config.h.in
+@@ -18,5 +18,8 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+diff --git a/src/modules/rlm_unix/config.h.in b/src/modules/rlm_unix/config.h.in
+index dcb9aa2..70b4680 100644
+--- a/src/modules/rlm_unix/config.h.in
++++ b/src/modules/rlm_unix/config.h.in
+@@ -1,5 +1,8 @@
+ /* config.h.in. Generated from configure.ac by autoheader. */
+
++/* Define to 1 if you have the `getpwnam' function. */
++#undef HAVE_GETPWNAM
++
+ /* Define to 1 if you have the `getspnam' function. */
+ #undef HAVE_GETSPNAM
+
+@@ -54,6 +57,9 @@
+ /* Define to the one symbol short name of this package. */
+ #undef PACKAGE_TARNAME
+
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
+ /* Define to the version of this package. */
+ #undef PACKAGE_VERSION
+
+--
+2.3.5
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-quoting-for-BUILT_WITH.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-quoting-for-BUILT_WITH.patch
new file mode 100644
index 000000000..b0929c4b0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-fix-quoting-for-BUILT_WITH.patch
@@ -0,0 +1,55 @@
+Fix quoting for BUILD_WITH
+
+The escaped quotes are to make the -D values produce strings which
+can be used to display these values. However, if the values are more
+than one word, with spaces, they also need shell quoting to make them
+into single words.
+
+Upstream-Status: Pending
+
+Signed-off-by: Peter Seebach <peter.seebach@windriver.com>
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ src/main/libfreeradius-server.mk | 2 +-
+ src/main/unittest.mk | 2 +-
+ src/modules/rlm_eap/radeapclient.mk | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/main/libfreeradius-server.mk b/src/main/libfreeradius-server.mk
+index 4495f72..07c28f1 100644
+--- a/src/main/libfreeradius-server.mk
++++ b/src/main/libfreeradius-server.mk
+@@ -18,5 +18,5 @@ SOURCES := conffile.c \
+ TGT_LDLIBS := $(OPENSSL_LIBS)
+
+ ifneq ($(MAKECMDGOALS),scan)
+-SRC_CFLAGS += -DBUILT_WITH_CPPFLAGS=\"$(CPPFLAGS)\" -DBUILT_WITH_CFLAGS=\"$(CFLAGS)\" -DBUILT_WITH_LDFLAGS=\"$(LDFLAGS)\" -DBUILT_WITH_LIBS=\"$(LIBS)\"
++SRC_CFLAGS += -DBUILT_WITH_CPPFLAGS="\"$(CPPFLAGS)\"" -DBUILT_WITH_CFLAGS="\"$(CFLAGS)\"" -DBUILT_WITH_LDFLAGS="\"$(LDFLAGS)\"" -DBUILT_WITH_LIBS="\"$(LIBS)\""
+ endif
+diff --git a/src/main/unittest.mk b/src/main/unittest.mk
+index 09f3938..ed33952 100644
+--- a/src/main/unittest.mk
++++ b/src/main/unittest.mk
+@@ -21,5 +21,5 @@ TGT_PREREQS += libfreeradius-eap.a
+ endif
+
+ ifneq ($(MAKECMDGOALS),scan)
+-SRC_CFLAGS += -DBUILT_WITH_CPPFLAGS=\"$(CPPFLAGS)\" -DBUILT_WITH_CFLAGS=\"$(CFLAGS)\" -DBUILT_WITH_LDFLAGS=\"$(LDFLAGS)\" -DBUILT_WITH_LIBS=\"$(LIBS)\"
++SRC_CFLAGS += -DBUILT_WITH_CPPFLAGS="\"$(CPPFLAGS)\"" -DBUILT_WITH_CFLAGS="\"$(CFLAGS)\"" -DBUILT_WITH_LDFLAGS="\"$(LDFLAGS)\"" -DBUILT_WITH_LIBS="\"$(LIBS)\""
+ endif
+diff --git a/src/modules/rlm_eap/radeapclient.mk b/src/modules/rlm_eap/radeapclient.mk
+index 6068f54..7d3c556 100644
+--- a/src/modules/rlm_eap/radeapclient.mk
++++ b/src/modules/rlm_eap/radeapclient.mk
+@@ -23,7 +23,7 @@ SRC_CFLAGS += -DWITH_EAPCLIENT
+ SRC_INCDIRS := ${top_srcdir}/src/modules/rlm_eap/libeap
+
+ ifneq ($(MAKECMDGOALS),scan)
+-SRC_CFLAGS += -DBUILT_WITH_CPPFLAGS=\"$(CPPFLAGS)\" -DBUILT_WITH_CFLAGS=\"$(CFLAGS)\" -DBUILT_WITH_LDFLAGS=\"$(LDFLAGS)\" -DBUILT_WITH_LIBS=\"$(LIBS)\"
++SRC_CFLAGS += -DBUILT_WITH_CPPFLAGS="\"$(CPPFLAGS)\"" -DBUILT_WITH_CFLAGS="\"$(CFLAGS)\"" -DBUILT_WITH_LDFLAGS="\"$(LDFLAGS)\"" -DBUILT_WITH_LIBS="\"$(LIBS)\""
+ endif
+
+ endif
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-detection.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-detection.patch
new file mode 100644
index 000000000..4eb61ff2e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-detection.patch
@@ -0,0 +1,89 @@
+From 56ef434e454bcc82c162a83d9bcb076d4fc72b7f Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Thu, 9 Jan 2014 14:30:26 +0800
+Subject: [PATCH] Fix libtool detection
+
+Upstream-Status: pending
+
+Use LT_INIT instead of the deprecated AC_PROG_LIBTOOL to detect libtool, so it
+can work with our libtoolize and libtool.
+
+Simplify the detection of ltdl. It will find the ltdl from the sysroot; the
+switch --with-system-libltdl is no longer needed. The code is copied from
+pulseaudio configure.ac, together with the comment paragraph.
+
+Also patch autogen.sh so it uses autoreconf, which handles libtoolize better.
+
+Signed-off-by: Jesse Zhang <sen.zhang@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ autogen.sh | 5 +----
+ configure.ac | 36 ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 37 insertions(+), 4 deletions(-)
+
+diff --git a/autogen.sh b/autogen.sh
+index 3418673..e42c3d5 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -5,10 +5,7 @@ parentdir=`dirname $0`
+ cd $parentdir
+ parentdir=`pwd`
+
+-libtoolize -f -c
+-#aclocal
+-autoheader
+-autoconf
++autoreconf -Wcross --verbose --install --force
+
+ mysubdirs="$mysubdirs `find src/modules/ -name configure -print | sed 's%/configure%%'`"
+ mysubdirs=`echo $mysubdirs`
+diff --git a/configure.ac b/configure.ac
+index e73e4ad..066d3d7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -205,6 +205,42 @@ dnl # See if we have Git.
+ dnl #
+ AC_CHECK_PROG(GIT, git, yes, no)
+
++#### libtool stuff ####
++
++dnl set this shit so it doesn't force CFLAGS...
++LTCFLAGS=" "
++
++LT_PREREQ(2.2)
++LT_INIT([dlopen disable-static])
++
++dnl Unfortunately, even up to libtool 2.2.6a there is no way to know
++dnl exactly which version of libltdl is present in the system, so we
++dnl just assume that it's a working version as long as we have the
++dnl library and the header files.
++dnl
++dnl As an extra safety device, check for lt_dladvise_init() which is
++dnl only implemented in libtool 2.x, and refine as we go if we have
++dnl refined requirements.
++dnl
++dnl Check the header files first since the system may have a
++dnl libltdl.so for runtime, but no headers, and we want to bail out as
++dnl soon as possible.
++dnl
++dnl We don't need any special variable for this though, since the user
++dnl can give the proper place to find libltdl through the standard
++dnl variables like LDFLAGS and CPPFLAGS.
++
++AC_CHECK_HEADER([ltdl.h],
++ [AC_CHECK_LIB([ltdl], [lt_dladvise_init], [LIBLTDL=-lltdl], [LIBLTDL=])],
++ [LIBLTDL=])
++
++AS_IF([test "x$LIBLTDL" = "x"],
++ [AC_MSG_ERROR([Unable to find libltdl version 2. Makes sure you have libtool 2.2 or later installed.])])
++AC_SUBST([LIBLTDL])
++LTDL_SUBDIRS=
++INCLTDL=-DWITH_SYSTEM_LTDL
++AC_SUBST(LTDL_SUBDIRS)
++
+ dnl Put this in later, when all distributed modules use autoconf.
+ dnl AC_ARG_WITH(disablemodulefoo,
+ dnl [ --without-rlm_foo Disables module compilation. Module list:]
+--
+1.8.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-do-not-use-jlibtool.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-do-not-use-jlibtool.patch
new file mode 100644
index 000000000..1954586b2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-libtool-do-not-use-jlibtool.patch
@@ -0,0 +1,160 @@
+From 16bf899447fc1524ffc3c79e1d35380e5285a552 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Thu, 7 Jan 2016 22:37:30 -0800
+Subject: [PATCH] libtool: do not use jlibtool
+
+jlibtool is hardcoded to be used but we need to use
+our libtool, so fix the makfiles to make it compatible
+with our libtool.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ Make.inc.in | 4 ++--
+ scripts/boiler.mk | 2 ++
+ scripts/install.mk | 14 +++++++-------
+ scripts/libtool.mk | 22 ++++++++++++++++------
+ 4 files changed, 27 insertions(+), 15 deletions(-)
+
+diff --git a/Make.inc.in b/Make.inc.in
+index 7a77625..fd8aa3e 100644
+--- a/Make.inc.in
++++ b/Make.inc.in
+@@ -57,7 +57,7 @@ CPPFLAGS = @CPPFLAGS@
+ LIBPREFIX = @LIBPREFIX@
+ EXEEXT = @EXEEXT@
+
+-LIBTOOL = JLIBTOOL
++LIBTOOL = @LIBTOOL@
+ ACLOCAL = @ACLOCAL@
+ AUTOCONF = @AUTOCONF@
+ AUTOHEADER = @AUTOHEADER@
+@@ -163,7 +163,7 @@ ANALYZE.c := @clang_path@
+ #
+ ifeq "$(USE_SHARED_LIBS)" "yes"
+ TESTBINDIR = ./$(BUILD_DIR)/bin/local
+- TESTBIN = FR_LIBRARY_PATH=./build/lib/.libs $(JLIBTOOL) --quiet --mode=execute $(TESTBINDIR)
++ TESTBIN = FR_LIBRARY_PATH=./build/lib/.libs $(LIBTOOL) --quiet --mode=execute $(TESTBINDIR)
+ else
+ TESTBINDIR = ./$(BUILD_DIR)/bin
+ TESTBIN = ./$(BUILD_DIR)/bin
+diff --git a/scripts/boiler.mk b/scripts/boiler.mk
+index bccec5e..926a13e 100644
+--- a/scripts/boiler.mk
++++ b/scripts/boiler.mk
+@@ -266,6 +266,7 @@ define COMPILE_C_CMDS
+ $(Q)$(ECHO) CC $<
+ $(Q)$(strip ${COMPILE.c} -o $@ -c -MD ${CPPFLAGS} ${CFLAGS} ${SRC_CFLAGS} ${INCDIRS} \
+ $(addprefix -I, ${SRC_INCDIRS}) ${SRC_DEFS} ${DEFS} $<)
++ ${Q}mv $(dir $@)/.libs/$(notdir $*.d) ${BUILD_DIR}/objs/$*.d
+ endef
+ else
+ #
+@@ -281,6 +282,7 @@ define COMPILE_C_CMDS
+ $(Q)cppcheck --enable=style -q ${CHECKFLAGS} $(filter -isystem%,${SRC_CFLAGS}) \
+ $(filter -I%,${SRC_CFLAGS}) $(filter -D%,${SRC_CFLAGS}) ${INCDIRS} \
+ $(addprefix -I,${SRC_INCDIRS}) ${SRC_DEFS} ${DEFS} --suppress=variableScope --suppress=invalidscanf $<
++ ${Q}mv $(dir $@)/.libs/$(notdir $*.d) ${BUILD_DIR}/objs/$*.d
+ endef
+ endif
+
+diff --git a/scripts/install.mk b/scripts/install.mk
+index 9164115..e38c1ed 100644
+--- a/scripts/install.mk
++++ b/scripts/install.mk
+@@ -46,7 +46,7 @@ define ADD_INSTALL_RULE.exe
+ install: $${${1}_INSTALLDIR}/$(notdir ${1})
+
+ # Install executable ${1}
+- $${${1}_INSTALLDIR}/$(notdir ${1}): ${JLIBTOOL} $${${1}_BUILD}/${1} | $${${1}_INSTALLDIR}
++ $${${1}_INSTALLDIR}/$(notdir ${1}): ${LIBTOOL} $${${1}_BUILD}/${1} | $${${1}_INSTALLDIR}
+ @$(ECHO) INSTALL ${1}
+ $(Q)$${PROGRAM_INSTALL} -c -m 755 $${BUILD_DIR}/bin/${1} $${${1}_INSTALLDIR}/
+ $(Q)$${${1}_POSTINSTALL}
+@@ -65,7 +65,7 @@ define ADD_INSTALL_RULE.a
+ install: $${${1}_INSTALLDIR}/$(notdir ${1})
+
+ # Install static library ${1}
+- $${${1}_INSTALLDIR}/$(notdir ${1}): ${JLIBTOOL} ${1} | $${${1}_INSTALLDIR}
++ $${${1}_INSTALLDIR}/$(notdir ${1}): ${LIBTOOL} ${1} | $${${1}_INSTALLDIR}
+ @$(ECHO) INSTALL ${1}
+ $(Q)$${PROGRAM_INSTALL} -c -m 755 $${BUILD_DIR}/lib/${1} $${${1}_INSTALLDIR}/
+ $(Q)$${${1}_POSTINSTALL}
+@@ -87,9 +87,9 @@ define ADD_INSTALL_RULE.la
+ install: $${${1}_INSTALLDIR}/$(notdir ${1})
+
+ # Install libtool library ${1}
+- $${${1}_INSTALLDIR}/$(notdir ${1}): ${JLIBTOOL} $${${1}_BUILD}/${1} | $${${1}_INSTALLDIR}
++ $${${1}_INSTALLDIR}/$(notdir ${1}): ${LIBTOOL} $${${1}_BUILD}/${1} | $${${1}_INSTALLDIR}
+ @$(ECHO) INSTALL ${1}
+- $(Q)$${PROGRAM_INSTALL} -c -m 755 $${LOCAL_FLAGS_MIN} $${BUILD_DIR}/lib/${1} $${${1}_INSTALLDIR}/
++ $(Q)$${PROGRAM_INSTALL} -c -m 755 $${BUILD_DIR}/lib/${1} $${${1}_INSTALLDIR}/
+ $(Q)$${${1}_POSTINSTALL}
+
+ endef
+@@ -107,7 +107,7 @@ define ADD_INSTALL_RULE.man
+ install: ${2}/$(notdir ${1})
+
+ # Install manual page ${1}
+- ${2}/$(notdir ${1}): ${JLIBTOOL} ${1} | ${2}
++ ${2}/$(notdir ${1}): ${LIBTOOL} ${1} | ${2}
+ @$(ECHO) INSTALL $(notdir ${1})
+ $(Q)$${PROGRAM_INSTALL} -c -m 644 ${1} ${2}/
+
+@@ -122,9 +122,9 @@ endef
+ define ADD_INSTALL_RULE.dir
+ # Install directory
+ .PHONY: ${1}
+- ${1}: ${JLIBTOOL}
++ ${1}: ${LIBTOOL}
+ @$(ECHO) INSTALL -d -m 755 ${1}
+- $(Q)$${PROGRAM_INSTALL} -d -m 755 ${1}
++ $(Q)$${INSTALL} -d -m 755 ${1}
+ endef
+
+
+diff --git a/scripts/libtool.mk b/scripts/libtool.mk
+index 57915e1..2cb2f7d 100644
+--- a/scripts/libtool.mk
++++ b/scripts/libtool.mk
+@@ -55,7 +55,9 @@ ifeq "${LIBTOOL}" "JLIBTOOL"
+ # Tell GNU Make to use this value, rather than anything specified
+ # on the command line.
+ override LIBTOOL := ${JLIBTOOL}
+-endif # else we're not using jlibtool
++else # else we're not using jlibtool
++ all install: ${LIBTOOL}
++endif
+
+ # When using libtool, it produces a '.libs' directory. Ensure that it
+ # is removed on "make clean", too.
+@@ -69,11 +71,19 @@ clean: .libs_clean
+ # Re-define compilers and linkers
+ #
+ OBJ_EXT = lo
+-COMPILE.c = ${LIBTOOL} --silent --mode=compile ${CC}
+-COMPILE.cxx = ${LIBTOOL} --mode=compile ${CXX}
+-LINK.c = ${LIBTOOL} --silent --mode=link ${CC}
+-LINK.cxx = ${LIBTOOL} --mode=link ${CXX}
+-PROGRAM_INSTALL = ${LIBTOOL} --silent --mode=install ${INSTALL}
++ifeq "${LIBTOOL}" "JLIBTOOL"
++ COMPILE.c = ${LIBTOOL} --silent --mode=compile ${CC}
++ COMPILE.cxx = ${LIBTOOL} --mode=compile ${CXX}
++ LINK.c = ${LIBTOOL} --silent --mode=link ${CC}
++ LINK.cxx = ${LIBTOOL} --mode=link ${CXX}
++ PROGRAM_INSTALL = ${LIBTOOL} --silent --mode=install ${INSTALL}
++else
++ COMPILE.c = ${LIBTOOL} --mode=compile --tag=CC ${CC}
++ COMPILE.cxx = ${LIBTOOL} --mode=compile --tag=CC ${CXX}
++ LINK.c = ${LIBTOOL} --mode=link --tag=CC ${CC} -module -export-dynamic
++ LINK.cxx = ${LIBTOOL} --mode=link --tag=CC ${CXX} -module -export-dynamic
++ PROGRAM_INSTALL = ${LIBTOOL} --mode=install ${INSTALL}
++endif
+
+
+ # LIBTOOL_ENDINGS - Given a library ending in ".a" or ".so", replace that
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-rlm_python-add-PY_INC_DIR.patch b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-rlm_python-add-PY_INC_DIR.patch
new file mode 100644
index 000000000..675940dd6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/freeradius-rlm_python-add-PY_INC_DIR.patch
@@ -0,0 +1,33 @@
+From a0bf65e04d2bbd3271cab94bd5ac93f8e877bfc5 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 27 Jan 2016 05:07:19 -0500
+Subject: [PATCH] rlm_python: add PY_INC_DIR in search dir
+
+Upstream-Status: Pending
+
+configure option --with-rlm-python-include-dir is used to set
+PY_INC_DIR which is never used and it fails to find Python.h,
+so add it into search dir to fix it.
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ src/modules/rlm_python/configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/modules/rlm_python/configure.ac b/src/modules/rlm_python/configure.ac
+index 831a33a..c3792d8 100644
+--- a/src/modules/rlm_python/configure.ac
++++ b/src/modules/rlm_python/configure.ac
+@@ -93,7 +93,7 @@ if test x$with_[]modname != xno; then
+
+ old_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS $PY_CFLAGS"
+- smart_try_dir="$PY_PREFIX/include/python$PY_SYS_VERSION"
++ smart_try_dir="$PY_PREFIX/include/python$PY_SYS_VERSION $PY_INC_DIR"
+ FR_SMART_CHECK_INCLUDE(Python.h)
+ CFLAGS=$old_CFLAGS
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf
new file mode 100644
index 000000000..fa6296297
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd-volatiles.conf
@@ -0,0 +1,2 @@
+d /var/log/radius 0755 radiusd radiusd -
+d /var/run/radiusd 0755 radiusd radiusd -
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service
new file mode 100644
index 000000000..899c4e495
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/radiusd.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=FreeRADIUS high performance RADIUS server.
+After=syslog.target network.target
+
+[Service]
+Type=forking
+PIDFile=@STATEDIR@/run/radiusd/radiusd.pid
+ExecStartPre=-@BASE_BINDIR@/chown -R radiusd.radiusd @STATEDIR@/run/radiusd
+ExecStartPre=-@BASE_BINDIR@/sh -c "if [ ! -f @SYSCONFDIR@/raddb/certs/server.pem ]; then sudo -u radiusd @SYSCONFDIR@/raddb/certs/bootstrap; fi"
+ExecStartPre=@SBINDIR@/radiusd -C
+ExecStart=@SBINDIR@/radiusd -d @SYSCONFDIR@/raddb
+ExecReload=@SBINDIR@/radiusd -C
+ExecReload=@BASE_BINDIR@/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/volatiles.58_radiusd b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/volatiles.58_radiusd
new file mode 100644
index 000000000..8cbdae8a6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/files/volatiles.58_radiusd
@@ -0,0 +1,3 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d radiusd radiusd 0755 /var/run/radiusd none
+d radiusd radiusd 0755 /var/log/radius none
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/freeradius/freeradius_3.0.15.bb b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/freeradius_3.0.15.bb
new file mode 100644
index 000000000..4155a4059
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/freeradius/freeradius_3.0.15.bb
@@ -0,0 +1,222 @@
+DESCRIPTION = "FreeRADIUS is an Internet authentication daemon, which implements the RADIUS \
+protocol, as defined in RFC 2865 (and others). It allows Network Access \
+Servers (NAS boxes) to perform authentication for dial-up users. There are \
+also RADIUS clients available for Web servers, firewalls, Unix logins, and \
+more. Using RADIUS allows authentication and authorization for a network to \
+be centralized, and minimizes the amount of re-configuration which has to be \
+done when adding or deleting new users."
+
+SUMMARY = "High-performance and highly configurable RADIUS server"
+HOMEPAGE = "http://www.freeradius.org/"
+SECTION = "System/Servers"
+LICENSE = "GPLv2 & LGPLv2+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=eb723b61539feef013de476e68b5c50a"
+DEPENDS = "openssl-native openssl libidn libtool libpcap libtalloc"
+
+SRC_URI = "ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-${PV}.tar.bz2 \
+ file://freeradius \
+ file://volatiles.58_radiusd \
+ file://freeradius-enble-user-in-conf.patch \
+ file://freeradius-configure.ac-allow-cross-compilation.patch \
+ file://freeradius-fix-issues-related-to-m4-include-path.patch \
+ file://freeradius-libtool-detection.patch \
+ file://freeradius-configure.ac-add-option-for-libcap.patch \
+ file://freeradius-avoid-searching-host-dirs.patch \
+ file://freeradius-rlm_python-add-PY_INC_DIR.patch \
+ file://freeradius-libtool-do-not-use-jlibtool.patch \
+ file://freeradius-fix-quoting-for-BUILT_WITH.patch \
+ file://freeradius-fix-error-for-expansion-of-macro.patch \
+ file://0001-rlm_mschap-Use-includedir-instead-of-hardcoding-usr-.patch \
+ file://radiusd.service \
+ file://radiusd-volatiles.conf \
+"
+SRC_URI[md5sum] = "0c81a4464ccf1d04f7ef1218a029d37a"
+SRC_URI[sha256sum] = "23267d8505e7b2909f5bdbf3938ca077c1fe122290dc969304d4f3b594f7e3ba"
+
+PARALLEL_MAKE = ""
+
+S = "${WORKDIR}/freeradius-server-${PV}"
+
+EXTRA_OECONF = " --enable-strict-dependencies \
+ --with-docdir=${docdir}/freeradius-${PV} \
+ --with-openssl-includes=${STAGING_INCDIR} \
+ --with-openssl-libraries=${STAGING_LIBDIR} \
+ --without-rlm_ippool \
+ --without-rlm_cache_memcached \
+ --without-rlm_counter \
+ --without-rlm_couchbase \
+ --without-rlm_dbm \
+ --without-rlm_eap_tnc \
+ --without-rlm_eap_ikev2 \
+ --without-rlm_opendirectory \
+ --without-rlm_redis \
+ --without-rlm_rediswho \
+ --without-rlm_sql_db2 \
+ --without-rlm_sql_firebird \
+ --without-rlm_sql_freetds \
+ --without-rlm_sql_iodbc \
+ --without-rlm_sql_oracle \
+ --without-rlm_sql_sybase \
+ --without-rlm_sqlhpwippool \
+ ac_cv_path_PERL=${bindir}/perl \
+ ax_cv_cc_builtin_choose_expr=no \
+ ax_cv_cc_builtin_types_compatible_p=no \
+ ax_cv_cc_builtin_bswap64=no \
+ ax_cv_cc_bounded_attribute=no \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)} \
+ pcre libcap \
+"
+
+PACKAGECONFIG[krb5] = "--with-rlm_krb5,--without-rlm_krb5,krb5"
+PACKAGECONFIG[pam] = "--with-rlm_pam,--without-rlm_pam,libpam"
+PACKAGECONFIG[libcap] = "--with-libcap,--without-libcap,libcap"
+PACKAGECONFIG[ldap] = "--with-rlm_ldap,--without-rlm_ldap,openldap"
+PACKAGECONFIG[mysql] = "--with-rlm_sql_mysql,--without-rlm_sql_mysql,mysql5"
+PACKAGECONFIG[sqlite] = "--with-rlm_sql_sqlite,--without-rlm_sql_sqlite,sqlite3"
+PACKAGECONFIG[unixodbc] = "--with-rlm_sql_unixodbc,--without-rlm_sql_unixodbc,unixodbc"
+PACKAGECONFIG[postgresql] = "--with-rlm_sql_postgresql,--without-rlm_sql_postgresql,postgresql"
+PACKAGECONFIG[pcre] = "--with-pcre,--without-pcre,libpcre"
+PACKAGECONFIG[perl] = "--with-perl=${STAGING_BINDIR_NATIVE}/perl-native/perl --with-rlm_perl,--without-rlm_perl,perl-native perl,perl"
+PACKAGECONFIG[python] = "--with-rlm_python --with-rlm-python-bin=${STAGING_BINDIR_NATIVE}/python-native/python --with-rlm-python-include-dir=${STAGING_INCDIR}/${PYTHON_DIR},--without-rlm_python,python-native python"
+PACKAGECONFIG[rest] = "--with-rlm_rest,--without-rlm_rest,curl json-c"
+PACKAGECONFIG[ruby] = "--with-rlm_ruby,--without-rlm_ruby,ruby"
+
+inherit useradd autotools-brokensep update-rc.d systemd
+
+# This is not a cpan or python based package, but it needs some definitions
+# from cpan-base and python-dir bbclasses for building rlm_perl and rlm_python
+# correctly.
+inherit cpan-base python-dir
+
+# The modules subdirs also need to be processed by autoreconf. Use autogen.sh
+# in order to handle the subdirs correctly.
+do_configure () {
+ ./autogen.sh
+
+ # the configure of rlm_perl needs this to get correct
+ # mod_cflags and mod_ldflags
+ if ${@bb.utils.contains('PACKAGECONFIG', 'perl', 'true', 'false', d)}; then
+ export PERL5LIB="${STAGING_LIBDIR}${PERL_OWN_DIR}/perl/${@get_perl_version(d)}"
+ fi
+
+ oe_runconf
+
+ # we don't need dhcpclient
+ sed -i -e 's/dhcpclient.mk//' ${S}/src/modules/proto_dhcp/all.mk
+}
+
+INITSCRIPT_NAME = "radiusd"
+
+SYSTEMD_SERVICE_${PN} = "radiusd.service"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --no-create-home --shell /bin/false --user-group radiusd"
+
+do_install() {
+ rm -rf ${D}
+ mkdir -p ${D}/${sysconfdir}/logrotate.d
+ mkdir -p ${D}/${sysconfdir}/pam.d
+ mkdir -p ${D}/${sysconfdir}/init.d
+ mkdir -p ${D}/${localstatedir}/lib/radiusd
+ mkdir -p ${D}${sysconfdir}/default/volatiles
+
+ export LD_LIBRARY_PATH=${D}/${libdir}
+ oe_runmake install R=${D} INSTALLSTRIP=""
+
+ # remove unsupported config files
+ rm -f ${D}/${sysconfdir}/raddb/experimental.conf
+
+ # remove scripts that required Perl(DBI)
+ rm -rf ${D}/${bindir}/radsqlrelay
+
+ cp -f ${WORKDIR}/freeradius ${D}/etc/init.d/radiusd
+ rm -f ${D}/${sbindir}/rc.radiusd
+ chmod +x ${D}/${sysconfdir}/init.d/radiusd
+ rm -rf ${D}/${localstatedir}/run/
+ install -m 0644 ${WORKDIR}/volatiles.58_radiusd ${D}${sysconfdir}/default/volatiles/58_radiusd
+
+ chown -R radiusd:radiusd ${D}/${sysconfdir}/raddb/
+ chown -R radiusd:radiusd ${D}/${localstatedir}/lib/radiusd
+
+ # For systemd
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/radiusd.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@STATEDIR@,${localstatedir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ ${D}${systemd_unitdir}/system/radiusd.service
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d/
+ install -m 0644 ${WORKDIR}/radiusd-volatiles.conf ${D}${sysconfdir}/tmpfiles.d/
+ fi
+}
+
+# This is only needed when we install/update on a running target.
+#
+pkg_postinst_${PN} () {
+ if [ -z "$D" ]; then
+ if command -v systemd-tmpfiles >/dev/null; then
+ # create /var/log/radius, /var/run/radiusd
+ systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/radiusd-volatiles.conf
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+
+ # Fix ownership for /etc/raddb/*, /var/lib/radiusd
+ chown -R radiusd:radiusd ${sysconfdir}/raddb
+ chown -R radiusd:radiusd ${localstatedir}/lib/radiusd
+ fi
+}
+
+# We really need the symlink :(
+INSANE_SKIP_${PN} = "dev-so"
+INSANE_SKIP_${PN}-krb5 = "dev-so"
+INSANE_SKIP_${PN}-ldap = "dev-so"
+INSANE_SKIP_${PN}-mysql = "dev-so"
+INSANE_SKIP_${PN}-perl = "dev-so"
+INSANE_SKIP_${PN}-postgresql = "dev-so"
+INSANE_SKIP_${PN}-python = "dev-so"
+INSANE_SKIP_${PN}-unixodbc = "dev-so"
+
+PACKAGES =+ "${PN}-utils ${PN}-ldap ${PN}-krb5 ${PN}-perl \
+ ${PN}-python ${PN}-mysql ${PN}-postgresql ${PN}-unixodbc"
+
+FILES_${PN}-utils = "${bindir}/*"
+
+FILES_${PN}-ldap = "${libdir}/rlm_ldap.so* \
+ ${sysconfdir}/raddb/mods-available/ldap \
+"
+
+FILES_${PN}-krb5 = "${libdir}/rlm_krb5.so* \
+ ${sysconfdir}/raddb/mods-available/krb5 \
+"
+
+FILES_${PN}-perl = "${libdir}/rlm_perl.so* \
+ ${sysconfdir}/raddb/mods-config/perl \
+ ${sysconfdir}/raddb/mods-available/perl \
+"
+
+FILES_${PN}-python = "${libdir}/rlm_python.so* \
+ ${sysconfdir}/raddb/mods-config/python \
+ ${sysconfdir}/raddb/mods-available/python \
+"
+
+FILES_${PN}-mysql = "${libdir}/rlm_sql_mysql.so* \
+ ${sysconfdir}/raddb/mods-config/sql/*/mysql \
+ ${sysconfdir}/raddb/mods-available/sql \
+"
+
+FILES_${PN}-postgresql = "${libdir}/rlm_sql_postgresql.so* \
+ ${sysconfdir}/raddb/mods-config/sql/*/postgresql \
+"
+
+FILES_${PN}-unixodbc = "${libdir}/rlm_sql_unixodbc.so*"
+
+FILES_${PN} =+ "${libdir}/rlm_*.so* ${libdir}/proto_*so*"
+
+RDEPENDS_${PN} += "perl"
+RDEPENDS_${PN}-utils = "${PN}"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch
new file mode 100644
index 000000000..d4764f586
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/0001-rcp-fix-to-work-with-large-files.patch
@@ -0,0 +1,31 @@
+Upstream-Status: Pending
+
+Subject: rcp: fix to work with large files
+
+When we copy file by rcp command, if the file > 2GB, it will fail.
+The cause is that it used incorrect data type on file size in sink() of rcp.
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ src/rcp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/rcp.c b/src/rcp.c
+index 21f55b6..bafa35f 100644
+--- a/src/rcp.c
++++ b/src/rcp.c
+@@ -876,9 +876,9 @@ sink (int argc, char *argv[])
+ enum
+ { YES, NO, DISPLAYED } wrerr;
+ BUF *bp;
+- off_t i, j;
++ off_t i, j, size;
+ int amt, count, exists, first, mask, mode, ofd, omode;
+- int setimes, size, targisdir, wrerrno;
++ int setimes, targisdir, wrerrno;
+ char ch, *cp, *np, *targ, *vect[1], buf[BUFSIZ];
+ const char *why;
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch
new file mode 100644
index 000000000..24c134fca
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/fix-disable-ipv6.patch
@@ -0,0 +1,83 @@
+Upstream: http://www.mail-archive.com/bug-inetutils@gnu.org/msg02103.html
+
+Upstream-Status: Pending
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ ping/ping_common.h | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/ping/ping_common.h b/ping/ping_common.h
+index 1dfd1b5..3bfbd12 100644
+--- a/ping/ping_common.h
++++ b/ping/ping_common.h
+@@ -17,10 +17,14 @@
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see `http://www.gnu.org/licenses/'. */
+
++#include <config.h>
++
+ #include <netinet/in_systm.h>
+ #include <netinet/in.h>
+ #include <netinet/ip.h>
++#ifdef HAVE_IPV6
+ #include <netinet/icmp6.h>
++#endif
+ #include <icmp.h>
+ #include <error.h>
+ #include <progname.h>
+@@ -62,7 +66,12 @@ struct ping_stat
+ want to follow the traditional behaviour of ping. */
+ #define DEFAULT_PING_COUNT 0
+
++#ifdef HAVE_IPV6
+ #define PING_HEADER_LEN (USE_IPV6 ? sizeof (struct icmp6_hdr) : ICMP_MINLEN)
++#else
++#define PING_HEADER_LEN (ICMP_MINLEN)
++#endif
++
+ #define PING_TIMING(s) ((s) >= sizeof (struct timeval))
+ #define PING_DATALEN (64 - PING_HEADER_LEN) /* default data length */
+
+@@ -74,13 +83,20 @@ struct ping_stat
+ (t).tv_usec = ((i)%PING_PRECISION)*(1000000/PING_PRECISION) ;\
+ } while (0)
+
++#ifdef HAVE_IPV6
+ /* FIXME: Adjust IPv6 case for options and their consumption. */
+ #define _PING_BUFLEN(p, u) ((u)? ((p)->ping_datalen + sizeof (struct icmp6_hdr)) : \
+ (MAXIPLEN + (p)->ping_datalen + ICMP_TSLEN))
+
++#else
++#define _PING_BUFLEN(p, u) (MAXIPLEN + (p)->ping_datalen + ICMP_TSLEN)
++#endif
++
++#ifdef HAVE_IPV6
+ typedef int (*ping_efp6) (int code, void *closure, struct sockaddr_in6 * dest,
+ struct sockaddr_in6 * from, struct icmp6_hdr * icmp,
+ int datalen);
++#endif
+
+ typedef int (*ping_efp) (int code,
+ void *closure,
+@@ -89,13 +105,17 @@ typedef int (*ping_efp) (int code,
+ struct ip * ip, icmphdr_t * icmp, int datalen);
+
+ union event {
++#ifdef HAVE_IPV6
+ ping_efp6 handler6;
++#endif
+ ping_efp handler;
+ };
+
+ union ping_address {
+ struct sockaddr_in ping_sockaddr;
++#ifdef HAVE_IPV6
+ struct sockaddr_in6 ping_sockaddr6;
++#endif
+ };
+
+ typedef struct ping_data PING;
+--
+2.8.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch
new file mode 100644
index 000000000..3da4e9f55
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch
@@ -0,0 +1,29 @@
+From 552a7d64ad4a7188a9b7cd89933ae7caf7ebfe90 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier at gentoo.org>
+Date: Thu, 18 Nov 2010 16:59:14 -0500
+Subject: [PATCH gnulib] printf-parse: pull in features.h for __GLIBC__
+
+Upstream-Status: Pending
+
+Signed-off-by: Mike Frysinger <vapier at gentoo.org>
+---
+ lib/printf-parse.h | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/lib/printf-parse.h b/lib/printf-parse.h
+index 67a4a2a..3bd6152 100644
+--- a/lib/printf-parse.h
++++ b/lib/printf-parse.h
+@@ -25,6 +25,9 @@
+
+ #include "printf-args.h"
+
++#ifdef HAVE_FEATURES_H
++# include <features.h> /* for __GLIBC__ */
++#endif
+
+ /* Flags */
+ #define FLAG_GROUP 1 /* ' flag */
+--
+1.7.3.2
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch
new file mode 100644
index 000000000..b13bb9229
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.8-0003-wchar.patch
@@ -0,0 +1,14 @@
+Upstream-Status: Pending
+
+--- inetutils-1.8/lib/wchar.in.h
++++ inetutils-1.8/lib/wchar.in.h
+@@ -70,6 +70,9 @@
+ /* The include_next requires a split double-inclusion guard. */
+ #if @HAVE_WCHAR_H@
+ # @INCLUDE_NEXT@ @NEXT_WCHAR_H@
++#else
++# include <stddef.h>
++# define MB_CUR_MAX 1
+ #endif
+
+ #undef _GL_ALREADY_INCLUDING_WCHAR_H
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch
new file mode 100644
index 000000000..2592989a9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-1.9-PATH_PROCNET_DEV.patch
@@ -0,0 +1,26 @@
+inetutils: define PATH_PROCNET_DEV if not already defined
+
+this prevents the following compilation error :
+system/linux.c:401:15: error: 'PATH_PROCNET_DEV' undeclared (first use in this function)
+
+this patch comes from :
+ http://repository.timesys.com/buildsources/i/inetutils/inetutils-1.9/
+
+Upstream-Status: Inappropriate [not author]
+
+Signed-of-by: Eric Bénard <eric@eukrea.com>
+---
+diff -Naur inetutils-1.9.orig/ifconfig/system/linux.c inetutils-1.9/ifconfig/system/linux.c
+--- inetutils-1.9.orig/ifconfig/system/linux.c 2012-01-04 16:31:36.000000000 -0500
++++ inetutils-1.9/ifconfig/system/linux.c 2012-01-04 16:40:53.000000000 -0500
+@@ -49,6 +49,10 @@
+ #include "../ifconfig.h"
+
+
++#ifndef PATH_PROCNET_DEV
++ #define PATH_PROCNET_DEV "/proc/net/dev"
++#endif
++
+ /* ARPHRD stuff. */
+
+ static void
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch
new file mode 100644
index 000000000..ff3abd86a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/inetutils-only-check-pam_appl.h-when-pam-enabled.patch
@@ -0,0 +1,40 @@
+Only check security/pam_appl.h which is provided by package libpam when pam is
+enabled.
+
+Upstream-Status: Pending
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/configure.ac b/configure.ac
+index b35e672..e78a751 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -195,6 +195,19 @@ fi
+
+ # See if we have libpam.a. Investigate PAM versus Linux-PAM.
+ if test "$with_pam" = yes ; then
++ AC_CHECK_HEADERS([security/pam_appl.h], [], [], [
++#include <sys/types.h>
++#ifdef HAVE_NETINET_IN_SYSTM_H
++# include <netinet/in_systm.h>
++#endif
++#include <netinet/in.h>
++#ifdef HAVE_NETINET_IP_H
++# include <netinet/ip.h>
++#endif
++#ifdef HAVE_SYS_PARAM_H
++# include <sys/param.h>
++#endif
++])
+ AC_CHECK_LIB(dl, dlopen, LIBDL=-ldl)
+ AC_CHECK_LIB(pam, pam_authenticate, LIBPAM=-lpam)
+ if test "$ac_cv_lib_pam_pam_authenticate" = yes ; then
+@@ -587,7 +600,7 @@ AC_HEADER_DIRENT
+ AC_CHECK_HEADERS([arpa/nameser.h errno.h fcntl.h features.h \
+ glob.h memory.h netinet/ether.h netinet/in_systm.h \
+ netinet/ip.h netinet/ip_icmp.h netinet/ip_var.h \
+- security/pam_appl.h shadow.h \
++ shadow.h \
+ stdarg.h stdlib.h string.h stropts.h sys/tty.h \
+ sys/utsname.h sys/ptyvar.h sys/msgbuf.h sys/filio.h \
+ sys/ioctl_compat.h sys/cdefs.h sys/stream.h sys/mkdev.h \
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rexec.xinetd.inetutils b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rexec.xinetd.inetutils
new file mode 100644
index 000000000..30e81ef45
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rexec.xinetd.inetutils
@@ -0,0 +1,20 @@
+# default: off
+# description:
+# Rexecd is the server for the rexec program. The server provides remote
+# execution facilities with authentication based on user names and
+# passwords.
+#
+service exec
+{
+ socket_type = stream
+ protocol = tcp
+ flags = NAMEINARGS
+ wait = no
+ user = root
+ group = root
+ log_on_success += USERID
+ log_on_failure += USERID
+ server = @SBINDIR@/tcpd
+ server_args = @SBINDIR@/in.rexecd
+ disable = yes
+}
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rlogin.xinetd.inetutils b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rlogin.xinetd.inetutils
new file mode 100644
index 000000000..21b55da9a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rlogin.xinetd.inetutils
@@ -0,0 +1,23 @@
+# default: off
+# description:
+# Rlogind is a server for the rlogin program. The server provides remote
+# execution with authentication based on privileged port numbers from trusted
+# host
+#
+service login
+{
+ socket_type = stream
+ protocol = tcp
+ flags = NAMEINARGS
+ wait = no
+ user = root
+ group = root
+ log_on_success += USERID
+ log_on_failure += USERID
+ server = @SBINDIR@/tcpd
+ server_args = @SBINDIR@/in.rlogind -a
+ disable = yes
+}
+
+
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rsh.xinetd.inetutils b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rsh.xinetd.inetutils
new file mode 100644
index 000000000..2b894a74b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/rsh.xinetd.inetutils
@@ -0,0 +1,21 @@
+# default: off
+# description:
+# The rshd server is a server for the rcmd(3) routine and,
+# consequently, for the rsh(1) program. The server provides
+# remote execution facilities with authentication based on
+# privileged port numbers from trusted hosts.
+#
+service shell
+{
+ socket_type = stream
+ protocol = tcp
+ flags = NAMEINARGS
+ wait = no
+ user = root
+ group = root
+ log_on_success += USERID
+ log_on_failure += USERID
+ server = @SBINDIR@/tcpd
+ server_args = @SBINDIR@/in.rshd -aL
+ disable = yes
+}
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/telnet.xinetd.inetutils b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/telnet.xinetd.inetutils
new file mode 100644
index 000000000..2d9a0408c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/telnet.xinetd.inetutils
@@ -0,0 +1,13 @@
+# default: on
+# description: The telnet server serves telnet sessions; it uses \
+# unencrypted username/password pairs for authentication.
+service telnet
+{
+ disable = no
+ flags = REUSE
+ socket_type = stream
+ wait = no
+ user = root
+ server = @SBINDIR@/in.telnetd
+ log_on_failure += USERID
+}
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/tftpd.xinetd.inetutils b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/tftpd.xinetd.inetutils
new file mode 100644
index 000000000..67b44c43e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/tftpd.xinetd.inetutils
@@ -0,0 +1,19 @@
+# default: off
+# description:
+# Tftpd is a server which supports the Internet Trivial File Transfer
+# Pro-tocol (RFC 783). The TFTP server operates at the port indicated
+# in the tftp service description; see services(5).
+#
+service tftp
+{
+ disable = yes
+ socket_type = dgram
+ protocol = udp
+ flags = IPv6
+ wait = yes
+ user = root
+ group = root
+ server = @SBINDIR@/in.tftpd
+ server_args = /tftpboot
+}
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/version.patch b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/version.patch
new file mode 100644
index 000000000..532a0e5c0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils/version.patch
@@ -0,0 +1,17 @@
+Upstream-Status: Pending
+
+remove m4_esyscmd function
+
+Signed-off-by: Chunrong Guo <b40290@freescale.com>
+--- inetutils-1.9.1/configure.ac 2012-01-06 22:05:05.000000000 +0800
++++ inetutils-1.9.1/configure.ac 2012-11-12 14:01:11.732957019 +0800
+@@ -20,8 +20,7 @@
+
+ AC_PREREQ(2.59)
+
+-AC_INIT([GNU inetutils],
+- m4_esyscmd([build-aux/git-version-gen .tarball-version 's/inetutils-/v/;s/_/./g']),
++AC_INIT([GNU inetutils],[1.9.4],
+ [bug-inetutils@gnu.org])
+
+ AC_CONFIG_SRCDIR([src/inetd.c])
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils_1.9.4.bb b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils_1.9.4.bb
new file mode 100644
index 000000000..190cd5f14
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/inetutils/inetutils_1.9.4.bb
@@ -0,0 +1,206 @@
+DESCRIPTION = "The GNU inetutils are a collection of common \
+networking utilities and servers including ftp, ftpd, rcp, \
+rexec, rlogin, rlogind, rsh, rshd, syslog, syslogd, talk, \
+talkd, telnet, telnetd, tftp, tftpd, and uucpd."
+HOMEPAGE = "http://www.gnu.org/software/inetutils"
+SECTION = "net"
+DEPENDS = "ncurses netbase readline"
+
+LICENSE = "GPLv3"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=0c7051aef9219dc7237f206c5c4179a7"
+
+SRC_URI = "${GNU_MIRROR}/inetutils/inetutils-${PV}.tar.gz \
+ file://version.patch \
+ file://inetutils-1.8-0001-printf-parse-pull-in-features.h-for-__GLIBC__.patch \
+ file://inetutils-1.8-0003-wchar.patch \
+ file://rexec.xinetd.inetutils \
+ file://rlogin.xinetd.inetutils \
+ file://rsh.xinetd.inetutils \
+ file://telnet.xinetd.inetutils \
+ file://tftpd.xinetd.inetutils \
+ file://inetutils-1.9-PATH_PROCNET_DEV.patch \
+ file://inetutils-only-check-pam_appl.h-when-pam-enabled.patch \
+ file://0001-rcp-fix-to-work-with-large-files.patch \
+"
+
+SRC_URI[md5sum] = "04852c26c47cc8c6b825f2b74f191f52"
+SRC_URI[sha256sum] = "be8f75eff936b8e41b112462db51adf689715658a1b09e0d6b05d11ec92cc616"
+
+inherit autotools gettext update-alternatives texinfo
+
+acpaths = "-I ./m4"
+
+SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', '', 'file://fix-disable-ipv6.patch', d)}"
+
+PACKAGECONFIG ??= "ftp uucpd \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'ipv6 ping6', '', d)} \
+ "
+PACKAGECONFIG[ftp] = "--enable-ftp,--disable-ftp,readline"
+PACKAGECONFIG[uucpd] = "--enable-uucpd,--disable-uucpd,readline"
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6 gl_cv_socket_ipv6=no,"
+PACKAGECONFIG[ping6] = "--enable-ping6,--disable-ping6,"
+
+EXTRA_OECONF = "--with-ncurses-include-dir=${STAGING_INCDIR} \
+ inetutils_cv_path_login=${base_bindir}/login \
+ --with-libreadline-prefix=${STAGING_LIBDIR} \
+ --enable-rpath=no \
+"
+
+EXTRA_OECONF_append_libc-musl = " --disable-rsh --disable-rcp --disable-rlogin "
+
+do_configure_prepend () {
+ export HELP2MAN='true'
+ cp ${STAGING_DATADIR_NATIVE}/gettext/config.rpath ${S}/build-aux/config.rpath
+ rm -f ${S}/glob/configure*
+}
+
+do_install_append () {
+ install -m 0755 -d ${D}${base_sbindir}
+ install -m 0755 -d ${D}${sbindir}
+ install -m 0755 -d ${D}${sysconfdir}/xinetd.d
+ if [ "${base_bindir}" != "${bindir}" ] ; then
+ install -m 0755 -d ${D}${base_bindir}
+ mv ${D}${bindir}/ping* ${D}${base_bindir}/
+ mv ${D}${bindir}/hostname ${D}${base_bindir}/
+ fi
+ mv ${D}${bindir}/ifconfig ${D}${base_sbindir}/
+ mv ${D}${libexecdir}/syslogd ${D}${base_sbindir}/
+ mv ${D}${libexecdir}/tftpd ${D}${sbindir}/in.tftpd
+ mv ${D}${libexecdir}/telnetd ${D}${sbindir}/in.telnetd
+ mv ${D}${libexecdir}/rexecd ${D}${sbindir}/in.rexecd
+ if [ -e ${D}${libexecdir}/rlogind ]; then
+ mv ${D}${libexecdir}/rlogind ${D}${sbindir}/in.rlogind
+ fi
+ if [ -e ${D}${libexecdir}/rshd ]; then
+ mv ${D}${libexecdir}/rshd ${D}${sbindir}/in.rshd
+ fi
+ if [ -e ${D}${libexecdir}/talkd ]; then
+ mv ${D}${libexecdir}/talkd ${D}${sbindir}/in.talkd
+ fi
+ mv ${D}${libexecdir}/uucpd ${D}${sbindir}/in.uucpd
+ mv ${D}${libexecdir}/* ${D}${bindir}/
+ cp ${WORKDIR}/rexec.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rexec
+ cp ${WORKDIR}/rlogin.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rlogin
+ cp ${WORKDIR}/rsh.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/rsh
+ cp ${WORKDIR}/telnet.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/telnet
+ cp ${WORKDIR}/tftpd.xinetd.inetutils ${D}/${sysconfdir}/xinetd.d/tftpd
+
+ sed -e 's,@SBINDIR@,${sbindir},g' -i ${D}/${sysconfdir}/xinetd.d/*
+ if [ -e ${D}${libdir}/charset.alias ]; then
+ rm -rf ${D}${libdir}/charset.alias
+ fi
+ rm -rf ${D}${libexecdir}/
+ # remove usr/lib if empty
+ rmdir ${D}${libdir} || true
+}
+
+PACKAGES =+ "${PN}-ping ${PN}-ping6 ${PN}-hostname ${PN}-ifconfig \
+${PN}-tftp ${PN}-logger ${PN}-traceroute ${PN}-syslogd \
+${PN}-ftp ${PN}-ftpd ${PN}-tftpd ${PN}-telnet ${PN}-telnetd ${PN}-inetd \
+${PN}-rsh ${PN}-rshd"
+
+# The packages tftpd, telnetd and rshd conflict with the ones
+# provided by netkit, so add the corresponding -dbg packages
+# for them to avoid the confliction between the dbg package
+# of inetutils and netkit.
+PACKAGES =+ "${PN}-tftpd-dbg ${PN}-telnetd-dbg ${PN}-rshd-dbg"
+NOAUTOPACKAGEDEBUG = "1"
+
+ALTERNATIVE_PRIORITY = "79"
+ALTERNATIVE_${PN} = "talk whois"
+ALTERNATIVE_LINK_NAME[talkd] = "${sbindir}/in.talkd"
+ALTERNATIVE_LINK_NAME[uucpd] = "${sbindir}/in.uucpd"
+
+ALTERNATIVE_PRIORITY_${PN}-logger = "60"
+ALTERNATIVE_${PN}-logger = "logger"
+ALTERNATIVE_${PN}-syslogd = "syslogd"
+ALTERNATIVE_LINK_NAME[syslogd] = "${base_sbindir}/syslogd"
+
+ALTERNATIVE_${PN}-ftp = "ftp"
+ALTERNATIVE_${PN}-ftpd = "ftpd"
+ALTERNATIVE_${PN}-tftp = "tftp"
+ALTERNATIVE_${PN}-tftpd = "tftpd"
+ALTERNATIVE_LINK_NAME[tftpd] = "${sbindir}/tftpd"
+ALTERNATIVE_TARGET[tftpd] = "${sbindir}/in.tftpd"
+
+ALTERNATIVE_${PN}-telnet = "telnet"
+ALTERNATIVE_${PN}-telnetd = "telnetd"
+ALTERNATIVE_LINK_NAME[telnetd] = "${sbindir}/telnetd"
+ALTERNATIVE_TARGET[telnetd] = "${sbindir}/in.telnetd"
+
+ALTERNATIVE_${PN}-rsh = "rcp rexec rlogin rsh"
+ALTERNATIVE_${PN}-rshd = "rshd rexecd rlogind"
+ALTERNATIVE_LINK_NAME[rshd] = "${sbindir}/rshd"
+ALTERNATIVE_TARGET[rshd] = "${sbindir}/in.rshd"
+ALTERNATIVE_LINK_NAME[rexecd] = "${sbindir}/rexecd"
+ALTERNATIVE_TARGET[rexecd] = "${sbindir}/in.rexecd"
+ALTERNATIVE_LINK_NAME[rlogind] = "${sbindir}/rlogind"
+ALTERNATIVE_TARGET[rlogind] = "${sbindir}/in.rlogind"
+
+ALTERNATIVE_${PN}-inetd= "inetd"
+ALTERNATIVE_${PN}-traceroute = "traceroute"
+
+ALTERNATIVE_${PN}-hostname = "hostname"
+ALTERNATIVE_LINK_NAME[hostname] = "${base_bindir}/hostname"
+
+ALTERNATIVE_${PN}-doc = "hostname.1 dnsdomainname.1 logger.1 syslogd.8"
+ALTERNATIVE_LINK_NAME[hostname.1] = "${mandir}/man1/hostname.1"
+ALTERNATIVE_LINK_NAME[dnsdomainname.1] = "${mandir}/man1/dnsdomainname.1"
+ALTERNATIVE_LINK_NAME[logger.1] = "${mandir}/man1/logger.1"
+ALTERNATIVE_LINK_NAME[syslogd.8] = "${mandir}/man8/syslogd.8"
+
+ALTERNATIVE_${PN}-ifconfig = "ifconfig"
+ALTERNATIVE_LINK_NAME[ifconfig] = "${base_sbindir}/ifconfig"
+
+ALTERNATIVE_${PN}-ping = "ping"
+ALTERNATIVE_LINK_NAME[ping] = "${base_bindir}/ping"
+
+ALTERNATIVE_${PN}-ping6 = "${@bb.utils.filter('PACKAGECONFIG', 'ping6', d)}"
+ALTERNATIVE_LINK_NAME[ping6] = "${base_bindir}/ping6"
+
+
+FILES_${PN}-dbg += "${base_bindir}/.debug ${base_sbindir}/.debug ${bindir}/.debug ${sbindir}/.debug"
+FILES_${PN}-ping = "${base_bindir}/ping.${BPN}"
+FILES_${PN}-ping6 = "${base_bindir}/ping6.${BPN}"
+FILES_${PN}-hostname = "${base_bindir}/hostname.${BPN}"
+FILES_${PN}-ifconfig = "${base_sbindir}/ifconfig.${BPN}"
+FILES_${PN}-traceroute = "${bindir}/traceroute.${BPN}"
+FILES_${PN}-logger = "${bindir}/logger.${BPN}"
+
+FILES_${PN}-syslogd = "${base_sbindir}/syslogd.${BPN}"
+RCONFLICTS_${PN}-syslogd = "rsyslog busybox-syslog sysklogd syslog-ng"
+
+FILES_${PN}-ftp = "${bindir}/ftp.${BPN}"
+
+FILES_${PN}-tftp = "${bindir}/tftp.${BPN}"
+FILES_${PN}-telnet = "${bindir}/telnet.${BPN}"
+FILES_${PN}-rsh = "${bindir}/rsh.${BPN} ${bindir}/rlogin.${BPN} ${bindir}/rexec.${BPN} ${bindir}/rcp.${BPN}"
+
+FILES_${PN}-rshd = "${sbindir}/in.rshd ${sbindir}/in.rlogind ${sbindir}/in.rexecd \
+ ${sysconfdir}/xinetd.d/rsh ${sysconfdir}/xinetd.d/rlogin ${sysconfdir}/xinetd.d/rexec"
+FILES_${PN}-rshd-dbg = "${sbindir}/.debug/in.rshd ${sbindir}/.debug/in.rlogind ${sbindir}/.debug/in.rexecd"
+RDEPENDS_${PN}-rshd += "xinetd tcp-wrappers"
+RCONFLICTS_${PN}-rshd += "netkit-rshd"
+RPROVIDES_${PN}-rshd = "rshd"
+
+FILES_${PN}-ftpd = "${bindir}/ftpd.${BPN}"
+FILES_${PN}-ftpd-dbg = "${bindir}/.debug/ftpd.${BPN}"
+RDEPENDS_${PN}-ftpd += "xinetd"
+
+FILES_${PN}-tftpd = "${sbindir}/in.tftpd ${sysconfdir}/xinetd.d/tftpd"
+FILES_${PN}-tftpd-dbg = "${sbindir}/.debug/in.tftpd"
+RCONFLICTS_${PN}-tftpd += "netkit-tftpd"
+RDEPENDS_${PN}-tftpd += "xinetd"
+
+FILES_${PN}-telnetd = "${sbindir}/in.telnetd ${sysconfdir}/xinetd.d/telnet"
+FILES_${PN}-telnetd-dbg = "${sbindir}/.debug/in.telnetd"
+RCONFLICTS_${PN}-telnetd += "netkit-telnetd"
+RPROVIDES_${PN}-telnetd = "telnetd"
+RDEPENDS_${PN}-telnetd += "xinetd"
+
+FILES_${PN}-inetd = "${bindir}/inetd.${BPN}"
+
+RDEPENDS_${PN} = "xinetd"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/lftp/files/fix-gcc-6-conflicts-signbit.patch b/meta-openembedded/meta-networking/recipes-connectivity/lftp/files/fix-gcc-6-conflicts-signbit.patch
new file mode 100644
index 000000000..952232b7a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/lftp/files/fix-gcc-6-conflicts-signbit.patch
@@ -0,0 +1,44 @@
+--- lftp-4.6.3a/src/NetAccess.cc.orig 2016-06-18 10:25:51.063358981 -0400
++++ lftp-4.6.3a/src/NetAccess.cc 2016-06-18 10:26:04.143359209 -0400
+@@ -21,7 +21,7 @@
+
+ #include <errno.h>
+ #include <assert.h>
+-#include <math.h>
++#include <cmath>
+ #include <sys/types.h>
+
+ #include "NetAccess.h"
+--- lftp-4.6.3a/src/Speedometer.cc.orig 2016-06-18 10:24:58.895358073 -0400
++++ lftp-4.6.3a/src/Speedometer.cc 2016-06-18 10:25:10.879358281 -0400
+@@ -18,7 +18,7 @@
+ */
+
+ #include <config.h>
+-#include <math.h>
++#include <cmath>
+ #include <stdlib.h>
+ #include "Speedometer.h"
+ #include "misc.h"
+--- lftp-4.6.3a/src/FileCopy.cc.orig 2016-06-18 10:24:15.939357325 -0400
++++ lftp-4.6.3a/src/FileCopy.cc 2016-06-18 10:24:24.583357475 -0400
+@@ -36,7 +36,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+-#include <math.h>
++#include <cmath>
+ #include <stddef.h>
+ #include "FileCopy.h"
+ #include "url.h"
+--- lftp-4.6.3a/src/ResMgr.cc.orig 2016-06-18 10:23:31.387356549 -0400
++++ lftp-4.6.3a/src/ResMgr.cc 2016-06-18 10:23:41.771356729 -0400
+@@ -23,7 +23,7 @@
+ #include <ctype.h>
+ #include <unistd.h>
+ #include <stdlib.h>
+-#include <math.h>
++#include <cmath>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <errno.h>
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.7.7.bb b/meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.7.7.bb
new file mode 100644
index 000000000..b6b65da73
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/lftp/lftp_4.7.7.bb
@@ -0,0 +1,34 @@
+DESCRIPTION = "LFTP is a sophisticated file transfer program with \
+ command line interface. It supports FTP, HTTP, \
+ FISH, SFTP, HTTPS and FTPS protocols"
+HOMEPAGE = "http://lftp.yar.ru/"
+SECTION = "console/network"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "http://lftp.yar.ru/ftp/lftp-${PV}.tar.bz2 \
+ file://fix-gcc-6-conflicts-signbit.patch \
+ "
+SRC_URI[md5sum] = "3701e7675baa5619c92622eb141c8301"
+SRC_URI[sha256sum] = "fe441f20a9a317cfb99a8b8e628ba0457df472b6d93964d17374d5b5ebdf9280"
+
+inherit autotools gettext pkgconfig
+
+acpaths = "-I ./m4"
+
+EXTRA_OECONF += "--with-modules"
+
+PACKAGECONFIG ??= "libidn openssl zlib gnutls readline expat"
+PACKAGECONFIG[libidn] = "--with-libidn, --without-libidn, libidn"
+PACKAGECONFIG[openssl] = "--with-openssl, --without-openssl, openssl"
+PACKAGECONFIG[zlib] = "--with-zlib=${STAGING_INCDIR}/.., --without-zlib, zlib"
+PACKAGECONFIG[gnutls] = "--with-gnutls, --without-gnutls, gnutls"
+PACKAGECONFIG[readline] = "--with-readline=${STAGING_INCDIR}/.. --with-readline-inc=${STAGING_INCDIR} --with-readline-lib=-lreadline, --with-readline=no, readline"
+PACKAGECONFIG[expat] = "--with-expat=${STAGING_INCDIR}/.. --with-expat-inc=${STAGING_INCDIR} --with-expat-lib=-lexpat, , expat"
+
+do_install_append() {
+ rm -rf ${D}${libdir}/charset.alias
+}
+
+FILES_${PN}-dbg += "${libdir}/lftp/${PV}/.debug"
+RDEPENDS_${PN} = "perl bash readline"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.12.bb b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.12.bb
new file mode 100644
index 000000000..e579de507
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/libdnet/libdnet_1.12.bb
@@ -0,0 +1,16 @@
+SUMMARY = "dumb networking library"
+HOMEPAGE = "http://code.google.com/p/libdnet/"
+SECTION = "libs"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0036c1b155f4e999f3e0a373490b5db9"
+
+SRC_URI = "git://github.com/dugsong/libdnet.git;nobranch=1"
+SRCREV = "12fca29a6d4e99d1b923d6820887fe7b24226904"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+acpaths = "-I ./config/"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_2.8.0.bb b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_2.8.0.bb
new file mode 100644
index 000000000..736cce1b0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/mbedtls/mbedtls_2.8.0.bb
@@ -0,0 +1,42 @@
+SUMMARY = "Lightweight crypto and SSL/TLS library"
+DESCRIPTION = "mbedtls is a lean open source crypto library \
+for providing SSL and TLS support in your programs. It offers \
+an intuitive API and documented header files, so you can actually \
+understand what the code does. It features: \
+ \
+ - Symmetric algorithms, like AES, Blowfish, Triple-DES, DES, ARC4, \
+ Camellia and XTEA \
+ - Hash algorithms, like SHA-1, SHA-2, RIPEMD-160 and MD5 \
+ - Entropy pool and random generators, like CTR-DRBG and HMAC-DRBG \
+ - Public key algorithms, like RSA, Elliptic Curves, Diffie-Hellman, \
+ ECDSA and ECDH \
+ - SSL v3 and TLS 1.0, 1.1 and 1.2 \
+ - Abstraction layers for ciphers, hashes, public key operations, \
+ platform abstraction and threading \
+"
+
+HOMEPAGE = "https://tls.mbed.org/"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=302d50a6369f5f22efdb674db908167a"
+
+SECTION = "libdevel"
+
+SRC_URI = "https://tls.mbed.org/download/mbedtls-${PV}-apache.tgz"
+
+SRC_URI[md5sum] = "2d4b0e2cb844efde1e73d3bcd9731fef"
+SRC_URI[sha256sum] = "ab8b62b995781bcf22e87a265ed06267f87c3041198e996b44441223d19fa9c3"
+
+inherit cmake
+
+PACKAGECONFIG ??= "shared-libs programs"
+PACKAGECONFIG[shared-libs] = "-DUSE_SHARED_MBEDTLS_LIBRARY=ON,-USE_SHARED_MBEDTLS_LIBRARY=OFF"
+PACKAGECONFIG[programs] = "-DENABLE_PROGRAMS=ON,-DENABLE_PROGRAMS=OFF"
+
+EXTRA_OECMAKE = "-DENABLE_TESTING=OFF -DLIB_INSTALL_DIR:STRING=${libdir}"
+
+PROVIDES += "polarssl"
+RPROVIDES_${PN} = "polarssl"
+
+PACKAGES =+ "${PN}-programs"
+FILES_${PN}-programs = "${bindir}/"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/miniupnpd/miniupnpd_2.0.bb b/meta-openembedded/meta-networking/recipes-connectivity/miniupnpd/miniupnpd_2.0.bb
new file mode 100644
index 000000000..c6f36e137
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/miniupnpd/miniupnpd_2.0.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Lightweight UPnP IGD daemon"
+DESCRIPTION = "The miniUPnP daemon is an UPnP IGD (internet gateway device) \
+which provide NAT traversal services to any UPnP enabled client on \
+the network."
+
+SECTION = "networking"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aa71c78c373ccfe0ff207af0cd966d91"
+
+inherit autotools gettext pkgconfig
+
+DEPENDS += "iptables net-tools util-linux libmnl libnetfilter-conntrack"
+
+SRC_URI = "http://miniupnp.tuxfamily.org/files/download.php?file=${P}.tar.gz;downloadfilename=${P}.tar.gz \
+"
+SRC_URI[md5sum] = "1c07a215dd9b362e75a9efc05e2fb3b4"
+SRC_URI[sha256sum] = "d96aa3a00e0f5490826bba3cb97e68cd27479e5839adac4b9bcb66eae786bfb7"
+
+IPV6 = "${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', '--ipv6', '', d)}"
+
+do_compile() {
+ cd ${S}
+ CONFIG_OPTIONS="${IPV6} --leasefile --vendorcfg" oe_runmake -f Makefile.linux
+}
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install ${S}/miniupnpd ${D}/${sbindir}
+ install -d ${D}/${sysconfdir}/${BPN}
+ install ${S}/netfilter/iptables_init.sh ${D}/${sysconfdir}/${BPN}
+ install ${S}/netfilter/iptables_removeall.sh ${D}/${sysconfdir}/${BPN}
+ install ${S}/netfilter/ip6tables_init.sh ${D}/${sysconfdir}/${BPN}
+ install ${S}/netfilter/ip6tables_removeall.sh ${D}/${sysconfdir}/${BPN}
+ install -m 0644 -b ${S}/miniupnpd.conf ${D}/${sysconfdir}/${BPN}
+ install -d ${D}/${sysconfdir}/init.d
+ install ${S}/linux/miniupnpd.init.d.script ${D}/${sysconfdir}/init.d/miniupnpd
+}
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.2.8.bb b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.2.8.bb
new file mode 100644
index 000000000..1b604ad52
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager-openvpn_1.2.8.bb
@@ -0,0 +1,39 @@
+SUMMARY = "NetworkManager-openvpn-plugin"
+SECTION = "net/misc"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=100d5a599bead70ddcd70dcd73f2e29c"
+
+DEPENDS = "dbus dbus-glib networkmanager openvpn intltool-native glib-2.0-native"
+
+inherit gnomebase useradd gettext systemd
+
+SRC_URI = "${GNOME_MIRROR}/NetworkManager-openvpn/${@gnome_verdir("${PV}")}/NetworkManager-openvpn-${PV}.tar.xz"
+SRC_URI[md5sum] = "9f325be386aa906ff9b0b7c0bdf2a59a"
+SRC_URI[sha256sum] = "3e0b4007f248d96df4b8eb5d0f937536044af7053debbbf525e67c9bc5d30654"
+
+S = "${WORKDIR}/NetworkManager-openvpn-${PV}"
+
+PACKAGECONFIG[gnome] = "--with-gnome,--without-gnome"
+
+do_install_append () {
+ rm -rf ${D}${libdir}/NetworkManager/*.la
+}
+
+# Create user and group nm-openvpn that are needed since version 1.0.6
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system nm-openvpn"
+
+FILES_${PN} += " \
+ ${libdir}/NetworkManager/*.so \
+ ${nonarch_libdir}/NetworkManager/VPN/nm-openvpn-service.name \
+"
+
+FILES_${PN}-staticdev += " \
+ ${libdir}/NetworkManager/*.a \
+"
+
+RDEPENDS_${PN} = " \
+ networkmanager \
+ openvpn \
+"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0001-sd-lldp.h-Remove-net-ethernet.h-seems-to-be-over-spe.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0001-sd-lldp.h-Remove-net-ethernet.h-seems-to-be-over-spe.patch
new file mode 100644
index 000000000..719442319
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0001-sd-lldp.h-Remove-net-ethernet.h-seems-to-be-over-spe.patch
@@ -0,0 +1,40 @@
+From 18f71c1b48730b8602826517f2b5b088283ae948 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 31 Mar 2017 16:48:00 -0700
+Subject: [PATCH 5/7] sd-lldp.h: Remove net/ethernet.h seems to be over
+ specified
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/systemd/src/libsystemd-network/sd-lldp.c | 1 +
+ src/systemd/src/systemd/sd-lldp.h | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/systemd/src/libsystemd-network/sd-lldp.c b/src/systemd/src/libsystemd-network/sd-lldp.c
+index 31e2448..7721cc2 100644
+--- a/src/systemd/src/libsystemd-network/sd-lldp.c
++++ b/src/systemd/src/libsystemd-network/sd-lldp.c
+@@ -21,6 +21,7 @@
+ #include "nm-sd-adapt.h"
+
+ #include <arpa/inet.h>
++#include <net/ethernet.h>
+ #include <linux/sockios.h>
+
+ #include "sd-lldp.h"
+diff --git a/src/systemd/src/systemd/sd-lldp.h b/src/systemd/src/systemd/sd-lldp.h
+index 3f35eeb..61b0e45 100644
+--- a/src/systemd/src/systemd/sd-lldp.h
++++ b/src/systemd/src/systemd/sd-lldp.h
+@@ -22,7 +22,7 @@
+ ***/
+
+ #include <inttypes.h>
+-#include <net/ethernet.h>
++//#include <net/ethernet.h>
+ #include <sys/types.h>
+
+ #include "sd-event.h"
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0002-Fixed-configure.ac-Fix-pkgconfig-sysroot-locations.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0002-Fixed-configure.ac-Fix-pkgconfig-sysroot-locations.patch
new file mode 100644
index 000000000..28848d354
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0002-Fixed-configure.ac-Fix-pkgconfig-sysroot-locations.patch
@@ -0,0 +1,25 @@
+From 583f0448fb7e9aba2b410c06eec6f420b41a6a0c Mon Sep 17 00:00:00 2001
+From: Pablo Saavedra <psaavedra@igalia.com>
+Date: Tue, 13 Mar 2018 17:36:20 +0100
+Subject: [PATCH 7/7] Fixed configure.ac: Fix pkgconfig sysroot locations
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 51e5eb6..c9d3e56 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -669,7 +669,7 @@ else
+ AC_DEFINE(WITH_JANSSON, 1, [Define if JANSSON is enabled])
+
+ AC_CHECK_TOOLS(READELF, [eu-readelf readelf])
+- JANSSON_LIBDIR=`$PKG_CONFIG --variable=libdir jansson`
++ JANSSON_LIBDIR=${PKG_CONFIG_SYSROOT_DIR}`$PKG_CONFIG --variable=libdir jansson`
+ JANSSON_SONAME=`$READELF -d $JANSSON_LIBDIR/libjansson.so |sed -n 's/.*SONAME.*\[[\([^]]*\)]]/\1/p'`
+
+ if test "$JANSSON_SONAME" = ""; then
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0003-Do-not-create-settings-settings-property-documentati.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0003-Do-not-create-settings-settings-property-documentati.patch
new file mode 100644
index 000000000..92485f044
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/0003-Do-not-create-settings-settings-property-documentati.patch
@@ -0,0 +1,77 @@
+From 4f000a4a19975d6aba71427e693cd1ed080abda9 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Thu, 22 Mar 2018 11:08:30 +0100
+Subject: [PATCH] Do not create settings settings/property documentation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+It was tried to get this work but gi / GirRepository could not be found by
+python. Anyway it is not necessary for us to have the settings/property docs.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ Makefile.am | 18 ++----------------
+ configure.ac | 4 ----
+ 2 files changed, 2 insertions(+), 20 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 639921d..314a61d 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -961,9 +961,7 @@ endif
+ if HAVE_INTROSPECTION
+
+ libnm_noinst_data = \
+- libnm/nm-property-docs.xml \
+ libnm/nm-settings-docs-overrides.xml \
+- libnm/nm-settings-docs.xml \
+ libnm/nm-settings-keyfile-docs.xml \
+ libnm/nm-settings-ifcfg-rh-docs.xml
+
+@@ -3317,23 +3315,11 @@ $(clients_common_libnmc_base_la_OBJECTS): $(libnm_core_lib_h_pub_mkenums)
+ $(clients_common_libnmc_base_la_OBJECTS): clients/common/.dirstamp
+
+ clients_common_settings_doc_c = clients/common/settings-docs.c
+-if HAVE_INTROSPECTION
+-$(clients_common_settings_doc_c): clients/common/settings-docs.xsl libnm/nm-property-docs.xml clients/common/.dirstamp
+- $(AM_V_GEN) $(XSLTPROC) --output $@ $< $(word 2,$^)
+-DISTCLEANFILES += $(clients_common_settings_doc_c)
+-check-local-settings-docs: $(clients_common_settings_doc_c)
+- @if test -z "$$NMTST_NO_CHECK_SETTINGS_DOCS" ; then \
+- if ! cmp -s "$(srcdir)/$(clients_common_settings_doc_c).in" "$(builddir)/$(clients_common_settings_doc_c)" ; then \
+- echo "The generated file \"$(builddir)/$(clients_common_settings_doc_c)\" differs from the source file \"$(srcdir)/$(clients_common_settings_doc_c).in\". You probably should copy the generated file over to the source file. You can skip this test by setting \$$NMTST_NO_CHECK_SETTINGS_DOCS=yes"; \
+- false; \
+- fi;\
+- fi
+-check_local += check-local-settings-docs
+-else
++
+ $(clients_common_settings_doc_c): $(clients_common_settings_doc_c).in clients/common/.dirstamp
+ $(AM_V_GEN) cp "$(srcdir)/$(clients_common_settings_doc_c).in" "$(builddir)/$(clients_common_settings_doc_c)"
+ check-local-settings-docs:
+-endif
++
+ EXTRA_DIST += \
+ $(clients_common_settings_doc_c) \
+ $(clients_common_settings_doc_c).in
+diff --git a/configure.ac b/configure.ac
+index c9d3e56..407222e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1286,10 +1286,6 @@ GTK_DOC_CHECK(1.0)
+ # check if we can build setting property documentation
+ build_docs=no
+ if test -n "$INTROSPECTION_MAKEFILE"; then
+- # If g-i is installed we know we have python, but we might not have pygobject
+- if ! "$PYTHON" -c 'from gi.repository import GObject' >& /dev/null; then
+- AC_MSG_ERROR(["--enable-introspection aims to build the settings documentation. This requires GObject introspection for python (pygobject)])
+- fi
+
+ AC_PATH_PROG(PERL, perl)
+ if test -z "$PERL"; then
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0001-musl-basic.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0001-musl-basic.patch
new file mode 100644
index 000000000..9d208e1fd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0001-musl-basic.patch
@@ -0,0 +1,53 @@
+From e92de7409a3e107f90d108a9c5d49bd0418296dd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Thu, 22 Mar 2018 17:54:10 +0100
+Subject: [PATCH 1/4] Usual fix for musl libc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Pending
+
+Stolen from [1] and prettyfied slightly
+
+[1] https://github.com/voidlinux/void-packages/tree/master/srcpkgs/NetworkManager/patches
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ src/systemd/src/basic/stdio-util.h | 2 ++
+ src/systemd/src/basic/util.h | 5 +++++
+ 2 files changed, 7 insertions(+)
+
+diff --git a/src/systemd/src/basic/stdio-util.h b/src/systemd/src/basic/stdio-util.h
+index bd1144b..9eafacb 100644
+--- a/src/systemd/src/basic/stdio-util.h
++++ b/src/systemd/src/basic/stdio-util.h
+@@ -19,7 +19,9 @@
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+ ***/
+
++#if defined(__GLIBC__)
+ #include <printf.h>
++#endif
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+diff --git a/src/systemd/src/basic/util.h b/src/systemd/src/basic/util.h
+index b31dfd1..9b7032c 100644
+--- a/src/systemd/src/basic/util.h
++++ b/src/systemd/src/basic/util.h
+@@ -46,6 +46,11 @@
+ #include "missing.h"
+ #include "time-util.h"
+
++#if !defined(__GLIBC__)
++typedef int (*__compar_fn_t) (const void*, const void*);
++typedef __compar_fn_t comparison_fn_t;
++#endif
++
+ size_t page_size(void) _pure_;
+ #define PAGE_ALIGN(l) ALIGN_TO((l), page_size())
+
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0002-musl-dlopen-configure-ac.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0002-musl-dlopen-configure-ac.patch
new file mode 100644
index 000000000..548cccb32
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0002-musl-dlopen-configure-ac.patch
@@ -0,0 +1,35 @@
+From 57239fda56b68a8f3e413f7b6af5290ba0d86636 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Thu, 22 Mar 2018 18:18:06 +0100
+Subject: [PATCH 2/4] musl: dlopen is included so LD_LIBS="" instead of
+ LD_LIBS="none required"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Pending
+
+Stolen from [1] and prettyfied slightly
+
+[1] https://github.com/voidlinux/void-packages/tree/master/srcpkgs/NetworkManager/patches
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index 487a266..96ae4f7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -305,6 +305,7 @@ dnl
+ dnl Checks for libdl - on certain platforms its part of libc
+ dnl
+ AC_SEARCH_LIBS([dlopen], [dl dld], [], [ac_cv_search_dlopen=])
++AS_IF([test "$ac_cv_search_dlopen" = "none required"],[ac_cv_search_dlopen=""])
+ AC_SUBST([DL_LIBS], "$ac_cv_search_dlopen")
+
+ PKG_CHECK_MODULES(GLIB, [gio-unix-2.0 >= 2.37.6 gmodule-2.0],
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0003-musl-network-support.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0003-musl-network-support.patch
new file mode 100644
index 000000000..5dd17b63b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0003-musl-network-support.patch
@@ -0,0 +1,72 @@
+From 714b4731a238653e9c7d885c0dee10677b0a4df3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Thu, 22 Mar 2018 18:24:07 +0100
+Subject: [PATCH 3/4] musl: network support
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Pending
+
+Stolen from [1] and prettyfied slightly
+
+[1] https://github.com/voidlinux/void-packages/tree/master/srcpkgs/NetworkManager/patches
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ libnm-core/nm-utils.h | 4 ++++
+ src/platform/wifi/wifi-utils.h | 4 ++++
+ src/systemd/src/basic/socket-util.h | 5 +++++
+ 3 files changed, 13 insertions(+)
+
+diff --git a/libnm-core/nm-utils.h b/libnm-core/nm-utils.h
+index df9284b..2bcf4b8 100644
+--- a/libnm-core/nm-utils.h
++++ b/libnm-core/nm-utils.h
+@@ -30,7 +30,11 @@
+ #include <netinet/in.h>
+
+ /* For ETH_ALEN and INFINIBAND_ALEN */
++#if defined(__GLIBC__)
+ #include <linux/if_ether.h>
++#else
++#define ETH_ALEN 6 /* Octets in one ethernet addr */
++#endif
+ #include <linux/if_infiniband.h>
+
+ #include "nm-core-enum-types.h"
+diff --git a/src/platform/wifi/wifi-utils.h b/src/platform/wifi/wifi-utils.h
+index 705717b..da3edc4 100644
+--- a/src/platform/wifi/wifi-utils.h
++++ b/src/platform/wifi/wifi-utils.h
+@@ -22,7 +22,11 @@
+ #ifndef __WIFI_UTILS_H__
+ #define __WIFI_UTILS_H__
+
++#if defined(__GLIBC__)
+ #include <net/ethernet.h>
++#else /* musl libc */
++#define ETH_ALEN 6 /* Octets in one ethernet addr */
++#endif
+
+ #include "nm-dbus-interface.h"
+
+diff --git a/src/systemd/src/basic/socket-util.h b/src/systemd/src/basic/socket-util.h
+index d7e2d85..d109c84 100644
+--- a/src/systemd/src/basic/socket-util.h
++++ b/src/systemd/src/basic/socket-util.h
+@@ -29,6 +29,11 @@
+ #include <linux/netlink.h>
+ #include <linux/if_infiniband.h>
+ #include <linux/if_packet.h>
++#if !defined(__GLIBC__)
++/* SIOCGSTAMPNS from linux/asm-generic.h
++ * for src/systemd/src/libsystemd-network/sd-lldp.c */
++#include <linux/sockios.h>
++#endif
+
+ #include "macro.h"
+ #include "missing.h"
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0004-musl-process-util.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0004-musl-process-util.patch
new file mode 100644
index 000000000..fc55ce85f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0004-musl-process-util.patch
@@ -0,0 +1,62 @@
+From d513c8bfc982dbd976617178b040c512c95710b6 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Thu, 22 Mar 2018 18:29:00 +0100
+Subject: [PATCH 4/4] musl: process-util
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Pending
+
+Stolen from [1] and prettyfied slightly
+
+[1] https://github.com/voidlinux/void-packages/tree/master/srcpkgs/NetworkManager/patches
+
+Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
+---
+ src/systemd/src/basic/process-util.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/src/systemd/src/basic/process-util.c b/src/systemd/src/basic/process-util.c
+index 272030d..485f1db 100644
+--- a/src/systemd/src/basic/process-util.c
++++ b/src/systemd/src/basic/process-util.c
+@@ -36,6 +36,9 @@
+ #include <sys/wait.h>
+ #include <syslog.h>
+ #include <unistd.h>
++#ifndef __GLIBC__
++#include <pthread.h>
++#endif
+ #if 0 /* NM_IGNORED */
+ #if HAVE_VALGRIND_VALGRIND_H
+ #include <valgrind/valgrind.h>
+@@ -1015,11 +1018,13 @@ static void reset_cached_pid(void) {
+ cached_pid = CACHED_PID_UNSET;
+ }
+
++#ifdef __GLIBC__
+ /* We use glibc __register_atfork() + __dso_handle directly here, as they are not included in the glibc
+ * headers. __register_atfork() is mostly equivalent to pthread_atfork(), but doesn't require us to link against
+ * libpthread, as it is part of glibc anyway. */
+ extern int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void * __dso_handle);
+ extern void* __dso_handle __attribute__ ((__weak__));
++#endif
+
+ pid_t getpid_cached(void) {
+ pid_t current_value;
+@@ -1042,7 +1047,11 @@ pid_t getpid_cached(void) {
+
+ new_pid = getpid();
+
++#ifdef __GLIBC__
+ if (__register_atfork(NULL, NULL, reset_cached_pid, __dso_handle) != 0) {
++#else
++ if (pthread_atfork(NULL, NULL, reset_cached_pid) != 0) {
++#endif
+ /* OOM? Let's try again later */
+ cached_pid = CACHED_PID_UNSET;
+ return new_pid;
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0005-musl-avoid-further-conflicts-by-including-net-ethern.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0005-musl-avoid-further-conflicts-by-including-net-ethern.patch
new file mode 100644
index 000000000..752fe4f58
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0005-musl-avoid-further-conflicts-by-including-net-ethern.patch
@@ -0,0 +1,77 @@
+From b3b4fe35018c98ad176719b2d9ffb867974fc7c3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Mon, 16 Apr 2018 14:45:44 +0200
+Subject: [PATCH] musl: avoid further conflicts by including net/ethernet.h
+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@gmail.com>
+---
+ src/systemd/src/systemd/sd-dhcp-client.h | 2 ++
+ src/systemd/src/systemd/sd-dhcp-lease.h | 2 ++
+ src/systemd/src/systemd/sd-dhcp6-client.h | 2 ++
+ src/systemd/src/systemd/sd-ipv4ll.h | 2 ++
+ 4 files changed, 8 insertions(+)
+
+diff --git a/src/systemd/src/systemd/sd-dhcp-client.h b/src/systemd/src/systemd/sd-dhcp-client.h
+index 5e46d8d..18a613f 100644
+--- a/src/systemd/src/systemd/sd-dhcp-client.h
++++ b/src/systemd/src/systemd/sd-dhcp-client.h
+@@ -21,7 +21,9 @@
+ ***/
+
+ #include <inttypes.h>
++#if defined(__GLIBC__)
+ #include <net/ethernet.h>
++#endif
+ #include <netinet/in.h>
+ #include <sys/types.h>
+
+diff --git a/src/systemd/src/systemd/sd-dhcp-lease.h b/src/systemd/src/systemd/sd-dhcp-lease.h
+index 7ab99cc..85acdf2 100644
+--- a/src/systemd/src/systemd/sd-dhcp-lease.h
++++ b/src/systemd/src/systemd/sd-dhcp-lease.h
+@@ -22,7 +22,9 @@
+ ***/
+
+ #include <inttypes.h>
++#if defined(__GLIBC__)
+ #include <net/ethernet.h>
++#endif
+ #include <netinet/in.h>
+ #include <sys/types.h>
+
+diff --git a/src/systemd/src/systemd/sd-dhcp6-client.h b/src/systemd/src/systemd/sd-dhcp6-client.h
+index 7819f0d..35f30ee 100644
+--- a/src/systemd/src/systemd/sd-dhcp6-client.h
++++ b/src/systemd/src/systemd/sd-dhcp6-client.h
+@@ -21,7 +21,9 @@
+ ***/
+
+ #include <inttypes.h>
++#if defined(__GLIBC__)
+ #include <net/ethernet.h>
++#endif
+ #include <sys/types.h>
+
+ #include "sd-dhcp6-lease.h"
+diff --git a/src/systemd/src/systemd/sd-ipv4ll.h b/src/systemd/src/systemd/sd-ipv4ll.h
+index 5ba9208..c90eca6 100644
+--- a/src/systemd/src/systemd/sd-ipv4ll.h
++++ b/src/systemd/src/systemd/sd-ipv4ll.h
+@@ -20,7 +20,9 @@
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+ ***/
+
++#if defined(__GLIBC__)
+ #include <net/ethernet.h>
++#endif
+ #include <netinet/in.h>
+
+ #include "sd-event.h"
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0006-Add-a-strndupa-replacement-for-musl.patch b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0006-Add-a-strndupa-replacement-for-musl.patch
new file mode 100644
index 000000000..8ed7ee64f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager/musl/0006-Add-a-strndupa-replacement-for-musl.patch
@@ -0,0 +1,47 @@
+From 6db6596e450062601d18b2ae812a4a58d2e03a53 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
+Date: Mon, 16 Apr 2018 15:07:20 +0200
+Subject: [PATCH] Add a strndupa replacement for musl
+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@gmail.com>
+---
+ src/systemd/src/basic/in-addr-util.c | 1 +
+ src/systemd/src/basic/string-util.h | 5 +++++
+ 2 files changed, 6 insertions(+)
+
+diff --git a/src/systemd/src/basic/in-addr-util.c b/src/systemd/src/basic/in-addr-util.c
+index 2a02d90..a57c360 100644
+--- a/src/systemd/src/basic/in-addr-util.c
++++ b/src/systemd/src/basic/in-addr-util.c
+@@ -30,6 +30,7 @@
+ #include "in-addr-util.h"
+ #include "macro.h"
+ #include "parse-util.h"
++#include "string-util.h"
+ #include "util.h"
+
+ bool in4_addr_is_null(const struct in_addr *a) {
+diff --git a/src/systemd/src/basic/string-util.h b/src/systemd/src/basic/string-util.h
+index 4c94b18..a6dc446 100644
+--- a/src/systemd/src/basic/string-util.h
++++ b/src/systemd/src/basic/string-util.h
+@@ -44,6 +44,11 @@
+ #define strcaseeq(a,b) (strcasecmp((a),(b)) == 0)
+ #define strncaseeq(a, b, n) (strncasecmp((a), (b), (n)) == 0)
+
++/* musl does not know strndupa */
++#if !defined(__GLIBC__)
++#define strndupa(x,s) strncpy(alloca(strlen(x)+1),x,s)
++#endif
++
+ int strcmp_ptr(const char *a, const char *b) _pure_;
+
+ static inline bool streq_ptr(const char *a, const char *b) {
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.10.6.bb b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.10.6.bb
new file mode 100644
index 000000000..09c5dbd18
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/networkmanager/networkmanager_1.10.6.bb
@@ -0,0 +1,143 @@
+SUMMARY = "NetworkManager"
+HOMEPAGE = "https://wiki.gnome.org/Projects/NetworkManager"
+SECTION = "net/misc"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cbbffd568227ada506640fe950a4823b \
+ file://libnm-util/COPYING;md5=1c4fa765d6eb3cd2fbd84344a1b816cd \
+ file://docs/api/html/license.html;md5=77b9e362690c149da196aefe7712db30 \
+"
+
+DEPENDS = " \
+ intltool-native \
+ libxslt-native \
+ libnl \
+ dbus \
+ dbus-glib \
+ dbus-glib-native \
+ libgudev \
+ util-linux \
+ libndp \
+ libnewt \
+ polkit \
+ jansson \
+ curl \
+"
+
+inherit gnomebase gettext systemd bluetooth bash-completion vala gobject-introspection gtk-doc
+
+SRC_URI = " \
+ ${GNOME_MIRROR}/NetworkManager/${@gnome_verdir("${PV}")}/NetworkManager-${PV}.tar.xz \
+ file://0001-sd-lldp.h-Remove-net-ethernet.h-seems-to-be-over-spe.patch \
+ file://0002-Fixed-configure.ac-Fix-pkgconfig-sysroot-locations.patch \
+ file://0003-Do-not-create-settings-settings-property-documentati.patch \
+ file://musl/0001-musl-basic.patch \
+ file://musl/0002-musl-dlopen-configure-ac.patch \
+ file://musl/0003-musl-network-support.patch \
+ file://musl/0004-musl-process-util.patch \
+ file://musl/0005-musl-avoid-further-conflicts-by-including-net-ethern.patch \
+ file://musl/0006-Add-a-strndupa-replacement-for-musl.patch \
+"
+SRC_URI[md5sum] = "de3c7147a693da6f80eb22f126086a14"
+SRC_URI[sha256sum] = "6af0b1e856a3725f88791f55c4fbb04105dc0b20dbf182aaec8aad16481fac76"
+
+S = "${WORKDIR}/NetworkManager-${PV}"
+
+EXTRA_OECONF = " \
+ --disable-ifcfg-rh \
+ --disable-ifnet \
+ --disable-ifcfg-suse \
+ --disable-more-warnings \
+ --with-iptables=${sbindir}/iptables \
+ --with-tests \
+ --with-nmtui=yes \
+"
+
+# gobject-introspection related
+GI_DATA_ENABLED_libc-musl = "False"
+
+# stolen from https://github.com/voidlinux/void-packages/blob/master/srcpkgs/NetworkManager/template
+CFLAGS_libc-musl_append = " \
+ -DHAVE_SECURE_GETENV -Dsecure_getenv=getenv \
+ -D__USE_POSIX199309 -DRTLD_DEEPBIND=0 \
+"
+
+do_compile_prepend() {
+ export GIR_EXTRA_LIBS_PATH="${B}/libnm/.libs:${B}/libnm-glib/.libs:${B}/libnm-util/.libs"
+}
+
+PACKAGECONFIG ??= "nss ifupdown netconfig dhclient dnsmasq \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d), d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', '${BLUEZ}', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'wifi', d)} \
+"
+PACKAGECONFIG[systemd] = " \
+ --with-systemdsystemunitdir=${systemd_unitdir}/system --with-session-tracking=systemd --enable-polkit, \
+ --without-systemdsystemunitdir, \
+ polkit \
+"
+PACKAGECONFIG[bluez5] = "--enable-bluez5-dun,--disable-bluez5-dun,bluez5"
+# consolekit is not picked by shlibs, so add it to RDEPENDS too
+PACKAGECONFIG[consolekit] = "--with-session-tracking=consolekit,,consolekit,consolekit"
+PACKAGECONFIG[modemmanager] = "--with-modem-manager-1=yes,--with-modem-manager-1=no,modemmanager"
+PACKAGECONFIG[ppp] = "--enable-ppp,--disable-ppp,ppp,ppp"
+# Use full featured dhcp client instead of internal one
+PACKAGECONFIG[dhclient] = "--with-dhclient=${base_sbindir}/dhclient,,,dhcp-client"
+PACKAGECONFIG[dnsmasq] = "--with-dnsmasq=${bindir}/dnsmasq"
+PACKAGECONFIG[nss] = "--with-crypto=nss,,nss"
+PACKAGECONFIG[gnutls] = "--with-crypto=gnutls,,gnutls"
+PACKAGECONFIG[wifi] = "--enable-wifi=yes,--enable-wifi=no,wireless-tools,wpa-supplicant wireless-tools"
+PACKAGECONFIG[ifupdown] = "--enable-ifupdown,--disable-ifupdown"
+PACKAGECONFIG[netconfig] = "--with-netconfig=yes,--with-netconfig=no"
+PACKAGECONFIG[qt4-x11-free] = "--enable-qt,--disable-qt,qt4-x11-free"
+
+PACKAGES =+ "libnmutil libnmglib libnmglib-vpn \
+ ${PN}-nmtui ${PN}-nmtui-doc \
+ ${PN}-adsl \
+"
+
+FILES_libnmutil += "${libdir}/libnm-util.so.*"
+FILES_libnmglib += "${libdir}/libnm-glib.so.*"
+FILES_libnmglib-vpn += "${libdir}/libnm-glib-vpn.so.*"
+
+FILES_${PN}-adsl = "${libdir}/NetworkManager/libnm-device-plugin-adsl.so"
+
+FILES_${PN} += " \
+ ${libexecdir} \
+ ${libdir}/pppd/*/nm-pppd-plugin.so \
+ ${libdir}/NetworkManager/*.so \
+ ${nonarch_libdir}/NetworkManager/VPN \
+ ${nonarch_libdir}/NetworkManager/conf.d \
+ ${datadir}/polkit-1 \
+ ${datadir}/dbus-1 \
+ ${base_libdir}/udev/* \
+ ${systemd_unitdir}/system \
+"
+
+RRECOMMENDS_${PN} += "iptables \
+ ${@bb.utils.filter('PACKAGECONFIG', 'dnsmasq', d)} \
+"
+RCONFLICTS_${PN} = "connman"
+
+FILES_${PN}-dev += " \
+ ${datadir}/NetworkManager/gdb-cmd \
+ ${libdir}/pppd/*/*.la \
+ ${libdir}/NetworkManager/*.la \
+"
+
+FILES_${PN}-nmtui = " \
+ ${bindir}/nmtui \
+ ${bindir}/nmtui-edit \
+ ${bindir}/nmtui-connect \
+ ${bindir}/nmtui-hostname \
+"
+
+FILES_${PN}-nmtui-doc = " \
+ ${mandir}/man1/nmtui* \
+"
+
+SYSTEMD_SERVICE_${PN} = "NetworkManager.service NetworkManager-dispatcher.service"
+
+do_install_append() {
+ rm -rf ${D}/run ${D}${localstatedir}/run
+}
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/openconnect/openconnect_git.bb b/meta-openembedded/meta-networking/recipes-connectivity/openconnect/openconnect_git.bb
new file mode 100644
index 000000000..c944144e2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/openconnect/openconnect_git.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Open client for Cisco AnyConnect VPN"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LGPL;md5=243b725d71bb5df4a1e5920b344b86ad"
+
+DEPENDS = "vpnc libxml2 krb5 gettext-native"
+
+PACKAGECONFIG ??= "gnutls lz4 libproxy"
+
+# config defaults
+PACKAGECONFIG[gnutls] = "--with-gnutls,--without-gnutls,gnutls,"
+PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
+PACKAGECONFIG[libproxy] = "--with-libproxy,--without-libproxy,libproxy,"
+
+# not config defaults
+PACKAGECONFIG[pcsc-lite] = "--with-libpcsclite,--without-libpcsclite,pcsc-lite,"
+
+PV = "7.08"
+
+SRCREV = "9697bea0e50952cab57063238b43a7099e498cbb"
+SRC_URI = "git://git.infradead.org/users/dwmw2/openconnect.git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--with-vpnc-script=${SYSROOT_DESTDIR}${sysconfdir}/vpnc/vpnc-script \
+ --disable-static"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/python-networkmanager/python-networkmanager_2.0.1.bb b/meta-openembedded/meta-networking/recipes-connectivity/python-networkmanager/python-networkmanager_2.0.1.bb
new file mode 100644
index 000000000..4e41aa576
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/python-networkmanager/python-networkmanager_2.0.1.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Easy communication with NetworkManager from Python"
+HOMEPAGE = "https://github.com/seveas/python-networkmanager"
+LICENSE = "Zlib"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=8d8bac174bf8422b151200e6cc78ebe4"
+
+SRC_URI[md5sum] = "5fc644a65463031295c6b7dd51a0f1bd"
+SRC_URI[sha256sum] = "bc36507506ad29bfdac941b0987ebd1cc9633c9a9291d7378e229e4515a0a517"
+
+PYPI_PACKAGE = "python-networkmanager"
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "networkmanager python-dbus python-six"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-rdate-define-logwtmp-on-libc-glibc.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-rdate-define-logwtmp-on-libc-glibc.patch
new file mode 100644
index 000000000..08ba2c31e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-rdate-define-logwtmp-on-libc-glibc.patch
@@ -0,0 +1,40 @@
+From e0c690acfcddd3c3421f6eb0182c54815fd70f8f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 23:21:08 -0700
+Subject: [PATCH] rdate: define logwtmp on libc != glibc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/rdate.c | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/src/rdate.c b/src/rdate.c
+index 943d481..685b1b8 100644
+--- a/src/rdate.c
++++ b/src/rdate.c
+@@ -41,7 +41,22 @@ static int print_mode = 0; // display the time
+ static int timeout = 10; // timeout for each connection attempt
+ static char *service = DEFAULT_SERVICE;
+
++#ifndef __GLIBC__
++static void logwtmp(const char * line, const char * name, const char * host)
++{
++ struct utmp u;
++ memset(&u, 0, sizeof(u));
++
++ u.ut_pid = getpid();
++ u.ut_type = name[0] ? USER_PROCESS : DEAD_PROCESS;
++ strncpy(u.ut_line, line, sizeof(u.ut_line));
++ strncpy(u.ut_name, name, sizeof(u.ut_name));
++ strncpy(u.ut_host, host, sizeof(u.ut_host));
++ gettimeofday(&(u.ut_tv), NULL);
+
++ updwtmp(_PATH_WTMP, &u);
++}
++#endif /* __GLIBC__ */
+
+ // Returns string from address info pointer
+ static char*
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-src-rdate-Fix-printf-format-errors.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-src-rdate-Fix-printf-format-errors.patch
new file mode 100644
index 000000000..2f6518984
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate/0001-src-rdate-Fix-printf-format-errors.patch
@@ -0,0 +1,33 @@
+From f58bcb43c31d08de58853b088681cbe4df36cbf9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 26 Jun 2017 22:50:56 -0700
+Subject: [PATCH] src/rdate: Fix printf format errors
+
+Fixes
+
+rdate.c:85:41: error: format not a string literal and no format arguments [-Werror=format-security]
+| syslog(is_error?LOG_WARNING:LOG_INFO, buf);
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ src/rdate.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/rdate.c b/src/rdate.c
+index 5c3e829..943d481 100644
+--- a/src/rdate.c
++++ b/src/rdate.c
+@@ -82,7 +82,7 @@ write_log(int is_error, char *format, ...)
+ return; /* Error, which we can't report because this _is_ the error
+ reporting mechanism */
+ if(log_mode)
+- syslog(is_error?LOG_WARNING:LOG_INFO, buf);
++ syslog(is_error?LOG_WARNING:LOG_INFO, "%s", buf);
+ if(is_error || print_mode)
+ fprintf(is_error?stderr:stdout, "%s: %s\n", argv0, buf);
+ }
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate_1.5.bb b/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate_1.5.bb
new file mode 100644
index 000000000..cd4db12c0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdate/rdate_1.5.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Tool for getting the date/time from a remote machine."
+DESCRIPTION = "The rdate utility retrieves the date and time from \
+ another machine on your network, using the protocol described in RFC 868. \
+ If you run rdate as root, it will set your machine local time to the \
+ time of the machine that you queried. \
+"
+
+HOMEPAGE= "https://www.aelius.com/njh/rdate/"
+SECTION = "Applications/System"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "https://www.aelius.com/njh/${BPN}/${BP}.tar.gz \
+ file://0001-src-rdate-Fix-printf-format-errors.patch \
+ file://0001-rdate-define-logwtmp-on-libc-glibc.patch \
+ "
+SRC_URI[md5sum] = "0a4f612480777fdf25264ac03c57eae6"
+SRC_URI[sha256sum] = "6e800053eaac2b21ff4486ec42f0aca7214941c7e5fceedd593fa0be99b9227d"
+
+inherit autotools
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bb-build.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bb-build.patch
new file mode 100644
index 000000000..c95eaf8f5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bb-build.patch
@@ -0,0 +1,75 @@
+From 244861e2c9bb9cc44f4bd246964ba850a7cf1216 Mon Sep 17 00:00:00 2001
+From: Xin Ouyang <Xin.Ouyang@windriver.com>
+Date: Tue, 15 May 2012 15:06:43 +0800
+Subject: [PATCH] rdist: bitbake build
+
+Upstream-Status: Inappropriate [OE specific]
+
+---
+ Makefile.local | 8 ++++----
+ doc/Makefile.real | 4 +++-
+ src/Makefile.real | 1 +
+ 3 files changed, 8 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile.local b/Makefile.local
+index 26092b2..389cb84 100644
+--- a/Makefile.local
++++ b/Makefile.local
+@@ -14,7 +14,7 @@
+ # BIN_DIR variable, you would uncomment the following line
+ # or add your own line.
+ #
+-#BIN_DIR = /usr/bin
++BIN_DIR = ${DESTDIR}/${bindir}
+
+ #
+ # Add any local definitions you want pass to the compiler to DEFS_LOCAL
+@@ -46,13 +46,13 @@ LIBS_LOCAL =
+ # Set a site specific install program to use. Must support BSD style
+ # install(1) arguments.
+ #
+-#INSTALL = install
++INSTALL = install
+
+ #
+ # Site specific Man Page configuration.
+ #
+-#MAN_1_DIR = /usr/local/man/man1
+-#MAN_8_DIR = /usr/local/man/man8
++MAN_1_DIR = ${DESTDIR}/${mandir}/man1
++MAN_8_DIR = ${DESTDIR}/${mandir}/man8
+ #MAN_OWNER = bin
+ #MAN_GROUP = bin
+ #MAN_MODE = 644
+diff --git a/doc/Makefile.real b/doc/Makefile.real
+index 42cabec..e32c30b 100644
+--- a/doc/Makefile.real
++++ b/doc/Makefile.real
+@@ -16,9 +16,11 @@ all:
+
+ doc:
+
+-install:
++install: install.man
+
+ install.man: rdist.man rdistd.man
++ test -d ${MAN_1_DIR} || ${INSTALL} -d ${MAN_1_DIR}
++ test -d ${MAN_8_DIR} || ${INSTALL} -d ${MAN_8_DIR}
+ ${INSTALL} ${INSTALL_ARGS} rdist.man ${CLIENT_DEST}
+ ${INSTALL} ${INSTALL_ARGS} rdistd.man ${SERVER_DEST}
+
+diff --git a/src/Makefile.real b/src/Makefile.real
+index 02179e4..9ec551d 100644
+--- a/src/Makefile.real
++++ b/src/Makefile.real
+@@ -52,6 +52,7 @@ clean:
+ $(COMMONOBJS) $(MISSINGOBJS)
+
+ install:
++ test -d $(BIN_DIR) || $(INSTALL) -d $(BIN_DIR)
+ $(INSTALL) ${IN_ARGS} -o $(BIN_OWNER) -m ${RDIST_MODE} \
+ $(CLIENT_BIN) $(BIN_DIR)/$(CLIENT)
+ $(INSTALL) ${IN_ARGS} -o ${BIN_OWNER} -m ${RDISTD_MODE} \
+--
+1.7.5.4
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bison.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bison.patch
new file mode 100644
index 000000000..435491221
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-bison.patch
@@ -0,0 +1,147 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/gram.y.bison 1998-11-10 05:10:42.000000000 +0100
++++ rdist-6.1.5/src/gram.y 2003-06-04 16:02:19.000000000 +0200
+@@ -90,10 +90,10 @@
+ struct namelist *namel;
+ }
+
+-%type <optval> OPTION, options
+-%type <string> NAME, STRING
+-%type <subcmd> INSTALL, NOTIFY, EXCEPT, PATTERN, SPECIAL, CMDSPECIAL, cmdlist, cmd
+-%type <namel> namelist, names, opt_namelist nlist
++%type <optval> OPTION options
++%type <string> NAME STRING
++%type <subcmd> INSTALL NOTIFY EXCEPT PATTERN SPECIAL CMDSPECIAL cmdlist cmd
++%type <namel> namelist names opt_namelist nlist
+
+ %%
+
+@@ -101,19 +101,19 @@
+ | file command
+ ;
+
+-command: NAME '=' namelist = {
++command: NAME '=' namelist {
+ (void) lookup($1, INSERT, $3);
+ }
+- | namelist ARROW namelist cmdlist = {
++ | namelist ARROW namelist cmdlist {
+ insert((char *)NULL, $1, $3, $4);
+ }
+- | NAME COLON namelist ARROW namelist cmdlist = {
++ | NAME COLON namelist ARROW namelist cmdlist {
+ insert($1, $3, $5, $6);
+ }
+- | namelist DCOLON NAME cmdlist = {
++ | namelist DCOLON NAME cmdlist {
+ append((char *)NULL, $1, $3, $4);
+ }
+- | NAME COLON namelist DCOLON NAME cmdlist = {
++ | NAME COLON namelist DCOLON NAME cmdlist {
+ append($1, $3, $5, $6);
+ }
+ | error
+@@ -133,10 +133,10 @@
+ }
+ ;
+
+-nlist: NAME = {
++nlist: NAME {
+ $$ = makenl($1);
+ }
+- | '(' names ')' = {
++ | '(' names ')' {
+ $$ = $2;
+ }
+ ;
+@@ -144,7 +144,7 @@
+ names: /* VOID */ {
+ $$ = last_n = NULL;
+ }
+- | names NAME = {
++ | names NAME {
+ if (last_n == NULL)
+ $$ = last_n = makenl($2);
+ else {
+@@ -158,7 +158,7 @@
+ cmdlist: /* VOID */ {
+ $$ = last_sc = NULL;
+ }
+- | cmdlist cmd = {
++ | cmdlist cmd {
+ if (last_sc == NULL)
+ $$ = last_sc = $2;
+ else {
+@@ -169,7 +169,7 @@
+ }
+ ;
+
+-cmd: INSTALL options opt_namelist ';' = {
++cmd: INSTALL options opt_namelist ';' {
+ register struct namelist *nl;
+
+ $1->sc_options = $2 | options;
+@@ -185,17 +185,17 @@
+ }
+ $$ = $1;
+ }
+- | NOTIFY namelist ';' = {
++ | NOTIFY namelist ';' {
+ if ($2 != NULL)
+ $1->sc_args = expand($2, E_VARS);
+ $$ = $1;
+ }
+- | EXCEPT namelist ';' = {
++ | EXCEPT namelist ';' {
+ if ($2 != NULL)
+ $1->sc_args = expand($2, E_ALL);
+ $$ = $1;
+ }
+- | PATTERN namelist ';' = {
++ | PATTERN namelist ';' {
+ struct namelist *nl;
+ char *cp, *re_comp();
+
+@@ -205,13 +205,13 @@
+ $1->sc_args = expand($2, E_VARS);
+ $$ = $1;
+ }
+- | SPECIAL opt_namelist STRING ';' = {
++ | SPECIAL opt_namelist STRING ';' {
+ if ($2 != NULL)
+ $1->sc_args = expand($2, E_ALL);
+ $1->sc_name = $3;
+ $$ = $1;
+ }
+- | CMDSPECIAL opt_namelist STRING ';' = {
++ | CMDSPECIAL opt_namelist STRING ';' {
+ if ($2 != NULL)
+ $1->sc_args = expand($2, E_ALL);
+ $1->sc_name = $3;
+@@ -219,18 +219,18 @@
+ }
+ ;
+
+-options: /* VOID */ = {
++options: /* VOID */ {
+ $$ = 0;
+ }
+- | options OPTION = {
++ | options OPTION {
+ $$ |= $2;
+ }
+ ;
+
+-opt_namelist: /* VOID */ = {
++opt_namelist: /* VOID */ {
+ $$ = NULL;
+ }
+- | namelist = {
++ | namelist {
+ $$ = $1;
+ }
+ ;
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-cleanup.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-cleanup.patch
new file mode 100644
index 000000000..ed3d7f1b3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-cleanup.patch
@@ -0,0 +1,2087 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/gram.y.cleanup 2003-12-17 11:38:16.000000000 +0100
++++ rdist-6.1.5/src/gram.y 2003-12-17 11:38:16.000000000 +0100
+@@ -40,7 +40,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: gram.y,v 6.30 1998/11/10 04:10:42 mcooper Exp $";
+
+@@ -170,7 +170,7 @@
+ ;
+
+ cmd: INSTALL options opt_namelist ';' {
+- register struct namelist *nl;
++ struct namelist *nl;
+
+ $1->sc_options = $2 | options;
+ if ($3 != NULL) {
+@@ -240,11 +240,11 @@
+ int yylineno = 1;
+ extern FILE *fin;
+
+-yylex()
++int yylex()
+ {
+ static char yytext[INMAX];
+- register int c;
+- register char *cp1, *cp2;
++ int c;
++ char *cp1, *cp2;
+ static char quotechars[] = "[]{}*?$";
+
+ again:
+@@ -409,8 +409,8 @@
+ * some of the characters we use.
+ */
+ extern int any(c, str)
+- register int c;
+- register char *str;
++ int c;
++ char *str;
+ {
+ while (*str)
+ if (c == *str++)
+@@ -421,13 +421,14 @@
+ /*
+ * Insert or append ARROW command to list of hosts to be updated.
+ */
++void
+ insert(label, files, hosts, subcmds)
+ char *label;
+ struct namelist *files, *hosts;
+ struct subcmd *subcmds;
+ {
+- register struct cmd *c, *prev, *nc;
+- register struct namelist *h, *lasth;
++ struct cmd *c, *prev, *nc;
++ struct namelist *h, *lasth;
+
+ debugmsg(DM_CALL, "insert(%s, %x, %x, %x) start, files = %s",
+ label == NULL ? "(null)" : label,
+@@ -475,13 +476,14 @@
+ * Append DCOLON command to the end of the command list since these are always
+ * executed in the order they appear in the distfile.
+ */
++void
+ append(label, files, stamp, subcmds)
+ char *label;
+ struct namelist *files;
+ char *stamp;
+ struct subcmd *subcmds;
+ {
+- register struct cmd *c;
++ struct cmd *c;
+
+ c = ALLOC(cmd);
+ c->c_type = DCOLON;
+@@ -501,6 +503,7 @@
+ /*
+ * Error printing routine in parser.
+ */
++void
+ yyerror(s)
+ char *s;
+ {
+@@ -530,7 +533,7 @@
+ makenl(name)
+ char *name;
+ {
+- register struct namelist *nl;
++ struct namelist *nl;
+
+ debugmsg(DM_CALL, "makenl(%s)", name == NULL ? "null" : name);
+
+@@ -627,7 +630,7 @@
+ makesubcmd(type)
+ int type;
+ {
+- register struct subcmd *sc;
++ struct subcmd *sc;
+
+ sc = ALLOC(subcmd);
+ sc->sc_type = type;
+--- rdist-6.1.5/src/rdist.c.cleanup 1998-11-10 05:13:50.000000000 +0100
++++ rdist-6.1.5/src/rdist.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: rdist.c,v 6.66 1998/11/10 04:13:49 mcooper Exp $";
+
+@@ -80,7 +80,7 @@
+ char *name;
+ struct namelist **hostlist;
+ {
+- register struct namelist *ptr, *new;
++ struct namelist *ptr, *new;
+
+ if (!name || !hostlist)
+ return;
+@@ -97,14 +97,15 @@
+ *hostlist = new;
+ }
+
++int
+ main(argc, argv, envp)
+ int argc;
+ char *argv[];
+ char **envp;
+ {
+ struct namelist *hostlist = NULL;
+- register int x;
+- register char *cp;
++ int x;
++ char *cp;
+ int cmdargs = 0;
+ int c;
+
+@@ -114,7 +115,7 @@
+ */
+ setprogname(argv);
+
+- if (cp = msgparseopts(localmsglist, TRUE)) {
++ if ((cp = msgparseopts(localmsglist, TRUE))) {
+ error("Bad builtin log option (%s): %s.",
+ localmsglist, cp);
+ usage();
+@@ -158,7 +159,7 @@
+ while ((c = getopt(argc, argv, optchars)) != -1)
+ switch (c) {
+ case 'l':
+- if (cp = msgparseopts(optarg, TRUE)) {
++ if ((cp = msgparseopts(optarg, TRUE))) {
+ error("Bad log option \"%s\": %s.", optarg,cp);
+ usage();
+ }
+@@ -206,7 +207,7 @@
+
+ case 'D':
+ debug = DM_ALL;
+- if (cp = msgparseopts("stdout=all,debug", TRUE)) {
++ if ((cp = msgparseopts("stdout=all,debug", TRUE))) {
+ error("Enable debug messages failed: %s.", cp);
+ usage();
+ }
+@@ -245,7 +246,7 @@
+ error("No path specified to \"-P\".");
+ usage();
+ }
+- if (cp = searchpath(optarg))
++ if ((cp = searchpath(optarg)))
+ path_remsh = strdup(cp);
+ else {
+ error("No component of path \"%s\" exists.",
+@@ -297,7 +298,7 @@
+ else {
+ if (fin == NULL)
+ fin = opendist(distfile);
+- (void) yyparse();
++ yyparse();
+ /*
+ * Need to keep stdin open for child processing later
+ */
+@@ -348,6 +349,7 @@
+ /*
+ * Print usage message and exit.
+ */
++void
+ usage()
+ {
+ char *sopts = "cDFnv";
+@@ -379,12 +381,13 @@
+ /*
+ * rcp like interface for distributing files.
+ */
++void
+ docmdargs(nargs, args)
+ int nargs;
+ char *args[];
+ {
+- register struct namelist *nl, *prev;
+- register char *cp;
++ struct namelist *nl, *prev;
++ char *cp;
+ struct namelist *files, *hosts;
+ struct subcmd *cmds;
+ char *dest;
+@@ -433,10 +436,10 @@
+ * Get a list of NAME blocks (mostly for debugging).
+ */
+ extern char *getnlstr(nl)
+- register struct namelist *nl;
++ struct namelist *nl;
+ {
+ static char buf[16384];
+- register int count = 0, len = 0;
++ int count = 0, len = 0;
+
+ (void) sprintf(buf, "(");
+
+--- rdist-6.1.5/src/client.c.cleanup 2003-12-17 11:38:16.000000000 +0100
++++ rdist-6.1.5/src/client.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: client.c,v 6.82 1998/11/10 04:08:47 mcooper Exp $";
+
+@@ -84,7 +84,7 @@
+ int destdir;
+ {
+ extern struct namelist *filelist;
+- register char *lname, *cp;
++ char *lname, *cp;
+ static char buff[BUFSIZ];
+ int srclen, pathlen;
+ char *p;
+@@ -146,7 +146,7 @@
+ struct namelist *list;
+ char *file;
+ {
+- register struct namelist *nl;
++ struct namelist *nl;
+
+ for (nl = list; nl != NULL; nl = nl->n_next)
+ if (strcmp(file, nl->n_name) == 0)
+@@ -163,7 +163,7 @@
+ char *rname;
+ int destdir;
+ {
+- register struct subcmd *sc;
++ struct subcmd *sc;
+ extern struct subcmd *subcmds;
+ char *rfile;
+
+@@ -200,7 +200,7 @@
+ {
+ char *rfile;
+ struct namelist *new;
+- register struct subcmd *sc;
++ struct subcmd *sc;
+ extern struct subcmd *subcmds;
+ int isokay = 0;
+
+@@ -227,7 +227,7 @@
+ */
+ static void freecmdspecialfiles()
+ {
+- register struct namelist *ptr, *save;
++ struct namelist *ptr, *save;
+
+ for (ptr = updfilelist; ptr; ) {
+ if (ptr->n_name) (void) free(ptr->n_name);
+@@ -249,10 +249,8 @@
+ char **filev;
+ opt_t opts;
+ {
+- register struct subcmd *sc;
+- register struct namelist *f;
+- register char **cpp;
+- char *file;
++ struct subcmd *sc;
++ struct namelist *f;
+ int first = TRUE;
+
+ for (sc = cmd->c_cmds; sc != NULL; sc = sc->sc_next) {
+@@ -294,7 +292,7 @@
+ int checkfilename(name)
+ char *name;
+ {
+- register char *cp;
++ char *cp;
+
+ if (strchr(name, '\n')) {
+ for (cp = name; *cp; cp++)
+@@ -501,7 +499,7 @@
+ static int rmchk(opts)
+ opt_t opts;
+ {
+- register u_char *s;
++ u_char *s;
+ struct stat stb;
+ int didupdate = 0;
+ int n;
+@@ -618,7 +616,7 @@
+
+ optarget = ptarget;
+ len = ptarget - target;
+- while (dp = readdir(d)) {
++ while ((dp = readdir(d))) {
+ if (!strcmp(dp->d_name, ".") ||
+ !strcmp(dp->d_name, ".."))
+ continue;
+@@ -631,7 +629,7 @@
+ if (ptarget[-1] != '/')
+ *ptarget++ = '/';
+ cp = dp->d_name;
+- while (*ptarget++ = *cp++)
++ while ((*ptarget++ = *cp++))
+ ;
+ ptarget--;
+ if (sendit(dp->d_name, opts, destdir) > 0)
+@@ -770,13 +768,13 @@
+ opt_t opts;
+ struct stat *statp;
+ {
+- register off_t size;
+- register time_t mtime;
++ off_t size;
++ time_t mtime;
+ unsigned short lmode;
+ unsigned short rmode;
+ char *owner = NULL, *group = NULL;
+ int done, n;
+- u_char *cp;
++ char *cp;
+
+ debugmsg(DM_CALL, "update(%s, 0x%x, 0x%x)\n", rname, opts, statp);
+
+@@ -1035,7 +1033,6 @@
+ int destdir;
+ {
+ static struct stat stb;
+- extern struct subcmd *subcmds;
+ char *user, *group;
+ int u, len;
+ int didupdate = 0;
+@@ -1157,7 +1154,7 @@
+ (void) unlink(statfile);
+ #endif
+
+- if (file = getnotifyfile())
++ if ((file = getnotifyfile()))
+ (void) unlink(file);
+ }
+
+--- rdist-6.1.5/src/child.c.cleanup 1998-11-10 05:18:57.000000000 +0100
++++ rdist-6.1.5/src/child.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: child.c,v 6.29 1998/11/10 04:18:56 mcooper Exp $";
+
+@@ -90,7 +90,7 @@
+ static void removechild(child)
+ CHILD *child;
+ {
+- register CHILD *pc, *prevpc;
++ CHILD *pc, *prevpc;
+
+ debugmsg(DM_CALL, "removechild(%s, %d, %d) start",
+ child->c_name, child->c_pid, child->c_readfd);
+@@ -148,7 +148,7 @@
+ static CHILD *copychild(child)
+ CHILD *child;
+ {
+- register CHILD *newc;
++ CHILD *newc;
+
+ newc = (CHILD *) xmalloc(sizeof(CHILD));
+
+@@ -167,7 +167,7 @@
+ static void addchild(child)
+ CHILD *child;
+ {
+- register CHILD *pc;
++ CHILD *pc;
+
+ debugmsg(DM_CALL, "addchild() start\n");
+
+@@ -280,7 +280,7 @@
+ */
+ static void reap()
+ {
+- register CHILD *pc;
++ CHILD *pc;
+ int status = 0;
+ pid_t pid;
+
+@@ -336,7 +336,7 @@
+ */
+ static void childscan()
+ {
+- register CHILD *pc, *nextpc;
++ CHILD *pc, *nextpc;
+
+ debugmsg(DM_CALL, "childscan() start");
+
+@@ -366,8 +366,8 @@
+ extern void waitup()
+ {
+ #if defined(HAVE_SELECT)
+- register int count;
+- register CHILD *pc;
++ int count;
++ CHILD *pc;
+ fd_set rchildfds;
+
+ debugmsg(DM_CALL, "waitup() start\n");
+--- rdist-6.1.5/src/docmd.c.cleanup 2003-12-17 11:38:16.000000000 +0100
++++ rdist-6.1.5/src/docmd.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: docmd.c,v 6.87 1998/11/10 04:08:32 mcooper Exp $";
+
+@@ -99,10 +99,10 @@
+ */
+ static void notify(rhost, to, lmod)
+ char *rhost;
+- register struct namelist *to;
++ struct namelist *to;
+ time_t lmod;
+ {
+- register int fd, len;
++ int fd, len;
+ FILE *pf, *popen();
+ struct stat stb;
+ static char buf[BUFSIZ];
+@@ -221,7 +221,7 @@
+ struct cmd *cmd;
+ struct cmd *cmdlist;
+ {
+- register struct cmd *pcmd;
++ struct cmd *pcmd;
+
+ for (pcmd = cmdlist; pcmd; pcmd = pcmd->c_next) {
+ checkcmd(pcmd);
+@@ -238,7 +238,7 @@
+ struct cmd *cmd;
+ struct cmd *cmdlist;
+ {
+- register struct cmd *pc;
++ struct cmd *pc;
+
+ if (!cmd) {
+ debugmsg(DM_MISC, "markfailed() NULL cmd parameter");
+@@ -309,7 +309,7 @@
+ static int makeconn(rhost)
+ char *rhost;
+ {
+- register char *ruser, *cp;
++ char *ruser, *cp;
+ static char *cur_host = NULL;
+ extern char *locuser;
+ extern long min_freefiles, min_freespace;
+@@ -430,9 +430,9 @@
+ struct cmd *cmd;
+ char **filev;
+ {
+- register struct namelist *f;
+- register struct subcmd *sc;
+- register char **cpp;
++ struct namelist *f;
++ struct subcmd *sc;
++ char **cpp;
+ int n, ddir, destdir, opts = options;
+ struct namelist *files;
+ struct subcmd *sbcmds;
+@@ -567,7 +567,6 @@
+ }
+ }
+
+-done:
+ /*
+ * Run any commands for the entire cmd
+ */
+@@ -584,7 +583,7 @@
+ notify(rhost, sc->sc_args, (time_t) 0);
+
+ if (!nflag) {
+- register struct linkbuf *nextl, *l;
++ struct linkbuf *nextl, *l;
+
+ for (l = ihead; l != NULL; freelinkinfo(l), l = nextl) {
+ nextl = l->nextp;
+@@ -601,11 +600,12 @@
+ setjmp_ok = FALSE;
+ }
+
++int
+ okname(name)
+- register char *name;
++ char *name;
+ {
+- register char *cp = name;
+- register int c, isbad;
++ char *cp = name;
++ int c, isbad;
+
+ for (isbad = FALSE; *cp && !isbad; ++cp) {
+ c = *cp;
+@@ -627,9 +627,9 @@
+ struct subcmd *sbcmds;
+ char **env;
+ {
+- register DIR *d;
+- register DIRENTRY *dp;
+- register char *cp;
++ DIR *d;
++ DIRENTRY *dp;
++ char *cp;
+ char *optarget;
+ int len;
+
+@@ -641,7 +641,7 @@
+ }
+ optarget = ptarget;
+ len = ptarget - target;
+- while (dp = readdir(d)) {
++ while ((dp = readdir(d))) {
+ if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
+ continue;
+ if (len + 1 + (int)strlen(dp->d_name) >= BUFSIZ - 1) {
+@@ -651,7 +651,7 @@
+ ptarget = optarget;
+ *ptarget++ = '/';
+ cp = dp->d_name;
+- while (*ptarget++ = *cp++)
++ while ((*ptarget++ = *cp++))
+ ;
+ ptarget--;
+ cmptime(target, sbcmds, env);
+@@ -740,9 +740,9 @@
+ struct cmd *cmd;
+ char **filev;
+ {
+- register struct subcmd *sc;
+- register struct namelist *f;
+- register char *cp, **cpp;
++ struct subcmd *sc;
++ struct namelist *f;
++ char *cp, **cpp;
+ struct stat stb;
+ struct namelist *files = cmd->c_files;
+ struct subcmd *sbcmds = cmd->c_cmds;
+@@ -824,8 +824,8 @@
+ extern int except(file)
+ char *file;
+ {
+- register struct subcmd *sc;
+- register struct namelist *nl;
++ struct subcmd *sc;
++ struct namelist *nl;
+
+ debugmsg(DM_CALL, "except(%s)", file);
+
+@@ -918,8 +918,8 @@
+ int argc;
+ char **argv;
+ {
+- register struct namelist *f;
+- register int i;
++ struct namelist *f;
++ int i;
+
+ if (argc) {
+ for (i = 0; i < argc; i++) {
+@@ -962,9 +962,9 @@
+ int argc;
+ char **argv;
+ {
+- register struct cmd *c;
+- register char *cp;
+- register int i;
++ struct cmd *c;
++ char *cp;
++ int i;
+
+ (void) signal(SIGHUP, sighandler);
+ (void) signal(SIGINT, sighandler);
+@@ -1032,7 +1032,7 @@
+
+ if (hostlist) {
+ /* Do specific hosts as specified on command line */
+- register struct namelist *nlptr;
++ struct namelist *nlptr;
+
+ for (nlptr = hostlist; nlptr; nlptr = nlptr->n_next)
+ /*
+--- rdist-6.1.5/src/distopt.c.cleanup 1998-11-10 05:09:11.000000000 +0100
++++ rdist-6.1.5/src/distopt.c 2003-12-17 11:38:16.000000000 +0100
+@@ -6,7 +6,7 @@
+ * appropriately.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: distopt.c,v 6.12 1998/11/10 04:09:11 mcooper Exp $";
+
+@@ -55,7 +55,7 @@
+ extern DISTOPTINFO *getdistopt(name)
+ char *name;
+ {
+- register int i;
++ int i;
+
+ for (i = 0; distoptinfo[i].do_name; ++i)
+ if (strcasecmp(name, distoptinfo[i].do_name) == 0)
+@@ -74,7 +74,7 @@
+ opt_t *optptr;
+ int doerrs;
+ {
+- register char *string, *optstr;
++ char *string, *optstr;
+ DISTOPTINFO *distopt;
+ int negate;
+
+@@ -93,7 +93,7 @@
+ * and the option starts with "no", strip "no"
+ * from option and retry lookup.
+ */
+- if (distopt = getdistopt(optstr)) {
++ if ((distopt = getdistopt(optstr))) {
+ FLAG_ON(*optptr, distopt->do_value);
+ continue;
+ }
+@@ -116,7 +116,7 @@
+ */
+ extern char *getdistoptlist()
+ {
+- register int i;
++ int i;
+ static char buf[1024];
+
+ for (i = 0, buf[0] = CNULL; distoptinfo[i].do_name; ++i) {
+@@ -138,7 +138,7 @@
+ extern char *getondistoptlist(opts)
+ opt_t opts;
+ {
+- register int i;
++ int i;
+ static char buf[1024];
+
+ for (i = 0, buf[0] = CNULL; distoptinfo[i].do_name; ++i) {
+--- rdist-6.1.5/src/expand.c.cleanup 1998-11-10 05:09:31.000000000 +0100
++++ rdist-6.1.5/src/expand.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: expand.c,v 6.19 1998/11/10 04:09:31 mcooper Exp $";
+
+@@ -81,9 +81,9 @@
+ sizeof(*sortbase), argcmp), sortbase = &eargv[eargc]
+
+ static void Cat(s1, s2) /* quote in s1 and s2 */
+- register u_char *s1, *s2;
++ u_char *s1, *s2;
+ {
+- register char *cp;
++ char *cp;
+ int len = strlen((char *)s1) + strlen((char *)s2) + 2;
+
+ if ((eargc + 1) >= MAXEARGS) {
+@@ -97,12 +97,12 @@
+ do {
+ if (*s1 == QUOTECHAR)
+ s1++;
+- } while (*cp++ = *s1++);
++ } while ((*cp++ = *s1++));
+ cp--;
+ do {
+ if (*s2 == QUOTECHAR)
+ s2++;
+- } while (*cp++ = *s2++);
++ } while ((*cp++ = *s2++));
+ }
+
+ static void addpath(c)
+@@ -131,8 +131,8 @@
+ struct namelist *list;
+ int wh;
+ {
+- register struct namelist *nl, *prev;
+- register int n;
++ struct namelist *nl, *prev;
++ int n;
+ char pathbuf[BUFSIZ];
+
+ if (debug)
+@@ -182,7 +182,7 @@
+ u_char *str;
+ int ch;
+ {
+- register u_char *cp;
++ u_char *cp;
+
+ for (cp = str; cp && *cp != CNULL; ++cp)
+ if (ch == *cp)
+@@ -194,8 +194,8 @@
+ void expstr(s)
+ u_char *s;
+ {
+- register u_char *cp, *cp1;
+- register struct namelist *tp;
++ u_char *cp, *cp1;
++ struct namelist *tp;
+ u_char *tail;
+ u_char ebuf[BUFSIZ];
+ u_char varbuff[BUFSIZ];
+@@ -302,7 +302,7 @@
+ cp1 = (u_char *)pw->pw_dir;
+ s = cp;
+ }
+- for (cp = (u_char *)path; *cp++ = *cp1++; )
++ for (cp = (u_char *)path; (*cp++ = *cp1++); )
+ ;
+ tpathp = pathp = (char *)cp - 1;
+ } else {
+@@ -326,7 +326,7 @@
+ sort();
+ }
+
+-static
++static int
+ argcmp(a1, a2)
+ char **a1, **a2;
+ {
+@@ -341,8 +341,8 @@
+ void expsh(s) /* quote in s */
+ u_char *s;
+ {
+- register u_char *cp, *oldcp;
+- register char *spathp;
++ u_char *cp, *oldcp;
++ char *spathp;
+ struct stat stb;
+
+ spathp = pathp;
+@@ -380,7 +380,7 @@
+ char *pattern;
+ {
+ struct stat stb;
+- register DIRENTRY *dp;
++ DIRENTRY *dp;
+ DIR *dirp;
+
+ dirp = opendir(path);
+@@ -417,11 +417,12 @@
+ yyerror(path);
+ }
+
++int
+ execbrc(p, s) /* quote in p */
+ u_char *p, *s;
+ {
+ u_char restbuf[BUFSIZ + 2];
+- register u_char *pe, *pm, *pl;
++ u_char *pe, *pm, *pl;
+ int brclev = 0;
+ u_char *lm, savec;
+ char *spathp;
+@@ -507,11 +508,12 @@
+ return (0);
+ }
+
++int
+ match(s, p) /* quote in p */
+ char *s, *p;
+ {
+- register int c;
+- register char *sentp;
++ int c;
++ char *sentp;
+ char sexpany = expany;
+
+ if (*s == '.' && *p != '.')
+@@ -524,11 +526,12 @@
+ return (c);
+ }
+
++int
+ amatch(s, p) /* quote in p */
+- register char *s;
+- register u_char *p;
++ char *s;
++ u_char *p;
+ {
+- register int scc;
++ int scc;
+ int ok, lc;
+ char *spathp;
+ struct stat stb;
+@@ -545,7 +548,7 @@
+ case '[':
+ ok = 0;
+ lc = 077777;
+- while (cc = *p++) {
++ while ((cc = *p++)) {
+ if (cc == ']') {
+ if (ok)
+ break;
+@@ -599,7 +602,7 @@
+ while (*s)
+ addpath(*s++);
+ addpath('/');
+- if (stat(path, &stb) == 0 && S_ISDIR(stb.st_mode))
++ if (stat(path, &stb) == 0 && S_ISDIR(stb.st_mode)) {
+ if (*p == CNULL) {
+ if (which & E_TILDE)
+ Cat((u_char *)path,
+@@ -609,6 +612,7 @@
+ (u_char *)tpathp);
+ } else
+ expsh(p);
++ }
+ pathp = spathp;
+ *pathp = CNULL;
+ return (0);
+--- rdist-6.1.5/src/lookup.c.cleanup 1998-11-10 05:12:56.000000000 +0100
++++ rdist-6.1.5/src/lookup.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: lookup.c,v 6.9 1998/11/10 04:12:56 mcooper Exp $";
+
+@@ -68,11 +68,12 @@
+ /*
+ * Define a variable from a command line argument.
+ */
++void
+ define(name)
+ char *name;
+ {
+- register char *cp, *s;
+- register struct namelist *nl;
++ char *cp, *s;
++ struct namelist *nl;
+ struct namelist *value;
+
+ debugmsg(DM_CALL, "define(%s)", name);
+@@ -137,9 +138,9 @@
+ int action;
+ struct namelist *value;
+ {
+- register unsigned n;
+- register char *cp;
+- register struct syment *s;
++ unsigned n;
++ char *cp;
++ struct syment *s;
+ char ebuf[BUFSIZ];
+
+ debugmsg(DM_CALL, "lookup(%s, %d, %x)", name, action, value);
+--- rdist-6.1.5/src/isexec.c.cleanup 1998-11-10 05:11:42.000000000 +0100
++++ rdist-6.1.5/src/isexec.c 2003-12-17 11:38:16.000000000 +0100
+@@ -37,7 +37,7 @@
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: isexec.c,v 6.22 1998/11/10 04:11:42 mcooper Exp $";
+
+--- rdist-6.1.5/src/signal.c.cleanup 1998-11-10 05:16:13.000000000 +0100
++++ rdist-6.1.5/src/signal.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: signal.c,v 6.2 1998/11/10 04:16:13 mcooper Exp $";
+
+--- rdist-6.1.5/src/rshrcmd.c.cleanup 1998-11-10 05:15:07.000000000 +0100
++++ rdist-6.1.5/src/rshrcmd.c 2003-12-17 11:38:16.000000000 +0100
+@@ -10,7 +10,7 @@
+ * Chris Siebenmann <cks@utcc.utoronto.ca>.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: rshrcmd.c,v 1.9 1998/11/10 04:15:07 mcooper Exp $";
+
+@@ -34,6 +34,7 @@
+ * program in place of a direct rcmd() function call so as to
+ * avoid having to be root.
+ */
++int
+ rshrcmd(ahost, port, luser, ruser, cmd, fd2p)
+ char **ahost;
+ u_short port;
+@@ -108,6 +109,7 @@
+ (void) wait(0);
+ return sp[0];
+ }
++ return -1;
+ /*NOTREACHED*/
+ }
+
+--- rdist-6.1.5/src/common.c.cleanup 1998-11-10 05:09:01.000000000 +0100
++++ rdist-6.1.5/src/common.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: common.c,v 6.84 1998/11/10 04:09:01 mcooper Exp $";
+
+@@ -87,14 +87,14 @@
+ /*
+ * Front end to write() that handles partial write() requests.
+ */
+-extern WRITE_RETURN_T xwrite(fd, buf, len)
++WRITE_RETURN_T xwrite(fd, buf, len)
+ int fd;
+ void *buf;
+ WRITE_AMT_T len;
+ {
+ WRITE_AMT_T nleft = len;
+ WRITE_RETURN_T nwritten;
+- register char *ptr = buf;
++ char *ptr = buf;
+
+ while (nleft > 0) {
+ if ((nwritten = write(fd, ptr, nleft)) <= 0) {
+@@ -110,14 +110,14 @@
+ /*
+ * Set program name
+ */
+-extern void setprogname(argv)
++void setprogname(argv)
+ char **argv;
+ {
+- register char *cp;
++ char *cp;
+
+ if (!progname) {
+ progname = strdup(argv[0]);
+- if (cp = strrchr(progname, '/'))
++ if ((cp = strrchr(progname, '/')))
+ progname = cp + 1;
+ }
+ }
+@@ -125,14 +125,14 @@
+ /*
+ * Do run-time initialization
+ */
+-extern int init(argc, argv, envp)
++int init(argc, argv, envp)
+ /*ARGSUSED*/
+ int argc;
+ char **argv;
+ char **envp;
+ {
+- register int i;
+- register char *cp;
++ int i;
++ char *cp;
+
+ if (!isserver)
+ (void) signal(SIGSEGV, sighandler);
+@@ -182,7 +182,7 @@
+ /*
+ * Finish things up before ending.
+ */
+-extern void finish()
++void finish()
+ {
+ extern jmp_buf finish_jmpbuf;
+
+@@ -216,7 +216,7 @@
+ /*
+ * Handle lost connections
+ */
+-extern void lostconn()
++void lostconn()
+ {
+ /* Prevent looping */
+ (void) signal(SIGPIPE, SIG_IGN);
+@@ -232,7 +232,7 @@
+ /*
+ * Do a core dump
+ */
+-extern void coredump()
++void coredump()
+ {
+ error("Segmentation violation - dumping core [PID = %d, %s]",
+ getpid(),
+@@ -245,7 +245,7 @@
+ /*
+ * General signal handler
+ */
+-extern void sighandler(sig)
++void sighandler(sig)
+ int sig;
+ {
+ debugmsg(DM_CALL, "sighandler() received signal %d\n", sig);
+@@ -325,7 +325,7 @@
+ /*
+ * Stdarg frontend to sendcmdmsg()
+ */
+-extern int sendcmd(char cmd, char *fmt, ...)
++int sendcmd(char cmd, char *fmt, ...)
+ {
+ static char buf[BUFSIZ];
+ va_list args;
+@@ -345,7 +345,7 @@
+ /*
+ * Varargs frontend to sendcmdmsg()
+ */
+-extern int sendcmd(va_alist)
++int sendcmd(va_alist)
+ va_dcl
+ {
+ static char buf[BUFSIZ];
+@@ -372,7 +372,7 @@
+ * Stupid frontend to sendcmdmsg()
+ */
+ /*VARARGS2*/
+-extern int sendcmd(cmd, fmt, a1, a2, a3, a4, a5, a6, a7, a8)
++int sendcmd(cmd, fmt, a1, a2, a3, a4, a5, a6, a7, a8)
+ char cmd;
+ char *fmt;
+ {
+@@ -433,13 +433,13 @@
+ * errors, call cleanup() or lostconn(). In other words, unless
+ * the third argument is nonzero, this routine never returns failure.
+ */
+-extern int remline(buffer, space, doclean)
+- register u_char *buffer;
++int remline(buffer, space, doclean)
++ u_char *buffer;
+ int space;
+ int doclean;
+ {
+- register int c, left = space;
+- register u_char *p = buffer;
++ int c, left = space;
++ u_char *p = buffer;
+
+ if (rem_r < 0) {
+ error("Cannot read remote input: Remote descriptor not open.");
+@@ -494,9 +494,9 @@
+ /*
+ * Non-line-oriented remote read.
+ */
+-readrem(p, space)
++int readrem(p, space)
+ char *p;
+- register int space;
++ int space;
+ {
+ if (remleft <= 0) {
+ /*
+@@ -527,7 +527,7 @@
+ /*
+ * Get the user name for the uid.
+ */
+-extern char *getusername(uid, file, opts)
++char *getusername(uid, file, opts)
+ UID_T uid;
+ char *file;
+ opt_t opts;
+@@ -566,7 +566,7 @@
+ /*
+ * Get the group name for the gid.
+ */
+-extern char *getgroupname(gid, file, opts)
++char *getgroupname(gid, file, opts)
+ GID_T gid;
+ char *file;
+ opt_t opts;
+@@ -604,7 +604,7 @@
+ /*
+ * Read a response from the remote host.
+ */
+-extern int response()
++int response()
+ {
+ static u_char resp[BUFSIZ];
+ u_char *s;
+@@ -646,6 +646,7 @@
+ message(MT_FERROR, "%s", s);
+ finish();
+ }
++ return -1;
+ /*NOTREACHED*/
+ }
+
+@@ -657,11 +658,11 @@
+ * user's home directory path name. Return a pointer in buf to the
+ * part corresponding to `file'.
+ */
+-extern char *exptilde(ebuf, file)
++char *exptilde(ebuf, file)
+ char *ebuf;
+- register char *file;
++ char *file;
+ {
+- register char *s1, *s2, *s3;
++ char *s1, *s2, *s3;
+ extern char *homedir;
+
+ if (*file != '~') {
+@@ -694,12 +695,12 @@
+ *s3 = '/';
+ s2 = pw->pw_dir;
+ }
+- for (s1 = ebuf; *s1++ = *s2++; )
++ for (s1 = ebuf; (*s1++ = *s2++); )
+ ;
+ s2 = --s1;
+ if (s3 != NULL) {
+ s2++;
+- while (*s1++ = *s3++)
++ while ((*s1++ = *s3++))
+ ;
+ }
+ return(s2);
+@@ -710,7 +711,7 @@
+ * Set our effective user id to the user running us.
+ * This should be the uid we do most of our work as.
+ */
+-extern int becomeuser()
++int becomeuser()
+ {
+ int r = 0;
+
+@@ -732,7 +733,7 @@
+ /*
+ * Set our effective user id to "root" (uid = 0)
+ */
+-extern int becomeroot()
++int becomeroot()
+ {
+ int r = 0;
+
+@@ -753,7 +754,7 @@
+ /*
+ * Set access and modify times of a given file
+ */
+-extern int setfiletime(file, atime, mtime)
++int setfiletime(file, atime, mtime)
+ char *file;
+ time_t atime;
+ time_t mtime;
+@@ -790,7 +791,7 @@
+ /*
+ * Get version info
+ */
+-extern char *getversion()
++char *getversion()
+ {
+ static char buff[BUFSIZ];
+
+@@ -811,7 +812,7 @@
+ {
+ int fd[2], pid, i;
+ int status;
+- register char *cp, *s;
++ char *cp, *s;
+ char sbuf[BUFSIZ], buf[BUFSIZ];
+
+ if (pipe(fd) < 0) {
+@@ -933,12 +934,12 @@
+ /*
+ * Private version of basename()
+ */
+-extern char *xbasename(path)
++char *xbasename(path)
+ char *path;
+ {
+- register char *cp;
++ char *cp;
+
+- if (cp = strrchr(path, '/'))
++ if ((cp = strrchr(path, '/')))
+ return(cp+1);
+ else
+ return(path);
+@@ -949,11 +950,11 @@
+ * search until a component of that path is found and
+ * return the found file name.
+ */
+-extern char *searchpath(path)
++char *searchpath(path)
+ char *path;
+ {
+- register char *cp;
+- register char *file;
++ char *cp;
++ char *file;
+ struct stat statbuf;
+
+ for (; ;) {
+@@ -977,8 +978,7 @@
+ /*
+ * Set line buffering.
+ */
+-extern void
+-mysetlinebuf(fp)
++void mysetlinebuf(fp)
+ FILE *fp;
+ {
+ #if SETBUF_TYPE == SETBUF_SETLINEBUF
+@@ -995,8 +995,7 @@
+ /*
+ * Our interface to system call to get a socket pair.
+ */
+-int
+-getsocketpair(domain, type, protocol, sv)
++int getsocketpair(domain, type, protocol, sv)
+ int domain;
+ int type;
+ int protocol;
+--- rdist-6.1.5/src/message.c.cleanup 1998-11-10 05:13:30.000000000 +0100
++++ rdist-6.1.5/src/message.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: message.c,v 6.25 1998/11/10 04:13:30 mcooper Exp $";
+
+@@ -97,7 +97,7 @@
+ */
+ extern void msgprusage()
+ {
+- register int i, x;
++ int i, x;
+
+ (void) fprintf(stderr, "\nWhere <msgopt> is of form\n");
+ (void) fprintf(stderr,
+@@ -120,7 +120,7 @@
+ */
+ extern void msgprconfig()
+ {
+- register int i, x;
++ int i, x;
+ static char buf[MSGBUFSIZ];
+
+ debugmsg(DM_MISC, "Current message logging config:");
+@@ -145,7 +145,7 @@
+ static MSGFACILITY *getmsgfac(name)
+ char *name;
+ {
+- register int i;
++ int i;
+
+ for (i = 0; msgfacility[i].mf_name; ++i)
+ if (strcasecmp(name, msgfacility[i].mf_name) == 0)
+@@ -160,7 +160,7 @@
+ static MSGTYPE *getmsgtype(name)
+ char *name;
+ {
+- register int i;
++ int i;
+
+ for (i = 0; msgtypes[i].mt_name; ++i)
+ if (strcasecmp(name, msgtypes[i].mt_name) == 0)
+@@ -178,9 +178,9 @@
+ char *str;
+ {
+ static char ebuf[BUFSIZ];
+- register char *cp;
+- register char *strptr, *word;
+- register MSGTYPE *mtp;
++ char *cp;
++ char *strptr, *word;
++ MSGTYPE *mtp;
+
+ /*
+ * MF_SYSLOG is the only supported message facility for the server
+@@ -240,11 +240,11 @@
+ msgfac->mf_msgtypes = 0; /* Start from scratch */
+ while (strptr) {
+ word = strptr;
+- if (cp = strchr(strptr, ','))
++ if ((cp = strchr(strptr, ',')))
+ *cp++ = CNULL;
+ strptr = cp;
+
+- if (mtp = getmsgtype(word)) {
++ if ((mtp = getmsgtype(word))) {
+ msgfac->mf_msgtypes |= mtp->mt_type;
+ /*
+ * XXX This is really a kludge until we add real
+@@ -272,8 +272,8 @@
+ int doset;
+ {
+ static char ebuf[BUFSIZ], msgbuf[MSGBUFSIZ];
+- register char *cp, *optstr;
+- register char *word;
++ char *cp, *optstr;
++ char *word;
+ MSGFACILITY *msgfac;
+
+ if (msgstr == NULL)
+@@ -308,7 +308,7 @@
+ if (doset) {
+ char *mcp;
+
+- if (mcp = setmsgtypes(msgfac, cp))
++ if ((mcp = setmsgtypes(msgfac, cp)))
+ return(mcp);
+ }
+ }
+@@ -462,8 +462,9 @@
+ return;
+
+ if (!msgfac->mf_fptr) {
+- register char *cp;
++ char *cp;
+ char *getenv();
++ int fd;
+
+ /*
+ * Create and open a new temporary file
+@@ -475,7 +476,10 @@
+ (void) sprintf(tempfile, "%s/%s", cp, _RDIST_TMP);
+
+ msgfac->mf_filename = tempfile;
+- (void) mktemp(msgfac->mf_filename);
++ fd = mkstemp(msgfac->mf_filename);
++ if (fd < 0)
++ fatalerr("Cannot open notify file for writing: %s: %s.", msgfac->mf_filename, SYSERR);
++ close(fd);
+ if ((msgfac->mf_fptr = fopen(msgfac->mf_filename, "w"))==NULL)
+ fatalerr("Cannot open notify file for writing: %s: %s.",
+ msgfac->mf_filename, SYSERR);
+@@ -515,15 +519,15 @@
+ int flags;
+ char *msgbuf;
+ {
+- register int i, x;
+- register char *cp;
++ int i, x;
++ char *cp;
+ static char mbuf[2048];
+
+ if (msgbuf && *msgbuf) {
+ /*
+ * Ensure no stray newlines are present
+ */
+- if (cp = strchr(msgbuf, '\n'))
++ if ((cp = strchr(msgbuf, '\n')))
+ *cp = CNULL;
+
+ checkhostname();
+@@ -863,7 +867,7 @@
+ */
+ extern char *getnotifyfile()
+ {
+- register int i;
++ int i;
+
+ for (i = 0; msgfacility[i].mf_name; i++)
+ if (msgfacility[i].mf_msgfac == MF_NOTIFY &&
+--- rdist-6.1.5/src/setargs.c.cleanup 2003-12-17 11:38:16.000000000 +0100
++++ rdist-6.1.5/src/setargs.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: setargs.c,v 6.5 1998/11/10 04:15:56 mcooper Exp $";
+
+@@ -66,12 +66,12 @@
+ /*
+ * Settup things for using setproctitle()
+ */
+-setargs_settup(argc, argv, envp)
++void setargs_settup(argc, argv, envp)
+ int argc;
+ char **argv;
+ char **envp;
+ {
+- register int i;
++ int i;
+ extern char **environ;
+
+ /* Remember the User Environment */
+@@ -92,10 +92,10 @@
+ /*
+ * Set process title
+ */
+-extern void _setproctitle(msg)
++void _setproctitle(msg)
+ char *msg;
+ {
+- register int i;
++ int i;
+ char *p;
+
+ p = Argv[0];
+@@ -119,7 +119,7 @@
+ /*
+ * Varargs front-end to _setproctitle()
+ */
+-extern void setproctitle(va_alist)
++void setproctitle(va_alist)
+ va_dcl
+ {
+ static char buf[BUFSIZ];
+@@ -138,7 +138,7 @@
+ /*
+ * Stdarg front-end to _setproctitle()
+ */
+-extern void setproctitle(char *fmt, ...)
++void setproctitle(char *fmt, ...)
+ {
+ static char buf[BUFSIZ];
+ va_list args;
+@@ -155,7 +155,7 @@
+ * Non-Varargs front-end to _setproctitle()
+ */
+ /*VARARGS1*/
+-extern void setproctitle(fmt, a1, a2, a3, a4, a5, a6)
++void setproctitle(fmt, a1, a2, a3, a4, a5, a6)
+ char *fmt;
+ {
+ static char buf[BUFSIZ];
+--- rdist-6.1.5/src/rdistd.c.cleanup 1998-11-10 05:14:06.000000000 +0100
++++ rdist-6.1.5/src/rdistd.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: rdistd.c,v 6.23 1998/11/10 04:14:06 mcooper Exp $";
+
+@@ -53,21 +53,12 @@
+
+ #include "defs.h"
+
+-/*
+- * Print usage message
+- */
+-static void usage()
+-{
+- fprintf(stderr, "usage: %s -S [ -DV ]\n", progname);
+- exit(1);
+-}
+-
+ char localmsglist[] = "syslog=ferror";
+
+ /*
+ * The Beginning
+ */
+-main(argc, argv, envp)
++int main(argc, argv, envp)
+ int argc;
+ char **argv;
+ char **envp;
+@@ -95,7 +86,8 @@
+ case '?':
+ default:
+ error("Bad command line option.");
+- usage();
++ fprintf(stderr, "usage: %s -S [ -DV ]\n", progname);
++ exit(1);
+ }
+
+ if (!isserver) {
+@@ -108,7 +100,7 @@
+ rem_w = fileno(stdout);
+
+ /* Set logging */
+- if (cp = msgparseopts(localmsglist, TRUE))
++ if ((cp = msgparseopts(localmsglist, TRUE)))
+ fatalerr("Bad message logging option (%s): %s",
+ localmsglist, cp);
+
+--- rdist-6.1.5/src/server.c.cleanup 2003-12-17 11:38:16.000000000 +0100
++++ rdist-6.1.5/src/server.c 2003-12-17 11:38:16.000000000 +0100
+@@ -37,7 +37,7 @@
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: server.c,v 6.86 1998/11/10 04:15:31 mcooper Exp $";
+
+@@ -197,7 +197,7 @@
+ static UID_T last_uid = (UID_T)-2;
+ static GID_T last_primegid;
+ extern char *locuser;
+- register int i;
++ int i;
+ UID_T uid;
+ GID_T gid;
+ GID_T primegid = (GID_T)-2;
+@@ -252,7 +252,7 @@
+ /*
+ * Invalid cached values so we need to do a new lookup.
+ */
+- if (gr = mygetgroup(group)) {
++ if ((gr = mygetgroup(group))) {
+ last_gid = gid = gr->gr_gid;
+ strcpy(last_group, gr->gr_name);
+ } else {
+@@ -325,7 +325,7 @@
+ {
+ DIR *d;
+ static DIRENTRY *dp;
+- register char *cp;
++ char *cp;
+ struct stat stb;
+ char *optarget;
+ int len, failures = 0;
+@@ -362,7 +362,7 @@
+
+ optarget = ptarget;
+ len = ptarget - target;
+- while (dp = readdir(d)) {
++ while ((dp = readdir(d))) {
+ if ((D_NAMLEN(dp) == 1 && dp->d_name[0] == '.') ||
+ (D_NAMLEN(dp) == 2 && dp->d_name[0] == '.' &&
+ dp->d_name[1] == '.'))
+@@ -376,7 +376,7 @@
+ ptarget = optarget;
+ *ptarget++ = '/';
+ cp = dp->d_name;;
+- while (*ptarget++ = *cp++)
++ while ((*ptarget++ = *cp++))
+ ;
+ ptarget--;
+ if (lstat(target, &stb) < 0) {
+@@ -414,10 +414,10 @@
+ * for extraneous files and remove them.
+ */
+ static void doclean(cp)
+- register char *cp;
++ char *cp;
+ {
+ DIR *d;
+- register DIRENTRY *dp;
++ DIRENTRY *dp;
+ struct stat stb;
+ char *optarget, *ep;
+ int len;
+@@ -436,7 +436,7 @@
+
+ optarget = ptarget;
+ len = ptarget - target;
+- while (dp = readdir(d)) {
++ while ((dp = readdir(d))) {
+ if ((D_NAMLEN(dp) == 1 && dp->d_name[0] == '.') ||
+ (D_NAMLEN(dp) == 2 && dp->d_name[0] == '.' &&
+ dp->d_name[1] == '.'))
+@@ -450,7 +450,7 @@
+ ptarget = optarget;
+ *ptarget++ = '/';
+ cp = dp->d_name;;
+- while (*ptarget++ = *cp++)
++ while ((*ptarget++ = *cp++))
+ ;
+ ptarget--;
+ if (lstat(target, &stb) < 0) {
+@@ -481,7 +481,7 @@
+ * Frontend to doclean().
+ */
+ static void clean(cp)
+- register char *cp;
++ char *cp;
+ {
+ doclean(cp);
+ (void) sendcmd(CC_END, NULL);
+@@ -509,7 +509,7 @@
+ */
+ static void docmdspecial()
+ {
+- register char *cp;
++ char *cp;
+ char *cmd, *env = NULL;
+ int n;
+ int len;
+@@ -667,7 +667,7 @@
+ char *name;
+ opt_t opts;
+ {
+- register char *cp;
++ char *cp;
+ struct stat stb;
+ int r = -1;
+
+@@ -760,7 +760,7 @@
+ {
+ int f, wrerr, olderrno, lastwashole = 0, wassparse = 0;
+ off_t i;
+- register char *cp;
++ char *cp;
+ char *savefile = NULL;
+ static struct stat statbuff;
+
+@@ -987,7 +987,7 @@
+ char *owner, *group;
+ {
+ static char lowner[100], lgroup[100];
+- register char *cp;
++ char *cp;
+ struct stat stb;
+ int s;
+
+@@ -1044,7 +1044,7 @@
+
+ o = (owner[0] == ':') ? opts & DO_NUMCHKOWNER :
+ opts;
+- if (cp = getusername(stb.st_uid, target, o))
++ if ((cp = getusername(stb.st_uid, target, o)))
+ if (strcmp(owner, cp))
+ (void) strcpy(lowner, cp);
+ }
+@@ -1053,7 +1053,7 @@
+
+ o = (group[0] == ':') ? opts & DO_NUMCHKGROUP :
+ opts;
+- if (cp = getgroupname(stb.st_gid, target, o))
++ if ((cp = getgroupname(stb.st_gid, target, o)))
+ if (strcmp(group, cp))
+ (void) strcpy(lgroup, cp);
+ }
+@@ -1107,8 +1107,8 @@
+ if (s < 0) {
+ if (errno == ENOENT) {
+ if (mkdir(target, mode) == 0 ||
+- chkparent(target, opts) == 0 &&
+- mkdir(target, mode) == 0) {
++ (chkparent(target, opts) == 0 &&
++ mkdir(target, mode) == 0)) {
+ message(MT_NOTICE, "%s: mkdir", target);
+ (void) fchog(-1, target, owner, group, mode);
+ ack();
+@@ -1304,7 +1304,7 @@
+ static void setconfig(cmd)
+ char *cmd;
+ {
+- register char *cp = cmd;
++ char *cp = cmd;
+ char *estr;
+
+ switch (*cp++) {
+@@ -1338,7 +1338,7 @@
+ break;
+
+ case SC_LOGGING: /* Logging options */
+- if (estr = msgparseopts(cp, TRUE)) {
++ if ((estr = msgparseopts(cp, TRUE))) {
+ fatalerr("Bad message option string (%s): %s",
+ cp, estr);
+ return;
+@@ -1455,7 +1455,7 @@
+ sptarget[catname] = ptarget;
+ if (catname++) {
+ *ptarget++ = '/';
+- while (*ptarget++ = *file++)
++ while ((*ptarget++ = *file++))
+ ;
+ ptarget--;
+ }
+@@ -1463,6 +1463,7 @@
+ /*
+ * Create name of temporary file
+ */
++ int fd;
+ if (catname && cattarget(file) < 0) {
+ error("Cannot set file name.");
+ return;
+@@ -1477,7 +1478,12 @@
+ (void) sprintf(new, "%s/%s", target, tempname);
+ *file = '/';
+ }
+- (void) mktemp(new);
++ fd = mkstemp(new);
++ if (fd < 0) {
++ error("Cannot set file name.");
++ return;
++ }
++ close(fd);
+ }
+
+ /*
+@@ -1581,8 +1587,8 @@
+ extern void server()
+ {
+ static char cmdbuf[BUFSIZ];
+- register char *cp;
+- register int n;
++ char *cp;
++ int n;
+ extern jmp_buf finish_jmpbuf;
+
+ if (setjmp(finish_jmpbuf)) {
+--- rdist-6.1.5/src/filesys.c.cleanup 1998-11-10 05:10:18.000000000 +0100
++++ rdist-6.1.5/src/filesys.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: filesys.c,v 6.25 1998/11/10 04:10:17 mcooper Exp $";
+
+@@ -72,7 +72,7 @@
+ static char last_pathname[MAXPATHLEN];
+ static char file[MAXPATHLEN + 3];
+ static struct stat filestat;
+- register char *p;
++ char *p;
+
+ /*
+ * Mark the statbuf as invalid to start with.
+@@ -125,7 +125,7 @@
+ * Normally we want to change /dir1/dir2/file
+ * into "/dir1/dir2/."
+ */
+- if (p = (char *) strrchr(file, '/')) {
++ if ((p = (char *) strrchr(file, '/'))) {
+ *++p = '.';
+ *++p = CNULL;
+ } else {
+@@ -183,7 +183,7 @@
+ struct stat *filest;
+ struct mntinfo *mntinfo;
+ {
+- register struct mntinfo *mi;
++ struct mntinfo *mi;
+
+ for (mi = mntinfo; mi; mi = mi->mi_nxt) {
+ if (mi->mi_mnt->me_flags & MEFLAG_IGNORE)
+@@ -202,7 +202,7 @@
+ mntent_t *mnt;
+ struct mntinfo *mntinfo;
+ {
+- register struct mntinfo *m;
++ struct mntinfo *m;
+
+ for (m = mntinfo; m; m = m->mi_nxt)
+ if (strcmp(m->mi_mnt->me_path, mnt->me_path) == 0)
+@@ -247,7 +247,7 @@
+ }
+
+ mntinfo = mi;
+- while (mnt = getmountent(mfp)) {
++ while ((mnt = getmountent(mfp))) {
+ debugmsg(DM_MISC, "mountent = '%s' (%s)",
+ mnt->me_path, mnt->me_type);
+
+@@ -308,7 +308,7 @@
+ static struct stat filestat;
+ struct stat *pstat;
+ struct mntinfo *tmpmi;
+- register mntent_t *mnt;
++ mntent_t *mnt;
+
+ /*
+ * Use the supplied stat buffer if not NULL or our own.
+@@ -330,16 +330,16 @@
+ /*
+ * Find the mnt that pathname is on.
+ */
+- if (mnt = findmnt(pstat, mntinfo))
++ if ((mnt = findmnt(pstat, mntinfo)))
+ return(mnt);
+
+ /*
+ * We failed to find correct mnt, so maybe it's a newly
+ * mounted filesystem. We rebuild mntinfo and try again.
+ */
+- if (tmpmi = makemntinfo(mntinfo)) {
++ if ((tmpmi = makemntinfo(mntinfo))) {
+ mntinfo = tmpmi;
+- if (mnt = findmnt(pstat, mntinfo))
++ if ((mnt = findmnt(pstat, mntinfo)))
+ return(mnt);
+ }
+
+--- rdist-6.1.5/src/filesys-os.c.cleanup 1998-11-10 05:09:59.000000000 +0100
++++ rdist-6.1.5/src/filesys-os.c 2003-12-17 11:38:16.000000000 +0100
+@@ -38,7 +38,7 @@
+ * SUCH DAMAGE.
+ */
+
+-#ifndef lint
++#if 0
+ static char RCSid[] =
+ "$Id: filesys-os.c,v 6.18 1998/11/10 04:09:58 mcooper Exp $";
+
+@@ -314,7 +314,7 @@
+
+ bzero((char *)&me, sizeof(mntent_t));
+
+- if (mntent = getmntent(fptr)) {
++ if ((mntent = getmntent(fptr))) {
+ me.me_path = mntent->mnt_dir;
+ me.me_type = mntent->mnt_type;
+ if (mntent->mnt_opts && hasmntopt(mntent, MNTOPT_RO))
+--- rdist-6.1.5/src/strcasecmp.c.cleanup 1998-11-10 05:16:52.000000000 +0100
++++ rdist-6.1.5/src/strcasecmp.c 2003-12-17 11:38:16.000000000 +0100
+@@ -51,9 +51,9 @@
+ };
+
+ strcasecmp(s1, s2)
+- register char *s1, *s2;
++ char *s1, *s2;
+ {
+- register char *cm = charmap;
++ char *cm = charmap;
+
+ while (cm[*s1] == cm[*s2++])
+ if (*s1++ == '\0')
+@@ -62,10 +62,10 @@
+ }
+
+ strncasecmp(s1, s2, n)
+- register char *s1, *s2;
+- register int n;
++ char *s1, *s2;
++ int n;
+ {
+- register char *cm = charmap;
++ char *cm = charmap;
+
+ while (--n >= 0 && cm[*s1] == cm[*s2++])
+ if (*s1++ == '\0')
+--- rdist-6.1.5/src/strtol.c.cleanup 1994-03-17 00:25:50.000000000 +0100
++++ rdist-6.1.5/src/strtol.c 2003-12-17 11:38:16.000000000 +0100
+@@ -54,13 +54,13 @@
+ strtol(nptr, endptr, base)
+ char *nptr;
+ char **endptr;
+- register int base;
++ int base;
+ {
+- register char *s = nptr;
+- register unsigned long acc;
+- register int c;
+- register unsigned long cutoff;
+- register int neg = 0, any, cutlim;
++ char *s = nptr;
++ unsigned long acc;
++ int c;
++ unsigned long cutoff;
++ int neg = 0, any, cutlim;
+
+ /*
+ * Skip white space and pick up leading +/- sign if any.
+--- rdist-6.1.5/src/regex.c.cleanup 1998-11-10 05:14:28.000000000 +0100
++++ rdist-6.1.5/src/regex.c 2003-12-17 11:39:14.000000000 +0100
+@@ -142,10 +142,8 @@
+ */
+ char *
+ re_comp(sp)
+- register char *sp;
+ {
+- register int c;
+- register char *ep = expbuf;
++ char *ep = expbuf;
+ int cclcnt, numbra = 0;
+ char *lastep = 0;
+ char bracket[NBRA];
+@@ -266,10 +264,10 @@
+ */
+ int
+ re_exec(p1)
+- register char *p1;
++ char *p1;
+ {
+- register char *p2 = expbuf;
+- register int c;
++ char *p2 = expbuf;
++ int c;
+ int rv;
+
+ for (c = 0; c < NBRA; c++) {
+@@ -306,9 +304,9 @@
+ */
+ static int
+ advance(lp, ep)
+- register char *lp, *ep;
++ char *lp, *ep;
+ {
+- register char *curlp;
++ char *curlp;
+ int ct, i;
+ int rv;
+
+@@ -413,10 +411,10 @@
+ }
+
+ backref(i, lp)
+- register int i;
+- register char *lp;
++ int i;
++ char *lp;
+ {
+- register char *bp;
++ char *bp;
+
+ bp = braslist[i];
+ while (*bp++ == *lp++)
+@@ -427,10 +425,10 @@
+
+ int
+ cclass(set, c, af)
+- register char *set, c;
++ char *set, c;
+ int af;
+ {
+- register int n;
++ int n;
+
+ if (c == 0)
+ return(0);
+--- rdist-6.1.5/include/defs.h.cleanup 2003-12-17 11:38:16.000000000 +0100
++++ rdist-6.1.5/include/defs.h 2003-12-17 11:38:16.000000000 +0100
+@@ -30,11 +30,13 @@
+ #include <grp.h>
+ #include <syslog.h>
+ #include <setjmp.h>
++#include <time.h>
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/file.h>
+-#include <sys/time.h>
+ #include <sys/stat.h>
++#include <sys/wait.h>
++#include <sys/socket.h>
+
+ #include "version.h"
+ #include "config-def.h"
+@@ -48,6 +50,9 @@
+ #endif /* yacc */
+
+ #include <signal.h>
++#define _REGEX_RE_COMP
++#include <regex.h>
++
+
+ /*
+ * This belongs in os-svr4.h but many SVR4 OS's
+@@ -321,12 +326,11 @@
+ /*
+ * Our own declarations.
+ */
+-char *exptilde();
+ char *makestr();
+ char *xcalloc();
+ char *xmalloc();
+ char *xrealloc();
+-extern char *xbasename();
++extern char *exptilde();
+ extern char *getdistoptlist();
+ extern char *getgroupname();
+ extern char *getnlstr();
+@@ -336,44 +340,75 @@
+ extern char *getversion();
+ extern char *msgparseopts();
+ extern char *searchpath();
++extern char *xbasename();
++extern int amatch();
+ extern int any();
++extern int becomeroot();
++extern int becomeuser();
++extern int except();
++extern int execbrc();
++extern int getfilesysinfo();
++extern int getsocketpair();
+ extern int init();
+ extern int install();
+ extern int isexec();
++extern int is_nfs_mounted();
++extern int is_ro_mounted();
++extern int is_symlinked();
++extern int match();
++extern int okname();
+ extern int parsedistopts();
++extern int readrem();
+ extern int remline();
++extern int response();
++extern int rshrcmd();
+ extern int setfiletime();
++extern int setnonblocking();
+ extern int spawn();
++extern int yylex();
++extern int yyparse();
+ extern struct subcmd *makesubcmd();
++extern void append();
+ extern void checkhostname();
+ extern void cleanup();
+ extern void complain();
++extern void coredump();
++extern void define();
++extern void docmdargs();
+ extern void docmds();
+ extern void finish();
+-extern void log();
++extern void freelinkinfo();
++extern void insert();
+ extern void logmsg();
+ extern void lostconn();
+ extern void markassigned();
++extern void msgprconfig();
+ extern void msgprusage();
++extern void mysetlinebuf();
+ extern void note();
+ extern void runcmdspecial();
+ extern void runcommand();
+ extern void server();
++extern void setargs_settup();
+ extern void setprogname();
+ extern void sighandler();
++extern void usage();
+ extern void waitup();
++extern void yyerror();
++extern WRITE_RETURN_T xwrite();
+ struct namelist *expand();
+ struct namelist *lookup();
+ struct namelist *makenl();
+-extern WRITE_RETURN_T xwrite();
+
+ #if defined(ARG_TYPE) && ARG_TYPE == ARG_STDARG
++extern int sendcmd(char cmd, char *fmt, ...);
+ extern void debugmsg(int, char *, ...);
+ extern void error(char *, ...);
+ extern void fatalerr(char *, ...);
+ extern void message(int, char *, ...);
+ extern void setproctitle(char *fmt, ...);
+ #else
++extern int sendcmd(va_alist);
+ extern void debugmsg();
+ extern void error();
+ extern void fatalerr();
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-fix-msgsndnotify-loop.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-fix-msgsndnotify-loop.patch
new file mode 100644
index 000000000..d183d9183
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-fix-msgsndnotify-loop.patch
@@ -0,0 +1,37 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/message.c.thestokes 2006-04-19 17:30:39.000000000 -0400
++++ rdist-6.1.5/src/message.c 2006-04-19 17:36:37.000000000 -0400
+@@ -793,15 +793,20 @@
+ char *msg;
+ {
+ static char buf[MSGBUFSIZ];
+-
+- ++nerrs;
+-
+- if (isserver)
+- (void) sprintf(buf, "REMOTE ERROR: %s", msg);
+- else
+- (void) sprintf(buf, "LOCAL ERROR: %s", msg);
+-
+- _message(MT_FERROR, buf);
++ /* Don't reenter this function. There is a nasty infinite recursion
++ case that pops up when msgsndnotify tries to exit. */
++ static int inside=0;
++
++ if(inside==0){
++ ++nerrs;
++ inside=1;
++
++ if (isserver)
++ (void) sprintf(buf, "REMOTE ERROR: %s", msg);
++ else
++ (void) sprintf(buf, "LOCAL ERROR: %s", msg);
++ _message(MT_FERROR, buf);
++ }
+
+ exit(nerrs);
+ }
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-hardlink.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-hardlink.patch
new file mode 100644
index 000000000..baf8e3030
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-hardlink.patch
@@ -0,0 +1,25 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/client.c.hardlink Thu Jun 3 13:56:31 1999
++++ rdist-6.1.5/src/client.c Thu Jun 3 14:00:06 1999
+@@ -348,7 +348,7 @@
+ lp->target = strdup(Tdest);
+ else
+ lp->target = NULL;
+- if (!lp->pathname || !lp->src || !(Tdest && lp->target))
++ if (!lp->pathname || !lp->src || (Tdest && !lp->target))
+ fatalerr("Cannot malloc memory in linkinfo.");
+
+ return((struct linkbuf *) NULL);
+@@ -370,7 +370,7 @@
+ "sendhardlink: rname='%s' pathname='%s' src='%s' target='%s'\n",
+ rname, lp->pathname, lp->src, lp->target);
+
+- if (*lp->target == CNULL)
++ if (lp->target == NULL || *lp->target == CNULL)
+ (void) sendcmd(C_RECVHARDLINK, "%o %s %s",
+ opts, lp->pathname, rname);
+ else {
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-lfs.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-lfs.patch
new file mode 100644
index 000000000..3fa8db8cd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-lfs.patch
@@ -0,0 +1,142 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/client.c.lfs 2003-12-16 23:43:56.000000000 +0100
++++ rdist-6.1.5/src/client.c 2003-12-16 23:46:56.000000000 +0100
+@@ -414,9 +414,9 @@
+ /*
+ * Send file info
+ */
+- (void) sendcmd(C_RECVREG, "%o %04o %ld %ld %ld %s %s %s",
++ (void) sendcmd(C_RECVREG, "%o %04o %lld %ld %ld %s %s %s",
+ opts, stb->st_mode & 07777,
+- (long) stb->st_size,
++ (off_t) stb->st_size,
+ stb->st_mtime, stb->st_atime,
+ user, group, rname);
+ if (response() < 0) {
+@@ -424,8 +424,8 @@
+ return(-1);
+ }
+
+- debugmsg(DM_MISC, "Send file '%s' %d bytes\n",
+- rname, (long) stb->st_size);
++ debugmsg(DM_MISC, "Send file '%s' %lld bytes\n",
++ rname, (off_t) stb->st_size);
+
+ /*
+ * Set remote time out alarm handler.
+@@ -676,9 +676,9 @@
+ /*
+ * Gather and send basic link info
+ */
+- (void) sendcmd(C_RECVSYMLINK, "%o %04o %ld %ld %ld %s %s %s",
++ (void) sendcmd(C_RECVSYMLINK, "%o %04o %lld %ld %ld %s %s %s",
+ opts, stb->st_mode & 07777,
+- (long) stb->st_size,
++ (off_t) stb->st_size,
+ stb->st_mtime, stb->st_atime,
+ user, group, rname);
+ if (response() < 0)
+@@ -858,7 +858,7 @@
+ /*
+ * Parse size
+ */
+- size = strtol(cp, &cp, 10);
++ size = strtoll(cp, &cp, 10);
+ if (*cp++ != ' ') {
+ error("update: size not delimited");
+ return(US_NOTHING);
+@@ -910,8 +910,8 @@
+
+ debugmsg(DM_MISC, "update(%s,) local mode %04o remote mode %04o\n",
+ rname, lmode, rmode);
+- debugmsg(DM_MISC, "update(%s,) size %d mtime %d owner '%s' grp '%s'\n",
+- rname, (int) size, mtime, owner, group);
++ debugmsg(DM_MISC, "update(%s,) size %lld mtime %d owner '%s' grp '%s'\n",
++ rname, (off_t) size, mtime, owner, group);
+
+ if (statp->st_mtime != mtime) {
+ if (statp->st_mtime < mtime && IS_ON(opts, DO_YOUNGER)) {
+@@ -937,8 +937,8 @@
+ }
+
+ if (statp->st_size != size) {
+- debugmsg(DM_MISC, "size does not match (%d != %d).\n",
+- (int) statp->st_size, size);
++ debugmsg(DM_MISC, "size does not match (%lld != %lld).\n",
++ statp->st_size, size);
+ return(US_OUTDATE);
+ }
+
+--- rdist-6.1.5/src/server.c.lfs 1998-11-10 05:15:31.000000000 +0100
++++ rdist-6.1.5/src/server.c 2003-12-16 23:50:19.000000000 +0100
+@@ -645,8 +645,8 @@
+ case S_IFLNK:
+ case S_IFDIR:
+ case S_IFREG:
+- (void) sendcmd(QC_YES, "%ld %ld %o %s %s",
+- (long) stb.st_size,
++ (void) sendcmd(QC_YES, "%lld %ld %o %s %s",
++ (off_t) stb.st_size,
+ stb.st_mtime,
+ stb.st_mode & 07777,
+ getusername(stb.st_uid, target, options),
+@@ -1388,7 +1388,7 @@
+ /*
+ * Get file size
+ */
+- size = strtol(cp, &cp, 10);
++ size = strtoll(cp, &cp, 10);
+ if (*cp++ != ' ') {
+ error("recvit: size not delimited");
+ return;
+@@ -1441,7 +1441,7 @@
+ }
+
+ debugmsg(DM_MISC,
+- "recvit: opts = %04o mode = %04o size = %d mtime = %d",
++ "recvit: opts = %04o mode = %04o size = %lld mtime = %d",
+ opts, mode, size, mtime);
+ debugmsg(DM_MISC,
+ "recvit: owner = '%s' group = '%s' file = '%s' catname = %d isdir = %d",
+--- rdist-6.1.5/include/defs.h.lfs 2003-12-16 23:43:56.000000000 +0100
++++ rdist-6.1.5/include/defs.h 2003-12-16 23:43:56.000000000 +0100
+@@ -22,6 +22,8 @@
+ #include <stdlib.h>
+ #endif /* _POSIX_SOURCE */
+ #include <stdio.h>
++#include <string.h>
++#include <mntent.h>
+ #include <ctype.h>
+ #include <errno.h>
+ #include <pwd.h>
+@@ -317,15 +319,6 @@
+ #endif /* USE_STATDB */
+
+ /*
+- * System function declarations
+- */
+-char *hasmntopt();
+-char *strchr();
+-char *strdup();
+-char *strrchr();
+-char *strtok();
+-
+-/*
+ * Our own declarations.
+ */
+ char *exptilde();
+--- rdist-6.1.5/Makefile.local.lfs 1998-11-10 04:36:31.000000000 +0100
++++ rdist-6.1.5/Makefile.local 2003-12-16 23:43:56.000000000 +0100
+@@ -20,7 +20,7 @@
+ # Add any local definitions you want pass to the compiler to DEFS_LOCAL
+ # below. This includes those items found in "config/config.h".
+ #
+-#DEFS_LOCAL = -DDIRECT_RCMD
++DEFS_LOCAL = -O2 -g -pipe -Wall -D_POSIX_SOURCE -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+
+ #
+ # Add any local libraries that your system might need to LIBS_LOCAL below.
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-links.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-links.patch
new file mode 100644
index 000000000..e9994f2c9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-links.patch
@@ -0,0 +1,79 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/client.c.links Wed Feb 17 17:46:09 1999
++++ rdist-6.1.5/src/client.c Wed Feb 17 17:51:15 1999
+@@ -309,6 +309,18 @@
+ return(0);
+ }
+
++void freelinkinfo(lp)
++ struct linkbuf *lp;
++{
++ if (lp->pathname)
++ free(lp->pathname);
++ if (lp->src)
++ free(lp->src);
++ if (lp->target)
++ free(lp->target);
++ free(lp);
++}
++
+ /*
+ * Save and retrieve hard link info
+ */
+@@ -317,6 +329,7 @@
+ {
+ struct linkbuf *lp;
+
++ /* xxx: linear search doesn't scale with many links */
+ for (lp = ihead; lp != NULL; lp = lp->nextp)
+ if (lp->inum == statp->st_ino && lp->devnum == statp->st_dev) {
+ lp->count--;
+@@ -329,12 +342,14 @@
+ lp->inum = statp->st_ino;
+ lp->devnum = statp->st_dev;
+ lp->count = statp->st_nlink - 1;
+- (void) strcpy(lp->pathname, target);
+- (void) strcpy(lp->src, source);
++ lp->pathname = strdup(target);
++ lp->src = strdup(source);
+ if (Tdest)
+- (void) strcpy(lp->target, Tdest);
++ lp->target = strdup(Tdest);
+ else
+- *lp->target = CNULL;
++ lp->target = NULL;
++ if (!lp->pathname || !lp->src || !(Tdest && lp->target))
++ fatalerr("Cannot malloc memory in linkinfo.");
+
+ return((struct linkbuf *) NULL);
+ }
+--- rdist-6.1.5/src/docmd.c.links Wed Feb 17 17:51:23 1999
++++ rdist-6.1.5/src/docmd.c Wed Feb 17 17:52:44 1999
+@@ -586,7 +586,7 @@
+ if (!nflag) {
+ register struct linkbuf *nextl, *l;
+
+- for (l = ihead; l != NULL; free((char *)l), l = nextl) {
++ for (l = ihead; l != NULL; freelinkinfo(l), l = nextl) {
+ nextl = l->nextp;
+ if (contimedout || IS_ON(opts, DO_IGNLNKS) ||
+ l->count == 0)
+--- rdist-6.1.5/include/defs.h.links Wed Feb 17 17:52:58 1999
++++ rdist-6.1.5/include/defs.h Wed Feb 17 17:53:47 1999
+@@ -276,9 +276,9 @@
+ ino_t inum;
+ dev_t devnum;
+ int count;
+- char pathname[BUFSIZ];
+- char src[BUFSIZ];
+- char target[BUFSIZ];
++ char *pathname;
++ char *src;
++ char *target;
+ struct linkbuf *nextp;
+ };
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-linux.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-linux.patch
new file mode 100644
index 000000000..b56fd38b9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-linux.patch
@@ -0,0 +1,28 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+diff: rdist-6.1.5/config/mf: No such file or directory
+--- rdist-6.1.5/config/os-linux.h.linux Mon Nov 9 22:59:59 1998
++++ rdist-6.1.5/config/os-linux.h Thu Nov 12 14:50:35 1998
+@@ -58,7 +58,7 @@
+ /*
+ * Select the type of executable file format.
+ */
+-#define EXE_TYPE EXE_AOUT
++#define EXE_TYPE EXE_ELF
+
+ /*
+ * Select the type of statfs() system call (if any).
+--- rdist-6.1.5/mf/Makefile.var.linux Tue Nov 10 00:02:11 1998
++++ rdist-6.1.5/mf/Makefile.var Thu Nov 12 14:50:35 1998
+@@ -67,7 +67,7 @@
+ #
+ # Name of YACC.
+ #
+-#YACC = bison -y
++YACC = bison -y
+
+ OPT = -g
+ RM = rm
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-makefile-add-ldflags.patch
new file mode 100644
index 000000000..cc82e16cc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-makefile-add-ldflags.patch
@@ -0,0 +1,23 @@
+Add LDFLAGS variable to Makefile so that extra linker flags can be sent via this variable.
+
+Upstream-Status: Inappropriate [no upstream]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/src/Makefile.real b/src/Makefile.real
+index 02179e4..9070974 100644
+--- a/src/Makefile.real
++++ b/src/Makefile.real
+@@ -36,10 +36,10 @@ all: src
+ src: $(CLIENT_BIN) $(SERVER_BIN)
+
+ $(SERVER_BIN): $(SERVEROBJS) $(COMMONOBJS) $(MISSINGOBJS)
+- $(CC) -o $@ $(SERVEROBJS) $(COMMONOBJS) $(MISSINGOBJS) $(LIBS)
++ $(CC) -o $@ $(SERVEROBJS) $(COMMONOBJS) $(MISSINGOBJS) $(LIBS) $(LDFLAGS)
+
+ $(CLIENT_BIN): $(CLIENTOBJS) $(COMMONOBJS) $(MISSINGOBJS)
+- $(CC) -o $@ $(CLIENTOBJS) $(COMMONOBJS) $(MISSINGOBJS) $(LIBS)
++ $(CC) -o $@ $(CLIENTOBJS) $(COMMONOBJS) $(MISSINGOBJS) $(LIBS) $(LDFLAGS)
+
+ $(CLIENTOBJS) $(SERVEROBJS): $(HFILES) y.tab.h
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-maxargs.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-maxargs.patch
new file mode 100644
index 000000000..e81639446
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-maxargs.patch
@@ -0,0 +1,16 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:rdist
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/setargs.c.maxargs 1998-11-10 05:15:56.000000000 +0100
++++ rdist-6.1.5/src/setargs.c 2003-09-04 14:39:03.000000000 +0200
+@@ -58,7 +58,7 @@
+ * Set process argument functions
+ */
+
+-#define MAXUSERENVIRON 40
++#define MAXUSERENVIRON 1024
+ char **Argv = NULL;
+ char *LastArgv = NULL;
+ char *UserEnviron[MAXUSERENVIRON+1];
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-mkstemp.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-mkstemp.patch
new file mode 100644
index 000000000..e49e3e4d1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-mkstemp.patch
@@ -0,0 +1,28 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/server.c.mkstemp 2004-05-25 14:29:37.279312752 +0200
++++ rdist-6.1.5/src/server.c 2004-05-25 14:31:27.050744340 +0200
+@@ -1479,11 +1479,18 @@
+ *file = '/';
+ }
+ fd = mkstemp(new);
+- if (fd < 0) {
++ /*
++ * Don't consider it a fatal error if mkstemp() fails
++ * because parent directory didn't exist. (Missing
++ * parents are created later (in recvfile())
++ */
++ if ((fd < 0) && (errno != ENOENT)) {
+ error("Cannot set file name.");
+ return;
++ } else if (fd >= 0) {
++ close(fd);
++ unlink(new); /* Or symlink() will fail */
+ }
+- close(fd);
+ }
+
+ /*
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-oldpath.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-oldpath.patch
new file mode 100644
index 000000000..493b18397
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-oldpath.patch
@@ -0,0 +1,59 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/config/config.h.oldpath Tue Nov 10 04:59:48 1998
++++ rdist-6.1.5/config/config.h Thu Jan 31 17:33:21 2002
+@@ -39,7 +39,7 @@
+ * don't have the old rdist, then uncomment the "#undef" line.
+ */
+ #ifndef _PATH_OLDRDIST
+-#define _PATH_OLDRDIST "/usr/ucb/oldrdist" /* Enable compat */
++#define _PATH_OLDRDIST "/usr/bin/oldrdist" /* Enable compat */
+ #endif
+ /*#undef _PATH_OLDRDIST*/ /* Disable compat */
+
+--- rdist-6.1.5/doc/rdist.man.oldpath Tue Nov 10 06:38:53 1998
++++ rdist-6.1.5/doc/rdist.man Thu Jan 31 17:36:57 2002
+@@ -170,10 +170,9 @@
+ This option will only work if
+ .I rdist
+ was compiled with the location of the old rdist
+-(usually either
+-.I /usr/ucb/oldrdist
+-or
+-.I /usr/old/rdist)
++(the path
++.I /usr/bin/oldrdist
++is used on Red Hat linux)
+ and that program is available at run time.
+ .PP
+ .I Rdist
+@@ -558,7 +557,7 @@
+ should be of form
+ .sp
+ .RS
+-\fIfacility\fB=\fItypes\fB:\fIfacility\fB=\fItypes...
++\fIfacility\fB=\fItypes\fB:\fIfacility\fB=\fItypes...\fR
+ .RE
+ .sp
+ The valid facility names are:
+--- rdist-6.1.5/README.oldpath Fri Jul 19 19:24:09 1996
++++ rdist-6.1.5/README Thu Jan 31 17:33:21 2002
+@@ -65,12 +65,12 @@
+
+ The way the old rdist started a server rdist is to run "rdist
+ -Server". If the new rdist is run with the "-Server" option, then it
+-will exec a copy of the old rdist (usually /usr/old/rdist or
+-/usr/ucb/oldrdist). In this way, you get compatibility with hosts
++will exec a copy of the old rdist (the path /usr/bin/oldrdist in Red
++Hat linux). In this way, you get compatibility with hosts
+ running the old rdist attempting to rdist to a machine running new
+ rdist. If your host running new rdist wants to rdist to a host
+ running the old rdist, then it must run the old rdist program
+-(/usr/old/rdist or /usr/ucb/oldrdist).
++(/usr/bin/oldrdist in Red Hat linux).
+
+ The definition _PATH_OLDRDIST in "config/config.h" controls the
+ location of the old rdist. If this is not defined, or the defined
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-ssh.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-ssh.patch
new file mode 100644
index 000000000..d3982cf41
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-ssh.patch
@@ -0,0 +1,14 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/rshrcmd.c.dist Tue Dec 12 08:20:56 1995
++++ rdist-6.1.5/src/rshrcmd.c Wed Dec 11 07:14:13 1996
+@@ -64,5 +64,5 @@
+ sp[0]. */
+ (void) close(sp[0]);
+- if (dup2(sp[1], 0) < 0 || dup2(0,1) < 0 || dup2(0, 2) < 0) {
++ if (dup2(sp[1], 0) < 0 || dup2(0,1) < 0) {
+ error("dup2 failed: %s.", SYSERR);
+ _exit(255);
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-stat64.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-stat64.patch
new file mode 100644
index 000000000..b20953ef3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-stat64.patch
@@ -0,0 +1,85 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/src/filesys.c.stat64 2005-05-04 14:11:03.000000000 +0200
++++ rdist-6.1.5/src/filesys.c 2005-05-04 14:11:10.000000000 +0200
+@@ -430,8 +430,8 @@
+ */
+ int getfilesysinfo(file, freespace, freefiles)
+ char *file;
+- long *freespace;
+- long *freefiles;
++ fsblkcnt_t *freespace;
++ fsfilcnt_t *freefiles;
+ {
+ #if defined(STATFS_TYPE)
+ static statfs_t statfsbuf;
+--- rdist-6.1.5/src/server.c.stat64 2005-05-04 14:11:23.000000000 +0200
++++ rdist-6.1.5/src/server.c 2005-05-04 14:20:34.000000000 +0200
+@@ -62,8 +62,8 @@
+ int catname = 0; /* cat name to target name */
+ char *sptarget[32]; /* stack of saved ptarget's for directories */
+ char *fromhost = NULL; /* Client hostname */
+-static long min_freespace = 0; /* Minimium free space on a filesystem */
+-static long min_freefiles = 0; /* Minimium free # files on a filesystem */
++static fsblkcnt_t min_freespace = 0; /* Minimium free space on a filesystem */
++static fsfilcnt_t min_freefiles = 0; /* Minimium free # files on a filesystem */
+ int oumask; /* Old umask */
+
+ /*
+@@ -1326,7 +1326,7 @@
+ fatalerr("Expected digit, got '%s'.", cp);
+ return;
+ }
+- min_freespace = (unsigned long) atoi(cp);
++ min_freespace = (fsblkcnt_t) atoll(cp);
+ break;
+
+ case SC_FREEFILES: /* Minimium free files */
+@@ -1334,7 +1334,7 @@
+ fatalerr("Expected digit, got '%s'.", cp);
+ return;
+ }
+- min_freefiles = (unsigned long) atoi(cp);
++ min_freefiles = (fsfilcnt_t) atoll(cp);
+ break;
+
+ case SC_LOGGING: /* Logging options */
+@@ -1364,7 +1364,8 @@
+ time_t mtime, atime;
+ char *owner, *group, *file;
+ char new[MAXPATHLEN];
+- long freespace = -1, freefiles = -1;
++ fsfilcnt_t freefiles = -1;
++ fsblkcnt_t freespace = -1;
+ char *cp = cmd;
+
+ /*
+@@ -1499,7 +1500,7 @@
+ */
+ if (min_freespace || min_freefiles) {
+ /* Convert file size to kilobytes */
+- long fsize = (long) (size / 1024);
++ fsblkcnt_t fsize = (fsblkcnt_t) (size / 1024);
+
+ if (getfilesysinfo(target, &freespace, &freefiles) != 0)
+ return;
+@@ -1511,14 +1512,14 @@
+ if (min_freespace && (freespace >= 0) &&
+ (freespace - fsize < min_freespace)) {
+ error(
+- "%s: Not enough free space on filesystem: min %d free %d",
++ "%s: Not enough free space on filesystem: min %lld free %lld",
+ target, min_freespace, freespace);
+ return;
+ }
+ if (min_freefiles && (freefiles >= 0) &&
+ (freefiles - 1 < min_freefiles)) {
+ error(
+- "%s: Not enough free files on filesystem: min %d free %d",
++ "%s: Not enough free files on filesystem: min %lld free %lld",
+ target, min_freefiles, freefiles);
+ return;
+ }
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-svr4.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-svr4.patch
new file mode 100644
index 000000000..bf73b71e1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-svr4.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/build/os-type.svr4 2003-12-17 12:44:18.000000000 +0100
++++ rdist-6.1.5/build/os-type 2003-12-17 12:44:29.000000000 +0100
+@@ -83,7 +83,6 @@
+ if [ -z "${OS}" -a ! -z "${uname}" ]; then
+ case "`$uname -a | tr '[A-Z]' '[a-z]'`" in
+ osf1*) OS=break;;
+- *"4.0"*) OS=svr4;; # There has to be a better way
+ *" dcosx "*) OS=dcosx;;
+ *"cx/ux"*) OS=cxux;;
+ *"hp-ux"*) # HP-UX 9.x
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-varargs.patch b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-varargs.patch
new file mode 100644
index 000000000..e6edbc44d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist-6.1.5/rdist-6.1.5-varargs.patch
@@ -0,0 +1,16 @@
+Upstream-Status: Inappropriate [1]
+
+[1] Not the author, the patch is from:
+http://vault.centos.org/5.8/os/SRPMS/rdist-6.1.5-44.src.rpm
+
+--- rdist-6.1.5/config/os-linux.h.varargs 2003-06-17 17:52:33.000000000 +0200
++++ rdist-6.1.5/config/os-linux.h 2003-06-17 17:53:07.000000000 +0200
+@@ -68,7 +68,7 @@
+ /*
+ * Type of arg functions we have.
+ */
+-#define ARG_TYPE ARG_VARARGS
++#define ARG_TYPE ARG_STDARG
+
+ /*
+ * Do we have select()?
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist_6.1.5.bb b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist_6.1.5.bb
new file mode 100644
index 000000000..cea1f08f9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/rdist/rdist_6.1.5.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Remote file distribution client and server"
+DESCRIPTION = "\
+Rdist is a program to maintain identical copies of files over multiple \
+hosts. It preserves the owner, group, mode, and mtime of files if \
+possible and can update programs that are executing. \
+"
+SECTION = "console/network"
+LICENSE = "BSD-4-Clause"
+LIC_FILES_CHKSUM = "file://Copyright;md5=3f47ec9f64b11c8192ee05a66b5c2755"
+
+SRC_URI = "http://www.magnicomp.com/download/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "546779700af70aa5f9103e08782cdcac"
+SRC_URI[sha256sum] = "2bb0d0f5904eadc9e7fe3d60c15389d6897fcf884211070e289a6c710ff37f96"
+
+SRC_URI += "file://rdist-6.1.5-linux.patch \
+ file://rdist-6.1.5-links.patch \
+ file://rdist-6.1.5-oldpath.patch \
+ file://rdist-6.1.5-hardlink.patch \
+ file://rdist-6.1.5-bison.patch \
+ file://rdist-6.1.5-varargs.patch \
+ file://rdist-6.1.5-maxargs.patch \
+ file://rdist-6.1.5-lfs.patch \
+ file://rdist-6.1.5-cleanup.patch \
+ file://rdist-6.1.5-svr4.patch \
+ file://rdist-6.1.5-ssh.patch \
+ file://rdist-6.1.5-mkstemp.patch \
+ file://rdist-6.1.5-stat64.patch \
+ file://rdist-6.1.5-fix-msgsndnotify-loop.patch \
+ file://rdist-6.1.5-bb-build.patch \
+ file://rdist-6.1.5-makefile-add-ldflags.patch \
+"
+
+DEPENDS = "bison-native"
+
+inherit autotools-brokensep
+
+EXTRA_OEMAKE = "BIN_GROUP=root MAN_GROUP=root RDIST_MODE=755 RDISTD_MODE=755 MAN_MODE=644"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd/0001-rtnl_flush-Error-on-failed-write.patch b/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd/0001-rtnl_flush-Error-on-failed-write.patch
new file mode 100644
index 000000000..eaaf30460
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd/0001-rtnl_flush-Error-on-failed-write.patch
@@ -0,0 +1,34 @@
+From 2fa326b26dc479942367dc4283e2f87372403988 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 09:32:04 -0700
+Subject: [PATCH] rtnl_flush: Error on failed write()
+
+Fixes
+route.c:45:2: error: ignoring return value of 'write', declared with attribute warn_unused_result [-Werror=unused-result]
+| write(fd, "-1", 2);
+| ^~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ route.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/route.c b/route.c
+index c552d1f..fc5c31e 100644
+--- a/route.c
++++ b/route.c
+@@ -42,7 +42,8 @@ static void rtnl_flush(void)
+ if (fd < 0)
+ return;
+
+- write(fd, "-1", 2);
++ if (write(fd, "-1", 2) < 0 )
++ perror("write");
+ close(fd);
+ }
+
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb b/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb
new file mode 100644
index 000000000..98dc41a09
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/relayd/relayd_git.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Layer 3 relay daemon"
+SECTION = "console/network"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://main.c;endline=17;md5=86aad799085683e0a2e1c2684a20bab2"
+
+DEPENDS = "libubox"
+
+SRC_URI = "git://git.openwrt.org/project/relayd.git \
+ file://0001-rtnl_flush-Error-on-failed-write.patch \
+"
+
+SRCREV = "ad0b25ad74345d367c62311e14b279f5ccb8ef13"
+PV = "0.0.1+git${SRCPV}"
+
+S = "${WORKDIR}/git"
+
+inherit cmake
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0001-packaging-Avoid-timeout-for-nmbd-if-started-offline-.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0001-packaging-Avoid-timeout-for-nmbd-if-started-offline-.patch
new file mode 100644
index 000000000..0e89a9be0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0001-packaging-Avoid-timeout-for-nmbd-if-started-offline-.patch
@@ -0,0 +1,32 @@
+Upstream-Status: Submitted [https://github.com/samba-team/samba/pull/70]
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+
+From 50eac4fd30944e5e1d83060757633fe0ed572723 Mon Sep 17 00:00:00 2001
+From: Andreas Oberritter <obi@opendreambox.org>
+Date: Wed, 30 Nov 2016 16:25:06 +0100
+Subject: [PATCH] packaging: Avoid timeout for nmbd if started offline with
+ systemd
+
+If no network connection appears within DefaultTimeoutStartSec
+(~ 90s) after startup, nmbd fails to notify systemd and will
+therefore get killed.
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+
+---
+ packaging/systemd/nmb.service | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/packaging/systemd/nmb.service b/packaging/systemd/nmb.service
+index 71c93d6..f3d2fc2 100644
+--- a/packaging/systemd/nmb.service
++++ b/packaging/systemd/nmb.service
+@@ -10,6 +10,7 @@ EnvironmentFile=-/etc/sysconfig/samba
+ ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS
+ ExecReload=/usr/bin/kill -HUP $MAINPID
+ LimitCORE=infinity
++TimeoutStartSec=0
+
+ [Install]
+ WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0006-avoid-using-colon-in-the-checking-msg.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0006-avoid-using-colon-in-the-checking-msg.patch
new file mode 100644
index 000000000..cdf7a38c1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/0006-avoid-using-colon-in-the-checking-msg.patch
@@ -0,0 +1,32 @@
+From 5413f97290d3126262eb309ecbcf7769509f2a11 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Tue, 10 Nov 2015 00:48:35 -0500
+Subject: [PATCH 6/7] avoid using colon in the checking msg
+
+Upstream-Status: Pending
+
+colon is used as the separator when parse from
+a answers file, the colon here makes it never
+get the right answer.
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ wscript_configure_system_mitkrb5 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/wscript_configure_system_mitkrb5 b/wscript_configure_system_mitkrb5
+index a62d00b..a2d89f0 100644
+--- a/wscript_configure_system_mitkrb5
++++ b/wscript_configure_system_mitkrb5
+@@ -240,7 +240,7 @@ conf.CHECK_CODE('''
+ ''',
+ 'HAVE_WRFILE_KEYTAB',
+ headers='krb5.h', lib='krb5', execute=True,
+- msg="Checking whether the WRFILE:-keytab is supported");
++ msg="Checking whether the WRFILE -keytab is supported");
+ # Check for KRB5_DEPRECATED handling
+ conf.CHECK_CODE('''#define KRB5_DEPRECATED 1
+ #include <krb5.h>''',
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/16-do-not-check-xsltproc-manpages.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/16-do-not-check-xsltproc-manpages.patch
new file mode 100644
index 000000000..8ca7a52ed
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/16-do-not-check-xsltproc-manpages.patch
@@ -0,0 +1,57 @@
+From 2214c2d1e455a38c891d17e421b438e3f7c495d8 Mon Sep 17 00:00:00 2001
+From: Bian Naimeng <biannm@cn.fujitsu.com>
+Date: Mon, 18 Apr 2016 17:00:53 -0400
+Subject: [PATCH] Don't check xsltproc manpages
+
+Upstream-Status: Pending
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+---
+ lib/ldb/wscript | 2 +-
+ lib/talloc/wscript | 2 +-
+ lib/tdb/wscript | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/lib/ldb/wscript b/lib/ldb/wscript
+index 5ea5231..d94086b 100644
+--- a/lib/ldb/wscript
++++ b/lib/ldb/wscript
+@@ -98,7 +98,7 @@ def configure(conf):
+ conf.DEFINE('EXPECTED_SYSTEM_LDB_VERSION_RELEASE', int(v[2]))
+
+ if conf.env.standalone_ldb:
+- conf.CHECK_XSLTPROC_MANPAGES()
++ #conf.CHECK_XSLTPROC_MANPAGES()
+
+ # we need this for the ldap backend
+ if conf.CHECK_FUNCS_IN('ber_flush ldap_open ldap_initialize', 'lber ldap', headers='lber.h ldap.h'):
+diff --git a/lib/talloc/wscript b/lib/talloc/wscript
+index df7e6be..b3305cf 100644
+--- a/lib/talloc/wscript
++++ b/lib/talloc/wscript
+@@ -49,7 +49,7 @@ def configure(conf):
+ conf.env.PKGCONFIGDIR = '${LIBDIR}/pkgconfig'
+ conf.env.TALLOC_VERSION = VERSION
+
+- conf.CHECK_XSLTPROC_MANPAGES()
++ #conf.CHECK_XSLTPROC_MANPAGES()
+
+ conf.CHECK_HEADERS('sys/auxv.h')
+ conf.CHECK_FUNCS('getauxval')
+diff --git a/lib/tdb/wscript b/lib/tdb/wscript
+index 4782550..6bb3fa1 100644
+--- a/lib/tdb/wscript
++++ b/lib/tdb/wscript
+@@ -89,7 +89,7 @@ def configure(conf):
+ not conf.env.disable_tdb_mutex_locking):
+ conf.define('USE_TDB_MUTEX_LOCKING', 1)
+
+- conf.CHECK_XSLTPROC_MANPAGES()
++ #conf.CHECK_XSLTPROC_MANPAGES()
+
+ if not conf.env.disable_python:
+ # also disable if we don't have the python libs installed
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/20-do-not-import-target-module-while-cross-compile.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/20-do-not-import-target-module-while-cross-compile.patch
new file mode 100644
index 000000000..e112b3b40
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/20-do-not-import-target-module-while-cross-compile.patch
@@ -0,0 +1,58 @@
+Some modules such as dynamic library maybe cann't be imported while cross compile,
+we just check whether does the module exist.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+Index: samba-4.4.2/buildtools/wafsamba/samba_bundled.py
+===================================================================
+--- samba-4.4.2.orig/buildtools/wafsamba/samba_bundled.py
++++ samba-4.4.2/buildtools/wafsamba/samba_bundled.py
+@@ -2,6 +2,7 @@
+
+ import sys
+ import Build, Options, Logs
++import imp, os
+ from Configure import conf
+ from samba_utils import TO_LIST
+
+@@ -230,17 +231,32 @@ def CHECK_BUNDLED_SYSTEM_PYTHON(conf, li
+ # versions
+ minversion = minimum_library_version(conf, libname, minversion)
+
+- try:
+- m = __import__(modulename)
+- except ImportError:
+- found = False
+- else:
++ # Find module in PYTHONPATH
++ stuff = imp.find_module(modulename, [os.environ["PYTHONPATH"]])
++ if stuff:
+ try:
+- version = m.__version__
+- except AttributeError:
++ m = imp.load_module(modulename, stuff[0], stuff[1], stuff[2])
++ except ImportError:
+ found = False
++
++ if conf.env.CROSS_COMPILE:
++ # Some modules such as dynamic library maybe cann't be imported
++ # while cross compile, we just check whether the module exist
++ Logs.warn('Cross module[%s] has been found, but can not be loaded.' % (stuff[1]))
++ found = True
+ else:
+- found = tuplize_version(version) >= tuplize_version(minversion)
++ try:
++ version = m.__version__
++ except AttributeError:
++ found = False
++ else:
++ found = tuplize_version(version) >= tuplize_version(minversion)
++ finally:
++ if stuff[0]:
++ stuff[0].close()
++ else:
++ found = False
++
+ if not found and not conf.LIB_MAY_BE_BUNDLED(libname):
+ Logs.error('ERROR: Python module %s of version %s not found, and bundling disabled' % (libname, minversion))
+ sys.exit(1)
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/21-add-config-option-without-valgrind.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/21-add-config-option-without-valgrind.patch
new file mode 100644
index 000000000..6a7f8facc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/21-add-config-option-without-valgrind.patch
@@ -0,0 +1,64 @@
+From 9a2d6315ff206b2a47100dfd85afe3af56576995 Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Thu, 10 Dec 2015 04:20:51 -0500
+Subject: [PATCH] Add config option without-valgrind
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+
+---
+ lib/replace/wscript | 4 +++-
+ source3/wscript | 5 ++++-
+ wscript | 4 ++++
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/lib/replace/wscript b/lib/replace/wscript
+index f0040b1..aca73af 100644
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -101,7 +101,9 @@ def configure(conf):
+ conf.CHECK_HEADERS('sys/fileio.h sys/filesys.h sys/dustat.h sys/sysmacros.h')
+ conf.CHECK_HEADERS('xfs/libxfs.h netgroup.h')
+
+- conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++ if not Options.options.disable_valgrind:
++ conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++
+ conf.CHECK_HEADERS('nss_common.h nsswitch.h ns_api.h')
+ conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h')
+ conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h')
+diff --git a/source3/wscript b/source3/wscript
+index bac3dd5..a5c51ea 100644
+--- a/source3/wscript
++++ b/source3/wscript
+@@ -1070,7 +1070,10 @@ syscall(SYS_setgroups32, 0, NULL);
+ Logs.warn("--with-dnsupdate=yes but gssapi support not sufficient")
+ else:
+ conf.DEFINE('WITH_DNS_UPDATES', 1)
+- conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++
++ if not Options.options.disable_valgrind:
++ conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++
+ if Options.options.developer:
+ if conf.CONFIG_SET('HAVE_VALGRIND_H') or conf.CONFIG_SET('HAVE_VALGRIND_VALGRIND_H'):
+ conf.DEFINE('VALGRIND', '1')
+diff --git a/wscript b/wscript
+index 542a60c..22e6116 100644
+--- a/wscript
++++ b/wscript
+@@ -86,6 +86,10 @@ def set_options(opt):
+ help=("Disable RELRO builds"),
+ action="store_false", dest='enable_relro')
+
++ opt.add_option('--without-valgrind',
++ help=("Disable use of the valgrind headers"),
++ action="store_true", dest='disable_valgrind', default=False)
++
+ gr = opt.option_group('developer options')
+
+ opt.tool_options('python') # options for disabling pyc or pyo compilation
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/dnsserver-4.7.0.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/dnsserver-4.7.0.patch
new file mode 100644
index 000000000..0c7592f8e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/dnsserver-4.7.0.patch
@@ -0,0 +1,19 @@
+samba: build dnsserver_common code
+
+Just 'install' does not seem to do it.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+--- a/source4/dns_server/wscript_build
++++ b/source4/dns_server/wscript_build
+@@ -4,7 +4,7 @@ bld.SAMBA_LIBRARY('dnsserver_common',
+ source='dnsserver_common.c',
+ deps='samba-util samba-errors ldbsamba clidns',
+ private_library=True,
+- install=bld.AD_DC_BUILD_IS_ENABLED()
++ enabled=bld.AD_DC_BUILD_IS_ENABLED()
+ )
+
+ bld.SAMBA_MODULE('service_dns',
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/glibc_only.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/glibc_only.patch
new file mode 100644
index 000000000..894bc8bb2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/glibc_only.patch
@@ -0,0 +1,15 @@
+Index: samba-4.6.2/ctdb/tests/src/test_mutex_raw.c
+===================================================================
+--- samba-4.6.2.orig/ctdb/tests/src/test_mutex_raw.c
++++ samba-4.6.2/ctdb/tests/src/test_mutex_raw.c
+@@ -166,8 +166,10 @@ int main(int argc, const char **argv)
+ if (ret == 0) {
+ pthread_mutex_unlock(mutex);
+ }
++#ifdef __GLIBC__
+ } else if (ret == EBUSY) {
+ printf("pid=%u\n", mutex->__data.__owner);
++#endif
+ } else if (ret == 0) {
+ pthread_mutex_unlock(mutex);
+ }
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/iconv-4.7.0.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/iconv-4.7.0.patch
new file mode 100644
index 000000000..5ae8c5978
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/iconv-4.7.0.patch
@@ -0,0 +1,25 @@
+samba: defeat iconv test
+
+A test was added when configuring samba which requires target code
+to be executed. In general, this will not work, so we eliminate it.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+--- a/lib/util/charset/wscript_configure
++++ b/lib/util/charset/wscript_configure
+@@ -17,6 +17,8 @@ if (conf.CHECK_FUNCS_IN('iconv_open', 'i
+
+ conf.DEFINE('HAVE_NATIVE_ICONV', 1)
+
++"""
++[added for 4.7.0, but breaks cross-compilation]
+ conf.CHECK_CODE('''
+ uint8_t inbuf[2] = { 0x30, 0xdf };
+ uint8_t outbuf[4] = { 0 };
+@@ -36,3 +38,4 @@ conf.CHECK_CODE('''
+ msg='Checking errno of iconv for illegal multibyte sequence',
+ lib='iconv',
+ headers='errno.h iconv.h')
++"""
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/netdb_defines.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/netdb_defines.patch
new file mode 100644
index 000000000..eb06866f4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/netdb_defines.patch
@@ -0,0 +1,19 @@
+Index: samba-4.6.2/nsswitch/wins.c
+===================================================================
+--- samba-4.6.2.orig/nsswitch/wins.c
++++ samba-4.6.2/nsswitch/wins.c
+@@ -39,6 +39,14 @@ static pthread_mutex_t wins_nss_mutex =
+ #define INADDRSZ 4
+ #endif
+
++#ifndef NETDB_INTERNAL
++#define NETDB_INTERNAL (-1)
++#endif
++
++#ifndef NETDB_SUCCESS
++#define NETDB_SUCCESS 0
++#endif
++
+ NSS_STATUS _nss_wins_gethostbyname_r(const char *hostname,
+ struct hostent *he,
+ char *buffer,
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-4.3.9-remove-getpwent_r.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-4.3.9-remove-getpwent_r.patch
new file mode 100644
index 000000000..71db99c5d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-4.3.9-remove-getpwent_r.patch
@@ -0,0 +1,87 @@
+Musl does not have _r versions of getent() and getpwent() APIs
+
+Taken from gentoo
+http://data.gpo.zugaina.org/musl/net-fs/samba/files/samba-4.3.9-remove-getpwent_r.patch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: samba-4.4.5/source4/torture/local/nss_tests.c
+===================================================================
+--- samba-4.4.5.orig/source4/torture/local/nss_tests.c
++++ samba-4.4.5/source4/torture/local/nss_tests.c
+@@ -247,7 +247,6 @@ static bool test_getgrnam_r(struct tortu
+ return true;
+ }
+
+-
+ static bool test_getgrgid(struct torture_context *tctx,
+ gid_t gid,
+ struct group *grp_p)
+@@ -333,6 +332,7 @@ static bool test_enum_passwd(struct tort
+ return true;
+ }
+
++#if HAVE_GETPWENT_R
+ static bool test_enum_r_passwd(struct torture_context *tctx,
+ struct passwd **pwd_array_p,
+ size_t *num_pwd_p)
+@@ -381,6 +381,7 @@ static bool test_enum_r_passwd(struct to
+
+ return true;
+ }
++#endif
+
+ static bool torture_assert_passwd_equal(struct torture_context *tctx,
+ const struct passwd *p1,
+@@ -432,7 +433,7 @@ static bool test_passwd_r(struct torture
+ struct passwd *pwd, pwd1, pwd2;
+ size_t num_pwd;
+
+- torture_assert(tctx, test_enum_r_passwd(tctx, &pwd, &num_pwd),
++ torture_assert(tctx, test_enum_passwd(tctx, &pwd, &num_pwd),
+ "failed to enumerate passwd");
+
+ for (i=0; i < num_pwd; i++) {
+@@ -460,7 +461,7 @@ static bool test_passwd_r_cross(struct t
+ struct passwd *pwd, pwd1, pwd2, pwd3, pwd4;
+ size_t num_pwd;
+
+- torture_assert(tctx, test_enum_r_passwd(tctx, &pwd, &num_pwd),
++ torture_assert(tctx, test_enum_passwd(tctx, &pwd, &num_pwd),
+ "failed to enumerate passwd");
+
+ for (i=0; i < num_pwd; i++) {
+@@ -531,6 +532,7 @@ static bool test_enum_group(struct tortu
+ return true;
+ }
+
++#if HAVE_GETGRENT_R
+ static bool test_enum_r_group(struct torture_context *tctx,
+ struct group **grp_array_p,
+ size_t *num_grp_p)
+@@ -579,6 +581,7 @@ static bool test_enum_r_group(struct tor
+
+ return true;
+ }
++#endif
+
+ static bool torture_assert_group_equal(struct torture_context *tctx,
+ const struct group *g1,
+@@ -635,7 +638,7 @@ static bool test_group_r(struct torture_
+ struct group *grp, grp1, grp2;
+ size_t num_grp;
+
+- torture_assert(tctx, test_enum_r_group(tctx, &grp, &num_grp),
++ torture_assert(tctx, test_enum_group(tctx, &grp, &num_grp),
+ "failed to enumerate group");
+
+ for (i=0; i < num_grp; i++) {
+@@ -663,7 +666,7 @@ static bool test_group_r_cross(struct to
+ struct group *grp, grp1, grp2, grp3, grp4;
+ size_t num_grp;
+
+- torture_assert(tctx, test_enum_r_group(tctx, &grp, &num_grp),
++ torture_assert(tctx, test_enum_group(tctx, &grp, &num_grp),
+ "failed to enumerate group");
+
+ for (i=0; i < num_grp; i++) {
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-pam.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-pam.patch
new file mode 100644
index 000000000..0cbacb6c0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/samba-pam.patch
@@ -0,0 +1,37 @@
+Lifted from gentoo and ported to 4.4.5
+
+http://data.gpo.zugaina.org/musl/net-fs/samba/files/samba-4.2.7-pam.patch
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: samba-4.7.0/source3/wscript
+===================================================================
+--- samba-4.7.0.orig/source3/wscript
++++ samba-4.7.0/source3/wscript
+@@ -875,7 +875,7 @@ msg.msg_accrightslen = sizeof(fd);
+ if conf.env.with_iconv:
+ conf.DEFINE('HAVE_ICONV', 1)
+
+- if Options.options.with_pam:
++ if Options.options.with_pam != False:
+ use_pam=True
+ conf.CHECK_HEADERS('security/pam_appl.h pam/pam_appl.h')
+ if not conf.CONFIG_SET('HAVE_SECURITY_PAM_APPL_H') and not conf.CONFIG_SET('HAVE_PAM_PAM_APPL_H'):
+@@ -952,6 +952,17 @@ int i; i = PAM_RADIO_TYPE;
+ "or headers not found. Use --without-pam to disable "
+ "PAM support.");
+
++ else:
++ Logs.warn("PAM disabled")
++ use_pam=False
++ conf.undefine('WITH_PAM')
++ conf.undefine('WITH_PAM_MODULES')
++ conf.undefine('HAVE_SECURITY_PAM_APPL_H')
++ conf.undefine('PAM_RHOST')
++ conf.undefine('PAM_TTY')
++ conf.undefine('HAVE_PAM_PAM_APPL_H')
++
++
+ seteuid = False
+
+ #
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/smb_conf-4.7.0.patch b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/smb_conf-4.7.0.patch
new file mode 100644
index 000000000..77c8b3626
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/smb_conf-4.7.0.patch
@@ -0,0 +1,19 @@
+samba: correct log files location
+
+We use /var/log/samba.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+--- a/packaging/RHEL/setup/smb.conf
++++ b/packaging/RHEL/setup/smb.conf
+@@ -63,7 +63,7 @@
+
+ # this tells Samba to use a separate log file for each machine
+ # that connects
+- log file = /usr/local/samba/var/log.%m
++ log file = /var/log/samba/log.%m
+
+ # Put a capping on the size of the log files (in Kb).
+ max log size = 50
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/volatiles.03_samba b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/volatiles.03_samba
new file mode 100644
index 000000000..4bdfa7d2c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba/volatiles.03_samba
@@ -0,0 +1,3 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d root root 0755 /var/log/samba none
+d root root 0755 /var/run/samba none
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.7.6.bb b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.7.6.bb
new file mode 100644
index 000000000..a8517c541
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/samba/samba_4.7.6.bb
@@ -0,0 +1,318 @@
+HOMEPAGE = "https://www.samba.org/"
+SECTION = "console/network"
+
+LICENSE = "GPL-3.0+ & LGPL-3.0+ & GPL-2.0+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://${COREBASE}/meta/files/common-licenses/LGPL-3.0;md5=bfccfe952269fff2b407dd11f2f3083b \
+ file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6 "
+
+SAMBA_MIRROR = "http://samba.org/samba/ftp"
+MIRRORS += "\
+${SAMBA_MIRROR} http://mirror.internode.on.net/pub/samba \n \
+${SAMBA_MIRROR} http://www.mirrorservice.org/sites/ftp.samba.org \n \
+"
+
+SRC_URI = "${SAMBA_MIRROR}/stable/samba-${PV}.tar.gz \
+ file://16-do-not-check-xsltproc-manpages.patch \
+ file://20-do-not-import-target-module-while-cross-compile.patch \
+ file://21-add-config-option-without-valgrind.patch \
+ file://0001-packaging-Avoid-timeout-for-nmbd-if-started-offline-.patch \
+ file://0006-avoid-using-colon-in-the-checking-msg.patch \
+ file://netdb_defines.patch \
+ file://glibc_only.patch \
+ file://iconv-4.7.0.patch \
+ file://dnsserver-4.7.0.patch \
+ file://smb_conf-4.7.0.patch \
+ file://volatiles.03_samba \
+ "
+SRC_URI_append_libc-musl = " \
+ file://samba-pam.patch \
+ file://samba-4.3.9-remove-getpwent_r.patch \
+ "
+
+SRC_URI[md5sum] = "0253021a45c479cec1e135b004a0177a"
+SRC_URI[sha256sum] = "1eede30fc8ef6504e24602fb72b00baa0a7b73b59f16d25cb0771dc8c7c57d6e"
+
+inherit systemd waf-samba cpan-base perlnative update-rc.d
+# remove default added RDEPENDS on perl
+RDEPENDS_${PN}_remove = "perl"
+
+DEPENDS += "readline virtual/libiconv zlib popt libtalloc libtdb libtevent libldb libbsd libaio libpam"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
+
+DEPENDS_append_libc-musl = " libtirpc"
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LDFLAGS_append_libc-musl = " -ltirpc"
+
+LSB = ""
+LSB_linuxstdbase = "lsb"
+
+INITSCRIPT_NAME = "samba"
+INITSCRIPT_PARAMS = "start 20 3 5 . stop 20 0 1 6 ."
+
+SYSTEMD_PACKAGES = "${PN}-base ${PN}-ad-dc winbind"
+SYSTEMD_SERVICE_${PN}-base = "nmb.service smb.service"
+SYSTEMD_SERVICE_${PN}-ad-dc = "${@bb.utils.contains('PACKAGECONFIG', 'ad-dc', 'samba.service', '', d)}"
+SYSTEMD_SERVICE_winbind = "winbind.service"
+
+# There are prerequisite settings to enable ad-dc, so disable the service by default.
+# Reference:
+# https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
+SYSTEMD_AUTO_ENABLE_${PN}-ad-dc = "disable"
+
+# Use krb5. Build active domain controller.
+#
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd zeroconf', d)} \
+ acl ad-dc cups gnutls ldap mitkrb5 \
+"
+
+RDEPENDS_${PN}-base += "${LSB}"
+RDEPENDS_${PN}-ctdb-tests += "bash util-linux-getopt"
+
+PACKAGECONFIG[acl] = "--with-acl-support,--without-acl-support,acl"
+PACKAGECONFIG[fam] = "--with-fam,--without-fam,gamin"
+PACKAGECONFIG[cups] = "--enable-cups,--disable-cups,cups"
+PACKAGECONFIG[ldap] = "--with-ldap,--without-ldap,openldap"
+PACKAGECONFIG[sasl] = ",,cyrus-sasl"
+PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd"
+PACKAGECONFIG[dmapi] = "--with-dmapi,--without-dmapi,dmapi"
+PACKAGECONFIG[zeroconf] = "--enable-avahi,--disable-avahi,avahi"
+PACKAGECONFIG[valgrind] = ",--without-valgrind,valgrind,"
+PACKAGECONFIG[lttng] = "--with-lttng, --without-lttng,lttng-ust"
+PACKAGECONFIG[archive] = "--with-libarchive, --without-libarchive, libarchive"
+
+# Building the AD (Active Directory) DC (Domain Controller) requires GnuTLS,
+# And ad-dc doesn't work with mitkrb5 for versions prior to 4.7.0 according to:
+# http://samba.2283325.n4.nabble.com/samba-4-6-6-Unknown-dependency-kdc-in-service-kdc-objlist-td4722096.html
+# So the working combination is:
+# 1) ad-dc: enable, gnutls: enable, mitkrb5: disable
+# 2) ad-dc: disable, gnutls: enable/disable, mitkrb5: enable
+#
+# We are now at 4.7.0, so take the above with a grain of salt. We do not need to know where
+# krb5kdc is unless ad-dc is enabled, but we tell configure anyhow.
+#
+PACKAGECONFIG[ad-dc] = ",--without-ad-dc,,"
+PACKAGECONFIG[gnutls] = "--enable-gnutls,--disable-gnutls,gnutls,"
+PACKAGECONFIG[mitkrb5] = "--with-system-mitkrb5 --with-system-mitkdc=/usr/sbin/krb5kdc,,krb5,"
+
+SAMBA4_IDMAP_MODULES="idmap_ad,idmap_rid,idmap_adex,idmap_hash,idmap_tdb2"
+SAMBA4_PDB_MODULES="pdb_tdbsam,${@bb.utils.contains('PACKAGECONFIG', 'ldap', 'pdb_ldap,', '', d)}pdb_ads,pdb_smbpasswd,pdb_wbc_sam,pdb_samba4"
+SAMBA4_AUTH_MODULES="auth_unix,auth_wbc,auth_server,auth_netlogond,auth_script,auth_samba4"
+SAMBA4_MODULES="${SAMBA4_IDMAP_MODULES},${SAMBA4_PDB_MODULES},${SAMBA4_AUTH_MODULES}"
+
+# These libraries are supposed to replace others supplied by packages, but decorate the names of
+# .so files so there will not be a conflict. This is not done consistantly, so be very careful
+# when adding to this list.
+#
+SAMBA4_LIBS="heimdal,cmocka,NONE"
+
+EXTRA_OECONF += "--enable-fhs \
+ --with-piddir=/run \
+ --with-sockets-dir=/run/samba \
+ --with-modulesdir=${libdir}/samba \
+ --with-lockdir=${localstatedir}/lib/samba \
+ --with-cachedir=${localstatedir}/lib/samba \
+ --disable-rpath-install \
+ --with-shared-modules=${SAMBA4_MODULES} \
+ --bundled-libraries=${SAMBA4_LIBS} \
+ ${@oe.utils.conditional('TARGET_ARCH', 'x86_64', '', '--disable-glusterfs', d)} \
+ --with-cluster-support \
+ --with-profiling-data \
+ --with-libiconv=${STAGING_DIR_HOST}${prefix} \
+ --with-pam --with-pammodulesdir=${base_libdir}/security \
+ "
+
+LDFLAGS += "-Wl,-z,relro,-z,now ${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}"
+
+do_install_append() {
+ for section in 1 5 7; do
+ install -d ${D}${mandir}/man$section
+ install -m 0644 ctdb/doc/*.$section ${D}${mandir}/man$section
+ done
+ for section in 1 5 7 8; do
+ install -d ${D}${mandir}/man$section
+ install -m 0644 docs/manpages/*.$section ${D}${mandir}/man$section
+ done
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 packaging/systemd/*.service ${D}${systemd_system_unitdir}
+ sed -e 's,\(ExecReload=\).*\(/kill\),\1${base_bindir}\2,' \
+ -e 's,/etc/sysconfig/samba,${sysconfdir}/default/samba,' \
+ -i ${D}${systemd_system_unitdir}/*.service
+
+ if [ "${@bb.utils.contains('PACKAGECONFIG', 'ad-dc', 'yes', 'no', d)}" = "no" ]; then
+ rm -f ${D}${systemd_system_unitdir}/samba.service
+ fi
+
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ install -m644 packaging/systemd/samba.conf.tmp ${D}${sysconfdir}/tmpfiles.d/samba.conf
+ echo "d ${localstatedir}/log/samba 0755 root root -" \
+ >> ${D}${sysconfdir}/tmpfiles.d/samba.conf
+ if [ "${LSB}" = "lsb" ]; then
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 packaging/LSB/samba.sh ${D}${sysconfdir}/init.d/samba
+ else
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 packaging/sysv/samba.init ${D}${sysconfdir}/init.d/samba
+ sed -e 's,/opt/samba/bin,${sbindir},g' \
+ -e 's,/opt/samba/smb.conf,${sysconfdir}/samba/smb.conf,g' \
+ -e 's,/opt/samba/log,${localstatedir}/log/samba,g' \
+ -e 's,/etc/init.d/samba.server,${sysconfdir}/init.d/samba,g' \
+ -e 's,/usr/bin,${base_bindir},g' \
+ -i ${D}${sysconfdir}/init.d/samba
+ fi
+
+ install -d ${D}${sysconfdir}/samba
+ echo "127.0.0.1 localhost" > ${D}${sysconfdir}/samba/lmhosts
+ install -m644 packaging/RHEL/setup/smb.conf ${D}${sysconfdir}/samba/smb.conf
+ install -D -m 644 ${WORKDIR}/volatiles.03_samba ${D}${sysconfdir}/default/volatiles/03_samba
+
+ install -d ${D}${sysconfdir}/default
+ install -m644 packaging/systemd/samba.sysconfig ${D}${sysconfdir}/default/samba
+
+ # install ctdb config file and test cases
+ install -D -m 0644 ${S}/ctdb/tests/onnode/nodes ${D}${sysconfdir}/ctdb/nodes
+ # the items are from ctdb/tests/run_tests.sh
+ for d in onnode takeover tool eventscripts cunit simple complex; do
+ testdir=${D}${datadir}/ctdb-tests/$d
+ install -d $testdir
+ cp ${S}/ctdb/tests/$d/*.sh $testdir
+ cp -r ${S}/ctdb/tests/$d/scripts ${S}/ctdb/tests/$d/stubs $testdir || true
+ done
+
+ # fix file-rdeps qa warning
+ if [ -f ${D}${bindir}/onnode ]; then
+ sed -i 's:\(#!/bin/\)bash:\1sh:' ${D}${bindir}/onnode
+ fi
+
+ chmod 0750 ${D}${sysconfdir}/sudoers.d
+ rm -rf ${D}/run ${D}${localstatedir}/run ${D}${localstatedir}/log
+}
+
+PACKAGES =+ "${PN}-python ${PN}-pidl \
+ ${PN}-dsdb-modules ${PN}-testsuite registry-tools \
+ winbind \
+ ${PN}-common ${PN}-base ${PN}-ad-dc ${PN}-ctdb-tests \
+ smbclient ${PN}-client ${PN}-server ${PN}-test"
+
+python samba_populate_packages() {
+ def module_hook(file, pkg, pattern, format, basename):
+ pn = d.getVar('PN', True)
+ d.appendVar('RRECOMMENDS_%s-base' % pn, ' %s' % pkg)
+
+ mlprefix = d.getVar('MLPREFIX', True) or ''
+ pam_libdir = d.expand('${base_libdir}/security')
+ pam_pkgname = mlprefix + 'pam-plugin%s'
+ do_split_packages(d, pam_libdir, '^pam_(.*)\.so$', pam_pkgname, 'PAM plugin for %s', extra_depends='', prepend=True)
+
+ libdir = d.getVar('libdir', True)
+ do_split_packages(d, libdir, '^lib(.*)\.so\..*$', 'lib%s', 'Samba %s library', extra_depends='${PN}-common', prepend=True, allow_links=True)
+ pkglibdir = '%s/samba' % libdir
+ do_split_packages(d, pkglibdir, '^lib(.*)\.so$', 'lib%s', 'Samba %s library', extra_depends='${PN}-common', prepend=True)
+ moduledir = '%s/samba/auth' % libdir
+ do_split_packages(d, moduledir, '^(.*)\.so$', 'samba-auth-%s', 'Samba %s authentication backend', hook=module_hook, extra_depends='', prepend=True)
+ moduledir = '%s/samba/pdb' % libdir
+ do_split_packages(d, moduledir, '^(.*)\.so$', 'samba-pdb-%s', 'Samba %s password backend', hook=module_hook, extra_depends='', prepend=True)
+}
+
+PACKAGESPLITFUNCS_prepend = "samba_populate_packages "
+
+RDEPENDS_${PN} += "${PN}-base ${PN}-python ${PN}-dsdb-modules"
+RDEPENDS_${PN}-python += "pytalloc python-tdb"
+
+FILES_${PN}-base = "${sbindir}/nmbd \
+ ${sbindir}/smbd \
+ ${sysconfdir}/init.d \
+ ${localstatedir}/lib/samba \
+ ${localstatedir}/nmbd \
+ ${localstatedir}/spool/samba \
+ ${systemd_system_unitdir}/nmb.service \
+ ${systemd_system_unitdir}/smb.service"
+
+FILES_${PN}-ad-dc = "${sbindir}/samba \
+ ${systemd_system_unitdir}/samba.service \
+ ${libdir}/krb5/plugins/kdb/samba.so \
+ "
+RDEPENDS_${PN}-ad-dc = "krb5-kdc"
+
+FILES_${PN}-ctdb-tests = "${bindir}/ctdb_run_tests \
+ ${bindir}/ctdb_run_cluster_tests \
+ ${sysconfdir}/ctdb/nodes \
+ ${datadir}/ctdb-tests \
+ ${datadir}/ctdb/tests \
+ "
+
+FILES_${BPN}-common = "${sysconfdir}/default \
+ ${sysconfdir}/samba \
+ ${sysconfdir}/tmpfiles.d \
+"
+
+FILES_${PN} += "${libdir}/vfs/*.so \
+ ${libdir}/charset/*.so \
+ ${libdir}/*.dat \
+ ${libdir}/auth/*.so \
+"
+
+FILES_${PN}-dsdb-modules = "${libdir}/samba/ldb"
+
+FILES_${PN}-testsuite = "${bindir}/gentest \
+ ${bindir}/locktest \
+ ${bindir}/masktest \
+ ${bindir}/ndrdump \
+ ${bindir}/smbtorture"
+
+FILES_registry-tools = "${bindir}/regdiff \
+ ${bindir}/regpatch \
+ ${bindir}/regshell \
+ ${bindir}/regtree"
+
+FILES_winbind = "${sbindir}/winbindd \
+ ${bindir}/wbinfo \
+ ${bindir}/ntlm_auth \
+ ${libdir}/samba/idmap \
+ ${libdir}/samba/nss_info \
+ ${libdir}/winbind_krb5_locator.so \
+ ${sysconfdir}/init.d/winbind \
+ ${systemd_system_unitdir}/winbind.service"
+
+FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR}"
+
+FILES_smbclient = "${bindir}/cifsdd \
+ ${bindir}/rpcclient \
+ ${bindir}/smbcacls \
+ ${bindir}/smbclient \
+ ${bindir}/smbcquotas \
+ ${bindir}/smbget \
+ ${bindir}/smbspool \
+ ${bindir}/smbtar \
+ ${bindir}/smbtree \
+ ${libdir}/samba/smbspool_krb5_wrapper"
+
+RDEPENDS_${PN}-pidl_append = " perl"
+FILES_${PN}-pidl = "${bindir}/pidl ${datadir}/perl5/Parse"
+
+RDEPENDS_${PN}-client = "\
+ smbclient \
+ winbind \
+ registry-tools \
+ ${PN}-pidl \
+ "
+
+ALLOW_EMPTY_${PN}-client = "1"
+
+RDEPENDS_${PN}-server = "\
+ ${PN} \
+ winbind \
+ registry-tools \
+ "
+
+ALLOW_EMPTY_${PN}-server = "1"
+
+RDEPENDS_${PN}-test = "\
+ ${PN}-ctdb-tests \
+ ${PN}-testsuite \
+ "
+
+ALLOW_EMPTY_${PN}-test = "1"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/sethdlc/files/sethdlc-fix-host-contamination.patch b/meta-openembedded/meta-networking/recipes-connectivity/sethdlc/files/sethdlc-fix-host-contamination.patch
new file mode 100644
index 000000000..f25a02cd8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/sethdlc/files/sethdlc-fix-host-contamination.patch
@@ -0,0 +1,42 @@
+From 9a9137c3df5309ac359737d6ebd67fb4ff5f3cf2 Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Mon, 24 Nov 2014 22:05:18 -0500
+Subject: [PATCH] sethdlc: fix host contamination
+
+Clean INCLUDES to fix the host contamination errors:
+
+ In file included from /usr/src/linux/include/linux/posix_types.h:47:0,
+ from /usr/src/linux/include/linux/types.h:17,
+ from /usr/src/linux/include/linux/if.h:22,
+ from sethdlc.c:23:
+ /usr/src/linux/include/asm-generic/posix_types.h:91:3: \
+ error: conflicting types for '__kernel_fsid_t'
+ } __kernel_fsid_t;
+ ^
+ .../tmp/sysroots/qemumips/usr/include/asm/posix_types.h:26:3: \
+ note: previous declaration of '__kernel_fsid_t' was here
+ } __kernel_fsid_t;
+ ^
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 0492f2b..97dec22 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,6 +1,6 @@
+ CC = gcc
+ CFLAGS = -O2 -Wall -W -Wno-long-long -pipe
+-INCLUDES = -I/usr/src/linux/include -I/usr/src/linux-2.6/include
++INCLUDES =
+
+ all: sethdlc
+
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/sethdlc/sethdlc.bb b/meta-openembedded/meta-networking/recipes-connectivity/sethdlc/sethdlc.bb
new file mode 100644
index 000000000..fc304fae7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/sethdlc/sethdlc.bb
@@ -0,0 +1,33 @@
+DESCRIPTION = "set Linux HDLC packet radio modem driver port information"
+HOMEPAGE = "https://www.kernel.org/pub/linux/utils/net/hdlc"
+SECTION = "comm"
+LICENSE = "GPLv2 & GPLv2+ "
+LIC_FILES_CHKSUM = "file://sethdlc.c;endline=10;md5=90f936879e9f8b755a138aeb348782eb"
+
+
+SRC_URI = "https://www.kernel.org/pub/linux/utils/net/hdlc/${BPN}-1.18.tar.gz \
+ file://sethdlc-fix-host-contamination.patch \
+"
+SRC_URI[md5sum] = "9016878156a5eadb06c0bae71cc5c9ab"
+SRC_URI[sha256sum] = "21b1e2e1cb0e288b0ec8fcfd9fed449914e0f8e6fc273706bd5b3d4f6ab6b04e"
+
+
+S = "${WORKDIR}/${BPN}-1.18"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+DEPENDS = "virtual/kernel"
+
+EXTRA_OEMAKE="CROSS_COMPILE=${TARGET_PREFIX} CC='${CC} ${LDFLAGS}' \
+ KERNEL_DIR=${STAGING_KERNEL_DIR} "
+
+do_compile_prepend () {
+ oe_runmake clean
+}
+
+
+do_install() {
+ install -d ${D}/${bindir}
+ install sethdlc ${D}/${bindir}/
+}
+
+FILES_${PN} += "${bindir}/sethdlc"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-fix-do_package-failed-since-snort-2.9.7.0.patch b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-fix-do_package-failed-since-snort-2.9.7.0.patch
new file mode 100644
index 000000000..047caec32
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-fix-do_package-failed-since-snort-2.9.7.0.patch
@@ -0,0 +1,33 @@
+From 4335c4c61877c0b65ff4ec767e8ad3ad8c73c32d Mon Sep 17 00:00:00 2001
+From: Zhiquan Li <zhiquan.li@windriver.com>
+Date: Fri, 13 Nov 2015 17:40:24 +0800
+Subject: [PATCH] fix do_package failed since snort 2.9.7.0
+
+Remove redundant '/' as a workround for below error:
+/lib/rpm/bin/debugedit: canonicalization unexpectedly shrank by one character
+
+It's a rpm debugedit bug:
+* http://sourceforge.net/p/snort/mailman/message/34130268/
+* https://bugzilla.redhat.com/show_bug.cgi?id=304121
+
+Upstream-Status:Inappropriate [embedded specific]
+
+Signed-off-by: Zhiquan Li <zhiquan.li@windriver.com>
+
+---
+ src/snort.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/snort.h b/src/snort.h
+index 8308e57..499d157 100644
+--- a/src/snort.h
++++ b/src/snort.h
+@@ -39,7 +39,7 @@
+ #include "sfdaq.h"
+ #include "sf_types.h"
+ #include "sfutil/sflsq.h"
+-#include "sfutil//sfActionQueue.h"
++#include "sfutil/sfActionQueue.h"
+ #include "profiler.h"
+ #include "rules.h"
+ #include "treenodes.h"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-libpcap-search-sysroot-for-headers.patch b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-libpcap-search-sysroot-for-headers.patch
new file mode 100644
index 000000000..2e28cd048
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/0001-libpcap-search-sysroot-for-headers.patch
@@ -0,0 +1,29 @@
+From 5875dea90f71350b7205788fbc67e3759077cefe Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe@deserted.net>
+Date: Wed, 20 Nov 2013 16:06:07 -0500
+Subject: [PATCH] libpcap: search sysroot for headers
+
+Configure hard-coded host header paths when building with libpcap. Point
+the search path at the sysroot instead.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe MacDonald <joe@deserted.net>
+
+---
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.in b/configure.in
+index 62573a8..fded45b 100644
+--- a/configure.in
++++ b/configure.in
+@@ -69,7 +69,7 @@ case "$host" in
+ linux="yes"
+ AC_DEFINE([LINUX],[1],[Define if Linux])
+ AC_SUBST(extra_incl)
+- extra_incl="-I/usr/include/pcap"
++ extra_incl="-I=/usr/include/pcap"
+ ;;
+ *-hpux10*|*-hpux11*)
+ AC_DEFINE([HPUX],[1],[Define if HP-UX 10 or 11])
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-dap-address-space-id.patch b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-dap-address-space-id.patch
new file mode 100644
index 000000000..6aa0b736f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-dap-address-space-id.patch
@@ -0,0 +1,62 @@
+From 5a53260a819e2873f58165e96852529719101c53 Mon Sep 17 00:00:00 2001
+From: Chunrong Guo <B40290@freescale.com>
+Date: Mon, 4 Nov 2013 10:39:56 +0800
+Subject: [PATCH] snort: add recipe
+
+Upstream-Status:Inappropriate [embedded specific]
+
+fix the below error:
+checking for dap address space id... configure:
+configure: error: cannot run test program while cross compiling
+
+Signed-off-by: Chunrong Guo <B40290@freescale.com>
+
+---
+ configure.in | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 6fe5d68..e7636ce 100644
+--- a/configure.in
++++ b/configure.in
+@@ -698,23 +698,23 @@ if test "x$ac_cv_func_daq_dp_add_dc" = "xyes"; then
+
+ fi
+
+-AC_MSG_CHECKING([for daq address space ID])
+-AC_RUN_IFELSE(
+-[AC_LANG_PROGRAM(
+-[[
+-#include <daq.h>
+-]],
+-[[
+- DAQ_PktHdr_t hdr;
+- hdr.address_space_id = 0;
+-]])],
+-[have_daq_address_space_id="yes"],
+-[have_daq_address_space_id="no"])
+-AC_MSG_RESULT($have_daq_address_space_id)
+-if test "x$have_daq_address_space_id" = "xyes"; then
+- AC_DEFINE([HAVE_DAQ_ADDRESS_SPACE_ID],[1],
+- [DAQ version supports address space ID in header.])
+-fi
++#AC_MSG_CHECKING([for daq address space ID])
++#AC_RUN_IFELSE(
++#[AC_LANG_PROGRAM(
++#[[
++##include <daq.h>
++#]],
++#[[
++# DAQ_PktHdr_t hdr;
++# hdr.address_space_id = 0;
++#]])],
++have_daq_address_space_id="yes"
++#[have_daq_address_space_id="no"])
++#AC_MSG_RESULT($have_daq_address_space_id)
++#if test "x$have_daq_address_space_id" = "xyes"; then
++# AC_DEFINE([HAVE_DAQ_ADDRESS_SPACE_ID],[1],
++# [DAQ version supports address space ID in header.])
++#fi
+
+ AC_MSG_CHECKING([for daq flow ID])
+ AC_RUN_IFELSE(
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-flow-id.patch b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-flow-id.patch
new file mode 100644
index 000000000..04df37c94
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-flow-id.patch
@@ -0,0 +1,60 @@
+From 5aa42a3137c657b5eddd4608343aa1854bd7cd27 Mon Sep 17 00:00:00 2001
+From: Zhiquan Li <zhiquan.li@windriver.com>
+Date: Mon, 16 Nov 2015 10:23:00 +0800
+Subject: [PATCH] snort: 2.9.6.0 -> 2.9.7.5
+
+Upstream-Status:Inappropriate [embedded specific]
+
+fix the below error:
+checking for daq flow ID... configure:
+configure: error: cannot run test program while cross compiling
+
+---
+ configure.in | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index e7636ce..2fbd298 100644
+--- a/configure.in
++++ b/configure.in
+@@ -716,23 +716,23 @@ have_daq_address_space_id="yes"
+ # [DAQ version supports address space ID in header.])
+ #fi
+
+-AC_MSG_CHECKING([for daq flow ID])
+-AC_RUN_IFELSE(
+-[AC_LANG_PROGRAM(
+-[[
+-#include <daq.h>
+-]],
+-[[
+- DAQ_PktHdr_t hdr;
+- hdr.flow_id = 0;
+-]])],
+-[have_daq_flow_id="yes"],
+-[have_daq_flow_id="no"])
+-AC_MSG_RESULT($have_daq_flow_id)
+-if test "x$have_daq_flow_id" = "xyes"; then
+- AC_DEFINE([HAVE_DAQ_FLOW_ID],[1],
+- [DAQ version supports flow ID in header.])
+-fi
++#AC_MSG_CHECKING([for daq flow ID])
++#AC_RUN_IFELSE(
++#[AC_LANG_PROGRAM(
++#[[
++##include <daq.h>
++#]],
++#[[
++# DAQ_PktHdr_t hdr;
++# hdr.flow_id = 0;
++#]])],
++have_daq_flow_id="yes"
++#[have_daq_flow_id="no"])
++#AC_MSG_RESULT($have_daq_flow_id)
++#if test "x$have_daq_flow_id" = "xyes"; then
++# AC_DEFINE([HAVE_DAQ_FLOW_ID],[1],
++# [DAQ version supports flow ID in header.])
++#fi
+
+ AC_MSG_CHECKING([for DAQ_VERDICT_RETRY])
+ AC_RUN_IFELSE(
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-verdict-retry.patch b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-verdict-retry.patch
new file mode 100644
index 000000000..15958a72d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-daq-verdict-retry.patch
@@ -0,0 +1,60 @@
+From b916443d43f2e1eeacfbed0033274a0270ef634d Mon Sep 17 00:00:00 2001
+From: Zhiquan Li <zhiquan.li@windriver.com>
+Date: Mon, 16 Nov 2015 10:23:00 +0800
+Subject: [PATCH] snort: 2.9.6.0 -> 2.9.7.5
+
+Upstream-Status:Inappropriate [embedded specific]
+
+fix the below error:
+checking for DAQ_VERDICT_RETRY... configure:
+configure: error: cannot run test program while cross compiling
+
+---
+ configure.in | 34 +++++++++++++++++-----------------
+ 1 file changed, 17 insertions(+), 17 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 2fbd298..62573a8 100644
+--- a/configure.in
++++ b/configure.in
+@@ -734,23 +734,23 @@ have_daq_flow_id="yes"
+ # [DAQ version supports flow ID in header.])
+ #fi
+
+-AC_MSG_CHECKING([for DAQ_VERDICT_RETRY])
+-AC_RUN_IFELSE(
+-[AC_LANG_PROGRAM(
+-[[
+-#include <daq.h>
+-]],
+-[[
+- DAQ_Verdict verdict;
+- verdict = DAQ_VERDICT_RETRY;
+-]])],
+-[have_daq_verdict_retry="yes"],
+-[have_daq_verdict_retry="no"])
+-AC_MSG_RESULT($have_daq_verdict_retry)
+-if test "x$have_daq_verdict_retry" = "xyes"; then
+- AC_DEFINE([HAVE_DAQ_VERDICT_RETRY],[1],
+- [DAQ version supports DAQ_VERDICT_RETRY in DAQ_Verdict.])
+-fi
++#AC_MSG_CHECKING([for DAQ_VERDICT_RETRY])
++#AC_RUN_IFELSE(
++#[AC_LANG_PROGRAM(
++#[[
++##include <daq.h>
++#]],
++#[[
++# DAQ_Verdict verdict;
++# verdict = DAQ_VERDICT_RETRY;
++#]])],
++have_daq_verdict_retry="yes"
++#[have_daq_verdict_retry="no"])
++#AC_MSG_RESULT($have_daq_verdict_retry)
++#if test "x$have_daq_verdict_retry" = "xyes"; then
++# AC_DEFINE([HAVE_DAQ_VERDICT_RETRY],[1],
++# [DAQ version supports DAQ_VERDICT_RETRY in DAQ_Verdict.])
++#fi
+
+ # any sparc platform has to have this one defined.
+ AC_MSG_CHECKING(for sparc)
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-inaddr-none.patch b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-inaddr-none.patch
new file mode 100644
index 000000000..79e9f076b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/disable-inaddr-none.patch
@@ -0,0 +1,85 @@
+From a1fdbced4166cb0f35d23b63a59312d86860485a Mon Sep 17 00:00:00 2001
+From: Chunrong Guo <B40290@freescale.com>
+Date: Mon, 4 Nov 2013 10:39:56 +0800
+Subject: [PATCH] snort: add recipe
+
+Upstream-Status: Inappropriate [embedded specific]
+
+fix the below error:
+checking for INADDR_NONE... configure:
+configure: error: cannot run test program while cross compiling
+
+Signed-off-by: Chunrong Guo <B40290@freescale.com>
+
+---
+ configure.in | 50 ++++++++++++++++----------------------------------
+ 1 file changed, 16 insertions(+), 34 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 20d15eb..6fe5d68 100644
+--- a/configure.in
++++ b/configure.in
+@@ -274,25 +274,7 @@ AC_CHECK_TYPES([int8_t,int16_t,int32_t,int64_t])
+ AC_CHECK_TYPES([boolean])
+
+ # In case INADDR_NONE is not defined (like on Solaris)
+-have_inaddr_none="no"
+-AC_MSG_CHECKING([for INADDR_NONE])
+-AC_RUN_IFELSE(
+-[AC_LANG_PROGRAM(
+-[[
+-#include <sys/types.h>
+-#include <netinet/in.h>
+-#include <arpa/inet.h>
+-]],
+-[[
+- if (inet_addr("10,5,2") == INADDR_NONE);
+- return 0;
+-]])],
+-[have_inaddr_none="yes"],
+-[have_inaddr_none="no"])
+-AC_MSG_RESULT($have_inaddr_none)
+-if test "x$have_inaddr_none" = "xno"; then
+- AC_DEFINE([INADDR_NONE],[-1],[For INADDR_NONE definition])
+-fi
++have_inaddr_none="yes"
+
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+@@ -421,21 +403,21 @@ if test "x$LPCAP" = "xno"; then
+ fi
+ fi
+
+-AC_MSG_CHECKING([for pcap_lex_destroy])
+-AC_RUN_IFELSE(
+-[AC_LANG_PROGRAM(
+-[[
+-#include <pcap.h>
+-]],
+-[[
+- pcap_lex_destroy();
+-]])],
+-[have_pcap_lex_destroy="yes"],
+-[have_pcap_lex_destroy="no"])
+-AC_MSG_RESULT($have_pcap_lex_destroy)
+-if test "x$have_pcap_lex_destroy" = "xyes"; then
+- AC_DEFINE([HAVE_PCAP_LEX_DESTROY],[1],[Can cleanup lex buffer stack created by pcap bpf filter])
+-fi
++#AC_MSG_CHECKING([for pcap_lex_destroy])
++#AC_RUN_IFELSE(
++#[AC_LANG_PROGRAM(
++#[[
++##include <pcap.h>
++#]],
++#[[
++# pcap_lex_destroy();
++#]])],
++have_pcap_lex_destroy="yes"
++#[have_pcap_lex_destroy="no"])
++#AC_MSG_RESULT($have_pcap_lex_destroy)
++#if test "x$have_pcap_lex_destroy" = "xyes"; then
++# AC_DEFINE([HAVE_PCAP_LEX_DESTROY],[1],[Can cleanup lex buffer stack created by pcap bpf filter])
++#fi
+
+ AC_MSG_CHECKING([for pcap_lib_version])
+ AC_LINK_IFELSE(
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/fix-host-contamination-when-enable-static-daq.patch b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/fix-host-contamination-when-enable-static-daq.patch
new file mode 100644
index 000000000..0404ea0fa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/fix-host-contamination-when-enable-static-daq.patch
@@ -0,0 +1,30 @@
+From f46d096015d7402a37a59eb66b8f6b7fbf0cdff0 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 24 May 2017 17:38:53 +0800
+Subject: [PATCH] snort: enable static daq
+
+Upstream-Status: Inappropriate [embedded specific]
+
+When enable static daq for snort, it calls to daq-modules-config to get link
+library and library path. Library path is useless for oe and cause host
+contamination issue. So filter it.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+
+---
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.in b/configure.in
+index fded45b..a247bb9 100644
+--- a/configure.in
++++ b/configure.in
+@@ -658,7 +658,7 @@ fi
+
+ if test "x$enable_static_daq" = "xyes"; then
+ LDAQ=""
+- LIBS="${LIBS} `daq-modules-config --static --libs`"
++ LIBS="${LIBS} `daq-modules-config --static --libs | sed 's#-L[^ ]*##g'`"
+ AC_CHECK_LIB([daq_static], [daq_load_modules],
+ [LIBS="-ldaq_static ${LIBS}"], [LDAQ="no"], [ ])
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/snort.init b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/snort.init
new file mode 100644
index 000000000..d8a00c43f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort/snort.init
@@ -0,0 +1,109 @@
+#!/bin/sh
+#
+# Snort Startup Script modified for OpenEmbedded
+#
+
+# Script variables
+
+LAN_INTERFACE="$2"
+RETURN_VAL=0
+BINARY=/usr/bin/snort
+PATH=/bin:/usr/bin
+PID=/var/run/snort_${LAN_INTERFACE}_ids.pid
+DEL_PID=$PID
+LOGDIR="/var/log/snort"
+DATE=`/bin/date +%Y%m%d`
+CONFIG_FILE=/etc/snort/snort.conf
+PROG=snort
+USER=root
+GROUP=root
+
+if [ ! -x "$BINARY" ]; then
+ echo "ERROR: $BINARY not found."
+ exit 1
+fi
+
+if [ ! -r "$CONFIG_FILE" ]; then
+ echo "ERROR: $CONFIG_FILE not found."
+ exit 1
+fi
+
+start()
+{
+
+ [ -n "$LAN_INTERFACE" ] || return 0
+ # Check if log diratory is present. Otherwise, create it.
+ if [ ! -d $LOGDIR/$DATE ]; then
+ mkdir -d $LOGDIR/$DATE
+ /bin/chown -R $USER:$USER $LOGDIR/$DATE
+ /bin/chmod -R 700 $LOGDIR/$DATE
+ fi
+
+ /bin/echo "Starting $PROG: "
+ # Snort parameters
+ # -D Run Snort in background (daemon) mode
+ # -i <if> Listen on interface <if>
+ # -u <uname> Run snort uid as <uname> user (or uid)
+ # -g <gname> Run snort uid as <gname> group (or gid)
+ # -c Load configuration file
+ # -N Turn off logging (alerts still work) (removed to enable logging) :)
+ # -l Log to directory
+ # -t Chroots process to directory after initialization
+ # -R <id> Include 'id' in snort_intf<id>.pid file name
+
+ $BINARY -D -i $LAN_INTERFACE -u $USER -g $GROUP -c $CONFIG_FILE -l $LOGDIR/$DATE -t $LOGDIR/$DATE -R _ids
+ /bin/echo "$PROG startup complete."
+ return $RETURN_VAL
+}
+
+stop()
+{
+ if [ -s $PID ]; then
+ /bin/echo "Stopping $PROG with PID `cat $PID`: "
+ kill -TERM `cat $PID` 2>/dev/null
+ RETURN_VAL=$?
+ /bin/echo "$PROG shutdown complete."
+ [ -e $DEL_PID ] && rm -f $DEL_PID
+ [ -e $DEL_PID.lck ] && rm -f $DEL_PID.lck
+ else
+ /bin/echo "ERROR: PID in $PID file not found."
+ RETURN_VAL=1
+ fi
+ return $RETURN_VAL
+}
+
+status() {
+ if [ -s $PID ]; then
+ echo "$PROG is running as pid `cat $PID`:"
+ else
+ echo "$PROG is not running."
+ fi
+}
+
+restart()
+{
+ stop
+ start
+ RETURN_VAL=$?
+ return $RETURN_VAL
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ status
+ ;;
+ restart|reload)
+ restart
+ ;;
+ *)
+ /bin/echo "Usage: $0 {start|stop|status|restart|reload}"
+ RETURN_VAL=1
+esac
+
+exit $RETURN_VAL
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/snort/snort_2.9.7.5.bb b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort_2.9.7.5.bb
new file mode 100644
index 000000000..2034b85fb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/snort/snort_2.9.7.5.bb
@@ -0,0 +1,105 @@
+DESCRIPTION = "snort - a free lightweight network intrusion detection system for UNIX and Windows."
+HOMEPAGE = "http://www.snort.org/"
+SECTION = "net"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=78fa8ef966b48fbf9095e13cc92377c5"
+
+DEPENDS = "xz libpcap libpcre daq libdnet util-linux daq-native"
+DEPENDS_append_libc-musl = " libtirpc"
+
+SRC_URI = " ${GENTOO_MIRROR}/${BP}.tar.gz;name=tarball \
+ file://snort.init \
+ file://disable-inaddr-none.patch \
+ file://disable-dap-address-space-id.patch \
+ file://disable-daq-flow-id.patch \
+ file://disable-daq-verdict-retry.patch \
+ file://0001-libpcap-search-sysroot-for-headers.patch \
+ file://0001-fix-do_package-failed-since-snort-2.9.7.0.patch \
+ file://fix-host-contamination-when-enable-static-daq.patch \
+"
+
+SRC_URI[tarball.md5sum] = "fd271788c0f8876be87a858a9142f202"
+SRC_URI[tarball.sha256sum] = "ad03f11b5301b16642199a86aa90388eaa53f5003f83b0c5595745a490047be1"
+
+inherit autotools gettext update-rc.d pkgconfig
+
+INITSCRIPT_NAME = "snort"
+INITSCRIPT_PARAMS = "defaults"
+
+EXTRA_OECONF = " \
+ --enable-gre \
+ --enable-linux-smp-stats \
+ --enable-reload \
+ --enable-reload-error-restart \
+ --enable-targetbased \
+ --enable-static-daq \
+ --with-dnet-includes=${STAGING_INCDIR} \
+ --with-dnet-libraries=${STAGING_LIBDIR} \
+ --with-libpcre-includes=${STAGING_INCDIR} \
+ --with-libpcre-libraries=${STAGING_LIBDIR} \
+ --with-daq-includes=${STAGING_INCDIR} \
+ --with-daq-libraries=${STAGING_LIBDIR} \
+"
+
+# if you want to disable it, you need to patch configure.in first
+# AC_CHECK_HEADERS([openssl/sha.h],, SHA_H="no")
+# is called even with --without-openssl-includes
+PACKAGECONFIG ?= "openssl lzma"
+PACKAGECONFIG[openssl] = "--with-openssl-includes=${STAGING_INCDIR} --with-openssl-libraries=${STAGING_LIBDIR}, --without-openssl-includes --without-openssl-libraries, openssl,"
+PACKAGECONFIG[lzma] = "--with-lzma-includes=${STAGING_INCDIR} --with-lzma-libraries=${STAGING_LIBDIR}, --without-lzma-includes --without-lzma-libraries, xz,"
+
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LDFLAGS_append_libc-musl = " -ltirpc"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/snort/rules
+ install -d ${D}${sysconfdir}/snort/preproc_rules
+ install -d ${D}${sysconfdir}/init.d
+ for i in map config conf dtd; do
+ cp ${S}/etc/*.$i ${D}${sysconfdir}/snort/
+ done
+
+ # fix the hardcoded path and lib name
+ # comment out the rules that are not provided
+ sed -i -e 's#/usr/local/lib#${libdir}#' \
+ -e 's#\.\./\(.*rules\)#${sysconfdir}/snort/\1#' \
+ -e 's#\(libsf_engine.so\)#\1.0#' \
+ -e 's/^\(include $RULE_PATH\)/#\1/' \
+ -e 's/^\(dynamicdetection\)/#\1/' \
+ -e '/preprocessor reputation/,/blacklist/ s/^/#/' \
+ ${D}${sysconfdir}/snort/snort.conf
+
+ cp ${S}/preproc_rules/*.rules ${D}${sysconfdir}/snort/preproc_rules/
+ install -m 755 ${WORKDIR}/snort.init ${D}${sysconfdir}/init.d/snort
+ mkdir -p ${D}${localstatedir}/log/snort
+ install -d ${D}/var/log/snort
+
+ sed -i 's/-fdebug-prefix-map[^ ]*//g; s#${STAGING_DIR_TARGET}##g' ${D}${libdir}/pkgconfig/*.pc
+}
+
+FILES_${PN} += " \
+ ${libdir}/snort_dynamicengine/*.so.* \
+ ${libdir}/snort_dynamicpreprocessor/*.so.* \
+ ${libdir}/snort_dynamicrules/*.so.* \
+"
+FILES_${PN}-dbg += " \
+ ${libdir}/snort_dynamicengine/.debug \
+ ${libdir}/snort_dynamicpreprocessor/.debug \
+ ${libdir}/snort_dynamicrules/.debug \
+"
+FILES_${PN}-staticdev += " \
+ ${libdir}/snort_dynamicengine/*.a \
+ ${libdir}/snort_dynamicpreprocessor/*.a \
+ ${libdir}/snort_dynamicrules/*.a \
+ ${libdir}/snort/dynamic_preproc/*.a \
+ ${libdir}/snort/dynamic_output/*.a \
+"
+FILES_${PN}-dev += " \
+ ${libdir}/snort_dynamicengine/*.la \
+ ${libdir}/snort_dynamicpreprocessor/*.la \
+ ${libdir}/snort_dynamicrules/*.la \
+ ${libdir}/snort_dynamicengine/*.so \
+ ${libdir}/snort_dynamicpreprocessor/*.so \
+ ${libdir}/snort_dynamicrules/*.so \
+ ${prefix}/src/snort_dynamicsrc \
+"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0001-optimize-boot.patch b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0001-optimize-boot.patch
new file mode 100644
index 000000000..a1e56b7ca
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0001-optimize-boot.patch
@@ -0,0 +1,25 @@
+Author: Jamie Strandboge <jamie@canonical.com>
+Description: to improve boot speed when disabled, don't source all of
+ ufw-init-functions (which also sources in other files).
+
+Upstream-Status: Inappropriate [ not author ]
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+
+Index: ufw-0.31/src/ufw-init
+===================================================================
+--- ufw-0.31.orig/src/ufw-init 2012-03-09 17:07:11.000000000 -0600
++++ ufw-0.31/src/ufw-init 2012-03-17 09:37:51.000000000 -0500
+@@ -18,6 +18,12 @@
+ #
+ set -e
+
++# Debian/Ubuntu: small boot speed improvement
++. "#CONFIG_PREFIX#/ufw/ufw.conf"
++if [ "$1" = "start" ] && [ "$2" = "quiet" ] && [ "$ENABLED" = "no" ]; then
++ exit 0
++fi
++
+ if [ -s "#STATE_PREFIX#/ufw-init-functions" ]; then
+ . "#STATE_PREFIX#/ufw-init-functions"
+ else
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0002-lp1044361.patch b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0002-lp1044361.patch
new file mode 100644
index 000000000..804c18bc9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0002-lp1044361.patch
@@ -0,0 +1,118 @@
+Origin: r795, r796
+Description: move netfilter capabilities checking into initcaps(), and call
+ initcaps() only when we need it.
+Bug-Ubuntu: https://launchpad.net/bugs/1044361
+
+Upstream-Status: Inappropriate [ not author ]
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+
+Index: ufw-0.33/src/backend_iptables.py
+===================================================================
+--- ufw-0.33.orig/src/backend_iptables.py 2012-09-23 09:58:34.000000000 -0500
++++ ufw-0.33/src/backend_iptables.py 2012-09-23 09:58:36.000000000 -0500
+@@ -160,6 +160,9 @@
+ out += "> " + _("Checking raw ip6tables\n")
+ return out
+
++ # Initialize the capabilities database
++ self.initcaps()
++
+ args = ['-n', '-v', '-x', '-L']
+ items = []
+ items6 = []
+@@ -470,6 +473,9 @@
+ if self.dryrun:
+ return False
+
++ # Initialize the capabilities database
++ self.initcaps()
++
+ prefix = "ufw"
+ exe = self.iptables
+ if v6:
+@@ -684,6 +690,9 @@
+ except Exception:
+ raise
+
++ # Initialize the capabilities database
++ self.initcaps()
++
+ chain_prefix = "ufw"
+ rules = self.rules
+ if v6:
+@@ -830,6 +839,10 @@
+ * updating user rules file
+ * reloading the user rules file if rule is modified
+ '''
++
++ # Initialize the capabilities database
++ self.initcaps()
++
+ rstr = ""
+
+ if rule.v6:
+@@ -1073,6 +1086,9 @@
+ if self.dryrun:
+ return
+
++ # Initialize the capabilities database
++ self.initcaps()
++
+ rules_t = []
+ try:
+ rules_t = self._get_logging_rules(level)
+Index: ufw-0.33/src/backend.py
+===================================================================
+--- ufw-0.33.orig/src/backend.py 2012-09-23 09:58:34.000000000 -0500
++++ ufw-0.33/src/backend.py 2012-09-23 09:59:03.000000000 -0500
+@@ -21,7 +21,7 @@
+ import stat
+ import sys
+ import ufw.util
+-from ufw.util import warn, debug
++from ufw.util import error, warn, debug
+ from ufw.common import UFWError, config_dir, iptables_dir, UFWRule
+ import ufw.applications
+
+@@ -68,6 +68,17 @@
+ err_msg = _("Couldn't determine iptables version")
+ raise UFWError(err_msg)
+
++ # Initialize via initcaps only when we need it (LP: #1044361)
++ self.caps = None
++
++ def initcaps(self):
++ '''Initialize the capabilities database. This needs to be called
++ before accessing the database.'''
++
++ # Only initialize if not initialized already
++ if self.caps != None:
++ return
++
+ self.caps = {}
+ self.caps['limit'] = {}
+
+@@ -78,14 +89,20 @@
+ # Try to get capabilities from the running system if root
+ if self.do_checks and os.getuid() == 0 and not self.dryrun:
+ # v4
+- nf_caps = ufw.util.get_netfilter_capabilities(self.iptables)
++ try:
++ nf_caps = ufw.util.get_netfilter_capabilities(self.iptables)
++ except OSError as e:
++ error("initcaps\n%s" % e)
+ if 'recent-set' in nf_caps and 'recent-update' in nf_caps:
+ self.caps['limit']['4'] = True
+ else:
+ self.caps['limit']['4'] = False
+
+ # v6
+- nf_caps = ufw.util.get_netfilter_capabilities(self.ip6tables)
++ try:
++ nf_caps = ufw.util.get_netfilter_capabilities(self.ip6tables)
++ except OSError as e:
++ error("initcaps\n%s" % e)
+ if 'recent-set' in nf_caps and 'recent-update' in nf_caps:
+ self.caps['limit']['6'] = True
+ else:
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0003-fix-typeerror-on-error.patch b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0003-fix-typeerror-on-error.patch
new file mode 100644
index 000000000..b259fdf78
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0003-fix-typeerror-on-error.patch
@@ -0,0 +1,20 @@
+Origin: r797
+Description: src/backend_iptables.py: fix misplaced parenthesis
+
+Upstream-Status: Inappropriate [ not author ]
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+
+Index: ufw-0.33/src/backend_iptables.py
+===================================================================
+--- ufw-0.33.orig/src/backend_iptables.py 2012-09-24 08:51:13.000000000 -0500
++++ ufw-0.33/src/backend_iptables.py 2012-09-24 08:52:00.000000000 -0500
+@@ -1075,7 +1075,7 @@
+ exe = self.ip6tables
+ (rc, out) = cmd([exe] + args)
+ if rc != 0:
+- err_msg = _("Could not perform '%s'") % (args)
++ err_msg = _("Could not perform '%s'" % (args))
+ if fail_ok:
+ debug("FAILOK: " + err_msg)
+ else:
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0004-lp1039729.patch b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0004-lp1039729.patch
new file mode 100644
index 000000000..695b26567
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0004-lp1039729.patch
@@ -0,0 +1,40 @@
+Origin: r803, r804
+Description: Don't call get_netfilter_capabilities() with ipv6 if ipv6 is
+ disabled.
+Bug-Ubuntu: https://launchpad.net/ufw/bugs/1039729
+
+Upstream-Status: Inappropriate [ not author ]
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+
+Index: ufw-0.33/src/backend.py
+===================================================================
+--- ufw-0.33.orig/src/backend.py 2012-12-04 09:21:57.000000000 -0600
++++ ufw-0.33/src/backend.py 2012-12-04 09:22:40.000000000 -0600
+@@ -98,15 +98,17 @@
+ else:
+ self.caps['limit']['4'] = False
+
+- # v6
+- try:
+- nf_caps = ufw.util.get_netfilter_capabilities(self.ip6tables)
+- except OSError as e:
+- error("initcaps\n%s" % e)
+- if 'recent-set' in nf_caps and 'recent-update' in nf_caps:
+- self.caps['limit']['6'] = True
+- else:
+- self.caps['limit']['6'] = False
++ # v6 (skip capabilities check for ipv6 if ipv6 is disabled in ufw
++ # because the system may not have ipv6 support (LP: #1039729)
++ if self.use_ipv6():
++ try:
++ nf_caps = ufw.util.get_netfilter_capabilities(self.ip6tables)
++ except OSError as e:
++ error("initcaps\n%s" % e)
++ if 'recent-set' in nf_caps and 'recent-update' in nf_caps:
++ self.caps['limit']['6'] = True
++ else:
++ self.caps['limit']['6'] = False
+
+ def is_enabled(self):
+ '''Is firewall configured as enabled'''
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0005-lp1191197.patch b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0005-lp1191197.patch
new file mode 100644
index 000000000..b760d3fd3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/0005-lp1191197.patch
@@ -0,0 +1,32 @@
+Origin: r816
+Description: add check for -m rt --rt-type 0
+Bug-Ubuntu: https://launchpad.net/bugs/1191197
+Forwarded: yes
+
+Upstream-Status: Inappropriate [ not author ]
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+
+Index: ufw-0.33/tests/check-requirements
+===================================================================
+--- ufw-0.33.orig/tests/check-requirements 2012-08-17 16:12:49.000000000 -0500
++++ ufw-0.33/tests/check-requirements 2013-06-15 07:47:00.000000000 -0500
+@@ -3,7 +3,7 @@
+ # check-requirements: verify all the required iptables functionality is
+ # available
+ #
+-# Copyright 2008-2012 Canonical Ltd.
++# Copyright 2008-2013 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 3,
+@@ -218,6 +218,9 @@
+ echo -n "icmpv6 with hl ($j): "
+ runcmd $exe -A $c -p icmpv6 --icmpv6-type $j -m hl --hl-eq 255 -j ACCEPT
+ done
++
++ echo -n "ipv6 rt: "
++ runcmd $exe -A $c -m rt --rt-type 0 -j ACCEPT
+ fi
+
+ echo ""
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-add-an-option-to-specify-iptables-location.patch b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-add-an-option-to-specify-iptables-location.patch
new file mode 100644
index 000000000..511742338
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-add-an-option-to-specify-iptables-location.patch
@@ -0,0 +1,107 @@
+From c54d36d0582a60fd281cd9287077cea205fd849d Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Thu, 27 Nov 2014 15:20:34 -0500
+Subject: [PATCH] setup: add an option to specify iptables location
+
+When cross-compiling it isn't certain that the location of iptables on the
+target will be the same as on the host. It also doesn't make sense the
+test the version of the host during setup. We provide an option to
+specify an alternate iptables directory. This is assumed to be a
+cross-compile environment and therefore no attempt is made to verify the
+version of iptables to be used.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ setup.py | 69 ++++++++++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 39 insertions(+), 30 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 6fb3751..b13d11c 100644
+--- a/setup.py
++++ b/setup.py
+@@ -225,41 +225,50 @@ shutil.copytree('src', 'staging')
+ os.unlink(os.path.join('staging', 'ufw-init'))
+ os.unlink(os.path.join('staging', 'ufw-init-functions'))
+
++iptables_set = 0
+ iptables_exe = ''
+ iptables_dir = ''
+
+-for e in ['iptables']:
+- for dir in ['/sbin', '/bin', '/usr/sbin', '/usr/bin', '/usr/local/sbin', \
+- '/usr/local/bin']:
+- if e == "iptables":
+- if os.path.exists(os.path.join(dir, e)):
+- iptables_dir = dir
+- iptables_exe = os.path.join(iptables_dir, "iptables")
+- print("Found '%s'" % iptables_exe)
+- else:
+- continue
+-
+- if iptables_exe != "":
+- break
+-
+-
+-if iptables_exe == '':
+- print("ERROR: could not find required binary 'iptables'", file=sys.stderr)
+- sys.exit(1)
+-
+-for e in ['ip6tables', 'iptables-restore', 'ip6tables-restore']:
+- if not os.path.exists(os.path.join(iptables_dir, e)):
+- print("ERROR: could not find required binary '%s'" % (e), file=sys.stderr)
++if "--iptables-dir" in sys.argv:
++ iptables_dir = sys.argv[sys.argv.index("--iptables-dir") + 1]
++ iptables_exe = os.path.join(iptables_dir, "iptables")
++ iptables_set = 1
++ print("INFO: iptables manually set: '%s'" % (iptables_exe))
++ sys.argv.remove(iptables_dir)
++ sys.argv.remove("--iptables-dir")
++
++if not iptables_set:
++ for e in ['iptables']:
++ for dir in ['/sbin', '/bin', '/usr/sbin', '/usr/bin', '/usr/local/sbin', \
++ '/usr/local/bin']:
++ if e == "iptables":
++ if os.path.exists(os.path.join(dir, e)):
++ iptables_dir = dir
++ iptables_exe = os.path.join(iptables_dir, "iptables")
++ print("Found '%s'" % iptables_exe)
++ else:
++ continue
++
++ if iptables_exe != "":
++ break
++
++ if iptables_exe == '':
++ print("ERROR: could not find required binary 'iptables'", file=sys.stderr)
+ sys.exit(1)
+
+-(rc, out) = cmd([iptables_exe, '-V'])
+-if rc != 0:
+- raise OSError(errno.ENOENT, "Could not find version for '%s'" % \
+- (iptables_exe))
+-version = re.sub('^v', '', re.split('\s', str(out))[1])
+-print("Found '%s' version '%s'" % (iptables_exe, version))
+-if version < "1.4":
+- print("WARN: version '%s' has limited IPv6 support. See README for details." % (version), file=sys.stderr)
++ for e in ['ip6tables', 'iptables-restore', 'ip6tables-restore']:
++ if not os.path.exists(os.path.join(iptables_dir, e)):
++ print("ERROR: could not find required binary '%s'" % (e), file=sys.stderr)
++ sys.exit(1)
++
++ (rc, out) = cmd([iptables_exe, '-V'])
++ if rc != 0:
++ raise OSError(errno.ENOENT, "Could not find version for '%s'" % \
++ (iptables_exe))
++ version = re.sub('^v', '', re.split('\s', str(out))[1])
++ print("Found '%s' version '%s'" % (iptables_exe, version))
++ if version < "1.4":
++ print("WARN: version '%s' has limited IPv6 support. See README for details." % (version), file=sys.stderr)
+
+ setup (name='ufw',
+ version=ufw_version,
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-only-make-one-reference-to-env.patch b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-only-make-one-reference-to-env.patch
new file mode 100644
index 000000000..ff704b5a4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw/setup-only-make-one-reference-to-env.patch
@@ -0,0 +1,77 @@
+From be53eea06a5655fdc98f47a73be8277b65bb42ed Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Tue, 11 Nov 2014 21:41:14 -0500
+Subject: [PATCH] setup: only make one reference to env
+
+If sys.executable happens to be '/usr/bin/env python' or something
+similar, the setup script will result in 'ufw' getting /usr/bin/env
+repeated on the top line. This causes an error at runtime. Perform a
+quick sanity check on sys.executable before doing the substitution.
+
+While we're at it, change the default value of 'exe' to the one we either
+detected or specified on the build line.
+
+Upstream-Status: Inappropriate [ embedded specific ]
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ setup.py | 34 ++++++++++++++++++++++++++++------
+ 1 file changed, 28 insertions(+), 6 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index b13d11c..73acdef 100644
+--- a/setup.py
++++ b/setup.py
+@@ -64,7 +64,7 @@ class Install(_install, object):
+ real_sharedir = os.path.join(real_prefix, 'share', 'ufw')
+
+ # Update the modules' paths
+- for file in [ 'common.py' ]:
++ for file in [ 'common.py', 'util.py' ]:
+ print("Updating " + file)
+ subprocess.call(["sed",
+ "-i",
+@@ -91,6 +91,11 @@ class Install(_install, object):
+ "s%#SHARE_DIR#%" + real_sharedir + "%g",
+ os.path.join('staging', file)])
+
++ subprocess.call(["sed",
++ "-i.jjm",
++ "s%/sbin/iptables%" + iptables_exe + "%g",
++ os.path.join('staging', file)])
++
+ # Now byte-compile everything
+ super(Install, self).run()
+
+@@ -107,12 +112,23 @@ class Install(_install, object):
+ for f in [ script, manpage, manpage_f ]:
+ self.mkpath(os.path.dirname(f))
+
++ # if sys.executable == /usr/bin/env python* the result will be the top
++ # of ufw getting:
++ #
++ # #! /usr/bin/env /usr/bin/env python
++ #
++ # which is not ideal
++ #
+ # update the interpreter to that of the one the user specified for setup
+- print("Updating staging/ufw to use %s" % (sys.executable))
+- subprocess.call(["sed",
+- "-i",
+- "1s%^#.*python.*%#! /usr/bin/env " + sys.executable + "%g",
+- 'staging/ufw'])
++ print("Updating staging/ufw to use (%s)" % (sys.executable))
++
++ if re.search("(/usr/bin/env)", sys.executable):
++ print("found 'env' in sys.executable (%s)" % (sys.executable))
++ subprocess.call(["sed",
++ "-i.jjm",
++ "1s%^#.*python.*%#! " + sys.executable + "%g",
++ 'staging/ufw'])
++
+ self.copy_file('staging/ufw', script)
+ self.copy_file('doc/ufw.8', manpage)
+ self.copy_file('doc/ufw-framework.8', manpage_f)
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw_0.33.bb b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw_0.33.bb
new file mode 100644
index 000000000..19cfe46b7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/ufw/ufw_0.33.bb
@@ -0,0 +1,56 @@
+SUMMARY = "Uncomplicated Firewall"
+DESCRIPTION = "UFW stands for Uncomplicated Firewall, and is program for \
+managing a netfilter firewall. It provides a command line interface and aims \
+to be uncomplicated and easy to use."
+HOMEPAGE = "https://launchpad.net/ufw"
+SECTION = "net"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f27defe1e96c2e1ecd4e0c9be8967949"
+
+SRC_URI = " \
+ https://launchpad.net/ufw/0.33/0.33/+download/ufw-0.33.tar.gz \
+ file://setup-add-an-option-to-specify-iptables-location.patch \
+ file://setup-only-make-one-reference-to-env.patch \
+ file://0001-optimize-boot.patch \
+ file://0002-lp1044361.patch \
+ file://0003-fix-typeerror-on-error.patch \
+ file://0004-lp1039729.patch \
+ file://0005-lp1191197.patch \
+"
+SRC_URI[md5sum] = "3747b453d76709e5a99da209fc0bb5f5"
+SRC_URI[sha256sum] = "5f85a8084ad3539b547bec097286948233188c971f498890316dec170bdd1da8"
+
+inherit setuptools distro_features_check
+
+RDEPENDS_${PN} = " \
+ iptables \
+ python \
+ python-modules \
+ "
+
+RRECOMMENDS_${PN} = " \
+ kernel-module-ipv6 \
+ kernel-module-nf-conntrack-ipv6 \
+ kernel-module-nf-log-common \
+ kernel-module-nf-log-ipv4 \
+ kernel-module-nf-log-ipv6 \
+ kernel-module-nf-addrtype \
+ kernel-module-nf-limit \
+ kernel-module-nf-log \
+ kernel-module-nf-recent \
+"
+
+# Certain items are explicitly put under /lib, not base_libdir when installed.
+#
+FILES_${PN} += " \
+ ${sbindir}/* \
+ ${datadir}/ufw/* \
+ /lib/ufw/* \
+ ${sysconfdir}/ufw/* \
+ ${sysconfdir}/default/ufw \
+"
+
+REQUIRED_DISTRO_FEATURES = "ipv6"
+
+DISTUTILS_BUILD_ARGS_append = " --iptables-dir /usr/sbin"
+DISTUTILS_INSTALL_ARGS_append = " --iptables-dir /usr/sbin"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/0001-Add-printf-format-and-silence-format-security-warnin.patch b/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/0001-Add-printf-format-and-silence-format-security-warnin.patch
new file mode 100644
index 000000000..ebcfc7c2f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/0001-Add-printf-format-and-silence-format-security-warnin.patch
@@ -0,0 +1,34 @@
+From 400b8f235377f677a7a760f1e3a1cd26d95140bc Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 16 Jun 2017 22:58:18 -0700
+Subject: [PATCH] Add printf format and silence format-security warnings
+
+Fix
+
+vconfig.c:66:4: error: format not a string literal and no format arguments [-Werror=format-security]
+ fprintf(stdout,usage);
+ ^~~~~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ vconfig.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/vconfig.c b/vconfig.c
+index 5057cfd..83137ba 100644
+--- a/vconfig.c
++++ b/vconfig.c
+@@ -63,7 +63,7 @@ static char* usage =
+ " is OFF.\n";
+
+ void show_usage() {
+- fprintf(stdout,usage);
++ fprintf(stdout, "%s", usage);
+ }
+
+ int hex_to_bytes(char* bytes, int bytes_length, char* hex_str) {
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/no-HOME-includes.patch b/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/no-HOME-includes.patch
new file mode 100644
index 000000000..b7ab7d97c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan-1.9/no-HOME-includes.patch
@@ -0,0 +1,22 @@
+From: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
+Subject: vlan: do not include ${HOME}/linux/include dir
+
+~/linux/include dir may exist and so will be added to include path
+in front of sanitized kernel headers in OE chroot. Drop this include
+option.
+
+Upstream-Status: not-applicable
+
+Index: vlan/MakeInclude
+===================================================================
+--- vlan.orig/MakeInclude
++++ vlan/MakeInclude
+@@ -16,7 +16,7 @@ ifeq "${PLATFORM}" ""
+ endif
+
+ ## You may need to change this linux/include part.
+-CCFLAGS = -g -D_GNU_SOURCE -Wall -I${HOME}/linux/include
++CCFLAGS = -g -D_GNU_SOURCE -Wall
+ LDLIBS = # -lm #-lnsl # -lsocket
+
+ ARM_TC_BIN = ${HOME}/Intrinsyc/bin
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan_1.9.bb b/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan_1.9.bb
new file mode 100644
index 000000000..7eea5d135
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vlan/vlan_1.9.bb
@@ -0,0 +1,38 @@
+SUMMARY = "VLAN provides vconfig utility"
+HOMEPAGE = "http://www.candelatech.com/~greear/vlan.html"
+SECTION = "misc"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://vconfig.c;beginline=1;endline=19;md5=094ca47de36c20c598b15b32c270ce0a"
+
+SRC_URI = "http://${BPN}.sourcearchive.com/downloads/${PV}-3ubuntu9/${BPN}_${PV}.orig.tar.gz \
+ file://no-HOME-includes.patch \
+ file://0001-Add-printf-format-and-silence-format-security-warnin.patch \
+"
+
+SRC_URI[md5sum] = "5f0c6060b33956fb16e11a15467dd394"
+SRC_URI[sha256sum] = "3b8f0a1bf0d3642764e5f646e1f3bbc8b1eeec474a77392d9aeb4868842b4cca"
+
+S = "${WORKDIR}/${BPN}"
+
+inherit update-alternatives
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+# comment out MakeInclude in Makefile which sets build environment
+do_configure_append () {
+ sed -i 's/^ include/#^include/' ${S}/Makefile
+}
+
+# ignore strip to avoid yocto errors in stripping
+do_compile () {
+ oe_runmake PLATFORM=ARM 'STRIP=echo' all
+}
+
+do_install () {
+ install -d ${D}/${base_sbindir}
+ install -m 0755 ${S}/vconfig ${D}/${base_sbindir}/
+}
+
+ALTERNATIVE_PRIORITY = "100"
+ALTERNATIVE_${PN} = "vconfig"
+ALTERNATIVE_LINK_NAME[vconfig] = "${base_sbindir}/vconfig"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0001-search-for-log-help-in-build-dir.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0001-search-for-log-help-in-build-dir.patch
new file mode 100644
index 000000000..184c7943b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0001-search-for-log-help-in-build-dir.patch
@@ -0,0 +1,26 @@
+From 48e16e9ae7d8e4c42282bd82cbbd9a6d346a5c00 Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Sun, 2 Dec 2012 02:16:54 +0100
+Subject: [PATCH 1/8] search for log-help in build dir
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ makeman.pl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/makeman.pl b/makeman.pl
+index cf241a1..2d73432 100755
+--- a/makeman.pl
++++ b/makeman.pl
+@@ -30,7 +30,7 @@ my $vpnc = './vpnc';
+ # indenting lists (those originally starting with an asterisk). I hope
+ # this pays off when converting the manpage to HTML or such.
+
+-open my $LONGHELP, '-|', "$vpnc --long-help";
++open my $LONGHELP, '-|', "cat ./long-help";
+ my $vpnc_options = '';
+ my $relative_indent = 0;
+ my $indent_needed = 0;
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0002-Fix-vpnc-install-for-cross-compile.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0002-Fix-vpnc-install-for-cross-compile.patch
new file mode 100644
index 000000000..6f00d3b89
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0002-Fix-vpnc-install-for-cross-compile.patch
@@ -0,0 +1,49 @@
+From d565b4a5e0045f1e40e0e462920ed5b8faca9eec Mon Sep 17 00:00:00 2001
+From: Martin Jansa <Martin.Jansa@gmail.com>
+Date: Sun, 2 Dec 2012 02:16:54 +0100
+Subject: [PATCH 2/8] Fix vpnc install for cross compile
+
+---
+ Makefile | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 69f5aca..a15782e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -133,21 +133,21 @@ install-common: all
+ else \
+ install vpnc-script $(DESTDIR)$(ETCDIR); \
+ fi
+- install -m600 vpnc.conf $(DESTDIR)$(ETCDIR)/default.conf
+- install -m755 vpnc-disconnect $(DESTDIR)$(SBINDIR)
+- install -m755 pcf2vpnc $(DESTDIR)$(BINDIR)
+- install -m644 vpnc.8 $(DESTDIR)$(MANDIR)/man8
+- install -m644 pcf2vpnc.1 $(DESTDIR)$(MANDIR)/man1
+- install -m644 cisco-decrypt.1 $(DESTDIR)$(MANDIR)/man1
+- install -m644 COPYING $(DESTDIR)$(DOCDIR)
++ install -m 600 vpnc.conf $(DESTDIR)$(ETCDIR)/default.conf
++ install -m 755 vpnc-disconnect $(DESTDIR)$(SBINDIR)
++ install -m 755 pcf2vpnc $(DESTDIR)$(BINDIR)
++ install -m 644 vpnc.8 $(DESTDIR)$(MANDIR)/man8
++ install -m 644 pcf2vpnc.1 $(DESTDIR)$(MANDIR)/man1
++ install -m 644 cisco-decrypt.1 $(DESTDIR)$(MANDIR)/man1
++ install -m 644 COPYING $(DESTDIR)$(DOCDIR)
+
+ install : install-common
+- install -m755 vpnc $(DESTDIR)$(SBINDIR)
+- install -m755 cisco-decrypt $(DESTDIR)$(BINDIR)
++ install -m 755 vpnc $(DESTDIR)$(SBINDIR)
++ install -m 755 cisco-decrypt $(DESTDIR)$(BINDIR)
+
+ install-strip : install-common
+- install -s -m755 vpnc $(DESTDIR)$(SBINDIR)
+- install -s -m755 cisco-decrypt $(DESTDIR)$(BINDIR)
++ install -s -m 755 vpnc $(DESTDIR)$(SBINDIR)
++ install -s -m 755 cisco-decrypt $(DESTDIR)$(BINDIR)
+
+ uninstall :
+ rm -f $(DESTDIR)$(SBINDIR)/vpnc \
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0003-error.h-is-specific-to-glibc-on-linux.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0003-error.h-is-specific-to-glibc-on-linux.patch
new file mode 100644
index 000000000..bb7730647
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0003-error.h-is-specific-to-glibc-on-linux.patch
@@ -0,0 +1,30 @@
+From 6b49020893f999df56392b49b1a289cb96a113a1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 22:08:17 -0700
+Subject: [PATCH 3/8] error.h is specific to glibc on linux
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdep.h | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/sysdep.h b/sysdep.h
+index 137bf6d..6a323f0 100644
+--- a/sysdep.h
++++ b/sysdep.h
+@@ -37,9 +37,10 @@ int tun_read(int fd, unsigned char *buf, int len);
+ int tun_get_hwaddr(int fd, char *dev, uint8_t *hwaddr);
+
+ /***************************************************************************/
+-#if defined(__linux__) || defined(__GLIBC__)
++#if defined(__linux__)
++#if defined(__GLIBC__)
+ #include <error.h>
+-
++#endif
+ #define HAVE_VASPRINTF 1
+ #define HAVE_ASPRINTF 1
+ #define HAVE_ERROR 1
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0004-Use-pkgconfig-instead-of-libgcrypt-config.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0004-Use-pkgconfig-instead-of-libgcrypt-config.patch
new file mode 100644
index 000000000..f70a13898
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0004-Use-pkgconfig-instead-of-libgcrypt-config.patch
@@ -0,0 +1,30 @@
+From 4d1dd61c04f52a7c796debbdea5fc9139ffa271d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 22:45:05 -0700
+Subject: [PATCH 4/8] Use pkgconfig instead of libgcrypt-config
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index a15782e..b537046 100644
+--- a/Makefile
++++ b/Makefile
+@@ -63,10 +63,10 @@ RELEASE_VERSION := $(shell cat VERSION)
+ CC ?= gcc
+ CFLAGS ?= -O3 -g
+ CFLAGS += -W -Wall -Wmissing-declarations -Wwrite-strings
+-CFLAGS += $(shell libgcrypt-config --cflags) $(CRYPTO_CFLAGS)
++CFLAGS += $(shell pkg-config libgcrypt --cflags) $(CRYPTO_CFLAGS)
+ CPPFLAGS += -DVERSION=\"$(VERSION)\"
+ LDFLAGS ?= -g
+-LIBS += $(shell libgcrypt-config --libs) $(CRYPTO_LDADD)
++LIBS += $(shell pkg-config libgcrypt --libs) $(CRYPTO_LDADD)
+
+ ifeq ($(shell uname -s), SunOS)
+ LIBS += -lnsl -lresolv -lsocket
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0005-include-sys-ttydefaults.h-for-CEOT-definition.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0005-include-sys-ttydefaults.h-for-CEOT-definition.patch
new file mode 100644
index 000000000..01783f45b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0005-include-sys-ttydefaults.h-for-CEOT-definition.patch
@@ -0,0 +1,30 @@
+From 1947ea776dc38c3377702dd89bd229670f4d948d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 23:06:52 -0700
+Subject: [PATCH 5/8] include sys/ttydefaults.h for CEOT definition
+
+Fixes
+
+config.c:146:25: error: use of undeclared identifier 'CEOT'
+ if (llen == 0 && c == CEOT)
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ config.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/config.c b/config.c
+index 804faa7..1883d12 100644
+--- a/config.c
++++ b/config.c
+@@ -31,6 +31,7 @@
+ #include <sys/types.h>
+ #include <sys/utsname.h>
+ #include <sys/wait.h>
++#include <sys/ttydefaults.h>
+
+ #include <gcrypt.h>
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0006-sysdep-Add-header-include-sequence-to-adjust-for-mus.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0006-sysdep-Add-header-include-sequence-to-adjust-for-mus.patch
new file mode 100644
index 000000000..fa89df279
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0006-sysdep-Add-header-include-sequence-to-adjust-for-mus.patch
@@ -0,0 +1,40 @@
+From 56768fc0c2cbd6abcf28c9805ab516db8a0548d4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 23:09:47 -0700
+Subject: [PATCH 6/8] sysdep: Add header include sequence to adjust for musl
+
+---
+ sysdep.h | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/sysdep.h b/sysdep.h
+index 6a323f0..0122b95 100644
+--- a/sysdep.h
++++ b/sysdep.h
+@@ -17,16 +17,20 @@
+ * __SKYOS__
+ *
+ */
++/* hack to make sure kernel headers understand that libc (musl)
++ * does define IFF_LOWER_UP et al.
++ */
++#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 0
+
+ #include <sys/types.h>
+ #include <sys/socket.h>
+-#include <netinet/in.h>
+
+ #if !defined(__CYGWIN__)
+-#include <net/if.h>
+-#include <net/if_arp.h>
++//#include <linux/if.h>
++//#include <net/if_arp.h>
+ #include <netinet/if_ether.h>
+ #endif
++#include <netinet/in.h>
+
+ #include "config.h"
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0007-add-error-API-when-error.h-is-not-on-platform.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0007-add-error-API-when-error.h-is-not-on-platform.patch
new file mode 100644
index 000000000..de67b47a4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0007-add-error-API-when-error.h-is-not-on-platform.patch
@@ -0,0 +1,66 @@
+From b6a027fe4da6f66552b533f1314e5005b16c5455 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 23:52:36 -0700
+Subject: [PATCH 7/8] add error() API when error.h is not on platform
+
+sign-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdep.c | 24 ++++++++++++++++++++++++
+ sysdep.h | 2 ++
+ 2 files changed, 26 insertions(+)
+
+diff --git a/sysdep.c b/sysdep.c
+index d8f181d..2518ec1 100644
+--- a/sysdep.c
++++ b/sysdep.c
+@@ -17,6 +17,7 @@
+ GNU General Public License for more details.
+ */
+
++#define _GNU_SOURCE
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <stdlib.h>
+@@ -794,3 +795,26 @@ int setenv(const char *name, const char *value, int overwrite)
+ return ret;
+ }
+ #endif
++
++#ifndef _ERROR_H_
++#define _ERROR_H_
++#include <stdarg.h>
++#include <stdio.h>
++#include <errno.h>
++
++void error(int status, int errnum, const char* format, ...)
++{
++ va_list ap;
++
++ fflush(stdout);
++ fprintf(stderr, "%s: ", program_invocation_name);
++ va_start(ap, format);
++ vfprintf(stderr, format, ap);
++ va_end(ap);
++ if (errnum)
++ fprintf(stderr, ":%d", errnum);
++ if (status)
++ exit(status);
++}
++#endif /* _ERROR_H_ */
++
+diff --git a/sysdep.h b/sysdep.h
+index 0122b95..4e60064 100644
+--- a/sysdep.h
++++ b/sysdep.h
+@@ -44,6 +44,8 @@ int tun_get_hwaddr(int fd, char *dev, uint8_t *hwaddr);
+ #if defined(__linux__)
+ #if defined(__GLIBC__)
+ #include <error.h>
++#else
++void error(int status, int errnum, const char* format, ...);
+ #endif
+ #define HAVE_VASPRINTF 1
+ #define HAVE_ASPRINTF 1
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0008-include-sysdep.h-before-net-if_tun.h.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0008-include-sysdep.h-before-net-if_tun.h.patch
new file mode 100644
index 000000000..62ffdb7c9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0008-include-sysdep.h-before-net-if_tun.h.patch
@@ -0,0 +1,36 @@
+From 7f01847d14a1a3af50f49499743b0551ddef1311 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 29 Mar 2017 23:54:01 -0700
+Subject: [PATCH 8/8] include sysdep.h before net/if_tun.h
+
+Fixes duplicate defines in header errors
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ sysdep.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/sysdep.c b/sysdep.c
+index 2518ec1..5624ef1 100644
+--- a/sysdep.c
++++ b/sysdep.c
+@@ -57,6 +57,8 @@
+ #include <sys/cygwin.h>
+ #endif
+
++#include "sysdep.h"
++
+ #if defined(__DragonFly__)
+ #include <net/tun/if_tun.h>
+ #elif defined(__linux__)
+@@ -69,7 +71,6 @@
+ #include <net/if_tun.h>
+ #endif
+
+-#include "sysdep.h"
+
+ #if !defined(HAVE_VASPRINTF) || !defined(HAVE_ASPRINTF) || !defined(HAVE_ERROR)
+ #include <stdarg.h>
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0009-reduce-lifetime-value.patch b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0009-reduce-lifetime-value.patch
new file mode 100644
index 000000000..2bed55041
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/0009-reduce-lifetime-value.patch
@@ -0,0 +1,42 @@
+From 39925f090c21ab571ebc6ec250696f7f7093a2a6 Mon Sep 17 00:00:00 2001
+From: Will Page <Will.Page@ni.com>
+Date: Wed, 30 Aug 2017 18:14:00 -0700
+Subject: [PATCH 1/1] Reduce lifetime value to widely-compatible value
+
+Current proposed lifetime value (2147483 seconds, which equates to
+MAXINT ms, or ~25 days) is rejected by Fortigate vpn devices because
+"peer SA proposal does not match local policy". It seems default
+policy for these devices constrains lifetime where similar VPN devices
+don't.
+
+Reducing the lifetime from its current value to 28800 (exactly 8 hours)
+causes it to start working with fortigate devices.
+---
+ vpnc.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/vpnc.c b/vpnc.c
+index 36dd0f3..3e0fcba 100644
+--- a/vpnc.c
++++ b/vpnc.c
+@@ -1135,7 +1135,7 @@ static struct isakmp_attribute *make_transform_ike(int dh_group, int crypt, int
+ a->af = isakmp_attr_lots;
+ a->u.lots.length = 4;
+ a->u.lots.data = xallocc(a->u.lots.length);
+- *((uint32_t *) a->u.lots.data) = htonl(2147483);
++ *((uint32_t *) a->u.lots.data) = htonl(28800);
+ a = new_isakmp_attribute_16(IKE_ATTRIB_LIFE_TYPE, IKE_LIFE_TYPE_SECONDS, a);
+ a = new_isakmp_attribute_16(IKE_ATTRIB_AUTH_METHOD, auth, a);
+ a = new_isakmp_attribute_16(IKE_ATTRIB_GROUP_DESC, dh_group, a);
+@@ -2561,7 +2561,7 @@ static struct isakmp_attribute *make_transform_ipsec(struct sa_block *s, int dh_
+ a->af = isakmp_attr_lots;
+ a->u.lots.length = 4;
+ a->u.lots.data = xallocc(a->u.lots.length);
+- *((uint32_t *) a->u.lots.data) = htonl(2147483);
++ *((uint32_t *) a->u.lots.data) = htonl(28800);
+ a = new_isakmp_attribute_16(ISAKMP_IPSEC_ATTRIB_SA_LIFE_TYPE, IPSEC_LIFE_SECONDS, a);
+
+ if (dh_group)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/default.conf b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/default.conf
new file mode 100644
index 000000000..48b15eca6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/default.conf
@@ -0,0 +1,19 @@
+# Comment out the options you need.
+# Verify your config with "vpnc --print-config".
+# You might also try "vpnc --long-help" or look into the documentation.
+
+# Needed (you will be prompted if this is missing):
+#IPSec gateway 10.1.2.3
+#IPSec ID YOURPEERSID
+#IPSec secret YOURPEERSSECRET
+#Xauth username YOURUSERNAME
+#Xauth password YOURPASSWORD
+
+# Optional:
+#UDP Encapsulate
+#UDP Encapsulation Port 10000
+#Noninteractive
+#No Detach
+#Debug 99
+#Interface name tun0
+#Script /etc/vpnc/vpnc-script
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/long-help b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/long-help
new file mode 100644
index 000000000..fbec25414
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc/long-help
@@ -0,0 +1,168 @@
+Usage: vpnc [--version] [--print-config] [--help] [--long-help] [options] [config files]
+
+Options:
+ --gateway <ip/hostname>
+ IP/name of your IPSec gateway
+ conf-variable: IPSec gateway <ip/hostname>
+
+ --id <ASCII string>
+ your group name
+ conf-variable: IPSec ID <ASCII string>
+
+ (configfile only option)
+ your group password (cleartext)
+ conf-variable: IPSec secret <ASCII string>
+
+ (configfile only option)
+ your group password (obfuscated)
+ conf-variable: IPSec obfuscated secret <hex string>
+
+ --username <ASCII string>
+ your username
+ conf-variable: Xauth username <ASCII string>
+
+ (configfile only option)
+ your password (cleartext)
+ conf-variable: Xauth password <ASCII string>
+
+ (configfile only option)
+ your password (obfuscated)
+ conf-variable: Xauth obfuscated password <hex string>
+
+ --domain <ASCII string>
+ (NT-) Domain name for authentication
+ conf-variable: Domain <ASCII string>
+
+ --xauth-inter
+ enable interactive extended authentication (for challenge response auth)
+ conf-variable: Xauth interactive
+
+ --vendor <cisco/netscreen>
+ vendor of your IPSec gateway
+ Default: cisco
+ conf-variable: Vendor <cisco/netscreen>
+
+ --natt-mode <natt/none/force-natt/cisco-udp>
+ Which NAT-Traversal Method to use:
+ * natt -- NAT-T as defined in RFC3947
+ * none -- disable use of any NAT-T method
+ * force-natt -- always use NAT-T encapsulation even
+ without presence of a NAT device
+ (useful if the OS captures all ESP traffic)
+ * cisco-udp -- Cisco proprietary UDP encapsulation, commonly over Port 10000
+ Note: cisco-tcp encapsulation is not yet supported
+ Default: natt
+ conf-variable: NAT Traversal Mode <natt/none/force-natt/cisco-udp>
+
+ --script <command>
+ command is executed using system() to configure the interface,
+ routing and so on. Device name, IP, etc. are passed using enviroment
+ variables, see README. This script is executed right after ISAKMP is
+ done, but before tunneling is enabled. It is called when vpnc
+ terminates, too
+ Default: /etc/vpnc/vpnc-script
+ conf-variable: Script <command>
+
+ --dh <dh1/dh2/dh5>
+ name of the IKE DH Group
+ Default: dh2
+ conf-variable: IKE DH Group <dh1/dh2/dh5>
+
+ --pfs <nopfs/dh1/dh2/dh5/server>
+ Diffie-Hellman group to use for PFS
+ Default: server
+ conf-variable: Perfect Forward Secrecy <nopfs/dh1/dh2/dh5/server>
+
+ --enable-1des
+ enables weak single DES encryption
+ conf-variable: Enable Single DES
+
+ --enable-no-encryption
+ enables using no encryption for data traffic (key exchanged must be encrypted)
+ conf-variable: Enable no encryption
+
+ --application-version <ASCII string>
+ Application Version to report. Note: Default string is generated at runtime.
+ Default: Cisco Systems VPN Client 0.5.3-394:Linux
+ conf-variable: Application version <ASCII string>
+
+ --ifname <ASCII string>
+ visible name of the TUN/TAP interface
+ conf-variable: Interface name <ASCII string>
+
+ --ifmode <tun/tap>
+ mode of TUN/TAP interface:
+ * tun: virtual point to point interface (default)
+ * tap: virtual ethernet interface
+ Default: tun
+ conf-variable: Interface mode <tun/tap>
+
+ --debug <0/1/2/3/99>
+ Show verbose debug messages
+ * 0: Do not print debug information.
+ * 1: Print minimal debug information.
+ * 2: Show statemachine and packet/payload type information.
+ * 3: Dump everything exluding authentication data.
+ * 99: Dump everything INCLUDING AUTHENTICATION data (e.g. PASSWORDS).
+ conf-variable: Debug <0/1/2/3/99>
+
+ --no-detach
+ Don't detach from the console after login
+ conf-variable: No Detach
+
+ --pid-file <filename>
+ store the pid of background process in <filename>
+ Default: /var/run/vpnc/pid
+ conf-variable: Pidfile <filename>
+
+ --local-addr <ip/hostname>
+ local IP to use for ISAKMP / ESP / ... (0.0.0.0 == automatically assign)
+ Default: 0.0.0.0
+ conf-variable: Local Addr <ip/hostname>
+
+ --local-port <0-65535>
+ local ISAKMP port number to use (0 == use random port)
+ Default: 500
+ conf-variable: Local Port <0-65535>
+
+ --udp-port <0-65535>
+ Local UDP port number to use (0 == use random port).
+ This is only relevant if cisco-udp nat-traversal is used.
+ This is the _local_ port, the remote udp port is discovered automatically.
+ It is especially not the cisco-tcp port.
+ Default: 10000
+ conf-variable: Cisco UDP Encapsulation Port <0-65535>
+
+ --dpd-idle <0,10-86400>
+ Send DPD packet after not receiving anything for <idle> seconds.
+ Use 0 to disable DPD completely (both ways).
+ Default: 300
+ conf-variable: DPD idle timeout (our side) <0,10-86400>
+
+ --non-inter
+ Don't ask anything, exit on missing options
+ conf-variable: Noninteractive
+
+ --auth-mode <psk/cert/hybrid>
+ Authentication mode:
+ * psk: pre-shared key (default)
+ * cert: server + client certificate (not implemented yet)
+ * hybrid: server certificate + xauth (if built with openssl support)
+ Default: psk
+ conf-variable: IKE Authmode <psk/cert/hybrid>
+
+ --ca-file <filename>
+ filename and path to the CA-PEM-File
+ conf-variable: CA-File <filename>
+
+ --ca-dir <directory>
+ path of the trusted CA-Directory
+ Default: /etc/ssl/certs
+ conf-variable: CA-Dir <directory>
+
+ --target-network <target network/netmask>
+ Target network in dotted decimal or CIDR notation
+ Default: 0.0.0.0/0.0.0.0
+ conf-variable: IPSEC target network <target network/netmask>
+
+Report bugs to vpnc@unix-ag.uni-kl.de
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc_0.5.3.bb b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc_0.5.3.bb
new file mode 100644
index 000000000..ea2179985
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/vpnc/vpnc_0.5.3.bb
@@ -0,0 +1,59 @@
+SUMMARY = "A client for the Cisco3000 VPN Concentrator"
+HOMEPAGE = "http://www.unix-ag.uni-kl.de/~massar/vpnc/"
+AUTHOR = "Maurice Massar vpnc@unix-ag.uni-kl.de"
+SECTION = "net"
+LICENSE = "GPL-2.0+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=173b74cb8ac640a9992c03f3bce22a33"
+
+DEPENDS += "libgcrypt"
+
+PV .= "r550-2jnpr1"
+SRCREV = "b1243d29e0c00312ead038b04a2cf5e2fa31d740"
+SRC_URI = "git://github.com/ndpgroup/vpnc \
+ file://long-help \
+ file://default.conf \
+ file://0001-search-for-log-help-in-build-dir.patch \
+ file://0002-Fix-vpnc-install-for-cross-compile.patch \
+ file://0003-error.h-is-specific-to-glibc-on-linux.patch \
+ file://0004-Use-pkgconfig-instead-of-libgcrypt-config.patch \
+ file://0005-include-sys-ttydefaults.h-for-CEOT-definition.patch \
+ file://0006-sysdep-Add-header-include-sequence-to-adjust-for-mus.patch \
+ file://0007-add-error-API-when-error.h-is-not-on-platform.patch \
+ file://0008-include-sysdep.h-before-net-if_tun.h.patch \
+ file://0009-reduce-lifetime-value.patch \
+ "
+
+PACKAGECONFIG ?= "gnutls"
+
+PACKAGECONFIG[gnutls] = ",,gnutls"
+PACKAGECONFIG[openssl] = ",,openssl"
+
+S = "${WORKDIR}/git"
+
+inherit perlnative pkgconfig
+
+#EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_configure_append () {
+ # Make sure we use our nativeperl wrapper
+ sed -i "1s:#!.*:#!/usr/bin/env nativeperl:" ${S}/*.pl
+ cp ${WORKDIR}/long-help ${S}
+}
+
+do_install () {
+ sed -i s:m600:m\ 600:g Makefile
+ oe_runmake 'DESTDIR=${D}' 'PREFIX=/usr' install
+ rm -f ${D}${sysconfdir}/vpnc/vpnc.conf #This file is useless
+ install ${WORKDIR}/default.conf ${D}${sysconfdir}/vpnc/default.conf
+}
+
+SYSROOT_PREPROCESS_FUNCS += "vpnc_sysroot_preprocess"
+
+vpnc_sysroot_preprocess () {
+ install -d ${SYSROOT_DESTDIR}${sysconfdir}/vpnc
+ install -m 755 ${D}${sysconfdir}/vpnc/vpnc-script ${SYSROOT_DESTDIR}${sysconfdir}/vpnc
+}
+
+CONFFILES_${PN} = "${sysconfdir}/vpnc/default.conf"
+RDEPENDS_${PN} = "perl-module-io-file"
+RRECOMMENDS_${PN} = "kernel-module-tun"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2016.06.10.bb b/meta-openembedded/meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2016.06.10.bb
new file mode 100644
index 000000000..64e9401e7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/wireless-regdb/wireless-regdb_2016.06.10.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Wireless Central Regulatory Domain Database"
+HOMEPAGE = "http://wireless.kernel.org/en/developers/Regulatory/CRDA"
+SECTION = "net"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=07c4f6dea3845b02a18dc00c8c87699c"
+
+SRC_URI = "https://www.kernel.org/pub/software/network/${BPN}/${BP}.tar.xz"
+SRC_URI[md5sum] = "d282cce92b6e692e8673e2bd97adf33b"
+SRC_URI[sha256sum] = "cfedf1c3521b3c8f32602f25ed796e96e687c3441a00e7c050fedf7fd4f1b8b7"
+
+inherit bin_package
+
+do_install() {
+ install -d -m0755 ${D}${libdir}/crda
+ install -d -m0755 ${D}${sysconfdir}/wireless-regdb/pubkeys
+ install -m 0644 regulatory.bin ${D}${libdir}/crda/regulatory.bin
+ install -m 0644 sforshee.key.pub.pem ${D}${sysconfdir}/wireless-regdb/pubkeys/sforshee.key.pub.pem
+}
+
+RSUGGESTS_${PN} = "crda"
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/files/0001-fix-no-rule-to-make-cyassl-options.h.patch b/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/files/0001-fix-no-rule-to-make-cyassl-options.h.patch
new file mode 100644
index 000000000..f304d933d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/files/0001-fix-no-rule-to-make-cyassl-options.h.patch
@@ -0,0 +1,27 @@
+From fb490136cf8f2456cfe13b0b4f796e6c155e75dc Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Wed, 30 Aug 2017 03:02:32 -0400
+Subject: [PATCH] fix no rule to make cyassl/options.h
+
+Upstream-Status: Pending
+
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index 395d75d..d4a3880 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3684,6 +3684,7 @@ AC_CONFIG_FILES([wolfssl/options.h])
+ #fi
+ AC_CONFIG_FILES([support/wolfssl.pc])
+ AC_CONFIG_FILES([rpm/spec])
++AC_CONFIG_FILES([cyassl/options.h])
+
+ AX_CREATE_GENERIC_CONFIG
+ AX_AM_JOBSERVER([yes])
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_3.12.0.bb b/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_3.12.0.bb
new file mode 100644
index 000000000..9290651d0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-connectivity/wolfssl/wolfssl_3.12.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "wolfSSL Lightweight, Embedded SSL Library"
+DESCRIPTION = "wolfSSL, formerly CyaSSL, is a lightweight SSL library written in C and \
+ optimized for embedded and RTOS environments. It can be \
+ Up to 20 times smaller than OpenSSL while still supporting \
+ a full TLS 1.2 client and server."
+HOMEPAGE = "http://www.wolfssl.com/yaSSL/Products-wolfssl.html"
+BUGTRACKER = "http://github.com/wolfssl/wolfssl/issues"
+SECTION = "libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+PROVIDES += "cyassl"
+RPROVIDES_${PN} = "cyassl"
+
+S = "${WORKDIR}/git"
+SRCREV = "d195009dcb62d8712195661bd1d50f8dd6831044"
+SRC_URI = "git://github.com/wolfSSL/wolfssl.git;protocol=https; \
+ file://0001-fix-no-rule-to-make-cyassl-options.h.patch \
+ "
+
+inherit autotools
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0001-argz.h-fix-musl-compile-add-missing-defines.patch b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0001-argz.h-fix-musl-compile-add-missing-defines.patch
new file mode 100644
index 000000000..cfa8a7325
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0001-argz.h-fix-musl-compile-add-missing-defines.patch
@@ -0,0 +1,45 @@
+From 543e67919f5cacf309ac88ab091331e41af4224b Mon Sep 17 00:00:00 2001
+From: Peter Seiderer <ps.report@gmx.net>
+Date: Thu, 16 Apr 2015 22:41:57 +0200
+Subject: [PATCH] argz.h: fix musl compile (add missing defines)
+
+Upstream-Status: Pending
+
+Add __THROW, __BEGIN_DECLS, __END_DECLS and __attribute_pure__ defines.
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+Signed-off-by: Ming Liu <peter.x.liu@external.atlascopco.com>
+---
+ argz.h | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/argz.h b/argz.h
+index 582be55..bdf9f62 100644
+--- a/argz.h
++++ b/argz.h
+@@ -48,6 +48,22 @@
+ # define __const const
+ #endif
+
++#ifndef __THROW
++# define __THROW
++#endif
++
++#ifndef __BEGIN_DECLS
++# define __BEGIN_DECLS
++#endif
++
++#ifndef __END_DECLS
++# define __END_DECLS
++#endif
++
++#ifndef __attribute_pure__
++# define __attribute_pure__
++#endif
++
+ #ifndef __error_t_defined
+ typedef int error_t;
+ #endif
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0002-tftp.h-tftpd.h-fix-musl-compile-missing-include.patch b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0002-tftp.h-tftpd.h-fix-musl-compile-missing-include.patch
new file mode 100644
index 000000000..093054ce8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/0002-tftp.h-tftpd.h-fix-musl-compile-missing-include.patch
@@ -0,0 +1,43 @@
+From 77e399899d9d7297d23c321811b628febdf0fd92 Mon Sep 17 00:00:00 2001
+From: Peter Seiderer <ps.report@gmx.net>
+Date: Thu, 16 Apr 2015 22:43:49 +0200
+Subject: [PATCH] tftp.h/tftpd.h: fix musl compile (missing include)
+
+Upstream-Status: Pending
+
+Add sys/types.h include for u_char typedef.
+
+Signed-off-by: Peter Seiderer <ps.report@gmx.net>
+Signed-off-by: Ming Liu <peter.x.liu@external.atlascopco.com>
+---
+ tftp.h | 1 +
+ tftpd.h | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/tftp.h b/tftp.h
+index 12bd6aa..32a3f63 100644
+--- a/tftp.h
++++ b/tftp.h
+@@ -19,6 +19,7 @@
+
+ #include <sys/time.h>
+ #include <sys/times.h>
++#include <sys/types.h>
+ #include "tftp_def.h"
+ #include "config.h"
+
+diff --git a/tftpd.h b/tftpd.h
+index 945065e..60d3a49 100644
+--- a/tftpd.h
++++ b/tftpd.h
+@@ -20,6 +20,7 @@
+ #include <pthread.h>
+ #include <arpa/tftp.h>
+ #include <arpa/inet.h>
++#include <sys/types.h>
+ #include "tftp_io.h"
+
+ /*
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/atftpd.service b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/atftpd.service
new file mode 100644
index 000000000..480bc702e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp/atftpd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Advanced TFTP Server
+After=syslog.target network.target
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/atftpd --daemon --port 69
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp_git.bb b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp_git.bb
new file mode 100644
index 000000000..a9949d59a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/atftp_git.bb
@@ -0,0 +1,64 @@
+SUMMARY = "Advanced TFTP server and client"
+SECTION = "net"
+HOMEPAGE = "http://packages.debian.org/atftp"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=94d55d512a9ba36caa9b7df079bae19f"
+PV = "0.7.1+git${SRCPV}"
+PR = "r3"
+
+SRCREV = "be3291a18c069ae23a124ffdc56d64a5ff0bbec7"
+
+SRC_URI = "git://git.code.sf.net/p/atftp/code \
+ file://atftpd-0.7_circumvent_tftp_size_restrictions.patch \
+ file://atftpd-0.7_unprotected_assignments_crash.patch \
+ file://atftpd.init \
+ file://atftpd.service \
+ file://atftp-0.7-sorcerers_apprentice.patch \
+"
+SRC_URI_append_libc-musl = " file://0001-argz.h-fix-musl-compile-add-missing-defines.patch \
+ file://0002-tftp.h-tftpd.h-fix-musl-compile-missing-include.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools update-rc.d systemd
+
+PACKAGECONFIG ??= "tcp-wrappers"
+PACKAGECONFIG[pcre] = "--enable-libpcre,--disable-libpcre,libpcre"
+PACKAGECONFIG[tcp-wrappers] = "--enable-libwrap,--disable-libwrap,tcp-wrappers"
+PACKAGECONFIG[readline] = "--enable-libreadline,--disable-libreadline,readline"
+
+INITSCRIPT_PACKAGES = "${PN}d"
+INITSCRIPT_NAME_${PN}d = "atftpd"
+INITSCRIPT_PARAMS_${PN}d = "defaults 80"
+
+
+EXTRA_OEMAKE = "CFLAGS='${CFLAGS} -std=gnu89'"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/atftpd.init ${D}${sysconfdir}/init.d/atftpd
+
+ install -d ${D}/srv/tftp
+
+ rm ${D}${sbindir}/in.tftpd
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/atftpd.service ${D}${systemd_unitdir}/system
+}
+
+PACKAGES =+ "${PN}d"
+
+FILES_${PN} = "${bindir}/*"
+
+FILES_${PN}d = "${sbindir}/* \
+ ${sysconfdir} \
+ /srv/tftp \
+ ${systemd_unitdir}/system/atftpd.service \
+"
+
+SYSTEMD_PACKAGES = "${PN}d"
+SYSTEMD_SERVICE_${PN}d = "atftpd.service"
+RPROVIDES_${PN}d += "${PN}d-systemd"
+RREPLACES_${PN}d += "${PN}d-systemd"
+RCONFLICTS_${PN}d += "${PN}d-systemd"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch
new file mode 100644
index 000000000..fc64291cd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftp-0.7-sorcerers_apprentice.patch
@@ -0,0 +1,94 @@
+atftp exhibits the well known "Sorcerer's Apprentice Syndrome"(SAS) problem.
+According to RFC 1350, the fix to SAS is quite simple: further copies of the
+acknowledgment for a particular data block would be ignored.
+
+Patch originally from OpenSUSE:
+https://build.opensuse.org/package/view_file?file=atftp-0.7-sorcerers_apprentice.patch&package=atftp.539&project=openSUSE%3A12.1%3AUpdate&rev=84569792975e00573d7df597d2a6e895
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+Index: atftp-0.7/tftp_file.c
+===================================================================
+--- atftp-0.7.orig/tftp_file.c 2011-11-22 15:12:53.792744083 +0100
++++ atftp-0.7/tftp_file.c 2011-11-22 15:13:51.706421893 +0100
+@@ -605,6 +605,7 @@
+ int timeout_state = state; /* what state should we go on when timeout */
+ int result;
+ long block_number = 0;
++ long last_requested_block = -1;
+ long last_block = -1;
+ int data_size; /* size of data received */
+ int sockfd = data->sockfd; /* just to simplify calls */
+@@ -765,6 +766,17 @@
+ connected = 1;
+ }
+ block_number = ntohs(tftphdr->th_block);
++
++ if (last_requested_block >= block_number)
++ {
++ if (data->trace)
++ fprintf(stderr, "received duplicated ACK <block: %ld >= %ld>\n",
++ last_requested_block, block_number);
++ break;
++ }
++ else
++ last_requested_block = block_number;
++
+ if (data->trace)
+ fprintf(stderr, "received ACK <block: %ld>\n",
+ block_number);
+Index: atftp-0.7/tftpd_file.c
+===================================================================
+--- atftp-0.7.orig/tftpd_file.c 2011-11-22 15:12:53.793744112 +0100
++++ atftp-0.7/tftpd_file.c 2011-11-22 15:15:04.617534260 +0100
+@@ -403,6 +403,7 @@
+ int timeout_state = state;
+ int result;
+ long block_number = 0;
++ long last_requested_block = -1;
+ long last_block = -1;
+ int block_loops = 0;
+ int data_size;
+@@ -859,6 +860,32 @@
+ {
+ logger(LOG_DEBUG, "received ACK <block: %d>", block_number);
+ }
++
++ /* check whether the block request isn't already fulfilled */
++
++ /* multicast, block numbers could contain gaps */
++ if (multicast) {
++ if (last_requested_block >= block_number)
++ {
++ if (data->trace)
++ logger(LOG_DEBUG, "received duplicated ACK <block: %d >= %d>", last_requested_block, block_number);
++ break;
++ }
++ else
++ last_requested_block = block_number;
++ /* unicast, blocks should be requested one after another */
++ } else {
++ if (last_requested_block + 1 != block_number && last_requested_block != -1)
++ {
++ if (data->trace)
++ logger(LOG_DEBUG, "received out of order ACK <block: %d != %d>", last_requested_block + 1, block_number);
++ break;
++ }
++ else
++ last_requested_block = block_number;
++ }
++
++
+ if (ntohs(tftphdr->th_block) == 65535)
+ {
+ block_loops++;
+@@ -958,6 +985,8 @@
+ /* nedd to send an oack to that client */
+ state = S_SEND_OACK;
+ fseek(fp, 0, SEEK_SET);
++ /* reset the last block received counter */
++ last_requested_block = -1;
+ }
+ else
+ {
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_circumvent_tftp_size_restrictions.patch b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_circumvent_tftp_size_restrictions.patch
new file mode 100644
index 000000000..280b570b2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_circumvent_tftp_size_restrictions.patch
@@ -0,0 +1,163 @@
+Fate #303031: Circumvent TFTP size restrictions in atftpd
+The size of a single image file that can be transferred with TFTP is limited to
+2^(2*8) *BLOCKSIZE (as per RFC 1350 there are only two bytes for the block
+counter). This is problematic for one of our customers who needs to transfer
+100+ MB Windows images using a TFTP client (NT bootloader) which has a
+hardwared BLOCKSIZE setting of 1432).
+
+block rollover
+http://www.compuphase.com/tftp.htm
+
+Patch originally from OpenSUSE:
+https://build.opensuse.org/package/show?package=atftp&project=openSUSE%3A12.2
+
+Upstream-Status: Pending
+
+Index: git/tftp_def.h
+===================================================================
+--- git.orig/tftp_def.h 2012-11-19 16:28:50.221027144 -0800
++++ git/tftp_def.h 2012-11-20 17:40:54.391206979 -0800
+@@ -32,6 +32,7 @@
+ #define TIMEOUT 5 /* Client timeout */
+ #define S_TIMEOUT 5 /* Server timout. */
+ #define NB_OF_RETRY 5
++#define MAXBLOCKS 1000000 /* maximum number of blocks in a download */
+
+ /* definition to use tftp_options structure */
+ #define OPT_FILENAME 0
+Index: git/tftp_file.c
+===================================================================
+--- git.orig/tftp_file.c 2012-11-19 16:28:50.221027144 -0800
++++ git/tftp_file.c 2012-11-19 16:28:51.201027167 -0800
+@@ -622,8 +622,8 @@
+ int state = S_SEND_REQ; /* current state in the state machine */
+ int timeout_state = state; /* what state should we go on when timeout */
+ int result;
+- int block_number = 0;
+- int last_block = -1;
++ long block_number = 0;
++ long last_block = -1;
+ int data_size; /* size of data received */
+ int sockfd = data->sockfd; /* just to simplify calls */
+ struct sockaddr_storage sa; /* a copy of data.sa_peer */
+@@ -637,8 +637,8 @@
+ int convert = 0; /* if true, do netascii convertion */
+ char string[MAXLEN];
+
+- int prev_block_number = 0; /* needed to support netascii convertion */
+- int prev_file_pos = 0;
++ long prev_block_number = 0; /* needed to support netascii convertion */
++ long prev_file_pos = 0;
+ int temp = 0;
+
+ data->file_size = 0;
+@@ -745,7 +745,7 @@
+ data_size, data->data_buffer);
+ data->file_size += data_size;
+ if (data->trace)
+- fprintf(stderr, "sent DATA <block: %d, size: %d>\n",
++ fprintf(stderr, "sent DATA <block: %ld, size: %d>\n",
+ block_number + 1, data_size - 4);
+ state = S_WAIT_PACKET;
+ break;
+@@ -785,7 +785,7 @@
+ }
+ block_number = ntohs(tftphdr->th_block);
+ if (data->trace)
+- fprintf(stderr, "received ACK <block: %d>\n",
++ fprintf(stderr, "received ACK <block: %ld>\n",
+ block_number);
+ if ((last_block != -1) && (block_number > last_block))
+ {
+Index: git/tftp_io.c
+===================================================================
+--- git.orig/tftp_io.c 2012-11-19 16:28:50.221027144 -0800
++++ git/tftp_io.c 2012-11-19 16:28:51.201027167 -0800
+@@ -350,8 +350,8 @@
+ /*
+ * Read from file and do netascii conversion if needed
+ */
+-int tftp_file_read(FILE *fp, char *data_buffer, int data_buffer_size, int block_number,
+- int convert, int *prev_block_number, int *prev_file_pos, int *temp)
++int tftp_file_read(FILE *fp, char *data_buffer, int data_buffer_size, long block_number,
++ int convert, long *prev_block_number, long *prev_file_pos, int *temp)
+ {
+ int i;
+ int c;
+Index: git/tftp_io.h
+===================================================================
+--- git.orig/tftp_io.h 2012-11-19 16:28:50.221027144 -0800
++++ git/tftp_io.h 2012-11-19 16:28:51.201027167 -0800
+@@ -52,8 +52,8 @@
+ int tftp_get_packet(int sock1, int sock2, int *sock, struct sockaddr_storage *sa,
+ struct sockaddr_storage *from, struct sockaddr_storage *to,
+ int timeout, int *size, char *data);
+-int tftp_file_read(FILE *fp, char *buffer, int buffer_size, int block_number, int convert,
+- int *prev_block_number, int *prev_file_pos, int *temp);
++int tftp_file_read(FILE *fp, char *buffer, int buffer_size, long block_number, int convert,
++ long *prev_block_number, long *prev_file_pos, int *temp);
+ int tftp_file_write(FILE *fp, char *data_buffer, int data_buffer_size, int block_number,
+ int data_size, int convert, int *prev_block_number, int *temp);
+ #endif
+Index: git/tftpd_file.c
+===================================================================
+--- git.orig/tftpd_file.c 2012-11-19 16:28:50.225027144 -0800
++++ git/tftpd_file.c 2012-11-19 16:28:51.201027167 -0800
+@@ -407,8 +407,9 @@
+ int state = S_BEGIN;
+ int timeout_state = state;
+ int result;
+- int block_number = 0;
+- int last_block = -1;
++ long block_number = 0;
++ long last_block = -1;
++ int block_loops = 0;
+ int data_size;
+ struct sockaddr_storage *sa = &data->client_info->client;
+ struct sockaddr_storage from;
+@@ -431,8 +432,8 @@
+ struct client_info *client_old = NULL;
+ struct tftp_opt options[OPT_NUMBER];
+
+- int prev_block_number = 0; /* needed to support netascii convertion */
+- int prev_file_pos = 0;
++ long prev_block_number = 0; /* needed to support netascii convertion */
++ long prev_file_pos = 0;
+ int temp = 0;
+
+ /* look for mode option */
+@@ -565,11 +566,12 @@
+ logger(LOG_INFO, "blksize option -> %d", result);
+ }
+
+- /* Verify that the file can be sent in 2^16 block of BLKSIZE octets */
+- if ((file_stat.st_size / (data->data_buffer_size - 4)) > 65535)
++ /* Verify that the file can be sent in MAXBLOCKS blocks of BLKSIZE octets */
++ if ((file_stat.st_size / (data->data_buffer_size - 4)) > MAXBLOCKS)
+ {
+ tftp_send_error(sockfd, sa, EUNDEF, data->data_buffer, data->data_buffer_size);
+- logger(LOG_NOTICE, "Requested file to big, increase BLKSIZE");
++ logger(LOG_NOTICE, "Requested file too big, increase BLKSIZE");
++ logger(LOG_NOTICE, "Only %d blocks of %d bytes can be served.", MAXBLOCKS, data->data_buffer_size);
+ if (data->trace)
+ logger(LOG_DEBUG, "sent ERROR <code: %d, msg: %s>", EUNDEF,
+ tftp_errmsg[EUNDEF]);
+@@ -880,10 +882,15 @@
+ }
+ /* The ACK is from the current client */
+ number_of_timeout = 0;
+- block_number = ntohs(tftphdr->th_block);
++ block_number = (block_loops * 65536) + ntohs(tftphdr->th_block);
+ if (data->trace)
+- logger(LOG_DEBUG, "received ACK <block: %d>",
+- block_number);
++ {
++ logger(LOG_DEBUG, "received ACK <block: %d>", block_number);
++ }
++ if (ntohs(tftphdr->th_block) == 65535)
++ {
++ block_loops++;
++ };
+ if ((last_block != -1) && (block_number > last_block))
+ {
+ state = S_END;
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_unprotected_assignments_crash.patch b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_unprotected_assignments_crash.patch
new file mode 100644
index 000000000..28fba6cf5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd-0.7_unprotected_assignments_crash.patch
@@ -0,0 +1,152 @@
+Avoid assigning thread data outside of mutex lock
+
+Patch originally from OpenSUSE:
+https://build.opensuse.org/package/show?package=atftp&project=openSUSE%3A12.2
+
+Upstream-Status: Pending
+
+Index: git/tftpd_list.c
+===================================================================
+--- git.orig/tftpd_list.c 2012-10-24 21:48:47.000000000 -0700
++++ git/tftpd_list.c 2012-10-24 21:52:04.266205076 -0700
+@@ -49,11 +49,11 @@
+ */
+ int tftpd_list_add(struct thread_data *new)
+ {
+- struct thread_data *current = thread_data;
++ struct thread_data *current;
+ int ret;
+
+ pthread_mutex_lock(&thread_list_mutex);
+-
++ current = thread_data;
+ number_of_thread++;
+
+ ret = number_of_thread;
+@@ -81,11 +81,13 @@
+ */
+ int tftpd_list_remove(struct thread_data *old)
+ {
+- struct thread_data *current = thread_data;
++ struct thread_data *current;
+ int ret;
+
+ pthread_mutex_lock(&thread_list_mutex);
+
++ current = thread_data;
++
+ number_of_thread--;
+ ret = number_of_thread;
+
+@@ -137,23 +139,26 @@
+ struct thread_data *data,
+ struct client_info *client)
+ {
+- struct thread_data *current = thread_data; /* head of the list */
+- struct tftp_opt *tftp_options = data->tftp_options;
++ struct thread_data *current; /* head of the list */
++ struct tftp_opt *tftp_options;
+ struct client_info *tmp;
+ char options[MAXLEN];
+ char string[MAXLEN];
+ char *index;
+ int len;
+
++ /* lock the whole list before walking it */
++ pthread_mutex_lock(&thread_list_mutex);
++
+ *thread = NULL;
+
++ current = thread_data;
++ tftp_options = data->tftp_options;
++
+ opt_request_to_string(tftp_options, options, MAXLEN);
+ index = strstr(options, "multicast");
+ len = (int)index - (int)options;
+
+- /* lock the whole list before walking it */
+- pthread_mutex_lock(&thread_list_mutex);
+-
+ while (current)
+ {
+ if (current != data)
+@@ -214,9 +219,10 @@
+ void tftpd_clientlist_remove(struct thread_data *thread,
+ struct client_info *client)
+ {
+- struct client_info *tmp = thread->client_info;
++ struct client_info *tmp;
+
+ pthread_mutex_lock(&thread->client_mutex);
++ tmp = thread->client_info;
+ while ((tmp->next != client) && (tmp->next != NULL))
+ tmp = tmp->next;
+ if (tmp->next == NULL)
+@@ -231,9 +237,11 @@
+ void tftpd_clientlist_free(struct thread_data *thread)
+ {
+ struct client_info *tmp;
+- struct client_info *head = thread->client_info;
++ struct client_info *head;
+
+ pthread_mutex_lock(&thread->client_mutex);
++ head = thread->client_info;
++
+ while (head)
+ {
+ tmp = head;
+@@ -250,9 +258,10 @@
+ struct client_info *client,
+ struct sockaddr_storage *sock)
+ {
+- struct client_info *head = thread->client_info;
++ struct client_info *head;
+
+ pthread_mutex_lock(&thread->client_mutex);
++ head = thread->client_info;
+
+ if (client)
+ {
+@@ -334,10 +343,10 @@
+
+ void tftpd_list_kill_threads(void)
+ {
+- struct thread_data *current = thread_data; /* head of list */
++ struct thread_data *current; /* head of list */
+
+ pthread_mutex_lock(&thread_list_mutex);
+-
++ current = thread_data;
+
+ while (current != NULL)
+ {
+Index: git/tftpd_mcast.c
+===================================================================
+--- git.orig/tftpd_mcast.c 2012-10-24 21:48:47.000000000 -0700
++++ git/tftpd_mcast.c 2012-10-24 21:49:11.570201582 -0700
+@@ -51,9 +51,11 @@
+ */
+ int tftpd_mcast_get_tid(char **addr, short *port)
+ {
+- struct tid *current = tid_list;
++ struct tid *current;
+
+ pthread_mutex_lock(&mcast_tid_list);
++ current = tid_list;
++
+ /* walk the list for a free tid */
+ while (current != NULL)
+ {
+@@ -74,9 +76,11 @@
+
+ int tftpd_mcast_free_tid(char *addr, short port)
+ {
+- struct tid *current = tid_list;
++ struct tid *current;
+
+ pthread_mutex_lock(&mcast_tid_list);
++ current = tid_list;
++
+ while (current != NULL)
+ {
+ if ((current->used == 1) && (current->port == port) &&
diff --git a/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd.init b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd.init
new file mode 100644
index 000000000..161d97aca
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/atftp/files/atftpd.init
@@ -0,0 +1,37 @@
+#! /bin/sh
+#
+# This is an init script for openembedded
+# Copy it to /etc/init.d/atftpd and type
+# > update-rc.d atftpd defaults 60
+#
+
+
+test -f /usr/sbin/atftpd || exit 0
+
+test -d /srv/tftp || mkdir -p /srv/tftp
+
+case "$1" in
+ start)
+ echo -n "Starting tftp daemon: atftpd"
+ start-stop-daemon --start --quiet --exec /usr/sbin/atftpd -- --daemon --port 69
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping tftp daemon: atftpd"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/atftpd
+ echo "."
+ ;;
+ reload|force-reload)
+ start-stop-daemon --stop --quiet --signal 1 --exec /usr/sbin/atftpd
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/atftpd {start|stop|reload|restart|force-reload}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-Define-__SWORD_TYPE-and-_PATH_NSSWITCH_CONF.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-Define-__SWORD_TYPE-and-_PATH_NSSWITCH_CONF.patch
new file mode 100644
index 000000000..87159718b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-Define-__SWORD_TYPE-and-_PATH_NSSWITCH_CONF.patch
@@ -0,0 +1,48 @@
+From 987c8f4a718cdd6b764592ba7510090a59623959 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 31 Mar 2017 19:10:57 -0700
+Subject: [PATCH] Define __SWORD_TYPE and _PATH_NSSWITCH_CONF
+
+if they are not defined as is in musl then define
+them here
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ include/automount.h | 8 ++++++++
+ include/nsswitch.h | 3 +++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/include/automount.h b/include/automount.h
+index cc336ad..8bdcf12 100644
+--- a/include/automount.h
++++ b/include/automount.h
+@@ -42,6 +42,14 @@
+
+ #define ENABLE_CORES 1
+
++#ifndef __SWORD_TYPE
++# if __WORDSIZE == 32 /* System word size */
++# define __SWORD_TYPE int
++# else /* __WORDSIZE == 64 */
++# define __SWORD_TYPE long int
++# endif
++#endif
++
+ /* We MUST have the paths to mount(8) and umount(8) */
+ #ifndef HAVE_MOUNT
+ #error Failed to locate mount(8)!
+diff --git a/include/nsswitch.h b/include/nsswitch.h
+index d3e4027..7a0c38f 100644
+--- a/include/nsswitch.h
++++ b/include/nsswitch.h
+@@ -24,6 +24,9 @@
+ #include <netdb.h>
+ #include "list.h"
+
++#ifndef _PATH_NSSWITCH_CONF
++#define _PATH_NSSWITCH_CONF "/etc/nsswitch.conf"
++#endif
+ #define NSSWITCH_FILE _PATH_NSSWITCH_CONF
+
+ enum nsswitch_status {
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-modules-lookup_multi.c-Replace-__S_IEXEC-with-S_IEXE.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-modules-lookup_multi.c-Replace-__S_IEXEC-with-S_IEXE.patch
new file mode 100644
index 000000000..32293dd09
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0001-modules-lookup_multi.c-Replace-__S_IEXEC-with-S_IEXE.patch
@@ -0,0 +1,27 @@
+From 745e355ac8b595a27e1fcca75bf01d3e244f4a5f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 7 Sep 2017 22:22:31 -0700
+Subject: [PATCH] modules/lookup_multi.c: Replace __S_IEXEC with S_IEXEC
+
+__S_IEXEC is internal to libc and may not be available on
+all libc e.g. musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ modules/lookup_multi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/lookup_multi.c b/modules/lookup_multi.c
+index 3ecda6d..cf109de 100644
+--- a/modules/lookup_multi.c
++++ b/modules/lookup_multi.c
+@@ -452,7 +452,7 @@ int lookup_reinit(const char *my_mapfmt,
+ continue;
+ }
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch
new file mode 100644
index 000000000..469027aac
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/0002-Replace-__S_IEXEC-with-S_IEXEC.patch
@@ -0,0 +1,49 @@
+From 557ca399f4b3a397f20bb147ec6dc4ab9732dd1e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 31 Mar 2017 19:12:10 -0700
+Subject: [PATCH] Replace __S_IEXEC with S_IEXEC
+
+S_IEXEC is portable
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ daemon/lookup.c | 4 ++--
+ modules/lookup_multi.c | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/daemon/lookup.c b/daemon/lookup.c
+index 201ccbb..d821db8 100644
+--- a/daemon/lookup.c
++++ b/daemon/lookup.c
+@@ -366,7 +366,7 @@ static int read_file_source_instance(struct autofs_point *ap, struct map_source
+ if (!S_ISREG(st.st_mode))
+ return NSS_STATUS_NOTFOUND;
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
+@@ -856,7 +856,7 @@ static int lookup_name_file_source_instance(struct autofs_point *ap, struct map_
+ if (!S_ISREG(st.st_mode))
+ return NSS_STATUS_NOTFOUND;
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
+diff --git a/modules/lookup_multi.c b/modules/lookup_multi.c
+index fadd2ea..3ecda6d 100644
+--- a/modules/lookup_multi.c
++++ b/modules/lookup_multi.c
+@@ -247,7 +247,7 @@ static struct lookup_mod *nss_open_lookup(const char *format, int argc, const ch
+ continue;
+ }
+
+- if (st.st_mode & __S_IEXEC)
++ if (st.st_mode & S_IEXEC)
+ type = src_prog;
+ else
+ type = src_file;
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/add-the-needed-stdarg.h.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/add-the-needed-stdarg.h.patch
new file mode 100644
index 000000000..816a409cd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/add-the-needed-stdarg.h.patch
@@ -0,0 +1,25 @@
+From df5d45b2d7ad7e7b5f0542a816d08b0409a529a1 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Tue, 19 Aug 2014 11:31:35 +0800
+Subject: [PATCH] [PATCH] add the needed stdarg.h
+
+Upstream-status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ lib/defaults.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lib/defaults.c b/lib/defaults.c
+index 0e48a78..667f35d 100644
+--- a/lib/defaults.c
++++ b/lib/defaults.c
+@@ -16,6 +16,7 @@
+
+ #include <stdlib.h>
+ #include <stdio.h>
++#include <stdarg.h>
+ #include <ctype.h>
+ #include <string.h>
+ #include <sys/utsname.h>
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-do-not-check-for-modprobe.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-do-not-check-for-modprobe.patch
new file mode 100644
index 000000000..1d5c3e1ee
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-do-not-check-for-modprobe.patch
@@ -0,0 +1,89 @@
+From 2cbc576ea1fbd1cbf4579d64b30e41d762084e7f Mon Sep 17 00:00:00 2001
+From: "yanjun.zhu" <yanjun.zhu@windriver.com>
+Date: Tue, 15 Jan 2013 12:45:44 +0800
+Subject: [PATCH] autofs: do not check for modprobe
+
+Description: Loading autofs module is #ifdef'ed in the source, so
+ there is no need to check for /proc (which is only used
+ to load module) or modprobe. Both modprobe and /proc
+ are always in the fixed location so there's no need to
+ check for these to start with.
+
+Upstream-Status: Backport [1]
+[1] http://www.spinics.net/lists/autofs/msg00139.html
+
+---
+ configure.in | 6 ------
+ daemon/module.c | 3 +++
+ include/automount.h | 11 +++--------
+ 3 files changed, 6 insertions(+), 14 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 44a1c8b..b226236 100644
+--- a/configure.in
++++ b/configure.in
+@@ -34,11 +34,6 @@ AC_MSG_CHECKING([for binaries in])
+ AC_MSG_RESULT([$searchpath])
+
+ #
+-# Make sure we have "/proc"
+-#
+-AF_LINUX_PROCFS()
+-
+-#
+ # Location of init.d directory?
+ #
+ AF_INIT_D()
+@@ -142,7 +137,6 @@ AF_PATH_INCLUDE(UMOUNT, umount, /bin/umount, $searchpath)
+ AF_PATH_INCLUDE(E2FSCK, fsck.ext2 e2fsck, , $searchpath)
+ AF_PATH_INCLUDE(E3FSCK, fsck.ext3 e3fsck, , $searchpath)
+ AF_PATH_INCLUDE(E4FSCK, fsck.ext4 e4fsck, , $searchpath)
+-AF_PATH_INCLUDE(MODPROBE, modprobe, , $searchpath)
+
+ AF_CHECK_PROG(LEX, flex lex, , $searchpath)
+ AF_CHECK_PROG(YACC, bison, , $searchpath)
+diff --git a/daemon/module.c b/daemon/module.c
+index bed8f7a..e41a98e 100644
+--- a/daemon/module.c
++++ b/daemon/module.c
+@@ -19,6 +19,8 @@
+ #include "automount.h"
+ #include "nsswitch.h"
+
++#if 0
++/* see comment in daemon/automount.c around load_autofs4_module() call */
+ int load_autofs4_module(void)
+ {
+ FILE *fp;
+@@ -53,6 +55,7 @@ int load_autofs4_module(void)
+
+ return 1;
+ }
++#endif
+
+ int open_lookup(const char *name, const char *err_prefix, const char *mapfmt,
+ int argc, const char *const *argv, struct lookup_mod **lookup)
+diff --git a/include/automount.h b/include/automount.h
+index c0f5fbf..cc336ad 100644
+--- a/include/automount.h
++++ b/include/automount.h
+@@ -51,16 +51,11 @@
+ #error Failed to locate umount(8)!
+ #endif
+
+-#ifndef HAVE_MODPROBE
+-#error Failed to locate modprobe(8)!
+-#endif
+-
+-#ifndef HAVE_LINUX_PROCFS
+-#error Failed to verify existence of procfs filesystem!
+-#endif
+-
++#if 0
++/* see comment in daemon/automount.c around load_autofs4_module() call */
+ #define FS_MODULE_NAME "autofs4"
+ int load_autofs4_module(void);
++#endif
+
+ /* The -s (sloppy) option to mount is good, if we have it... */
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-fix-lib-deps.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-fix-lib-deps.patch
new file mode 100644
index 000000000..8e06db6e4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-fix-lib-deps.patch
@@ -0,0 +1,26 @@
+From 080626108c9ab70e2489752ef2a14006d0564b0c Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe.macdonald@windriver.com>
+Date: Tue, 18 Jun 2013 10:05:21 -0400
+Subject: [PATCH] Fix the dependency issue
+
+Upstream-Status: Pending
+
+autofs's lib sources have a dependency on a number of files that are
+generated by rpcgen during buildtime
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+Signed-off-by: Joe MacDonald <joe.macdonald@windriver.com>
+
+---
+ lib/Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lib/Makefile b/lib/Makefile
+index 518b483..4798a4b 100644
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -81,3 +81,4 @@ install: all
+ clean:
+ rm -f $(LIB) $(RPCS) $(OBJS) $(YACCSRC) *.output *~
+
++$(OBJS): $(RPCS)
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch
new file mode 100644
index 000000000..9b0942ebf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch
@@ -0,0 +1,30 @@
+From 2256b8aa98cff15ddf2a8d36496e6c9125927901 Mon Sep 17 00:00:00 2001
+From: Andreas Oberritter <obi@opendreambox.org>
+Date: Wed, 13 Mar 2013 16:17:08 +0100
+Subject: [PATCH] autofs-5.0.7: include linux/nfs.h directly in rpc_subs.h
+
+Upstream-Status: Pending
+
+Fixes compile error with uclibc. Glibc's nfs/nfs.h contains
+nothing but "#include linux/nfs.h". rpc_subs.h already includes
+other linux/nfs*.h files directly.
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+
+---
+ include/rpc_subs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/rpc_subs.h b/include/rpc_subs.h
+index e744e89..83db47e 100644
+--- a/include/rpc_subs.h
++++ b/include/rpc_subs.h
+@@ -18,7 +18,7 @@
+
+ #include <rpc/rpc.h>
+ #include <rpc/pmap_prot.h>
+-#include <nfs/nfs.h>
++#include <linux/nfs.h>
+ #include <linux/nfs2.h>
+ #include <linux/nfs3.h>
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.2-libtirpc-as-need.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.2-libtirpc-as-need.patch
new file mode 100644
index 000000000..18ce19385
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.2-libtirpc-as-need.patch
@@ -0,0 +1,39 @@
+From b31decac4acb194b020c621d2d11019f636a45e0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 24 Apr 2017 20:41:25 -0700
+Subject: [PATCH] autofs: Upgrade to 5.1.2 release
+
+Make configure compatible with -Wl,--as-needed following
+https://wiki.gentoo.org/wiki/Project:Quality_Assurance/As-needed#Failure_in_..2Fconfigure
+
+2016-07-05 Martin von Gagern
+
+---
+ aclocal.m4 | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index 0e4a624..2e620cd 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -415,9 +415,9 @@ AC_DEFUN([AF_CHECK_LIBTIRPC],
+ [
+ # save current flags
+ af_check_libtirpc_save_cflags="$CFLAGS"
+-af_check_libtirpc_save_ldflags="$LDFLAGS"
++af_check_libtirpc_save_libs="$LIBS"
+ CFLAGS="$CFLAGS -I=/usr/include/tirpc"
+-LDFLAGS="$LDFLAGS -ltirpc"
++LIBS="$LIBS -ltirpc"
+
+ AC_TRY_LINK(
+ [ #include <rpc/rpc.h> ],
+@@ -440,7 +440,7 @@ AC_CHECK_FUNCS([getrpcbyname getservbyname])
+
+ # restore flags
+ CFLAGS="$af_check_libtirpc_save_cflags"
+-LDFLAGS="$af_check_libtirpc_save_ldflags"
++LIBS="$af_check_libtirpc_save_libs"
+ ])
+
+ AC_DEFUN([AF_WITH_LIBTIRPC],
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/cross.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/cross.patch
new file mode 100644
index 000000000..b25c43f74
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/cross.patch
@@ -0,0 +1,53 @@
+From b9b44cd82caceeb638cc6a862b5bb90b93ad6c6a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 5 Jan 2013 19:53:10 -0800
+
+---
+ aclocal.m4 | 2 ++
+ configure.in | 8 ++++++--
+ 2 files changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index 2115204..2a9a802 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -7,6 +7,8 @@ dnl --------------------------------------------------------------------------
+ AC_DEFUN(AF_PATH_INCLUDE,
+ [AC_PATH_PROGS($1,$2,$3,$4)
+ if test -n "$$1"; then
++ AH_TEMPLATE([HAVE_$1], [Have $2])
++ AH_TEMPLATE([PATH_$1], [Have $2])
+ AC_DEFINE(HAVE_$1,1,[define if you have $1])
+ AC_DEFINE_UNQUOTED(PATH_$1, "$$1", [define if you have $1])
+ HAVE_$1=1
+diff --git a/configure.in b/configure.in
+index 25d7c4e..44a1c8b 100644
+--- a/configure.in
++++ b/configure.in
+@@ -324,13 +324,15 @@ AC_PROG_CC
+ cat > pietest.c <<EOF
+ int main(void) { return 0; }
+ EOF
++AF_tmp_ldflags="$LDFLAGS"
++AF_tmp_cflags="$CFLAGS"
+ CFLAGS=-fPIE
+ LDFLAGS=-pie
+ DAEMON_CFLAGS=
+ DAEMON_LDFLAGS=
+ AC_MSG_CHECKING([whether gcc -fPIE works])
+-AC_RUN_IFELSE([AC_LANG_PROGRAM([[]], [[int main(void) {return 0;}]])],
+- [gcc_supports_pie=yes], [gcc_supports_pie=no], [gcc_supports_pie=no])
++AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[int main(void) {return 0;}]])],
++ [gcc_supports_pie=yes], [gcc_supports_pie=no], [gcc_supports_pie=no])
+ AC_MSG_RESULT([$gcc_supports_pie])
+ if test $gcc_supports_pie = yes ; then
+ DAEMON_CFLAGS="-fPIE"
+@@ -339,6 +341,8 @@ fi
+ rm -f pietest.c
+ AC_SUBST(DAEMON_CFLAGS)
+ AC_SUBST(DAEMON_LDFLAGS)
++CFLAGS="${AF_tmp_cflags}"
++LDFLAGS="${AF_tmp_ldflags}"
+
+ #
+ # Enable ability to access value in external env variable
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix-the-YACC-rule-to-fix-a-building-failure.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix-the-YACC-rule-to-fix-a-building-failure.patch
new file mode 100644
index 000000000..21a97c8f5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix-the-YACC-rule-to-fix-a-building-failure.patch
@@ -0,0 +1,63 @@
+From 971d48a00ef82880c34e89778bf430a01360ebd5 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Mon, 18 May 2015 16:28:36 +0800
+Subject: [PATCH] [PATCH] fix the YACC rule to fix a building failure
+
+Upstream-Statu: Pending
+
+The original rule will create the header file twice, one is that the header
+file as the object file is created, other time is when create the C source file.
+since YACC always has "-d" parameter.
+
+This lead to a race when compile amd_tok.o, the header file maybe rewritten.
+ |----------------------
+ |amd_tok.l:359:10: error: 'RBRACKET' undeclared (first use in this function)
+ | ")" { return RBRACKET; }
+ | ^
+ |../Makefile.rules:64: recipe for target 'amd_tok.o' failed
+ |----------------------
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ lib/Makefile | 6 ++++--
+ modules/Makefile | 3 ++-
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/lib/Makefile b/lib/Makefile
+index 4798a4b..c40cf86 100644
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -57,7 +57,8 @@ mount_xdr.o: mount_xdr.c
+ master_tok.c: master_tok.l
+ $(LEX) -o$@ -Pmaster_ $?
+
+-master_parse.tab.c master_parse.tab.h: master_parse.y
++master_parse.tab.h: master_parse.tab.c
++master_parse.tab.c: master_parse.y
+ $(YACC) -v -d -p master_ -b master_parse $?
+
+ master_tok.o: master_tok.c master_parse.tab.h
+@@ -67,7 +68,8 @@ master_parse.tab.o: master_parse.tab.c master_parse.tab.h
+ nss_tok.c: nss_tok.l
+ $(LEX) -o$@ -Pnss_ $?
+
+-nss_parse.tab.c nss_parse.tab.h: nss_parse.y
++nss_parse.tab.h: nss_parse.tab.c
++nss_parse.tab.c: nss_parse.y
+ $(YACC) -v -d -p nss_ -b nss_parse $?
+
+ nss_tok.o: nss_tok.c nss_parse.tab.h
+diff --git a/modules/Makefile b/modules/Makefile
+index d9ab06c..abc7698 100644
+--- a/modules/Makefile
++++ b/modules/Makefile
+@@ -103,7 +103,8 @@ amd_tok.c: amd_tok.l
+
+ amd_tok.o: amd_tok.c amd_parse.tab.h
+
+-amd_parse.tab.c amd_parse.tab.h: amd_parse.y
++amd_parse.tab.h: amd_parse.tab.c
++amd_parse.tab.c: amd_parse.y
+ $(YACC) -v -d -p amd_ -b amd_parse $?
+
+ amd_parse.tab.o: amd_parse.tab.c amd_parse.tab.h
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix_disable_ldap.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix_disable_ldap.patch
new file mode 100644
index 000000000..414325974
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/fix_disable_ldap.patch
@@ -0,0 +1,47 @@
+From c500d9906f163bf716c872d37403b9de02ef0a86 Mon Sep 17 00:00:00 2001
+From: Amy Fong <amy.fong@windriver.com>
+Date: Fri, 18 Jan 2013 12:13:32 -0500
+Subject: [PATCH] autofs: fails to compile with openldap disabled
+
+As of 5.0.6, it appears that changes were introduced so that
+if you compile with openldap disabled and openldap headers are not
+available, then autofs fails to build.
+
+Upstream-Status: Pending
+
+Signed-off-by: Amy Fong <amy.fong@windriver.com>
+--
+ lookup_ldap.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+---
+ include/lookup_ldap.h | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/include/lookup_ldap.h b/include/lookup_ldap.h
+index 3a7aba7..bfdb0b3 100644
+--- a/include/lookup_ldap.h
++++ b/include/lookup_ldap.h
+@@ -1,7 +1,9 @@
+ #ifndef LOOKUP_LDAP_H
+ #define LOOKUP_LDAP_H
+
++#ifdef WITH_LDAP
+ #include <ldap.h>
++#endif
+
+ #ifdef WITH_SASL
+ #include <openssl/ssl.h>
+@@ -117,10 +119,12 @@ struct lookup_context {
+
+ #define LDAP_AUTH_USESIMPLE 0x0008
+
++#ifdef WITH_LDAP
+ /* lookup_ldap.c */
+ LDAP *init_ldap_connection(unsigned logopt, const char *uri, struct lookup_context *ctxt);
+ int unbind_ldap_connection(unsigned logopt, struct ldap_conn *conn, struct lookup_context *ctxt);
+ int authtype_requires_creds(const char *authtype);
++#endif
+
+ #ifdef WITH_SASL
+ /* cyrus-sasl.c */
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/force-STRIP-to-emtpy.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/force-STRIP-to-emtpy.patch
new file mode 100644
index 000000000..21396dd6f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/force-STRIP-to-emtpy.patch
@@ -0,0 +1,26 @@
+From 3cbee00fe5725b87abdae80cfa2ee735e4513ca6 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Tue, 19 Aug 2014 11:31:35 +0800
+Subject: [PATCH] [PATCH] force STRIP to emtpy
+
+otherwise the generate file will be stripped
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ Makefile.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.rules b/Makefile.rules
+index 709dd04..b1f7e50 100644
+--- a/Makefile.rules
++++ b/Makefile.rules
+@@ -31,7 +31,7 @@ LDFLAGS ?= -s
+ endif
+
+ ifdef DONTSTRIP
+-STRIP ?= :
++STRIP = :
+ else
+ STRIP ?= strip --strip-debug
+ endif
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/libtirpc.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/libtirpc.patch
new file mode 100644
index 000000000..0a2d502b8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/libtirpc.patch
@@ -0,0 +1,35 @@
+From cb6a4f61adb027f2366318f2c08c8264ebf39218 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 5 Jan 2013 19:53:10 -0800
+
+---
+ Makefile.rules | 2 +-
+ aclocal.m4 | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile.rules b/Makefile.rules
+index 6fa3e02..709dd04 100644
+--- a/Makefile.rules
++++ b/Makefile.rules
+@@ -46,7 +46,7 @@ CFLAGS += -D_REENTRANT -D_FILE_OFFSET_BITS=64
+ LIBS += -lpthread
+
+ ifdef TIRPCLIB
+-CFLAGS += -I/usr/include/tirpc
++CFLAGS += -I=/usr/include/tirpc
+ LIBS += $(TIRPCLIB)
+ endif
+
+diff --git a/aclocal.m4 b/aclocal.m4
+index 2a9a802..0e4a624 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -416,7 +416,7 @@ AC_DEFUN([AF_CHECK_LIBTIRPC],
+ # save current flags
+ af_check_libtirpc_save_cflags="$CFLAGS"
+ af_check_libtirpc_save_ldflags="$LDFLAGS"
+-CFLAGS="$CFLAGS -I/usr/include/tirpc"
++CFLAGS="$CFLAGS -I=/usr/include/tirpc"
+ LDFLAGS="$LDFLAGS -ltirpc"
+
+ AC_TRY_LINK(
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/no-bash.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/no-bash.patch
new file mode 100644
index 000000000..c46c0e5ad
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/no-bash.patch
@@ -0,0 +1,29 @@
+From a3007d7ea930823926611081bb873ddd771325cb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 5 Jan 2013 19:53:10 -0800
+
+---
+ samples/auto.net | 2 +-
+ samples/auto.smb | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/samples/auto.net b/samples/auto.net
+index 0384f61..61215f6 100755
+--- a/samples/auto.net
++++ b/samples/auto.net
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ # This file must be executable to work! chmod 755!
+
+diff --git a/samples/auto.smb b/samples/auto.smb
+index 6af5d85..d296b81 100755
+--- a/samples/auto.smb
++++ b/samples/auto.smb
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ # This file must be executable to work! chmod 755!
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch
new file mode 100644
index 000000000..1c7b11997
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/pkgconfig-libnsl.patch
@@ -0,0 +1,28 @@
+From e3ae56cf0bb4063c31295f45d04e3c504f4b6cc7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 24 Apr 2017 20:41:25 -0700
+Subject: [PATCH] autofs: Upgrade to 5.1.2 release
+
+Use pkg-config first to look for external libnsl which is now
+split out from glibc, if it does not exist then see if its provided
+by glibc itself.
+
+-Khem
+
+---
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.in b/configure.in
+index 9cf73b8..1016c71 100644
+--- a/configure.in
++++ b/configure.in
+@@ -186,7 +186,7 @@ fi
+ #
+ # glibc/libc 6 new libraries
+ #
+-AC_CHECK_LIB(nsl, yp_match, LIBNSL="-lnsl")
++PKG_CHECK_MODULES([NSL], [libnsl], [], [AC_CHECK_LIB([nsl],[yp_match],[LIBNSL="-lnsl"],[LIBNSL=""])])
+ AC_SUBST(LIBNSL)
+
+ AC_CHECK_LIB(resolv, res_query, LIBRESOLV="-lresolv")
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/remove-bashism.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/remove-bashism.patch
new file mode 100644
index 000000000..4183069bb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/remove-bashism.patch
@@ -0,0 +1,118 @@
+From cfacbb917f87b903b50132a5025f86b0cc522e9c Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Sat, 13 Sep 2014 20:19:28 -0700
+Subject: [PATCH] autofs.init.in: remove bashism
+
+It can work without the bashism.
+
+Upstream-Status: Pending
+
+Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl>
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+
+---
+ redhat/autofs.init.in | 12 ++++++------
+ samples/rc.autofs.in | 10 +++++-----
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/redhat/autofs.init.in b/redhat/autofs.init.in
+index 9d008ff..4f1c0d8 100644
+--- a/redhat/autofs.init.in
++++ b/redhat/autofs.init.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # rc file for automount using a Sun-style "master map".
+ #
+@@ -42,7 +42,7 @@ if [ -r $confdir/autofs ]; then
+ . $confdir/autofs
+ fi
+
+-function start() {
++start() {
+ # Make sure autofs4 module is loaded
+ if ! grep -q autofs /proc/filesystems
+ then
+@@ -102,7 +102,7 @@ function start() {
+ return $RETVAL
+ }
+
+-function stop() {
++stop() {
+ echo -n $"Stopping $prog: "
+ count=0
+ while [ -n "`pidof $prog`" -a $count -lt 15 ] ; do
+@@ -125,7 +125,7 @@ function stop() {
+ return $RETVAL
+ }
+
+-function restart() {
++restart() {
+ status autofs > /dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ stop
+@@ -143,7 +143,7 @@ function restart() {
+ start
+ }
+
+-function reload() {
++reload() {
+ if [ ! -f /var/lock/subsys/autofs ]; then
+ echo $"$prog not running"
+ RETVAL=1
+@@ -161,7 +161,7 @@ function reload() {
+ return $RETVAL
+ }
+
+-function usage_message() {
++usage_message() {
+ echo $"Usage: $0 {start|forcestart|stop|status|restart|force-reload|forcerestart|reload|condrestart|try-restart|usage}"
+ }
+
+diff --git a/samples/rc.autofs.in b/samples/rc.autofs.in
+index 487669f..e96cde1 100644
+--- a/samples/rc.autofs.in
++++ b/samples/rc.autofs.in
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # rc file for automount using a Sun-style "master map".
+ #
+@@ -36,7 +36,7 @@ if [ -r $confdir/autofs ]; then
+ . $confdir/autofs
+ fi
+
+-function start() {
++start() {
+ echo -n "Starting $prog: "
+
+ # Make sure autofs4 module is loaded
+@@ -85,7 +85,7 @@ function start() {
+ return $RETVAL
+ }
+
+-function stop() {
++stop() {
+ echo -n $"Stopping $prog: "
+ count=0
+ while [ -n "`pidof $prog`" -a $count -lt 15 ] ; do
+@@ -102,7 +102,7 @@ function stop() {
+ return $RETVAL
+ }
+
+-function restart() {
++restart() {
+ stop
+ while [ -n "`pidof $prog`" ] ; do
+ sleep 5
+@@ -110,7 +110,7 @@ function restart() {
+ start
+ }
+
+-function reload() {
++reload() {
+ pid=`pidof $prog`
+ if [ -z $pid ]; then
+ echo $"$prog not running"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch
new file mode 100644
index 000000000..3d0c6bd71
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs/using-pkg-config-to-detect-libxml-2.0-and-krb5.patch
@@ -0,0 +1,40 @@
+From dabcbdae38038a8e4ad2c4286112381c407c5ce7 Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Tue, 19 Aug 2014 11:31:35 +0800
+Subject: [PATCH] using pkg-config to detect libxml-2.0 and krb5
+
+Upstream-status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ configure.in | 16 ++++++++++++++--
+ 1 file changed, 14 insertions(+), 2 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index b226236..9cf73b8 100644
+--- a/configure.in
++++ b/configure.in
+@@ -162,8 +162,20 @@ if test x$enable_sloppy_mount = xyes; then
+ fi
+
+ # LDAP SASL auth needs libxml and Kerberos
+-AF_CHECK_LIBXML()
+-AF_CHECK_KRB5()
++PKG_CHECK_MODULES(XML, [libxml-2.0],HAVE_LIBXML=1,HAVE_LIBXML=0)
++AC_SUBST([HAVE_LIBXML])
++XML_FLAGS=$XML_CFLAGS
++
++PKG_CHECK_MODULES(KRB5, [krb5],HAVE_KRB5=1,HAVE_KRB5=0)
++AC_SUBST([HAVE_KRB5])
++if test "x$HAVE_KRB5" = "x1"; then
++ SAVE_CFLAGS=$CFLAGS
++ SAVE_LIBS=$LIBS
++ CFLAGS="$CFLAGS $KRB5_FLAGS"
++ LIBS="$LIBS $KRB5_LIBS"
++
++ AC_CHECK_FUNCS([krb5_principal_get_realm])
++fi
+
+ AC_SEARCH_LIBS([versionsort],[])
+ if test "$ac_cv_search_versionsort" = "no"; then
diff --git a/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs_5.1.2.bb b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs_5.1.2.bb
new file mode 100644
index 000000000..68c64fdb0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/autofs/autofs_5.1.2.bb
@@ -0,0 +1,77 @@
+SUMMARY = "Kernel based automounter for linux"
+SECTION = "utils"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+DEPENDS += "libtirpc flex-native bison-native e2fsprogs openssl libxml2 util-linux cyrus-sasl libnsl2"
+
+CFLAGS += "-I${STAGING_INCDIR}/tirpc"
+
+inherit autotools-brokensep systemd update-rc.d pkgconfig
+
+SRC_URI = "${KERNELORG_MIRROR}/linux/daemons/autofs/v5/autofs-${PV}.tar.gz \
+ file://autofs-5.0.7-include-linux-nfs.h-directly-in-rpc_sub.patch \
+ file://no-bash.patch \
+ file://cross.patch \
+ file://libtirpc.patch \
+ file://autofs-5.0.7-do-not-check-for-modprobe.patch \
+ file://fix_disable_ldap.patch \
+ file://autofs-5.0.7-fix-lib-deps.patch \
+ file://add-the-needed-stdarg.h.patch \
+ file://using-pkg-config-to-detect-libxml-2.0-and-krb5.patch \
+ file://force-STRIP-to-emtpy.patch \
+ file://remove-bashism.patch \
+ file://fix-the-YACC-rule-to-fix-a-building-failure.patch \
+ file://0001-Define-__SWORD_TYPE-and-_PATH_NSSWITCH_CONF.patch \
+ file://0002-Replace-__S_IEXEC-with-S_IEXEC.patch \
+ file://autofs-5.1.2-libtirpc-as-need.patch \
+ file://pkgconfig-libnsl.patch \
+ file://0001-modules-lookup_multi.c-Replace-__S_IEXEC-with-S_IEXE.patch \
+ "
+SRC_URI[md5sum] = "28cf88f99eff553a8500659ba5d45a76"
+SRC_URI[sha256sum] = "0d57e4138c2ec8058ca92164d035546f68ce4af93acb893369993d67c7056a10"
+
+INITSCRIPT_NAME = "autofs"
+INITSCRIPT_PARAMS = "defaults"
+
+# FIXME: modules/Makefile has crappy rules that don't obey LDFLAGS
+#CFLAGS += "${LDFLAGS}"
+
+PACKAGECONFIG[systemd] = "--with-systemd=${systemd_unitdir}/system,--without-systemd,systemd"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+
+EXTRA_OEMAKE = "DONTSTRIP=1"
+EXTRA_OECONF += "--disable-mount-locking \
+ --enable-ignore-busy --with-openldap=no \
+ --with-sasl=no --with-libtirpc \
+ --with-path=${STAGING_BINDIR_NATIVE} \
+"
+CACHED_CONFIGUREVARS = "ac_cv_path_RANLIB=${RANLIB} \
+ ac_cv_path_RPCGEN=rpcgen \
+"
+
+do_configure_prepend () {
+ sed -e "s:filagdir:flagdir:" -i ${S}/configure.in
+ if [ ! -e ${S}/acinclude.m4 ]; then
+ cp ${S}/aclocal.m4 ${S}/acinclude.m4
+ fi
+}
+
+do_install_append () {
+ if [ -d ${D}/run ]; then
+ rmdir ${D}/run
+ fi
+ if [ -d ${D}${localstatedir}/run ]; then
+ rmdir ${D}${localstatedir}/run
+ fi
+}
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
+
+INSANE_SKIP_${PN} = "dev-so"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "autofs.service"
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/Fix-hardcoded-libdir.patch b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/Fix-hardcoded-libdir.patch
new file mode 100644
index 000000000..3fa8431c3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/Fix-hardcoded-libdir.patch
@@ -0,0 +1,25 @@
+Fix hardcoded libdir.
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ plugins/Makefile.am | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/plugins/Makefile.am b/plugins/Makefile.am
+index b00915f..25262a1 100644
+--- a/plugins/Makefile.am
++++ b/plugins/Makefile.am
+@@ -62,7 +62,7 @@ plugindir = @plugindir@
+
+ common_sources = plugin_common.c plugin_common.h
+
+-sasldir = $(prefix)/lib/sasl2
++sasldir = $(libdir)/sasl2
+ sasl_LTLIBRARIES = @SASL_MECHS@
+ EXTRA_LTLIBRARIES = libplain.la libanonymous.la libkerberos4.la libcrammd5.la \
+ libgs2.la libgssapiv2.la libdigestmd5.la liblogin.la libsrp.la libotp.la \
+--
+1.7.4.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/avoid-to-call-AC_TRY_RUN.patch b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/avoid-to-call-AC_TRY_RUN.patch
new file mode 100644
index 000000000..6407721ae
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/avoid-to-call-AC_TRY_RUN.patch
@@ -0,0 +1,46 @@
+Avoid to call AC_TRY_RUN
+
+Upstream-Status: Inappropriate [configuration]
+
+Avoid to call AC_TRY_RUN to check if GSSAPI libraries support SPNEGO
+on cross-compile environment by definition AC_ARG_ENABLE enable-spnego
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ cmulocal/sasl2.m4 | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/cmulocal/sasl2.m4 b/cmulocal/sasl2.m4
+index 3c2841a..a5ecf81 100644
+--- a/cmulocal/sasl2.m4
++++ b/cmulocal/sasl2.m4
+@@ -281,6 +281,17 @@ if test "$gssapi" != no; then
+
+ cmu_save_LIBS="$LIBS"
+ LIBS="$LIBS $GSSAPIBASE_LIBS"
++ AC_ARG_ENABLE([spnego],
++ [AC_HELP_STRING([--enable-spnego=<DIR>],
++ [enable SPNEGO support in GSSAPI libraries [no]])],
++ [spnego=$enableval],
++ [spnego=no])
++
++ if test "$spnego" = no; then
++ echo "no"
++ elif test "$spnego" = yes; then
++ AC_DEFINE(HAVE_GSS_SPNEGO,,[Define if your GSSAPI implementation supports SPNEGO])
++ else
+ AC_MSG_CHECKING([for SPNEGO support in GSSAPI libraries])
+ AC_TRY_RUN([
+ #ifdef HAVE_GSSAPI_H
+@@ -308,7 +319,7 @@ int main(void)
+ AC_MSG_RESULT(yes) ],
+ AC_MSG_RESULT(no))
+ LIBS="$cmu_save_LIBS"
+-
++ fi
+ else
+ AC_MSG_RESULT([disabled])
+ fi
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0009_sasldb_al.diff b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0009_sasldb_al.diff
new file mode 100644
index 000000000..8eff5a8bd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0009_sasldb_al.diff
@@ -0,0 +1,14 @@
+Author: Fabian Fagerholm <fabbe@debian.org>
+Description: Fix linking with libsasldb.a when saslauthd is built with sasldb
+support.
+--- a/saslauthd/configure.in
++++ b/saslauthd/configure.in
+@@ -77,7 +77,7 @@ if test "$authsasldb" != no; then
+ AC_DEFINE(AUTH_SASLDB,[],[Include SASLdb Support])
+ SASL_DB_PATH_CHECK()
+ SASL_DB_CHECK()
+- SASL_DB_LIB="$SASL_DB_LIB ../sasldb/.libs/libsasldb.al"
++ SASL_DB_LIB="$SASL_DB_LIB ../sasldb/.libs/libsasldb.a"
+ fi
+
+ AC_ARG_ENABLE(httpform, [ --enable-httpform enable HTTP form authentication [[no]] ],
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0014_avoid_pic_overwrite.diff b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0014_avoid_pic_overwrite.diff
new file mode 100644
index 000000000..2e5b1750d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/debian_patches_0014_avoid_pic_overwrite.diff
@@ -0,0 +1,27 @@
+Author: Fabian Fagerholm <fabbe@debian.org>
+Description: This patch makes sure the non-PIC version of libsasldb.a, which
+is created out of non-PIC objects, is not going to overwrite the PIC version,
+which is created out of PIC objects. The PIC version is placed in .libs, and
+the non-PIC version in the current directory. This ensures that both non-PIC
+and PIC versions are available in the correct locations.
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -78,7 +78,7 @@ endif
+
+ libsasl2.a: libsasl2.la $(SASL_STATIC_OBJS)
+ @echo adding static plugins and dependencies
+- $(AR) cru .libs/$@ $(SASL_STATIC_OBJS)
++ $(AR) cru $@ $(SASL_STATIC_OBJS)
+ @for i in ./libsasl2.la ../sasldb/libsasldb.la ../plugins/lib*.la; do \
+ if test ! -f $$i; then continue; fi; . $$i; \
+ for j in $$dependency_libs foo; do \
+--- a/sasldb/Makefile.am
++++ b/sasldb/Makefile.am
+@@ -63,6 +63,6 @@ libsasldb_a_SOURCES =
+ EXTRA_libsasldb_a_SOURCES =
+
+ libsasldb.a: libsasldb.la $(SASL_DB_BACKEND_STATIC)
+- $(AR) cru .libs/$@ $(SASL_DB_BACKEND_STATIC)
++ $(AR) cru $@ $(SASL_DB_BACKEND_STATIC)
+
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/sasl.h-include-stddef.h-for-size_t-on-NetBSD.patch b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/sasl.h-include-stddef.h-for-size_t-on-NetBSD.patch
new file mode 100644
index 000000000..ecbab845d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/sasl.h-include-stddef.h-for-size_t-on-NetBSD.patch
@@ -0,0 +1,31 @@
+From 92d72789c811b0d55f624a8bac5ccc4412f5996e Mon Sep 17 00:00:00 2001
+From: Ken Murchison <murch@andrew.cmu.edu>
+Date: Thu, 20 Dec 2012 18:14:50 -0500
+Subject: [PATCH] sasl.h: #include <stddef.h> for size_t on NetBSD
+
+This patch was imported from git://git.cyrusimap.org/cyrus-sasl
+commit 67a188693796a14e3a76ac603104807fbbfddfc4
+
+Upstream-Status: Backport
+
+Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
+---
+ include/sasl.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/include/sasl.h b/include/sasl.h
+index fef4d51..8b8a63f 100755
+--- a/include/sasl.h
++++ b/include/sasl.h
+@@ -121,6 +121,8 @@
+ #ifndef SASL_H
+ #define SASL_H 1
+
++#include <stddef.h> /* For size_t */
++
+ /* Keep in sync with win32/common.mak */
+ #define SASL_VERSION_MAJOR 2
+ #define SASL_VERSION_MINOR 1
+--
+1.8.3.2
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.conf b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.conf
new file mode 100644
index 000000000..a91a9d334
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.conf
@@ -0,0 +1,11 @@
+# Directory in which to place saslauthd's listening socket, pid file, and so
+# on. This directory must already exist.
+SOCKETDIR=@LOCALSTATEDIR@/run/saslauthd
+
+# Mechanism to use when checking passwords. Run "saslauthd -v" to get a list
+# of which mechanism your installation was compiled with the ablity to use.
+MECH=pam
+
+# Additional flags to pass to saslauthd on the command line. See saslauthd(8)
+# for the list of accepted flags.
+FLAGS=
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.service b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.service
new file mode 100644
index 000000000..96dbae378
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl/saslauthd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=SASL authentication daemon.
+After=syslog.target
+
+[Service]
+Type=forking
+PIDFile=@LOCALSTATEDIR@/run/saslauthd/saslauthd.pid
+EnvironmentFile=@SYSCONFDIR@/default/saslauthd
+ExecStart=@SBINDIR@/saslauthd -m $SOCKETDIR -a $MECH $FLAGS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl_2.1.26.bb b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl_2.1.26.bb
new file mode 100644
index 000000000..6dbff87dd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/cyrus-sasl/cyrus-sasl_2.1.26.bb
@@ -0,0 +1,96 @@
+SUMMARY = "Generic client/server library for SASL authentication"
+SECTION = "libs"
+HOMEPAGE = "http://asg.web.cmu.edu/sasl/"
+DEPENDS = "openssl db"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3f55e0974e3d6db00ca6f57f2d206396"
+
+SRC_URI = "ftp://ftp.cyrusimap.org/cyrus-sasl/cyrus-sasl-${PV}.tar.gz \
+ file://avoid-to-call-AC_TRY_RUN.patch \
+ file://Fix-hardcoded-libdir.patch \
+ file://debian_patches_0009_sasldb_al.diff \
+ file://debian_patches_0014_avoid_pic_overwrite.diff \
+ file://sasl.h-include-stddef.h-for-size_t-on-NetBSD.patch \
+ file://saslauthd.service \
+ file://saslauthd.conf \
+"
+
+inherit autotools-brokensep pkgconfig useradd systemd
+
+EXTRA_OECONF += "--with-dblib=berkeley \
+ --with-bdb-libdir=${STAGING_LIBDIR} \
+ --with-bdb-incdir=${STAGING_INCDIR} \
+ --with-bdb=db-5.3 \
+ --with-plugindir="${libdir}/sasl2" \
+ andrew_cv_runpath_switch=none"
+
+PACKAGECONFIG ??= "ntlm \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 ldap pam', d)} \
+"
+PACKAGECONFIG[gssapi] = "--enable-gssapi=yes,--enable-gssapi=no,krb5,"
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,"
+PACKAGECONFIG[opie] = "--with-opie,--without-opie,opie,"
+PACKAGECONFIG[des] = "--with-des,--without-des,,"
+PACKAGECONFIG[ldap] = "--with-ldap=${STAGING_LIBDIR} --enable-ldapdb,--without-ldap --disable-ldapdb,openldap,"
+PACKAGECONFIG[ntlm] = "--with-ntlm,--without-ntlm,,"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+CFLAGS += "-fPIC"
+
+do_configure_prepend () {
+ rm -f acinclude.m4 config/libtool.m4
+
+ # make it be able to work with db 5.0 version
+ local sed_files="sasldb/db_berkeley.c utils/dbconverter-2.c"
+ for sed_file in $sed_files; do
+ sed -i 's#DB_VERSION_MAJOR == 4.*#(&) || DB_VERSION_MAJOR == 5#' $sed_file
+ done
+}
+
+do_compile_prepend () {
+ cd include
+ ${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS} makemd5.c -o makemd5
+ touch makemd5.o makemd5.lo makemd5
+ cd ..
+}
+
+do_install_append() {
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/saslauthd.service ${D}${systemd_unitdir}/system
+
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/saslauthd.service
+ sed -i -e 's#@LOCALSTATEDIR@#${localstatedir}#g' ${D}${systemd_unitdir}/system/saslauthd.service
+ sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' ${D}${systemd_unitdir}/system/saslauthd.service
+
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /run/saslauthd/ - - - -" > ${D}${sysconfdir}/tmpfiles.d/saslauthd.conf
+
+ install -d ${D}${sysconfdir}/default/
+ install -m 0644 ${WORKDIR}/saslauthd.conf ${D}${sysconfdir}/default/saslauthd
+ sed -i -e 's#@LOCALSTATEDIR@#${localstatedir}#g' ${D}${sysconfdir}/default/saslauthd
+ fi
+}
+
+USERADD_PACKAGES = "${PN}-bin"
+USERADD_PARAM_${PN}-bin = "--system --home=/var/spool/mail -g mail cyrus"
+
+SYSTEMD_PACKAGES = "${PN}-bin"
+SYSTEMD_SERVICE_${PN}-bin = "saslauthd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+SRC_URI[md5sum] = "a7f4e5e559a0e37b3ffc438c9456e425"
+SRC_URI[sha256sum] = "8fbc5136512b59bb793657f36fadda6359cae3b08f01fd16b3d406f1345b7bc3"
+
+PACKAGES =+ "${PN}-bin"
+
+FILES_${PN} += "${libdir}/sasl2/*.so*"
+FILES_${PN}-bin += "${bindir} \
+ ${sysconfdir}/default/saslauthd \
+ ${systemd_unitdir}/system/saslauthd.service \
+ ${sysconfdir}/tmpfiles.d/saslauthd.conf"
+FILES_${PN}-dev += "${libdir}/sasl2/*.la"
+FILES_${PN}-dbg += "${libdir}/sasl2/.debug"
+FILES_${PN}-staticdev += "${libdir}/sasl2/*.a"
+
+INSANE_SKIP_${PN} += "dev-so"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.conf.sample b/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.conf.sample
new file mode 100644
index 000000000..ec0584193
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.conf.sample
@@ -0,0 +1,21 @@
+# options to dnrd
+
+# example: two default dns servers and dns servers for exampledomain.com. The
+# latter are load balanced (-b)
+#
+#
+
+# DNRD_OPTS="
+# -s XXX.XXX.XX.XXX
+# -s XXX.XXX.XX.XXX
+# -b
+# -s XXX.XXX.XX.XXX:exampledomain.com
+# -s XXX.XXX.XX.XXX:exampledomain.com"
+
+# example: dnrd user
+#
+
+# DNRD_USER="user"
+#
+
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.init b/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.init
new file mode 100644
index 000000000..2fe583fcf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.init
@@ -0,0 +1,94 @@
+#!/bin/sh
+#
+# Startup script for dnrd
+#
+# Copyright 2008, Rakesh Pandit <rakesh.pandit@gmail.com>
+#
+# This source 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.
+
+# This source 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# chkconfig: - 85 15
+# description: dnrd is a proxying nameserver. It forwards DNS queries to the
+# appropriate nameserver, but can also act as the primary nameserver for
+# a subnet behind a firewall. It also has features such as caching DNS
+# requests, support for DNS servers, cache poisoning prevention, TCP
+# support, etc..
+
+# processname: dnrd
+# pidfile: /var/run/dnrd.pid
+# config: /etc/dnrd/dnrd.conf
+
+# Provides: dnrd
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Default-Stop: 0 1 2 6
+# Short-Description: Start dnrd daemon
+# Description: Domain Name Relay Daemon
+# END INIT INFO
+
+exe=/usr/sbin/dnrd
+pfile=/etc/passwd
+
+# Source function library.
+. /etc/init.d/functions
+
+# Source conf file
+. /etc/dnrd/dnrd.conf
+
+[ -x $exe ] || exit 1
+[ -r "/etc/dnrd/dnrd.conf" ] || exit 1
+if [ $DNRD_USER ]
+then
+ grep "^${LOGIN}:" $pfile >/dev/null 2>&1
+ if [ $? -eq 0 ];then
+ echo "$DNRD_USER specified in /etc/dnrd/dnrd.conf does not exist!"
+ fi
+else
+ echo "DNRD_USER not set at /etc/dnrd/dnrd.conf!"
+ exit 1
+fi
+
+case "$1" in
+ start)
+ echo -n "Starting dnrd: "
+ daemon dnrd $DNRD_OPTS -u $DNRD_USER
+ echo
+ touch /var/lock/subsys/dnrd
+ ;;
+ stop)
+ echo -n "Shutting down dnrd: "
+ killproc dnrd
+ echo
+ rm -f /var/lock/subsys/dnrd
+ rm -f /var/run/dnrd.pid
+ ;;
+ status)
+ status dnrd
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload)
+ echo -n "Reloading dnrd: "
+ killproc dnrd -HUP
+ echo
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|reload|status}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.service b/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.service
new file mode 100644
index 000000000..9c9fa6639
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/dnrd/dnrd/dnrd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Domain Name Relay Daemon
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/var/run/dnrd.pid
+EnvironmentFile=/etc/dnrd/dnrd.conf
+ExecStart=/usr/sbin/dnrd $DNRD_OPTS -u $DNRD_USER
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy/0001-src-igmpproxy.h-Include-sys-types.h-for-u_short-u_in.patch b/meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy/0001-src-igmpproxy.h-Include-sys-types.h-for-u_short-u_in.patch
new file mode 100644
index 000000000..82cdc36ac
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy/0001-src-igmpproxy.h-Include-sys-types.h-for-u_short-u_in.patch
@@ -0,0 +1,25 @@
+From a557651a08e21e3c7c7f5eca9f5405f86624903f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 22:42:51 -0700
+Subject: [PATCH] src/igmpproxy.h: Include sys/types.h for u_short/u_init
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/igmpproxy.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/igmpproxy.h b/src/igmpproxy.h
+index 4dabd1c..4454729 100644
+--- a/src/igmpproxy.h
++++ b/src/igmpproxy.h
+@@ -46,6 +46,7 @@
+ #include <stdbool.h>
+
+ #include <sys/socket.h>
++#include <sys/types.h>
+ #include <sys/un.h>
+ #include <sys/time.h>
+ #include <sys/ioctl.h>
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy_0.1.bb b/meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy_0.1.bb
new file mode 100644
index 000000000..5424dc455
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/igmpproxy/igmpproxy_0.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "simple dynamic multicast routing daemon that only uses IGMP signalling"
+HOMEPAGE = "http://sourceforge.net/projects/igmpproxy/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1e995e2799bb0d27d63069b97f805420"
+
+SRC_URI = "http://sourceforge.net/projects/igmpproxy/files/${BPN}/${PV}/${BPN}-${PV}.tar.gz \
+ file://0001-src-igmpproxy.h-Include-sys-types.h-for-u_short-u_in.patch \
+ "
+
+SRC_URI[md5sum] = "c56f41ec195bc1fe016369bf74efc5a1"
+SRC_URI[sha256sum] = "ee18ff3d8c3ae3a29dccb7e5eedf332337330020168bd95a11cece8d7d7ee6ae"
+
+inherit autotools pkgconfig
+
+CFLAGS += "-D_GNU_SOURCE"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-Respect-flags-from-env.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-Respect-flags-from-env.patch
new file mode 100644
index 000000000..e96762125
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-Respect-flags-from-env.patch
@@ -0,0 +1,56 @@
+From 4848b9e4d516a9203c08432901a7b40419e8f43c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 19 Jul 2017 15:54:35 -0700
+Subject: [PATCH 1/3] Respect flags from env
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 4 ++--
+ cli/Makefile | 2 +-
+ pppd/Makefile | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index a05a000..439a978 100644
+--- a/Makefile
++++ b/Makefile
+@@ -81,8 +81,8 @@ LIBS.dmalloc= -ldmalloc
+ export USE_DMALLOC
+ endif
+
+-CPPFLAGS= $(CPPFLAGS.ippooltest)
+-CFLAGS= -I. -Iusl -Icli -MMD -Wall -g $(CPPFLAGS) $(CPPFLAGS.dmalloc)
++CPPFLAGS+= $(CPPFLAGS.ippooltest)
++CFLAGS+= -I. -Iusl -Icli -MMD -Wall -g $(CPPFLAGS) $(CPPFLAGS.dmalloc)
+ LDFLAGS.ippoold= $(LDFLAGS) -Wl,-E -L. -Lusl -lusl -lnsl -ldl $(LIBS.dmalloc) -lc
+ LDFLAGS.ippoolconfig= $(LDFLAGS) -Lcli -lcli -lreadline -lcurses -lnsl $(LIBS.dmalloc) -lc
+
+diff --git a/cli/Makefile b/cli/Makefile
+index 4b5dd59..56fbf2f 100644
+--- a/cli/Makefile
++++ b/cli/Makefile
+@@ -7,7 +7,7 @@ CLI_SRCS_TEST.o= $(CLI_SRCS_TEST.c:%.c=%.o)
+
+ LDFLAGS.cli_test= -L.. -L. $(READLINE_LDFLAGS) -lcli -lusl -lreadline -lcurses -lc
+
+-CFLAGS= $(CFLAGS.optimize) -MMD -Wall -Werror -I.. $(READLINE_CFLAGS)
++CFLAGS= $(CFLAGS.optimize) -MMD -Wall -Werror -I.. $(READLINE_CFLAGS) $(CPPFLAGS)
+
+ .PHONY: all test clean
+
+diff --git a/pppd/Makefile b/pppd/Makefile
+index 106deca..7fd815f 100644
+--- a/pppd/Makefile
++++ b/pppd/Makefile
+@@ -10,7 +10,7 @@ endif
+
+ # END CONFIGURABLE SETTINGS
+
+-CFLAGS += -g -I.. -I/usr/include/pppd $(CFLAGS.pppd) -fPIC
++CFLAGS += -g -I.. -I=/usr/include/pppd $(CFLAGS.pppd) -fPIC
+ LDFLAGS += -shared
+
+ all: ippool.so
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-read-returns-ssize_t.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-read-returns-ssize_t.patch
new file mode 100644
index 000000000..7d3f9acb6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-read-returns-ssize_t.patch
@@ -0,0 +1,31 @@
+From e4e0aae139b6489dc582fd14e54e562126482ce2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 07:23:53 -0700
+Subject: [PATCH 1/3] read() returns ssize_t
+
+Fixes
+usl_fd.c:284:10: error: comparison of unsigned expression < 0 is always false [-Werror,-Wtautological-compare]
+ if (nb < 0) {
+ ~~ ^ ~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ usl/usl_fd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usl/usl_fd.c b/usl/usl_fd.c
+index 3b7a813..04ba48c 100644
+--- a/usl/usl_fd.c
++++ b/usl/usl_fd.c
+@@ -280,7 +280,7 @@ size_t usl_fd_read(int fd, void *buf, size_t count)
+ char *ptr = buf;
+
+ for (chars_read = 0; chars_read < count; ) {
+- size_t nb = read(fd, ptr, count - chars_read);
++ ssize_t nb = read(fd, ptr, count - chars_read);
+ if (nb < 0) {
+ if (errno == EINTR)
+ continue;
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-usl_timer-Check-for-return-value-of-write-API.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-usl_timer-Check-for-return-value-of-write-API.patch
new file mode 100644
index 000000000..6fb7cc5c4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0001-usl_timer-Check-for-return-value-of-write-API.patch
@@ -0,0 +1,28 @@
+From 5d7f20c045b3c74dad2c53d65e30bd4840250082 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 15:17:19 -0700
+Subject: [PATCH] usl_timer: Check for return value of write() API
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ usl/usl_timer.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/usl/usl_timer.c b/usl/usl_timer.c
+index fda752b..d8414a6 100644
+--- a/usl/usl_timer.c
++++ b/usl/usl_timer.c
+@@ -94,7 +94,9 @@ void usl_timer_tick(void)
+
+ if (!usl_tick_pending) {
+ usl_tick_pending = 1;
+- write(usl_tick_pipe[1], &msg, sizeof(msg));
++ if (write(usl_tick_pipe[1], &msg, sizeof(msg)) != sizeof(msg)) {
++ fprintf(stderr, "write to fd %i failed: %s\n", usl_tick_pipe[1], strerror(errno));
++ }
+ }
+ }
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-Mark-first-element-of-a-string-as-null.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-Mark-first-element-of-a-string-as-null.patch
new file mode 100644
index 000000000..6e2bd523d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-Mark-first-element-of-a-string-as-null.patch
@@ -0,0 +1,31 @@
+From cf25576428903168cd41b183fb1ca9c2b7e2666e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 07:28:10 -0700
+Subject: [PATCH 2/3] Mark first element of a string as null
+
+Fixes
+cli_lib.c:427:20: error: expression which evaluates to zero treated as a null pointer constant of type 'char *' [-Werror,-Wnon-literal-null-conversion]
+ values[arg] = '\0';
+ ^~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cli/cli_lib.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/cli/cli_lib.c b/cli/cli_lib.c
+index 41a0b06..e4d2fd5 100644
+--- a/cli/cli_lib.c
++++ b/cli/cli_lib.c
+@@ -424,7 +424,7 @@ int cli_find_args(int argc, char *argv[], struct cli_node *cmd, struct cli_node
+ if (arg_string[1] == '\0') {
+ /* no arg value - only allowed for string args */
+ if (node->arg->parser == cli_arg_parse_string) {
+- values[arg] = '\0';
++ *values[arg] = '\0';
+ } else {
+ result = -EINVAL;
+ break;
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-link-with-libtirpc.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-link-with-libtirpc.patch
new file mode 100644
index 000000000..d80f7b436
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0002-link-with-libtirpc.patch
@@ -0,0 +1,30 @@
+From 47aef26198431f7ad568c2277dded158bda3e36f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 19 Jul 2017 16:00:35 -0700
+Subject: [PATCH 2/3] link with libtirpc
+
+musl needs it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 439a978..ea821eb 100644
+--- a/Makefile
++++ b/Makefile
+@@ -83,8 +83,8 @@ endif
+
+ CPPFLAGS+= $(CPPFLAGS.ippooltest)
+ CFLAGS+= -I. -Iusl -Icli -MMD -Wall -g $(CPPFLAGS) $(CPPFLAGS.dmalloc)
+-LDFLAGS.ippoold= $(LDFLAGS) -Wl,-E -L. -Lusl -lusl -lnsl -ldl $(LIBS.dmalloc) -lc
+-LDFLAGS.ippoolconfig= $(LDFLAGS) -Lcli -lcli -lreadline -lcurses -lnsl $(LIBS.dmalloc) -lc
++LDFLAGS.ippoold= $(LDFLAGS) -Wl,-E -L. -Lusl -lusl -ldl $(LIBS.dmalloc) -lc -ltirpc
++LDFLAGS.ippoolconfig= $(LDFLAGS) -Lcli -lcli -lreadline -lcurses $(LIBS.dmalloc) -lc -ltirpc
+
+ OPT_CFLAGS?= -O
+
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-cli-Mark-return-of-strtol-as-long-int.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-cli-Mark-return-of-strtol-as-long-int.patch
new file mode 100644
index 000000000..3854b1133
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-cli-Mark-return-of-strtol-as-long-int.patch
@@ -0,0 +1,58 @@
+From 994d9575374d3cdb34b1b0f70c3c53ae76fe578e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 07:41:05 -0700
+Subject: [PATCH 3/3] cli: Mark return of strtol as long int
+
+strtol does not return unsigned long
+
+error: taking the absolute value of unsigned type 'unsigned long' has no effect [-Werror,-Wabsolute-value]
+ if ((*endp == '\0') && (labs(tmp) < 32768)) {
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cli/cli_lib.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/cli/cli_lib.c b/cli/cli_lib.c
+index e4d2fd5..5f487dc 100644
+--- a/cli/cli_lib.c
++++ b/cli/cli_lib.c
+@@ -522,7 +522,7 @@ int cli_arg_parse_int32(struct cli_node *arg, const char *val, void *result)
+ int cli_arg_parse_int16(struct cli_node *arg, const char *val, void *result)
+ {
+ int16_t *intval = result;
+- unsigned long tmp;
++ long tmp;
+ char *endp;
+ int ret = 0;
+
+@@ -539,7 +539,7 @@ int cli_arg_parse_int16(struct cli_node *arg, const char *val, void *result)
+ int cli_arg_parse_int8(struct cli_node *arg, const char *val, void *result)
+ {
+ int8_t *intval = result;
+- unsigned long tmp;
++ long tmp;
+ char *endp;
+ int ret = 0;
+
+@@ -573,7 +573,7 @@ int cli_arg_parse_uint32(struct cli_node *arg, const char *val, void *result)
+ int cli_arg_parse_uint16(struct cli_node *arg, const char *val, void *result)
+ {
+ uint16_t *intval = result;
+- unsigned long tmp;
++ long tmp;
+ char *endp;
+ int ret = 0;
+
+@@ -590,7 +590,7 @@ int cli_arg_parse_uint16(struct cli_node *arg, const char *val, void *result)
+ int cli_arg_parse_uint8(struct cli_node *arg, const char *val, void *result)
+ {
+ uint8_t *intval = result;
+- unsigned long tmp;
++ long tmp;
+ char *endp;
+ int ret = 0;
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-musl-fixes.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-musl-fixes.patch
new file mode 100644
index 000000000..3cd5259fa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/0003-musl-fixes.patch
@@ -0,0 +1,283 @@
+From eb345047decba665e3f39908336a83f039e1ece2 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 19 Jul 2017 16:01:32 -0700
+Subject: [PATCH 3/3] musl fixes
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cli/cli_readline.c | 7 +-
+ ippool_api.c | 9 ++-
+ net/ppp_defs.h | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ usl/usl.h | 4 ++
+ 4 files changed, 208 insertions(+), 6 deletions(-)
+ create mode 100644 net/ppp_defs.h
+
+diff --git a/cli/cli_readline.c b/cli/cli_readline.c
+index 2812e6e..542935c 100644
+--- a/cli/cli_readline.c
++++ b/cli/cli_readline.c
+@@ -17,13 +17,14 @@
+ * Boston, MA 02110-1301 USA
+ *
+ *****************************************************************************/
+-
++#define _GNU_SOURCE
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/file.h>
+ #include <sys/stat.h>
+-#include <sys/errno.h>
++#include <fcntl.h>
++#include <errno.h>
+ #include <signal.h>
+
+ #include <readline/readline.h>
+@@ -630,7 +631,7 @@ static void cli_rl_uninstall_signal_handlers(void)
+
+ static int cli_rl_install_signal_handlers(void)
+ {
+- __sighandler_t handler;
++ sighandler_t handler;
+
+ rl_catch_signals = 0;
+ rl_clear_signals();
+diff --git a/ippool_api.c b/ippool_api.c
+index 2c10c47..d1127a9 100644
+--- a/ippool_api.c
++++ b/ippool_api.c
+@@ -181,10 +181,13 @@ int ippool_api_rpc_check_request(SVCXPRT *xprt)
+ * non-loopback interface, reject the request.
+ */
+ if ((!ippool_opt_remote_rpc) &&
+- ((xprt->xp_raddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)) &&
+- (xprt->xp_raddr.sin_addr.s_addr != htonl(INADDR_ANY)))) {
++ ((xprt->xp_raddr.sin6_addr.s6_addr != htonl(INADDR_LOOPBACK)) &&
++ (xprt->xp_raddr.sin6_addr.s6_addr != htonl(INADDR_ANY)))) {
++ char straddr[INET6_ADDRSTRLEN];
++ inet_ntop(AF_INET6, &xprt->xp_raddr.sin6_addr, straddr, sizeof(straddr));
++
+ if (ippool_opt_debug) {
+- ippool_log(LOG_ERR, "Rejecting RPC request from %s", inet_ntoa(xprt->xp_raddr.sin_addr));
++ ippool_log(LOG_ERR, "Rejecting RPC request from %s", straddr);
+ }
+ svcerr_auth(xprt, AUTH_TOOWEAK);
+ return -EPERM;
+diff --git a/net/ppp_defs.h b/net/ppp_defs.h
+new file mode 100644
+index 0000000..b06eda5
+--- /dev/null
++++ b/net/ppp_defs.h
+@@ -0,0 +1,194 @@
++/* $Id: ppp_defs.h,v 1.17 2002/12/06 09:49:15 paulus Exp $ */
++
++/*
++ * ppp_defs.h - PPP definitions.
++ *
++ * Copyright (c) 1984 Paul Mackerras. 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. The name(s) of the authors of this software must not be used to
++ * endorse or promote products derived from this software without
++ * prior written permission.
++ *
++ * 4. Redistributions of any form whatsoever must retain the following
++ * acknowledgment:
++ * "This product includes software developed by Paul Mackerras
++ * <paulus@samba.org>".
++ *
++ * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO
++ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
++ * AND FITNESS, IN NO EVENT SHALL THE AUTHORS 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.
++ */
++
++#ifndef _PPP_DEFS_H_
++#define _PPP_DEFS_H_
++
++/*
++ * The basic PPP frame.
++ */
++#define PPP_HDRLEN 4 /* octets for standard ppp header */
++#define PPP_FCSLEN 2 /* octets for FCS */
++
++/*
++ * Packet sizes
++ *
++ * Note - lcp shouldn't be allowed to negotiate stuff outside these
++ * limits. See lcp.h in the pppd directory.
++ * (XXX - these constants should simply be shared by lcp.c instead
++ * of living in lcp.h)
++ */
++#define PPP_MTU 1500 /* Default MTU (size of Info field) */
++#define PPP_MAXMTU 65535 - (PPP_HDRLEN + PPP_FCSLEN)
++#define PPP_MINMTU 64
++#define PPP_MRU 1500 /* default MRU = max length of info field */
++#define PPP_MAXMRU 65000 /* Largest MRU we allow */
++#define PPP_MINMRU 128
++
++#define PPP_ADDRESS(p) (((u_char *)(p))[0])
++#define PPP_CONTROL(p) (((u_char *)(p))[1])
++#define PPP_PROTOCOL(p) ((((u_char *)(p))[2] << 8) + ((u_char *)(p))[3])
++
++/*
++ * Significant octet values.
++ */
++#define PPP_ALLSTATIONS 0xff /* All-Stations broadcast address */
++#define PPP_UI 0x03 /* Unnumbered Information */
++#define PPP_FLAG 0x7e /* Flag Sequence */
++#define PPP_ESCAPE 0x7d /* Asynchronous Control Escape */
++#define PPP_TRANS 0x20 /* Asynchronous transparency modifier */
++
++/*
++ * Protocol field values.
++ */
++#define PPP_IP 0x21 /* Internet Protocol */
++#define PPP_AT 0x29 /* AppleTalk Protocol */
++#define PPP_IPX 0x2b /* IPX protocol */
++#define PPP_VJC_COMP 0x2d /* VJ compressed TCP */
++#define PPP_VJC_UNCOMP 0x2f /* VJ uncompressed TCP */
++#define PPP_IPV6 0x57 /* Internet Protocol Version 6 */
++#define PPP_COMP 0xfd /* compressed packet */
++#define PPP_IPCP 0x8021 /* IP Control Protocol */
++#define PPP_ATCP 0x8029 /* AppleTalk Control Protocol */
++#define PPP_IPXCP 0x802b /* IPX Control Protocol */
++#define PPP_IPV6CP 0x8057 /* IPv6 Control Protocol */
++#define PPP_CCP 0x80fd /* Compression Control Protocol */
++#define PPP_ECP 0x8053 /* Encryption Control Protocol */
++#define PPP_LCP 0xc021 /* Link Control Protocol */
++#define PPP_PAP 0xc023 /* Password Authentication Protocol */
++#define PPP_LQR 0xc025 /* Link Quality Report protocol */
++#define PPP_CHAP 0xc223 /* Cryptographic Handshake Auth. Protocol */
++#define PPP_CBCP 0xc029 /* Callback Control Protocol */
++#define PPP_EAP 0xc227 /* Extensible Authentication Protocol */
++
++/*
++ * Values for FCS calculations.
++ */
++#define PPP_INITFCS 0xffff /* Initial FCS value */
++#define PPP_GOODFCS 0xf0b8 /* Good final FCS value */
++#define PPP_FCS(fcs, c) (((fcs) >> 8) ^ fcstab[((fcs) ^ (c)) & 0xff])
++
++/*
++ * A 32-bit unsigned integral type.
++ */
++
++#if !defined(__BIT_TYPES_DEFINED__) && !defined(_BITYPES) \
++ && !defined(__FreeBSD__) && (NS_TARGET < 40)
++#ifdef UINT32_T
++typedef UINT32_T u_int32_t;
++#else
++typedef unsigned int u_int32_t;
++typedef unsigned short u_int16_t;
++#endif
++#endif
++
++/*
++ * Extended asyncmap - allows any character to be escaped.
++ */
++typedef u_int32_t ext_accm[8];
++
++/*
++ * What to do with network protocol (NP) packets.
++ */
++enum NPmode {
++ NPMODE_PASS, /* pass the packet through */
++ NPMODE_DROP, /* silently drop the packet */
++ NPMODE_ERROR, /* return an error */
++ NPMODE_QUEUE /* save it up for later. */
++};
++
++/*
++ * Statistics.
++ */
++struct pppstat {
++ unsigned int ppp_ibytes; /* bytes received */
++ unsigned int ppp_ipackets; /* packets received */
++ unsigned int ppp_ierrors; /* receive errors */
++ unsigned int ppp_obytes; /* bytes sent */
++ unsigned int ppp_opackets; /* packets sent */
++ unsigned int ppp_oerrors; /* transmit errors */
++};
++
++struct vjstat {
++ unsigned int vjs_packets; /* outbound packets */
++ unsigned int vjs_compressed; /* outbound compressed packets */
++ unsigned int vjs_searches; /* searches for connection state */
++ unsigned int vjs_misses; /* times couldn't find conn. state */
++ unsigned int vjs_uncompressedin; /* inbound uncompressed packets */
++ unsigned int vjs_compressedin; /* inbound compressed packets */
++ unsigned int vjs_errorin; /* inbound unknown type packets */
++ unsigned int vjs_tossed; /* inbound packets tossed because of error */
++};
++
++struct ppp_stats {
++ struct pppstat p; /* basic PPP statistics */
++ struct vjstat vj; /* VJ header compression statistics */
++};
++
++struct compstat {
++ unsigned int unc_bytes; /* total uncompressed bytes */
++ unsigned int unc_packets; /* total uncompressed packets */
++ unsigned int comp_bytes; /* compressed bytes */
++ unsigned int comp_packets; /* compressed packets */
++ unsigned int inc_bytes; /* incompressible bytes */
++ unsigned int inc_packets; /* incompressible packets */
++ unsigned int ratio; /* recent compression ratio << 8 */
++};
++
++struct ppp_comp_stats {
++ struct compstat c; /* packet compression statistics */
++ struct compstat d; /* packet decompression statistics */
++};
++
++/*
++ * The following structure records the time in seconds since
++ * the last NP packet was sent or received.
++ */
++struct ppp_idle {
++ time_t xmit_idle; /* time since last NP packet sent */
++ time_t recv_idle; /* time since last NP packet received */
++};
++
++#ifndef __P
++#ifdef __STDC__
++#define __P(x) x
++#else
++#define __P(x) ()
++#endif
++#endif
++
++#endif /* _PPP_DEFS_H_ */
+diff --git a/usl/usl.h b/usl/usl.h
+index cdc16db..88d2714 100644
+--- a/usl/usl.h
++++ b/usl/usl.h
+@@ -38,6 +38,10 @@
+ #include "usl_fsm.h"
+ #include "usl_list.h"
+
++#ifndef WAIT_ANY
++#define WAIT_ANY (-1)
++#endif
++
+ #define USL_VERSION "0.6"
+
+ #ifdef DEBUG
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/always_syslog.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/always_syslog.patch
new file mode 100644
index 000000000..e475276c0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/always_syslog.patch
@@ -0,0 +1,22 @@
+ippool: always log to syslog
+
+Even when running in the foreground, send log messages to syslog.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Joe Slater <jslater@windriver.com>
+
+
+--- a/ippool_main.c
++++ b/ippool_main.c
+@@ -251,9 +251,8 @@ void ippool_vlog(int level, const char *
+ if (ippool_opt_nodaemon) {
+ vprintf(fmt, ap);
+ printf("\n");
+- } else {
+- vsyslog(level, fmt, ap);
+ }
++ vsyslog(level, fmt, ap);
+ DMALLOC_VMESSAGE(fmt, ap);
+ }
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool.service b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool.service
new file mode 100644
index 000000000..e5917fc14
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool.service
@@ -0,0 +1,19 @@
+[Unit]
+Description=ip address pool allocator
+Requires=rpcbind.service
+After=rpcbind.service
+
+[Service]
+Type=simple
+# Start ippoold in the foreground!
+ExecStart=@SBINDIR@/ippoold -f
+# Normal output will go to syslog, so suppress stdout.
+StandardOutput=null
+StandardError=syslog
+# ExecStop is not needed. systemd will send SIGTERM
+# and ippoold will exit status 1.
+SuccessExitStatus=1
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_init.d.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_init.d.patch
new file mode 100644
index 000000000..14a768d0f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_init.d.patch
@@ -0,0 +1,65 @@
+Fix start error if lsb init-functions doesn't exist
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/debian/init.d b/debian/init.d
+index 363ba89..0327fec 100644
+--- a/debian/init.d
++++ b/debian/init.d
+@@ -10,6 +10,9 @@
+ # Description: Start ippool daemon
+ ### END INIT INFO
+
++# Source function library.
++. /etc/init.d/functions
++
+ DAEMON=/usr/sbin/ippoold
+ NAME=ippoold
+ MODULE=pppol2tp
+@@ -18,7 +21,23 @@ MODULE=pppol2tp
+ test -x $DAEMON || exit 0
+
+ # Get lsb functions
+-. /lib/lsb/init-functions
++if [ -f /lib/lsb/init-functions ]
++then
++ . /lib/lsb/init-functions
++else
++ log_begin_msg() {
++ echo -n $*
++ }
++
++ log_end_msg() {
++ if [ $1 -eq 0 ]; then
++ echo "done"
++ else
++ echo "failed"
++ fi
++ }
++fi
++
+ . /etc/default/rcS
+
+ case "$1" in
+@@ -35,6 +54,10 @@ case "$1" in
+ fi
+ log_end_msg $?
+ ;;
++ status)
++ status /usr/sbin/ippoold;
++ exit $?
++ ;;
+ restart)
+ $0 stop
+ sleep 1
+@@ -46,7 +69,7 @@ case "$1" in
+ log_end_msg $?
+ ;;
+ *)
+- log_success_msg "Usage: /etc/init.d/ippoold {start|stop|restart|reload|force-reload}"
++ log_success_msg "Usage: /etc/init.d/ippoold {start|stop|status|restart|reload|force-reload}"
+ exit 1
+ esac
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_parallel_make_and_pic.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_parallel_make_and_pic.patch
new file mode 100644
index 000000000..1ebd95ea1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_parallel_make_and_pic.patch
@@ -0,0 +1,89 @@
+1)add -fPIC for $(IPPOOL_RPC_STEM)_xdr.o, $(IPPOOL_RPC_STEM)_client.o
+2)add sub target for subdirs-all, and those dependencies below
+ pppd plugin directory build depends on $(IPPOOL_RPC_STEM)_xdr.o
+$(IPPOOL_RPC_STEM)_client.o ippool_rpc.h
+
+ ippoold depends on libusl
+ ippoolconfig depends on libcli
+
+ $(IPPOOL_RPC_STEM)_xdr.o, $(IPPOOL_RPC_STEM)_client.o
+$(IPPOOL_RPC_STEM)_server.o *.o in main directory depends on ippool_rpc.h
+as those all directly or indirectly include ippool_rpc.h which is
+dynamically generated by rpcgen
+
+to make parallel make working.
+3)include dependency files for pppd.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+diff --git a/Makefile b/Makefile
+index 73aa72f..4f7af1d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -106,14 +106,14 @@ all: generated-files $(IPPOOL_RPC_STEM)_xdr.o $(IPPOOL_RPC_STEM)_client.o \
+ subdirs-all $(PROGS.sbin) $(PROGS.bin)
+
+ # Compile without -Wall because rpcgen-generated code is full of warnings
+-$(IPPOOL_RPC_STEM)_xdr.o: $(IPPOOL_RPC_STEM)_xdr.c
+- $(CC) -I. -MMD -g -c -w $(CPPFLAGS) $(CFLAGS.optimize) $<
++$(IPPOOL_RPC_STEM)_xdr.o: $(IPPOOL_RPC_STEM)_xdr.c $(IPPOOL_RPC_STEM).h
++ $(CC) -I. -MMD -g -c -w $(CPPFLAGS) $(CFLAGS.optimize) $< -fPIC
+
+-$(IPPOOL_RPC_STEM)_client.o: $(IPPOOL_RPC_STEM)_client.c
+- $(CC) -I. -MMD -g -c -w $(CPPFLAGS) $(CFLAGS.optimize) $<
++$(IPPOOL_RPC_STEM)_client.o: $(IPPOOL_RPC_STEM)_client.c $(IPPOOL_RPC_STEM).h
++ $(CC) -I. -MMD -g -c -w $(CPPFLAGS) $(CFLAGS.optimize) $< -fPIC
+
+-$(IPPOOL_RPC_STEM)_server.o: $(IPPOOL_RPC_STEM)_server.c
+- $(CC) -I. -MMD -g -c -w $(CPPFLAGS) $(CFLAGS.optimize) $<
++$(IPPOOL_RPC_STEM)_server.o: $(IPPOOL_RPC_STEM)_server.c $(IPPOOL_RPC_STEM).h
++ $(CC) -I. -MMD -g -c -w $(CPPFLAGS) $(CFLAGS.optimize) $< -fPIC
+
+ $(IPPOOL_RPC_STEM)_xdr.c: $(IPPOOL_RPC_STEM).x
+ -$(RM) $@
+@@ -136,8 +136,12 @@ $(IPPOOL_RPC_STEM).h: $(IPPOOL_RPC_STEM).x
+
+ generated-files: $(RPC_FILES)
+
+-subdirs-all:
+- @for d in $(SUBDIRS); do $(MAKE) -C $$d $(MFLAGS) EXTRA_CFLAGS="$(CPPFLAGS)" all; if [ $$? -ne 0 ]; then exit 1; fi; done
++subdirs-all: $(patsubst %,%-dir, $(SUBDIRS))
++
++pppd-dir: $(IPPOOL_RPC_STEM)_xdr.o $(IPPOOL_RPC_STEM)_client.o $(IPPOOL_RPC_STEM).h
++
++$(patsubst %,%-dir,$(SUBDIRS)):
++ @for d in $(patsubst %-dir,%,$@); do $(MAKE) -C $$d $(MFLAGS) EXTRA_CFLAGS="$(CPPFLAGS)" all; if [ $$? -ne 0 ]; then exit 1; fi; done
+
+ clean:
+ @for d in $(SUBDIRS); do $(MAKE) -C $$d $(MFLAGS) $@; if [ $$? -ne 0 ]; then exit 1; fi; done
+@@ -151,13 +155,13 @@ TAGS:
+ @for d in $(SUBDIRS); do $(MAKE) -C $$d $(MFLAGS) $@; done
+ etags -t $(wildcard *.c) $(wildcard *.h)
+
+-ippoold: $(IPPOOLD_SRCS.o)
+- $(CC) -o $@ $^ $(LDFLAGS.ippoold)
++ippoold: $(IPPOOLD_SRCS.o) usl-dir
++ $(CC) -o $@ $(IPPOOLD_SRCS.o) $(LDFLAGS.ippoold)
+
+-ippoolconfig: $(IPPOOLCONFIG_SRCS.o)
+- $(CC) -o $@ $^ $(LDFLAGS.ippoolconfig)
++ippoolconfig: $(IPPOOLCONFIG_SRCS.o) cli-dir
++ $(CC) -o $@ $(IPPOOLCONFIG_SRCS.o) $(LDFLAGS.ippoolconfig)
+
+-%.o: %.c
++%.o: %.c $(IPPOOL_RPC_STEM).h
+ $(CC) -c $(CFLAGS) $< -o $@
+
+ install: all
+diff --git a/pppd/Makefile b/pppd/Makefile
+index 78d9b33..106deca 100644
+--- a/pppd/Makefile
++++ b/pppd/Makefile
+@@ -24,3 +24,5 @@ install: ippool.so
+
+ clean:
+ -rm -rf *.o *.so
++
++include $(wildcard *.d /dev/null)
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_usl_timer.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_usl_timer.patch
new file mode 100644
index 000000000..ca0e3320c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/ippool_usl_timer.patch
@@ -0,0 +1,49 @@
+include limits.h to avoid UINT_MAX undefined compiling error.
+remove the unused assign which caused compiling error with -Werror.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+
+diff --git a/usl/usl_timer.c b/usl/usl_timer.c
+index 734b820..fda752b 100644
+--- a/usl/usl_timer.c
++++ b/usl/usl_timer.c
+@@ -42,6 +42,7 @@
+ #include <signal.h>
+ #include <string.h>
+ #include <sys/time.h>
++#include <limits.h>
+
+ #include "usl.h"
+
+@@ -87,14 +88,13 @@ void (*usl_timer_tick_hook)(void);
+ */
+ void usl_timer_tick(void)
+ {
+- int result;
+ char msg = '\0';
+
+ usl_tick++;
+
+ if (!usl_tick_pending) {
+ usl_tick_pending = 1;
+- result = write(usl_tick_pipe[1], &msg, sizeof(msg));
++ write(usl_tick_pipe[1], &msg, sizeof(msg));
+ }
+ }
+
+@@ -111,11 +111,10 @@ static void usl_timer_tick_handler(int fd, void *arg)
+ struct usl_ord_list_head *tmp;
+ struct usl_list_head *iwalk;
+ struct usl_list_head *itmp;
+- int result;
+ char msg;
+ USL_LIST_HEAD(expire_list);
+
+- result = usl_fd_read(usl_tick_pipe[0], &msg, sizeof(msg));
++ usl_fd_read(usl_tick_pipe[0], &msg, sizeof(msg));
+ usl_tick_pending = 0;
+
+ usl_list_for_each(walk, tmp, &usl_timer_list) {
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/makefile-add-ldflags.patch
new file mode 100644
index 000000000..7d5b715ae
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/makefile-add-ldflags.patch
@@ -0,0 +1,21 @@
+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 4f7af1d..a05a000 100644
+--- a/Makefile
++++ b/Makefile
+@@ -83,8 +83,8 @@ endif
+
+ CPPFLAGS= $(CPPFLAGS.ippooltest)
+ CFLAGS= -I. -Iusl -Icli -MMD -Wall -g $(CPPFLAGS) $(CPPFLAGS.dmalloc)
+-LDFLAGS.ippoold= -Wl,-E -L. -Lusl -lusl -lnsl -ldl $(LIBS.dmalloc) -lc
+-LDFLAGS.ippoolconfig= -Lcli -lcli -lreadline -lcurses -lnsl $(LIBS.dmalloc) -lc
++LDFLAGS.ippoold= $(LDFLAGS) -Wl,-E -L. -Lusl -lusl -lnsl -ldl $(LIBS.dmalloc) -lc
++LDFLAGS.ippoolconfig= $(LDFLAGS) -Lcli -lcli -lreadline -lcurses -lnsl $(LIBS.dmalloc) -lc
+
+ OPT_CFLAGS?= -O
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/runtest.sh b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/runtest.sh
new file mode 100644
index 000000000..f91f58237
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool/runtest.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+BANNER="----------------------------------------------------------------------------"
+TCLSH="tclsh all.tcl -preservecore 3 -verbose bps -tmpdir ./results -outfile test-ippool.result"
+
+test_setup() {
+ if [ -d ./results ]; then rm -fr ./results; fi
+ mkdir ./results
+}
+
+test_ippool() {
+ echo "${BANNER}"
+ eval $TCLSH -constraints "ipPool"
+}
+test_postprocess() {
+ echo "${BANNER}"
+ (failed=`grep FAILED results/*.result | wc -l`; \
+ let failed2=failed/2 ;\
+ passed=`grep PASSED results/*.result | wc -l`; \
+ echo "TEST SUMMARY: $passed tests PASSED, $failed2 tests FAILED" ;\
+ exit $failed2)
+}
+
+test_setup
+test_ippool
+test_postprocess
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool_1.3.bb b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool_1.3.bb
new file mode 100644
index 000000000..6e4748357
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ippool/ippool_1.3.bb
@@ -0,0 +1,113 @@
+SUMMARY = "An IP address pool manager"
+DESCRIPTION = "IpPool is implemented as a separate server daemon \
+to allow any application to use its address pools. This makes it possible \
+to define address pools that are shared by PPP, L2TP, PPTP etc. It may be \
+useful in some VPN server setups. IpPool comes with a command line \
+management application, ippoolconfig to manage and query address pool \
+status. A pppd plugin is supplied which allows pppd to request IP \
+addresses from ippoold. \
+"
+HOMEPAGE = "http://www.openl2tp.org/"
+SECTION = "console/network"
+LICENSE = "GPLv2+"
+
+SRC_URI = "https://sourceforge.net/projects/openl2tp/files/${BPN}/${PV}/${BPN}-${PV}.tar.gz \
+ file://runtest.sh \
+ file://ippool.service \
+ file://ippool_usl_timer.patch \
+ file://ippool_parallel_make_and_pic.patch \
+ file://ippool_init.d.patch \
+ file://always_syslog.patch \
+ file://makefile-add-ldflags.patch \
+ file://0001-usl_timer-Check-for-return-value-of-write-API.patch \
+ file://0001-Respect-flags-from-env.patch \
+ file://0001-read-returns-ssize_t.patch \
+ file://0002-Mark-first-element-of-a-string-as-null.patch \
+ file://0003-cli-Mark-return-of-strtol-as-long-int.patch \
+ "
+SRC_URI_append_libc-musl = "\
+ file://0002-link-with-libtirpc.patch \
+ file://0003-musl-fixes.patch \
+ "
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4c59283b82fc2b166455e0fc23c71c6f"
+SRC_URI[md5sum] = "e2401e65db26a3764585b97212888fae"
+SRC_URI[sha256sum] = "d3eab7d6cad5da8ccc9d1e31d5303e27a39622c07bdb8fa3618eea314412075b"
+
+inherit systemd
+
+DEPENDS = "readline ppp ncurses gzip-native"
+DEPENDS_append_libc-musl = " libtirpc"
+RDEPENDS_${PN} = "rpcbind"
+
+EXTRA_OEMAKE = "CC='${CC}' AS='${AS}' LD='${LD}' AR='${AR}' NM='${NM}' STRIP='${STRIP}'"
+EXTRA_OEMAKE += "PPPD_VERSION=${PPPD_VERSION} SYS_LIBDIR=${libdir}"
+# enable self tests
+EXTRA_OEMAKE += "IPPOOL_TEST=y"
+
+CPPFLAGS += "${SELECTED_OPTIMIZATION}"
+CPPFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+
+SYSTEMD_SERVICE_${PN} = "ippool.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+
+do_compile_prepend() {
+ # fix the CFLAGS= and CPPFLAGS= in main Makefile, to have the extra CFLAGS in env
+ sed -i -e "s/^CFLAGS=/CFLAGS+=/" ${S}/Makefile
+ sed -i -e "s/^CPPFLAGS=/CPPFLAGS+=/" ${S}/Makefile
+
+ sed -i -e "s:-I/usr/include/pppd:-I=/usr/include/pppd:" ${S}/pppd/Makefile
+
+}
+
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+
+ install -D -m 0755 ${S}/debian/init.d ${D}${sysconfdir}/init.d/ippoold
+ install -D -m 0644 ${WORKDIR}/ippool.service ${D}${systemd_system_unitdir}/ippool.service
+ sed -i -e 's:@SBINDIR@:${sbindir}:g' ${D}${systemd_system_unitdir}/ippool.service
+
+ # install self test
+ install -d ${D}/opt/${BPN}
+ install ${S}/test/all.tcl ${S}/test/ippool.test \
+ ${S}/test/test_procs.tcl ${D}/opt/${BPN}
+ install ${WORKDIR}/runtest.sh ${D}/opt/${BPN}
+ # fix the ../ippoolconfig in test_procs.tcl
+ sed -i -e "s:../ippoolconfig:ippoolconfig:" \
+ ${D}/opt/${BPN}/test_procs.tcl
+}
+
+
+PACKAGES =+ "${PN}-test"
+
+FILES_${PN} += "${libdir}/pppd/${PPPD_VERSION}/ippool.so"
+FILES_${PN}-dbg += "${libdir}/pppd/${PPPD_VERSION}/.debug/ippool.so"
+FILES_${PN}-test = "/opt/${BPN}"
+
+# needs tcl to run tests
+RDEPENDS_${PN}-test += "tcl ${BPN}"
+
+PPPD_VERSION="${@get_ppp_version(d)}"
+
+def get_ppp_version(d):
+ import re
+
+ pppd_plugin = d.expand('${STAGING_LIBDIR}/pppd')
+ if not os.path.isdir(pppd_plugin):
+ return None
+
+ bb.debug(1, "pppd plugin dir %s" % pppd_plugin)
+ r = re.compile("\d*\.\d*\.\d*")
+ for f in os.listdir(pppd_plugin):
+ if os.path.isdir(os.path.join(pppd_plugin, f)):
+ ma = r.match(f)
+ if ma:
+ bb.debug(1, "pppd version dir %s" % f)
+ return f
+ else:
+ bb.debug(1, "under pppd plugin dir %s" % f)
+
+ return None
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-libopeniscsiusr-Include-limit.h-for-PATH_MAX.patch b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-libopeniscsiusr-Include-limit.h-for-PATH_MAX.patch
new file mode 100644
index 000000000..f5e1bec8a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-libopeniscsiusr-Include-limit.h-for-PATH_MAX.patch
@@ -0,0 +1,25 @@
+From cfee58d5863a535b61aa54690ae205b876f57944 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Feb 2018 22:53:29 -0800
+Subject: [PATCH 1/2] libopeniscsiusr: Include limit.h for PATH_MAX
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libopeniscsiusr/iface.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/libopeniscsiusr/iface.c b/libopeniscsiusr/iface.c
+index 79898df..a48ef36 100644
+--- a/libopeniscsiusr/iface.c
++++ b/libopeniscsiusr/iface.c
+@@ -30,6 +30,7 @@
+ #include <netdb.h>
+ #include <assert.h>
+ #include <inttypes.h>
++#include <limits.h>
+
+ #include "libopeniscsiusr/libopeniscsiusr.h"
+ #include "misc.h"
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-qedi.c-Removed-unused-linux-ethtool.h.patch b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-qedi.c-Removed-unused-linux-ethtool.h.patch
new file mode 100644
index 000000000..174aa50d2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0001-qedi.c-Removed-unused-linux-ethtool.h.patch
@@ -0,0 +1,25 @@
+From 197713ad7e3e944102bbd792e1ab9ec4a67100c0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Feb 2018 23:25:21 -0800
+Subject: [PATCH 1/4] qedi.c: Removed unused linux/ethtool.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ iscsiuio/src/unix/libs/qedi.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/iscsiuio/src/unix/libs/qedi.c b/iscsiuio/src/unix/libs/qedi.c
+index b81fecd..24cb89a 100644
+--- a/iscsiuio/src/unix/libs/qedi.c
++++ b/iscsiuio/src/unix/libs/qedi.c
+@@ -49,7 +49,6 @@
+ #include <arpa/inet.h>
+ #include <linux/types.h>
+ #include <linux/sockios.h>
+-#include <linux/ethtool.h>
+ #include <linux/netlink.h>
+ #include <sys/mman.h>
+ #include <sys/ioctl.h>
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-idbm.c-Include-fcnl.h-for-O_RDWR-and-O_CREAT-definit.patch b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-idbm.c-Include-fcnl.h-for-O_RDWR-and-O_CREAT-definit.patch
new file mode 100644
index 000000000..aecede6ee
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-idbm.c-Include-fcnl.h-for-O_RDWR-and-O_CREAT-definit.patch
@@ -0,0 +1,25 @@
+From 2b39f85dcf020647544002cb0b0e734748391dfb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Feb 2018 23:27:25 -0800
+Subject: [PATCH 2/4] idbm.c: Include fcnl.h for O_RDWR and O_CREAT definitions
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ usr/idbm.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/usr/idbm.c b/usr/idbm.c
+index 5532202..0a51b85 100644
+--- a/usr/idbm.c
++++ b/usr/idbm.c
+@@ -27,6 +27,7 @@
+ #include <errno.h>
+ #include <dirent.h>
+ #include <limits.h>
++#include <fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/file.h>
+
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-libopeniscsiusr-Add-CFLAGS-to-linker-cmdline.patch b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-libopeniscsiusr-Add-CFLAGS-to-linker-cmdline.patch
new file mode 100644
index 000000000..836ed6048
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0002-libopeniscsiusr-Add-CFLAGS-to-linker-cmdline.patch
@@ -0,0 +1,29 @@
+From 29571f71692e28ce9a17d1450097a98492f3b465 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Feb 2018 22:54:04 -0800
+Subject: [PATCH 2/2] libopeniscsiusr: Add CFLAGS to linker cmdline
+
+This will ensure that -fPIC is passed to linker as
+well
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libopeniscsiusr/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libopeniscsiusr/Makefile b/libopeniscsiusr/Makefile
+index 8b9b523..4f1d0d6 100644
+--- a/libopeniscsiusr/Makefile
++++ b/libopeniscsiusr/Makefile
+@@ -49,7 +49,7 @@ LIBADD =
+ all: $(LIBS) $(LIBS_MAJOR) $(TESTS) doc
+
+ $(LIBS): $(OBJS)
+- $(CC) $(LDFLAGS) -shared -Wl,-soname=$@ -o $@ $(OBJS) $(LIBADD)
++ $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-soname=$@ -o $@ $(OBJS) $(LIBADD)
+ ln -sf $@ $(DEVLIB)
+
+ $(LIBS_MAJOR): $(LIBS)
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0003-bnx2x.c-Reorder-the-includes-to-avoid-duplicate-defi.patch b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0003-bnx2x.c-Reorder-the-includes-to-avoid-duplicate-defi.patch
new file mode 100644
index 000000000..0ce155f7a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0003-bnx2x.c-Reorder-the-includes-to-avoid-duplicate-defi.patch
@@ -0,0 +1,49 @@
+From 9b7a32903b56ce4d41f264a345ca59a0b00d53b3 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Feb 2018 23:28:33 -0800
+Subject: [PATCH 3/4] bnx2x.c: Reorder the includes to avoid duplicate defines
+ with musl
+
+including nic.h before linux/ethtool.h avoids redefinitions of
+eth structs
+
+/mnt/a/oe/build/tmp/work/cortexa7t2hf-neon-vfpv4-bec-linux-musleabi/iscsi-initiator-utils/2.0.876-r0/recipe-sysroot/
+usr/include/netinet/if_ether.h:104:8: error: redefinition of 'struct ethhdr'
+ struct ethhdr {
+ ^~~~~~
+In file included from /mnt/a/oe/build/tmp/work/cortexa7t2hf-neon-vfpv4-bec-linux-musleabi/iscsi-initiator-utils/2.0.
+876-r0/recipe-sysroot/usr/include/linux/ethtool.h:19:0,
+ from qedi.c:52:
+/mnt/a/oe/build/tmp/work/cortexa7t2hf-neon-vfpv4-bec-linux-musleabi/iscsi-initiator-utils/2.0.876-r0/recipe-sysroot/
+usr/include/linux/if_ether.h:154:8: note: originally defined here
+ struct ethhdr {
+ ^~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ iscsiuio/src/unix/libs/bnx2x.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/iscsiuio/src/unix/libs/bnx2x.c b/iscsiuio/src/unix/libs/bnx2x.c
+index 3df6d5f..62530d1 100644
+--- a/iscsiuio/src/unix/libs/bnx2x.c
++++ b/iscsiuio/src/unix/libs/bnx2x.c
+@@ -36,6 +36,7 @@
+ * bnx2x.c - bnx2x user space driver
+ *
+ */
++#include "nic.h"
+ #include <errno.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -58,7 +59,6 @@
+ #include "bnx2x.h"
+ #include "cnic.h"
+ #include "logger.h"
+-#include "nic.h"
+ #include "nic_id.h"
+ #include "nic_utils.h"
+ #include "options.h"
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0004-fwparam_ppc.c-Do-not-use-__compar_fn_t.patch b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0004-fwparam_ppc.c-Do-not-use-__compar_fn_t.patch
new file mode 100644
index 000000000..57bdc8cb6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/0004-fwparam_ppc.c-Do-not-use-__compar_fn_t.patch
@@ -0,0 +1,28 @@
+From 6f9c1a04d250388d1574cfaf20a1ff66a64beb48 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Feb 2018 23:42:12 -0800
+Subject: [PATCH 4/4] fwparam_ppc.c: Do not use __compar_fn_t
+
+__compar_fn_t is not defined in musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ utils/fwparam_ibft/fwparam_ppc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/utils/fwparam_ibft/fwparam_ppc.c b/utils/fwparam_ibft/fwparam_ppc.c
+index c298b8c..391faa2 100644
+--- a/utils/fwparam_ibft/fwparam_ppc.c
++++ b/utils/fwparam_ibft/fwparam_ppc.c
+@@ -356,7 +356,7 @@ static int loop_devs(const char *devtree)
+ * Sort the nics into "natural" order. The proc fs
+ * device-tree has them in somewhat random, or reversed order.
+ */
+- qsort(niclist, nic_count, sizeof(char *), (__compar_fn_t)nic_cmp);
++ qsort(niclist, nic_count, sizeof(char *), nic_cmp);
+
+ snprintf(prefix, sizeof(prefix), "%s/%s", devtree, "aliases");
+ dev_count = 0;
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/99_iscsi-initiator-utils b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/99_iscsi-initiator-utils
new file mode 100644
index 000000000..42fdd602f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/99_iscsi-initiator-utils
@@ -0,0 +1,2 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d root root 0755 /var/lock/iscsi none
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/initd.debian b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/initd.debian
new file mode 100644
index 000000000..99a763861
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/initd.debian
@@ -0,0 +1,119 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:
+# Required-Start:
+# Required-Stop:
+# Default-Start:
+# Default-Stop:
+# Short-Description: Starts and stops the iSCSI initiator services and logins to default targets
+### END INIT INFO
+#set -x
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/iscsid
+ADM=/usr/sbin/iscsiadm
+PIDFILE=/var/run/iscsid.pid
+
+[ -x "$DAEMON" ] || exit 0
+
+if [ ! -d /sys/class/ ]; then
+ echo "Failure:" "iSCSI requires a mounted sysfs, not started."
+ exit 1
+fi
+
+nodestartup_re='s/^node\.conn\[0]\.startup[ ]*=[ ]*//p'
+
+RETVAL=0
+
+start() {
+ echo "Starting iSCSI initiator service" "iscsid"
+ modprobe -q iscsi_tcp 2>/dev/null || :
+ modprobe -q ib_iser 2>/dev/null || :
+ if [ ! -f /etc/iscsi/initiatorname.iscsi ]; then
+ INITIATORNAME=$(iscsi-iname)
+ cat >/etc/iscsi/initiatorname.iscsi <<EOF
+## DO NOT EDIT OR REMOVE THIS FILE!
+## If you remove this file, the iSCSI daemon will not start.
+## If you change the InitiatorName, existing access control lists
+## may reject this initiator. The InitiatorName must be unique
+## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames.
+InitiatorName=$INITIATORNAME
+EOF
+ fi
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON
+ RETVAL=$?
+ starttargets
+}
+
+starttargets() {
+ echo "Setting up iSCSI targets"
+ $ADM -m node --loginall=automatic
+}
+
+stoptargets() {
+ echo "Disconnecting iSCSI targets"
+ sync
+ $ADM -m node --logoutall=all
+ RETVAL=$?
+ #if RETVAL is 21, means no active sessions, consider ok
+ if [ "$RETVAL" = "21" ]; then
+ RETVAL=0
+ fi
+}
+
+stop() {
+ stoptargets
+ if [ $RETVAL -ne 0 ]; then
+ echo "Failure:" "Could not stop all targets, try again later"
+ return $RETVAL
+ fi
+
+ echo "Stopping iSCSI initiator service"
+ start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
+ rm -f $PIDFILE
+ status=0
+ modprobe -r ib_iser 2>/dev/null
+ if [ "$?" -ne "0" -a "$?" -ne "1" ]; then
+ status=1
+ fi
+ modprobe -r iscsi_tcp 2>/dev/null
+ if [ "$?" -ne "0" -a "$?" -ne "1" ]; then
+ status=1
+ fi
+}
+
+restart() {
+ stop
+ if [ $RETVAL -ne 0 ]; then
+ echo "Failure:" "Stopping iSCSI initiator service failed, not starting"
+ return $RETVAL
+ fi
+ start
+}
+
+restarttargets() {
+ stoptargets
+ if [ $RETVAL -ne 0 ]; then
+ echo "Failure:" "Could not stop all targets, try again later"
+ return $RETVAL
+ fi
+ starttargets
+}
+
+status() {
+ #XXX FIXME: what to do here?
+ #status iscsid
+ # list active sessions
+ echo Current active iSCSI sessions:
+ $ADM -m session
+}
+
+case "$1" in
+ start|starttargets|stop|stoptargets|restart|restarttargets|status)
+ $1
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
+exit $RETVAL
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator
new file mode 100644
index 000000000..7fa49a2d6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator
@@ -0,0 +1,4 @@
+# default command line settings for open-iscsi's iscsid
+
+OPTS_ISCSID=""
+OPTS_ISCSIADM=""
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator-targets.service b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator-targets.service
new file mode 100644
index 000000000..564b2d21d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator-targets.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Open-iSCSI initiator (i.e. client) target bindings
+After=iscsi-initiator.service
+Requires=iscsi-initiator.service
+
+[Service]
+Type=oneshot
+EnvironmentFile=/etc/default/iscsi-initiator
+ExecStart=/usr/sbin/iscsiadm -m node --loginall=automatic $OPTS_ISCSIADM
+ExecStop=/usr/sbin/iscsiadm -m node --logoutall=all $OPTS_ISCSIADM
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator.service b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator.service
new file mode 100644
index 000000000..3790daebd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/iscsi-initiator.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Open-iSCSI initiator (i.e. client) service
+After=syslog.target
+
+[Service]
+EnvironmentFile=/etc/default/iscsi-initiator
+ExecStartPre=/sbin/modprobe iscsi_tcp
+ExecStartPre=/usr/lib/iscsi/set_initiatorname
+ExecStart=/usr/sbin/iscsid -f $OPTS_ISCSID
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/set_initiatorname b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/set_initiatorname
new file mode 100644
index 000000000..a196c6b79
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/files/set_initiatorname
@@ -0,0 +1,12 @@
+#!/bin/sh
+if [ ! -f /etc/iscsi/initiatorname.iscsi ]; then
+ INITIATORNAME=$(iscsi-iname)
+ cat >/etc/iscsi/initiatorname.iscsi <<EOF
+## DO NOT EDIT OR REMOVE THIS FILE!
+## If you remove this file, the iSCSI daemon will not start.
+## If you change the InitiatorName, existing access control lists
+## may reject this initiator. The InitiatorName must be unique
+## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames.
+InitiatorName=$INITIATORNAME
+EOF
+fi
diff --git a/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/iscsi-initiator-utils_2.0.876.bb b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/iscsi-initiator-utils_2.0.876.bb
new file mode 100644
index 000000000..823227c46
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/iscsi-initiator-utils/iscsi-initiator-utils_2.0.876.bb
@@ -0,0 +1,117 @@
+SUMMARY = "iSCSI daemon and utility programs"
+DESCRIPTION = "Open-iSCSI project is a high performance, transport \
+independent, multi-platform implementation of RFC3720. The iscsi package \
+provides the server daemon for the iSCSI protocol, as well as the utility \
+programs used to manage it. iSCSI is a protocol for distributed \
+disk access using SCSI commands sent over Internet Protocol networks."
+HOMEPAGE = "http://www.open-iscsi.com/"
+LICENSE = "GPLv2 & LGPLv2.1"
+SECTION = "net"
+DEPENDS = "openssl flex-native bison-native open-isns util-linux"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833"
+
+SRCREV ?= "24580adc4c174bbc5dde3ae7594a46d57635e906"
+
+SRC_URI = "git://github.com/open-iscsi/open-iscsi \
+ file://initd.debian \
+ file://99_iscsi-initiator-utils \
+ file://iscsi-initiator \
+ file://iscsi-initiator.service \
+ file://iscsi-initiator-targets.service \
+ file://set_initiatorname \
+ file://0001-libopeniscsiusr-Include-limit.h-for-PATH_MAX.patch \
+ file://0002-libopeniscsiusr-Add-CFLAGS-to-linker-cmdline.patch \
+ file://0001-qedi.c-Removed-unused-linux-ethtool.h.patch \
+ file://0002-idbm.c-Include-fcnl.h-for-O_RDWR-and-O_CREAT-definit.patch \
+ file://0003-bnx2x.c-Reorder-the-includes-to-avoid-duplicate-defi.patch \
+ file://0004-fwparam_ppc.c-Do-not-use-__compar_fn_t.patch \
+"
+S = "${WORKDIR}/git"
+B = "${WORKDIR}/build"
+
+inherit update-rc.d systemd autotools
+
+EXTRA_OECONF = " \
+ --target=${TARGET_SYS} \
+ --host=${BUILD_SYS} \
+"
+
+EXTRA_OEMAKE = ' \
+ OS="${TARGET_SYS}" \
+ TARGET="${TARGET_OS}" \
+ BASE="${prefix}" \
+ MANDIR="${mandir}" \
+'
+
+do_configure () {
+ cd ${S}/iscsiuio ; autoreconf --install; ./configure ${EXTRA_OECONF}
+}
+
+do_compile () {
+ # Make sure we DO NOT regenerate prom_lex.c.
+ if [ -f ${S}/utils/fwparam_ibft/prom_lex.l ]; then
+ mv ${S}/utils/fwparam_ibft/prom_lex.l ${S}/utils/fwparam_ibft/prom_lex.l.unused
+ fi
+ oe_runmake -C ${S} ${EXTRA_OEMAKE} user
+}
+
+do_install () {
+ #install necessary directories
+ install -d ${D}${sbindir} \
+ ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/iscsi \
+ ${D}${localstatedir}/lib/iscsi/nodes \
+ ${D}${localstatedir}/lib/iscsi/send_targets \
+ ${D}${localstatedir}/lib/iscsi/static \
+ ${D}${localstatedir}/lib/iscsi/isns \
+ ${D}${localstatedir}/lib/iscsi/slp \
+ ${D}${localstatedir}/lib/iscsi/ifaces \
+ ${D}${libdir} \
+ ${D}${mandir}/man8
+
+ install -p -m 755 ${S}/usr/iscsid ${S}/usr/iscsiadm \
+ ${S}/utils/iscsi-iname \
+ ${S}/usr/iscsistart ${D}/${sbindir}
+
+ cp -dR ${S}/libopeniscsiusr/libopeniscsiusr.so* ${D}${libdir}
+ install -p -m 644 ${S}/doc/iscsiadm.8 ${S}/doc/iscsid.8 ${D}/${mandir}/man8
+ install -p -m 644 ${S}/etc/iscsid.conf ${D}${sysconfdir}/iscsi
+ install -p -m 755 ${WORKDIR}/initd.debian ${D}${sysconfdir}/init.d/iscsid
+
+ sed -i -e "s:= /sbin/iscsid:= ${sbindir}/iscsid:" ${D}${sysconfdir}/iscsi/iscsid.conf
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /run/${BPN}/lock - - - -" \
+ > ${D}${sysconfdir}/tmpfiles.d/iscsi.conf
+ install -d ${D}/etc/default/
+ install -p -m 755 ${WORKDIR}/iscsi-initiator ${D}${sysconfdir}/default/
+
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/iscsi-initiator.service \
+ ${WORKDIR}/iscsi-initiator-targets.service \
+ ${D}${systemd_unitdir}/system/
+ install -d ${D}${nonarch_libdir}/iscsi
+ install -m 0755 ${WORKDIR}/set_initiatorname ${D}${nonarch_libdir}/iscsi
+ else
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_iscsi-initiator-utils ${D}/etc/default/volatiles
+ fi
+}
+
+pkg_postinst_${PN}() {
+ if [ "x$D" = "x" ]; then
+ if [ -e /etc/init.d/populate-volatile.sh ]; then
+ /etc/init.d/populate-volatile.sh update
+ elif command -v systemd-tmpfiles >/dev/null; then
+ systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/iscsi.conf
+ fi
+ fi
+}
+
+SYSTEMD_SERVICE = " iscsi-initiator.service iscsi-initiator-targets.service "
+INITSCRIPT_NAME = "iscsid"
+INITSCRIPT_PARAMS = "start 30 1 2 3 4 5 . stop 70 0 1 2 3 4 5 6 ."
+
+FILES_${PN} += "${nonarch_libdir}/iscsi"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_1.4.2.bb b/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_1.4.2.bb
new file mode 100644
index 000000000..36417b72a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/keepalived/keepalived_1.4.2.bb
@@ -0,0 +1,48 @@
+SUMMARY = "High Availability monitor built upon LVS, VRRP and service pollers"
+DESCRIPTION = "Keepalived is a routing software written in C. The main goal \
+of this project is to provide simple and robust facilities for loadbalancing \
+and high-availability to Linux system and Linux based infrastructures. \
+Loadbalancing framework relies on well-known and widely used Linux Virtual \
+Server (IPVS) kernel module providing Layer4 loadbalancing \
+"
+HOMEPAGE = "http://www.keepalived.org/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "http://www.keepalived.org/software/${BP}.tar.gz"
+SRC_URI[md5sum] = "610af6e04071f02d3469191de7499f4e"
+SRC_URI[sha256sum] = "4e2d7cc01a6ee29a3955f5c622d47704ba7d9dd758189f15e9def016a2d1faa3"
+
+DEPENDS = "libnfnetlink openssl"
+
+inherit autotools pkgconfig systemd update-rc.d
+
+PACKAGECONFIG ??= "libnl snmp \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+"
+PACKAGECONFIG[libnl] = "--enable-libnl,--disable-libnl,libnl"
+PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
+PACKAGECONFIG[systemd] = "--with-init=systemd --with-systemdsystemunitdir=${systemd_system_unitdir},--with-init=SYSV,systemd"
+
+EXTRA_OECONF = "--disable-libiptc"
+EXTRA_OEMAKE = "initdir=${sysconfdir}/init.d"
+
+do_install_append() {
+ if [ -f ${D}${sysconfdir}/init.d/${BPN} ]; then
+ chmod 0755 ${D}${sysconfdir}/init.d/${BPN}
+ sed -i 's#rc.d/##' ${D}${sysconfdir}/init.d/${BPN}
+ fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -D -m 0644 ${B}/${BPN}/${BPN}.service ${D}${systemd_system_unitdir}/${BPN}.service
+ fi
+}
+
+FILES_${PN} += "${datadir}/snmp/mibs/KEEPALIVED-MIB.txt"
+
+INITSCRIPT_NAME = "keepalived"
+INITSCRIPT_PARAMS = "remove"
+
+SYSTEMD_SERVICE_${PN} = "keepalived.service"
+SYSTEMD_AUTO_ENABLE ?= "disable"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.default b/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.default
new file mode 100644
index 000000000..3acacfd90
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.default
@@ -0,0 +1,2 @@
+# Uncomment to start SNMP subagent and enable CDP, SONMP and EDP protocol
+#DAEMON_ARGS="-x -c -s -e"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.init.d b/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.init.d
new file mode 100644
index 000000000..88bf95898
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/lldpd.init.d
@@ -0,0 +1,128 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides: lldpd
+# Required-Start: $remote_fs $network $syslog
+# Required-Stop: $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: LLDP daemon
+# Description: lldpd is a 802.1AB implementation, a L2 network
+# discovery protocol. It also supports CDP, EDP and
+# various other protocols.
+### END INIT INFO
+
+# Do NOT "set -e"
+
+log_daemon_msg() {
+ echo $*
+}
+
+log_end_msg() {
+ if [ $1 -eq 0 ]; then
+ success $*
+ else
+ failure $*
+ fi
+}
+
+log_failure_msg() {
+ echo $*
+}
+
+log_success_msg() {
+ echo $*
+}
+
+
+# PATH should only include /usr/* if it runs after the mountnfs.sh script
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="LLDP daemon"
+NAME=lldpd
+DAEMON=/usr/sbin/$NAME
+DAEMON_ARGS=""
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+CHROOT=/var/run/$NAME
+
+# Exit if the package is not installed
+[ -x "$DAEMON" ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# LSB log_* functions
+. /etc/init.d/functions
+
+do_start()
+{
+ start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+ $DAEMON_ARGS \
+ || return 2
+}
+
+do_stop()
+{
+ start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+ RETVAL="$?"
+ [ "$RETVAL" = 2 ] && return 2
+ start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+ [ "$?" = 2 ] && return 2
+ rm -f $PIDFILE
+ return "$RETVAL"
+}
+
+do_reload() {
+ start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
+ return 0
+}
+
+case "$1" in
+ start)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
+ do_start
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ stop)
+ [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+ 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+ esac
+ ;;
+ reload)
+ log_daemon_msg "Reloading $DESC" "$NAME"
+ do_reload
+ log_end_msg $?
+ ;;
+ restart|force-reload)
+ log_daemon_msg "Restarting $DESC" "$NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ case "$?" in
+ 0) log_end_msg 0 ;;
+ 1) log_end_msg 1 ;; # Old process is still running
+ *) log_end_msg 1 ;; # Failed to start
+ esac
+ ;;
+ *)
+ # Failed to stop
+ log_end_msg 1
+ ;;
+ esac
+ ;;
+ status)
+ status_of_proc $DAEMON $NAME -p $PIDFILE && exit 0 || exit $?
+ ;;
+ *)
+ echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
+ exit 3
+ ;;
+esac
+
+:
diff --git a/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/src-daemon-lldpd.service.in-Use-fixed-path-for-mkdir.patch b/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/src-daemon-lldpd.service.in-Use-fixed-path-for-mkdir.patch
new file mode 100644
index 000000000..4876e1794
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/lldpd/files/src-daemon-lldpd.service.in-Use-fixed-path-for-mkdir.patch
@@ -0,0 +1,32 @@
+From f9f3e4dd31588cce5f655730da7b5c3f56a9bdc1 Mon Sep 17 00:00:00 2001
+From: Fabio Berton <fabio.berton@ossystems.com.br>
+Date: Tue, 26 Sep 2017 09:19:51 -0300
+Subject: [PATCH] src/daemon/lldpd.service.in: Use fixed path for mkdir command
+Organization: O.S. Systems Software LTDA.
+
+@mkdir_p@ is expanded to host tools path ../build/tmp/hosttools/mkdir that
+doesn't exist on target. Remove @mkdir_p@ and use /bin/mkdir -p to
+create /var/run/lldpd directory.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Fabio Berton <fabio.berton@ossystems.com.br>
+---
+ src/daemon/lldpd.service.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/daemon/lldpd.service.in b/src/daemon/lldpd.service.in
+index fdb7338..4291830 100644
+--- a/src/daemon/lldpd.service.in
++++ b/src/daemon/lldpd.service.in
+@@ -9,7 +9,7 @@ Type=notify
+ NotifyAccess=main
+ EnvironmentFile=-/etc/default/lldpd
+ EnvironmentFile=-/etc/sysconfig/lldpd
+-ExecStartPre=@mkdir_p@ @PRIVSEP_CHROOT@
++ExecStartPre=/bin/mkdir -p @PRIVSEP_CHROOT@
+ ExecStart=@sbindir@/lldpd $DAEMON_ARGS $LLDPD_OPTIONS
+ Restart=on-failure
+ PrivateTmp=yes
+--
+2.14.2
diff --git a/meta-openembedded/meta-networking/recipes-daemons/lldpd/lldpd_0.9.8.bb b/meta-openembedded/meta-networking/recipes-daemons/lldpd/lldpd_0.9.8.bb
new file mode 100644
index 000000000..dbd84cf67
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/lldpd/lldpd_0.9.8.bb
@@ -0,0 +1,65 @@
+SUMMARY = "A 802.1ab implementation (LLDP) to help you locate neighbors of all your equipments"
+SECTION = "net/misc"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/ISC;md5=f3b90e78ea0cffb20bf5cca7947a896d"
+
+DEPENDS = "libbsd libevent"
+
+SRC_URI = "\
+ http://media.luffy.cx/files/${BPN}/${BPN}-${PV}.tar.gz \
+ file://lldpd.init.d \
+ file://lldpd.default \
+ file://src-daemon-lldpd.service.in-Use-fixed-path-for-mkdir.patch \
+ "
+
+SRC_URI[md5sum] = "8809600492f6b73149eb19158e819c1f"
+SRC_URI[sha256sum] = "9ee494e91bc33938575b2c09b26188c486ef8eac6e2155d250c189cc4e988c4f"
+
+inherit autotools update-rc.d useradd systemd pkgconfig bash-completion
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system -g lldpd --shell /bin/false lldpd"
+GROUPADD_PARAM_${PN} = "--system lldpd"
+
+EXTRA_OECONF += "--without-embedded-libevent \
+ --disable-oldies \
+ --with-privsep-user=lldpd \
+ --with-privsep-group=lldpd \
+ --with-systemdsystemunitdir=${systemd_system_unitdir} \
+ --without-sysusersdir \
+"
+
+PACKAGECONFIG ??= "cdp fdp edp sonmp lldpmed dot1 dot3"
+PACKAGECONFIG[xml] = "--with-xml,--without-xml,libxm2"
+PACKAGECONFIG[snmp] = "--with-snmp,--without-snmp,net-snmp"
+PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline"
+PACKAGECONFIG[seccomp] = "--with-seccomp,--without-seccomp,libseccomp"
+PACKAGECONFIG[cdp] = "--enable-cdp,--disable-cdp"
+PACKAGECONFIG[fdp] = "--enable-fdp,--disable-fdp"
+PACKAGECONFIG[edp] = "--enable-edp,--disable-edp"
+PACKAGECONFIG[sonmp] = "--enable-sonmp,--disable-sonmp"
+PACKAGECONFIG[lldpmed] = "--enable-lldpmed,--disable-lldpmed"
+PACKAGECONFIG[dot1] = "--enable-dot1,--disable-dot1"
+PACKAGECONFIG[dot3] = "--enable-dot3,--disable-dot3"
+PACKAGECONFIG[custom] = "--enable-custom,--disable-custom"
+
+INITSCRIPT_NAME = "lldpd"
+INITSCRIPT_PARAMS = "defaults"
+
+SYSTEMD_SERVICE_${PN} = "lldpd.service"
+
+do_install_append() {
+ install -Dm 0755 ${WORKDIR}/lldpd.init.d ${D}${sysconfdir}/init.d/lldpd
+ install -Dm 0644 ${WORKDIR}/lldpd.default ${D}${sysconfdir}/default/lldpd
+ # Make an empty configuration file
+ touch ${D}${sysconfdir}/lldpd.conf
+}
+
+PACKAGES =+ "${PN}-zsh-completion"
+
+FILES_${PN} += "${libdir}/sysusers.d"
+RDEPENDS_${PN} += "os-release"
+
+FILES_${PN}-zsh-completion += "${datadir}/zsh/"
+# FIXME: zsh is broken in meta-oe so this cannot be enabled for now
+#RDEPENDS_${PN}-zsh-completion += "zsh"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/ncftp-configure-use-BUILD_CC-for-ccdv.patch b/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/ncftp-configure-use-BUILD_CC-for-ccdv.patch
new file mode 100644
index 000000000..aa590175c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/ncftp-configure-use-BUILD_CC-for-ccdv.patch
@@ -0,0 +1,32 @@
+From 043e1a9ec83a59671ef8c4cad679dbf781e5ef98 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Sun, 29 Nov 2015 23:37:06 -0800
+Subject: [PATCH] configure: use BUILD_CC for ccdv
+
+ccdv is intended to be invoked from Makefiles only,
+it doesn't work for the cross compiling, so compile
+it with $BUILD_CC and corresponding CFLAGS.
+
+Upstream-Status: Inappropriate [cross compile specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure b/configure
+index 2f0fae0..a7e9112 100755
+--- a/configure
++++ b/configure
+@@ -11286,7 +11286,7 @@ panic:
+ } /* main */
+ /* eof ccdv.c */
+ EOF
+- ${CC-cc} $DEFS $CPPFLAGS $CFLAGS "ccdv.c" -o "ccdv" >/dev/null 2>&1
++ ${BUILD_CC} $DEFS ${BUILD_CPPFLAGS} ${BUILD_CFLAGS} "ccdv.c" -o "ccdv" >/dev/null 2>&1
+ rm -f ccdv.c ccdv.o ccdv.c.gz.uu ccdv.c.gz
+ strip ./ccdv >/dev/null 2>&1
+ ./ccdv >/dev/null 2>&1
+--
+2.3.5
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/unistd.patch b/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/unistd.patch
new file mode 100644
index 000000000..1c8146eda
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp/unistd.patch
@@ -0,0 +1,32 @@
+This patch is needed to avoid double definitions of functions
+especially when building with security flags turned on. The double
+definitions causes the sed.sh script in configure to fail since it
+starts to spit out double outputs e.g.
+
+wi_cv_gethostname_size_t size_t size_t
+
+which then caused almost all subsequent compile time tests to fail since
+this gets into confdefs.h file
+
+removing this include causes only one definitions to be emitted into
+the genrated protos.h file and thus avoiding the above failure.
+
+Other solution would to fix sed.sh to ignore double definitions
+
+Upstream-Status: Pending
+
+Signed-of-by: Khem Raj <raj.khem@gmail.com>
+
+
+Index: ncftp-3.2.6/configure
+===================================================================
+--- ncftp-3.2.6.orig/configure
++++ ncftp-3.2.6/configure
+@@ -7859,7 +7859,6 @@ chmod 755 "$wi_tmpdir/prpp.pl"
+ cat << 'EOF' > "$wi_tmpdir/unistd.c"
+ #include <confdefs.h>
+
+-#include <unistd.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp_3.2.6.bb b/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp_3.2.6.bb
new file mode 100644
index 000000000..5f92f27fd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ncftp/ncftp_3.2.6.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "A sophisticated console ftp client"
+HOMEPAGE = "http://ncftp.com/"
+SECTION = "net"
+LICENSE = "ClArtistic"
+LIC_FILES_CHKSUM = "file://ncftp/cmds.c;beginline=3;endline=4;md5=9c2390809f71465aa7ff76e03dc14d91"
+DEPENDS = "ncurses"
+
+SRC_URI = "ftp://ftp.ncftp.com/${BPN}/${BP}-src.tar.xz \
+ file://ncftp-configure-use-BUILD_CC-for-ccdv.patch \
+ file://unistd.patch \
+"
+SRC_URI[md5sum] = "42d0f896d69a4d603ec097546444245f"
+SRC_URI[sha256sum] = "5f200687c05d0807690d9fb770327b226f02dd86155b49e750853fce4e31098d"
+
+inherit autotools-brokensep pkgconfig
+
+CFLAGS += "-DNO_SSLv2 -D_FILE_OFFSET_BITS=64 -Wall"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[ccdv] = "--enable-ccdv,--disable-ccdv,,"
+
+EXTRA_OECONF = "--disable-precomp"
+TARGET_CC_ARCH_append = " ${SELECTED_OPTIMIZATION}"
+
+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
+}
+do_install () {
+ install -d ${D}${bindir} ${D}${sysconfdir} ${D}${mandir}
+ oe_runmake 'prefix=${D}${prefix}' 'BINDIR=${D}${bindir}' \
+ 'SYSCONFDIR=${D}${sysconfdir}' 'mandir=${D}${mandir}' \
+ install
+}
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-Fix-build-failures-with-gcc7.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-Fix-build-failures-with-gcc7.patch
new file mode 100644
index 000000000..4f493f7b8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-Fix-build-failures-with-gcc7.patch
@@ -0,0 +1,49 @@
+From 398c6db66c643ed6133cc2b028ab1e27a17c5295 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 1 May 2017 19:10:09 +0000
+Subject: [PATCH] Fix build failures with gcc7
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ plugins/ipmidirect/ipmi_mc_vendor.cpp | 2 +-
+ plugins/ipmidirect/ipmi_resource.cpp | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/plugins/ipmidirect/ipmi_mc_vendor.cpp b/plugins/ipmidirect/ipmi_mc_vendor.cpp
+index 2c6c090..557771c 100644
+--- a/plugins/ipmidirect/ipmi_mc_vendor.cpp
++++ b/plugins/ipmidirect/ipmi_mc_vendor.cpp
+@@ -322,7 +322,7 @@ cIpmiMcVendor::CreateResources( cIpmiDomain *domain, cIpmiMc *source_mc, cIpmiSd
+ if ( addr.m_channel != source_mc->GetChannel() )
+ stdlog << "WARNING : SDR channel " << addr.m_channel << " NOT equal to MC channel " << source_mc->GetChannel() << "\n";
+
+- if ( FindOrCreateResource( domain, source_mc, fru_id, sdr, sdrs ) == false ) {
++ if ( !FindOrCreateResource( domain, source_mc, fru_id, sdr, sdrs ) ) {
+ return false;
+ }
+ }
+diff --git a/plugins/ipmidirect/ipmi_resource.cpp b/plugins/ipmidirect/ipmi_resource.cpp
+index c438e74..2552673 100644
+--- a/plugins/ipmidirect/ipmi_resource.cpp
++++ b/plugins/ipmidirect/ipmi_resource.cpp
+@@ -73,7 +73,7 @@ cIpmiResource::SendCommandReadLock( const cIpmiMsg &msg, cIpmiMsg &rsp,
+
+ domain->ReadLock();
+
+- if ( domain->VerifyResource( resource ) == false )
++ if ( !domain->VerifyResource( resource ) )
+ return SA_ERR_HPI_NOT_PRESENT;
+
+ return rv;
+@@ -91,7 +91,7 @@ cIpmiResource::SendCommandReadLock( cIpmiRdr *rdr, const cIpmiMsg &msg, cIpmiMsg
+
+ domain->ReadLock();
+
+- if ( domain->VerifyRdr( rdr ) == false )
++ if ( !domain->VerifyRdr( rdr ) )
+ return SA_ERR_HPI_NOT_PRESENT;
+
+ return rv;
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-ipmidirect-Replace-__STRING.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-ipmidirect-Replace-__STRING.patch
new file mode 100644
index 000000000..4d56f6535
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-ipmidirect-Replace-__STRING.patch
@@ -0,0 +1,31 @@
+From be40b3f11460cf495bbbef45692e7763afda0c2b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 17:56:31 -0700
+Subject: [PATCH] ipmidirect: Replace __STRING
+
+__STRING is not universally available e.g.
+musl does not define it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ plugins/ipmidirect/t/test.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/ipmidirect/t/test.h b/plugins/ipmidirect/t/test.h
+index 8d71381..978d5ff 100644
+--- a/plugins/ipmidirect/t/test.h
++++ b/plugins/ipmidirect/t/test.h
+@@ -22,7 +22,7 @@ TestFunction( const char *str, const char *file, int line, bool expr )
+ }
+
+
+-#define Test(expr) TestFunction( __STRING(expr), __FILE__, __LINE__, expr )
++#define Test(expr) TestFunction( #expr, __FILE__, __LINE__, expr )
+
+
+ static int
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-plugins-Check-for-PTHREAD_RECURSIVE_MUTEX_INITIALIZE.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-plugins-Check-for-PTHREAD_RECURSIVE_MUTEX_INITIALIZE.patch
new file mode 100644
index 000000000..0f033ac85
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/0001-plugins-Check-for-PTHREAD_RECURSIVE_MUTEX_INITIALIZE.patch
@@ -0,0 +1,47 @@
+From be665d9513cca7e8b64c79ae424cf44ac166b052 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 17:07:58 -0700
+Subject: [PATCH] plugins: Check for PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+ before use
+
+musl does not define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+so we can not assume that all Linux systems support PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+its a glibc specific define so check for it being defined before using it
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ plugins/dynamic_simulator/thread.cpp | 2 +-
+ plugins/ipmidirect/thread.cpp | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/plugins/dynamic_simulator/thread.cpp b/plugins/dynamic_simulator/thread.cpp
+index d663be0..9210fd7 100644
+--- a/plugins/dynamic_simulator/thread.cpp
++++ b/plugins/dynamic_simulator/thread.cpp
+@@ -229,7 +229,7 @@ cThread::Exit( void *rv )
+ /**
+ * Constructor
+ **/
+-#if ( defined(__sun) && defined(__SVR4) ) || defined(__FreeBSD__)
++#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+ cThreadLock::cThreadLock()
+ {
+ pthread_mutexattr_t attr;
+diff --git a/plugins/ipmidirect/thread.cpp b/plugins/ipmidirect/thread.cpp
+index 5c52557..48e83fa 100644
+--- a/plugins/ipmidirect/thread.cpp
++++ b/plugins/ipmidirect/thread.cpp
+@@ -167,7 +167,7 @@ cThread::Exit( void *rv )
+ // cThreadLock
+ //////////////////////////////////////////////////
+
+-#if ( defined(__sun) && defined(__SVR4) ) || defined(__FreeBSD__)
++#ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+ cThreadLock::cThreadLock()
+ {
+ pthread_mutexattr_t attr;
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/c++11.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/c++11.patch
new file mode 100644
index 000000000..0549d5977
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/c++11.patch
@@ -0,0 +1,12 @@
+Index: openhpi-3.6.1/configure.ac
+===================================================================
+--- openhpi-3.6.1.orig/configure.ac
++++ openhpi-3.6.1/configure.ac
+@@ -44,6 +44,7 @@ AC_PROG_CPP
+ AC_PROG_INSTALL
+ AC_PROG_LN_S
+ AC_PROG_MAKE_SET
++AX_CXX_COMPILE_STDCXX_11([noext],[mandatory])
+
+ enabled_non32bit="no"
+ AC_ARG_ENABLE([non32bit-int],
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/clang-c++11.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/clang-c++11.patch
new file mode 100644
index 000000000..9b35a0cce
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/clang-c++11.patch
@@ -0,0 +1,1288 @@
+Index: openhpi-3.6.1/plugins/dynamic_simulator/new_sim.cpp
+===================================================================
+--- openhpi-3.6.1.orig/plugins/dynamic_simulator/new_sim.cpp
++++ openhpi-3.6.1/plugins/dynamic_simulator/new_sim.cpp
+@@ -415,7 +415,7 @@ extern "C" {
+ /**
+ * Alias for @ref öh_open(), implemented by @ref NewSimulatorOpen().
+ **/
+-static void * NewSimulatorOpen( GHashTable *, unsigned int, oh_evt_queue * ) __attribute__((used));
++static void * NewSimulatorOpen( GHashTable *, unsigned int, oh_evt_queue * ) __asm__("NewSimulatorOpen") __attribute__((used));
+
+ /**
+ * @fn NewSimulatorOpen( GHashTable *handler_config, unsigned int hid,
+@@ -530,7 +530,7 @@ static void * NewSimulatorOpen( GHashTab
+ /**
+ * Alias for @ref öh_close(), implemented by @ref NewSimulatorClose().
+ **/
+-static void NewSimulatorClose( void * ) __attribute__((used));
++static void NewSimulatorClose( void * ) __asm__("NewSimulatorClose") __attribute__((used));
+
+ /**
+ * @relate NewSimulatorClose
+@@ -585,7 +585,7 @@ static void NewSimulatorClose( void *hnd
+ *
+ * @return HPI error code
+ **/
+-static SaErrorT NewSimulatorGetEvent( void * ) __attribute__((used));
++static SaErrorT NewSimulatorGetEvent( void * ) __asm__("NewSimulatorGetEvent") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetEvent( void *hnd ) {
+ dbg( "NewSimulatorGetEvent" );
+@@ -613,7 +613,7 @@ static SaErrorT NewSimulatorGetEvent( vo
+ *
+ * @return HPI error code
+ **/
+-static SaErrorT NewSimulatorDiscoverResources( void * ) __attribute__((used));
++static SaErrorT NewSimulatorDiscoverResources( void * ) __asm__("NewSimulatorDiscoverResources") __attribute__((used));
+
+ static SaErrorT NewSimulatorDiscoverResources( void *hnd ) {
+ dbg( "NewSimulatorDiscoverResources" );
+@@ -641,7 +641,7 @@ static SaErrorT NewSimulatorDiscoverReso
+ *
+ * @return HPI error code
+ **/
+-static SaErrorT NewSimulatorSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __attribute__((used));
++static SaErrorT NewSimulatorSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __asm__("NewSimulatorSetResourceTag") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetResourceTag( void *hnd, SaHpiResourceIdT id,
+ SaHpiTextBufferT *tag ) {
+@@ -669,7 +669,7 @@ static SaErrorT NewSimulatorSetResourceT
+ *
+ * @return HPI error code
+ **/
+-static SaErrorT NewSimulatorSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __attribute__((used));
++static SaErrorT NewSimulatorSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __asm__("NewSimulatorSetResourceSeverity") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetResourceSeverity( void *hnd, SaHpiResourceIdT id,
+ SaHpiSeverityT sev ) {
+@@ -703,7 +703,7 @@ static SaErrorT NewSimulatorGetSensorRea
+ SaHpiResourceIdT id,
+ SaHpiSensorNumT num,
+ SaHpiSensorReadingT *data,
+- SaHpiEventStateT *state ) __attribute__((used));
++ SaHpiEventStateT *state ) __asm__("NewSimulatorGetSensorReading") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSensorReading( void *hnd,
+ SaHpiResourceIdT id,
+@@ -738,7 +738,7 @@ static SaErrorT NewSimulatorGetSensorRea
+ static SaErrorT NewSimulatorGetSensorThresholds( void *hnd,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiSensorThresholdsT * ) __attribute__((used));
++ SaHpiSensorThresholdsT * ) __asm__("NewSimulatorGetSensorThresholds") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSensorThresholds( void *hnd,
+ SaHpiResourceIdT id,
+@@ -777,7 +777,7 @@ static SaErrorT NewSimulatorGetSensorThr
+ static SaErrorT NewSimulatorSetSensorThresholds( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- const SaHpiSensorThresholdsT * ) __attribute__((used));
++ const SaHpiSensorThresholdsT * ) __asm__("NewSimulatorSetSensorThresholds") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetSensorThresholds( void *hnd,
+ SaHpiResourceIdT id,
+@@ -815,7 +815,7 @@ static SaErrorT NewSimulatorSetSensorThr
+ static SaErrorT NewSimulatorGetSensorEnable( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT * ) __attribute__((used));
++ SaHpiBoolT * ) __asm__("NewSimulatorGetSensorEnable") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSensorEnable( void *hnd,
+ SaHpiResourceIdT id,
+@@ -849,7 +849,7 @@ static SaErrorT NewSimulatorGetSensorEna
+ static SaErrorT NewSimulatorSetSensorEnable( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT ) __attribute__((used));
++ SaHpiBoolT ) __asm__("NewSimulatorSetSensorEnable") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetSensorEnable( void *hnd,
+ SaHpiResourceIdT id,
+@@ -883,7 +883,7 @@ static SaErrorT NewSimulatorSetSensorEna
+ static SaErrorT NewSimulatorGetSensorEventEnables( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT * ) __attribute__((used));
++ SaHpiBoolT * ) __asm__("NewSimulatorGetSensorEventEnables") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSensorEventEnables( void *hnd,
+ SaHpiResourceIdT id,
+@@ -916,7 +916,7 @@ static SaErrorT NewSimulatorGetSensorEve
+ static SaErrorT NewSimulatorSetSensorEventEnables( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT ) __attribute__((used));
++ SaHpiBoolT ) __asm__("NewSimulatorSetSensorEventEnables") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetSensorEventEnables( void *hnd,
+ SaHpiResourceIdT id,
+@@ -952,7 +952,7 @@ static SaErrorT NewSimulatorGetSensorEve
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+ SaHpiEventStateT *,
+- SaHpiEventStateT * ) __attribute__((used));
++ SaHpiEventStateT * ) __asm__("NewSimulatorGetSensorEventMasks") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSensorEventMasks( void *hnd,
+ SaHpiResourceIdT id,
+@@ -990,7 +990,7 @@ static SaErrorT NewSimulatorSetSensorEve
+ SaHpiSensorNumT,
+ SaHpiSensorEventMaskActionT,
+ SaHpiEventStateT,
+- SaHpiEventStateT ) __attribute__((used));
++ SaHpiEventStateT ) __asm__("NewSimulatorSetSensorEventMasks") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetSensorEventMasks( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1026,7 +1026,7 @@ static SaErrorT NewSimulatorSetSensorEve
+ static SaErrorT NewSimulatorGetControlState( void *, SaHpiResourceIdT,
+ SaHpiCtrlNumT,
+ SaHpiCtrlModeT *,
+- SaHpiCtrlStateT * ) __attribute__((used));
++ SaHpiCtrlStateT * ) __asm__("NewSimulatorGetControlState") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetControlState( void *hnd, SaHpiResourceIdT id,
+ SaHpiCtrlNumT num,
+@@ -1061,7 +1061,7 @@ static SaErrorT NewSimulatorGetControlSt
+ static SaErrorT NewSimulatorSetControlState( void *, SaHpiResourceIdT,
+ SaHpiCtrlNumT,
+ SaHpiCtrlModeT,
+- SaHpiCtrlStateT * ) __attribute__((used));
++ SaHpiCtrlStateT * ) __asm__("NewSimulatorSetControlState") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetControlState( void *hnd, SaHpiResourceIdT id,
+ SaHpiCtrlNumT num,
+@@ -1099,7 +1099,7 @@ static SaErrorT NewSimulatorGetNextAnnou
+ SaHpiAnnunciatorNumT,
+ SaHpiSeverityT,
+ SaHpiBoolT,
+- SaHpiAnnouncementT *) __attribute__((used));
++ SaHpiAnnouncementT *) __asm__("NewSimulatorGetNextAnnouncement") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetNextAnnouncement(void *hnd, SaHpiResourceIdT id,
+ SaHpiAnnunciatorNumT num,
+@@ -1135,7 +1135,7 @@ static SaErrorT NewSimulatorGetNextAnnou
+ static SaErrorT NewSimulatorGetAnnouncement(void *, SaHpiResourceIdT,
+ SaHpiAnnunciatorNumT,
+ SaHpiEntryIdT,
+- SaHpiAnnouncementT *) __attribute__((used));
++ SaHpiAnnouncementT *) __asm__("NewSimulatorGetAnnouncement") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetAnnouncement(void *hnd, SaHpiResourceIdT id,
+ SaHpiAnnunciatorNumT num,
+@@ -1171,7 +1171,7 @@ static SaErrorT NewSimulatorGetAnnouncem
+ static SaErrorT NewSimulatorAckAnnouncement(void *, SaHpiResourceIdT,
+ SaHpiAnnunciatorNumT,
+ SaHpiEntryIdT,
+- SaHpiSeverityT) __attribute__((used));
++ SaHpiSeverityT) __asm__("NewSimulatorAckAnnouncement") __attribute__((used));
+
+ static SaErrorT NewSimulatorAckAnnouncement(void *hnd, SaHpiResourceIdT id,
+ SaHpiAnnunciatorNumT num,
+@@ -1205,7 +1205,7 @@ static SaErrorT NewSimulatorAckAnnouncem
+ **/
+ static SaErrorT NewSimulatorAddAnnouncement(void *, SaHpiResourceIdT,
+ SaHpiAnnunciatorNumT,
+- SaHpiAnnouncementT *) __attribute__((used));
++ SaHpiAnnouncementT *) __asm__("NewSimulatorAddAnnouncement") __attribute__((used));
+
+ static SaErrorT NewSimulatorAddAnnouncement(void *hnd, SaHpiResourceIdT id,
+ SaHpiAnnunciatorNumT num,
+@@ -1239,7 +1239,7 @@ static SaErrorT NewSimulatorAddAnnouncem
+ static SaErrorT NewSimulatorDelAnnouncement(void *, SaHpiResourceIdT,
+ SaHpiAnnunciatorNumT,
+ SaHpiEntryIdT,
+- SaHpiSeverityT) __attribute__((used));
++ SaHpiSeverityT) __asm__("NewSimulatorDelAnnouncement") __attribute__((used));
+
+ static SaErrorT NewSimulatorDelAnnouncement(void *hnd, SaHpiResourceIdT id,
+ SaHpiAnnunciatorNumT num,
+@@ -1273,7 +1273,7 @@ static SaErrorT NewSimulatorDelAnnouncem
+ **/
+ static SaErrorT NewSimulatorGetAnnMode(void *, SaHpiResourceIdT,
+ SaHpiAnnunciatorNumT,
+- SaHpiAnnunciatorModeT *) __attribute__((used));
++ SaHpiAnnunciatorModeT *) __asm__("NewSimulatorGetAnnMode") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetAnnMode(void *hnd, SaHpiResourceIdT id,
+ SaHpiAnnunciatorNumT num,
+@@ -1306,7 +1306,7 @@ static SaErrorT NewSimulatorGetAnnMode(v
+ **/
+ static SaErrorT NewSimulatorSetAnnMode(void *, SaHpiResourceIdT,
+ SaHpiAnnunciatorNumT,
+- SaHpiAnnunciatorModeT) __attribute__((used));
++ SaHpiAnnunciatorModeT) __asm__("NewSimulatorSetAnnMode") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetAnnMode(void *hnd, SaHpiResourceIdT id,
+ SaHpiAnnunciatorNumT num,
+@@ -1340,7 +1340,7 @@ static SaErrorT NewSimulatorSetAnnMode(v
+ static SaErrorT NewSimulatorGetIdrInfo( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiIdrInfoT * ) __attribute__((used));
++ SaHpiIdrInfoT * ) __asm__("NewSimulatorGetIdrInfo") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetIdrInfo( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1380,7 +1380,7 @@ static SaErrorT NewSimulatorGetIdrAreaHe
+ SaHpiIdrAreaTypeT,
+ SaHpiEntryIdT,
+ SaHpiEntryIdT *,
+- SaHpiIdrAreaHeaderT * ) __attribute__((used));
++ SaHpiIdrAreaHeaderT * ) __asm__("NewSimulatorGetIdrAreaHeader") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetIdrAreaHeader( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1419,7 +1419,7 @@ static SaErrorT NewSimulatorAddIdrArea(
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+ SaHpiIdrAreaTypeT,
+- SaHpiEntryIdT * ) __attribute__((used));
++ SaHpiEntryIdT * ) __asm__("NewSimulatorAddIdrArea") __attribute__((used));
+
+ static SaErrorT NewSimulatorAddIdrArea( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1456,7 +1456,7 @@ static SaErrorT NewSimulatorAddIdrAreaBy
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+ SaHpiIdrAreaTypeT,
+- SaHpiEntryIdT ) __attribute__((used));
++ SaHpiEntryIdT ) __asm__("NewSimulatorAddIdrAreaById") __attribute__((used));
+
+ static SaErrorT NewSimulatorAddIdrAreaById( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1490,7 +1490,7 @@ static SaErrorT NewSimulatorAddIdrAreaBy
+ static SaErrorT NewSimulatorDelIdrArea( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiEntryIdT ) __attribute__((used));
++ SaHpiEntryIdT ) __asm__("NewSimulatorDelIdrArea") __attribute__((used));
+
+ static SaErrorT NewSimulatorDelIdrArea( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1532,7 +1532,7 @@ static SaErrorT NewSimulatorGetIdrField(
+ SaHpiIdrFieldTypeT,
+ SaHpiEntryIdT,
+ SaHpiEntryIdT *,
+- SaHpiIdrFieldT * ) __attribute__((used));
++ SaHpiIdrFieldT * ) __asm__("NewSimulatorGetIdrField") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetIdrField( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1570,7 +1570,7 @@ static SaErrorT NewSimulatorGetIdrField(
+ static SaErrorT NewSimulatorAddIdrField( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiIdrFieldT * ) __attribute__((used));
++ SaHpiIdrFieldT * ) __asm__("NewSimulatorAddIdrField") __attribute__((used));
+
+ static SaErrorT NewSimulatorAddIdrField( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1604,7 +1604,7 @@ static SaErrorT NewSimulatorAddIdrField(
+ static SaErrorT NewSimulatorAddIdrFieldById( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiIdrFieldT * ) __attribute__((used));
++ SaHpiIdrFieldT * ) __asm__("NewSimulatorAddIdrFieldById") __attribute__((used));
+
+ static SaErrorT NewSimulatorAddIdrFieldById( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1637,7 +1637,7 @@ static SaErrorT NewSimulatorAddIdrFieldB
+ static SaErrorT NewSimulatorSetIdrField( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiIdrFieldT * ) __attribute__((used));
++ SaHpiIdrFieldT * ) __asm__("NewSimulatorSetIdrField") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetIdrField( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1672,7 +1672,7 @@ static SaErrorT NewSimulatorDelIdrField(
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+ SaHpiEntryIdT,
+- SaHpiEntryIdT ) __attribute__((used));
++ SaHpiEntryIdT ) __asm__("NewSimulatorDelIdrField") __attribute__((used));
+
+ static SaErrorT NewSimulatorDelIdrField( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1704,7 +1704,7 @@ static SaErrorT NewSimulatorDelIdrField(
+ **/
+ static SaErrorT NewSimulatorGetSelInfo( void *,
+ SaHpiResourceIdT,
+- SaHpiEventLogInfoT * ) __attribute__((used));
++ SaHpiEventLogInfoT * ) __asm__("NewSimulatorGetSelInfo") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSelInfo( void *hnd,
+ SaHpiResourceIdT id,
+@@ -1736,7 +1736,7 @@ static SaErrorT NewSimulatorGetSelInfo(
+ *
+ * @return HPI error code
+ **/
+-static SaErrorT NewSimulatorSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __attribute__((used));
++static SaErrorT NewSimulatorSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __asm__("NewSimulatorSetSelTime") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetSelTime( void *hnd, SaHpiResourceIdT id, SaHpiTimeT t ) {
+ SaErrorT rv = SA_ERR_HPI_INTERNAL_ERROR;
+@@ -1766,7 +1766,7 @@ static SaErrorT NewSimulatorSetSelTime(
+ *
+ * @return HPI error code
+ **/
+-static SaErrorT NewSimulatorAddSelEntry( void *, SaHpiResourceIdT, const SaHpiEventT * ) __attribute__((used));
++static SaErrorT NewSimulatorAddSelEntry( void *, SaHpiResourceIdT, const SaHpiEventT * ) __asm__("NewSimulatorAddSelEntry") __attribute__((used));
+
+ static SaErrorT NewSimulatorAddSelEntry( void *hnd, SaHpiResourceIdT id,
+ const SaHpiEventT *Event ) {
+@@ -1809,7 +1809,7 @@ static SaErrorT NewSimulatorGetSelEntry(
+ SaHpiEventLogEntryIdT *,
+ SaHpiEventLogEntryT *,
+ SaHpiRdrT *,
+- SaHpiRptEntryT * ) __attribute__((used));
++ SaHpiRptEntryT * ) __asm__("NewSimulatorGetSelEntry") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSelEntry( void *hnd, SaHpiResourceIdT id,
+ SaHpiEventLogEntryIdT current,
+@@ -1844,7 +1844,7 @@ static SaErrorT NewSimulatorGetSelEntry(
+ *
+ * @return HPI error code
+ **/
+-static SaErrorT NewSimulatorClearSel( void *, SaHpiResourceIdT ) __attribute__((used));
++static SaErrorT NewSimulatorClearSel( void *, SaHpiResourceIdT ) __asm__("NewSimulatorClearSel") __attribute__((used));
+
+ static SaErrorT NewSimulatorClearSel( void *hnd, SaHpiResourceIdT id ) {
+ SaErrorT rv = SA_ERR_HPI_INTERNAL_ERROR;
+@@ -1875,7 +1875,7 @@ static SaErrorT NewSimulatorClearSel( vo
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorSetSelState(void *, SaHpiResourceIdT,
+- SaHpiBoolT) __attribute__((used));
++ SaHpiBoolT) __asm__("NewSimulatorSetSelState") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetSelState( void *hnd, SaHpiResourceIdT id,
+ SaHpiBoolT state ) {
+@@ -1907,7 +1907,7 @@ static SaErrorT NewSimulatorSetSelState(
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorGetSelState(void *, SaHpiResourceIdT,
+- SaHpiBoolT *) __attribute__((used));
++ SaHpiBoolT *) __asm__("NewSimulatorGetSelState") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSelState( void *hnd, SaHpiResourceIdT id,
+ SaHpiBoolT *state ) {
+@@ -1939,7 +1939,7 @@ static SaErrorT NewSimulatorGetSelState(
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorGetSelCapability(void *, SaHpiResourceIdT,
+- SaHpiEventLogCapabilitiesT *) __attribute__((used));
++ SaHpiEventLogCapabilitiesT *) __asm__("NewSimulatorGetSelCapability") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetSelCapability( void *hnd, SaHpiResourceIdT id,
+ SaHpiEventLogCapabilitiesT *caps ) {
+@@ -1970,7 +1970,7 @@ static SaErrorT NewSimulatorGetSelCapabi
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorResetSelOverflow(void *, SaHpiResourceIdT)
+- __attribute__((used));
++ __asm__("NewSimulatorResetSelOverflow") __attribute__((used));
+
+ static SaErrorT NewSimulatorResetSelOverflow( void *hnd, SaHpiResourceIdT id ) {
+
+@@ -2002,7 +2002,7 @@ static SaErrorT NewSimulatorResetSelOver
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorHotswapPolicyCancel( void *, SaHpiResourceIdT,
+- SaHpiTimeoutT ) __attribute__((used));
++ SaHpiTimeoutT ) __asm__("NewSimulatorHotswapPolicyCancel") __attribute__((used));
+
+ static SaErrorT NewSimulatorHotswapPolicyCancel( void *hnd, SaHpiResourceIdT id,
+ SaHpiTimeoutT timeout) {
+@@ -2032,7 +2032,7 @@ static SaErrorT NewSimulatorHotswapPolic
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorGetHotswapState( void *, SaHpiResourceIdT ,
+- SaHpiHsStateT * ) __attribute__((used));
++ SaHpiHsStateT * ) __asm__("NewSimulatorGetHotswapState") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetHotswapState( void *hnd, SaHpiResourceIdT id,
+ SaHpiHsStateT *state ) {
+@@ -2063,7 +2063,7 @@ static SaErrorT NewSimulatorGetHotswapSt
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorSetHotswapState( void *, SaHpiResourceIdT,
+- SaHpiHsStateT ) __attribute__((used));
++ SaHpiHsStateT ) __asm__("NewSimulatorSetHotswapState") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetHotswapState( void *hnd, SaHpiResourceIdT id,
+ SaHpiHsStateT state ) {
+@@ -2105,7 +2105,7 @@ static SaErrorT NewSimulatorSetHotswapSt
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorRequestHotswapAction( void *, SaHpiResourceIdT,
+- SaHpiHsActionT ) __attribute__((used));
++ SaHpiHsActionT ) __asm__("NewSimulatorRequestHotswapAction") __attribute__((used));
+
+ static SaErrorT NewSimulatorRequestHotswapAction( void *hnd, SaHpiResourceIdT id,
+ SaHpiHsActionT act ) {
+@@ -2139,7 +2139,7 @@ static SaErrorT NewSimulatorRequestHotsw
+ static SaErrorT NewSimulatorGetWatchdogInfo(void *,
+ SaHpiResourceIdT,
+ SaHpiWatchdogNumT,
+- SaHpiWatchdogT *) __attribute__((used));
++ SaHpiWatchdogT *) __asm__("NewSimulatorGetWatchdogInfo") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetWatchdogInfo(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2170,7 +2170,7 @@ static SaErrorT NewSimulatorGetWatchdogI
+ static SaErrorT NewSimulatorSetWatchdogInfo(void *,
+ SaHpiResourceIdT,
+ SaHpiWatchdogNumT,
+- SaHpiWatchdogT *) __attribute__((used));
++ SaHpiWatchdogT *) __asm__("NewSimulatorSetWatchdogInfo") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetWatchdogInfo(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2199,7 +2199,7 @@ static SaErrorT NewSimulatorSetWatchdogI
+ **/
+ static SaErrorT NewSimulatorResetWatchdog(void *,
+ SaHpiResourceIdT,
+- SaHpiWatchdogNumT) __attribute__((used));
++ SaHpiWatchdogNumT) __asm__("NewSimulatorResetWatchdog") __attribute__((used));
+
+ static SaErrorT NewSimulatorResetWatchdog(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2229,7 +2229,7 @@ static SaErrorT NewSimulatorResetWatchdo
+ static SaErrorT NewSimulatorGetFumiSpec(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiFumiSpecInfoT *) __attribute__((used));
++ SaHpiFumiSpecInfoT *) __asm__("NewSimulatorGetFumiSpec") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiSpec(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2260,7 +2260,7 @@ static SaErrorT NewSimulatorGetFumiSpec(
+ static SaErrorT NewSimulatorGetFumiServImpact(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiFumiServiceImpactDataT *) __attribute__((used));
++ SaHpiFumiServiceImpactDataT *) __asm__("NewSimulatorGetFumiServImpact") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiServImpact(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2294,7 +2294,7 @@ static SaErrorT NewSimulatorSetFumiSourc
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+ SaHpiBankNumT,
+- SaHpiTextBufferT *) __attribute__((used));
++ SaHpiTextBufferT *) __asm__("NewSimulatorSetFumiSource") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetFumiSource(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2327,7 +2327,7 @@ static SaErrorT NewSimulatorSetFumiSourc
+ static SaErrorT NewSimulatorValidateFumiSource(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBankNumT) __attribute__((used));
++ SaHpiBankNumT) __asm__("NewSimulatorValidateFumiSource") __attribute__((used));
+
+ static SaErrorT NewSimulatorValidateFumiSource(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2361,7 +2361,7 @@ static SaErrorT NewSimulatorGetFumiSourc
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+ SaHpiBankNumT,
+- SaHpiFumiSourceInfoT *) __attribute__((used));
++ SaHpiFumiSourceInfoT *) __asm__("NewSimulatorGetFumiSource") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiSource(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2400,7 +2400,7 @@ static SaErrorT NewSimulatorGetFumiSourc
+ SaHpiBankNumT,
+ SaHpiEntryIdT,
+ SaHpiEntryIdT *,
+- SaHpiFumiComponentInfoT *) __attribute__((used));
++ SaHpiFumiComponentInfoT *) __asm__("NewSimulatorGetFumiSourceComponent") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiSourceComponent(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2437,7 +2437,7 @@ static SaErrorT NewSimulatorGetFumiTarge
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+ SaHpiBankNumT,
+- SaHpiFumiBankInfoT *) __attribute__((used));
++ SaHpiFumiBankInfoT *) __asm__("NewSimulatorGetFumiTarget") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiTarget(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2476,7 +2476,7 @@ static SaErrorT NewSimulatorGetFumiTarge
+ SaHpiBankNumT,
+ SaHpiEntryIdT,
+ SaHpiEntryIdT *,
+- SaHpiFumiComponentInfoT *) __attribute__((used));
++ SaHpiFumiComponentInfoT *) __asm__("NewSimulatorGetFumiTargetComponent") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiTargetComponent(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2511,7 +2511,7 @@ static SaErrorT NewSimulatorGetFumiTarge
+ static SaErrorT NewSimulatorGetFumiLogicalTarget(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiFumiLogicalBankInfoT *) __attribute__((used));
++ SaHpiFumiLogicalBankInfoT *) __asm__("NewSimulatorGetFumiLogicalTarget") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiLogicalTarget(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2547,7 +2547,7 @@ static SaErrorT NewSimulatorGetFumiLogic
+ SaHpiFumiNumT,
+ SaHpiEntryIdT,
+ SaHpiEntryIdT *,
+- SaHpiFumiLogicalComponentInfoT *) __attribute__((used));
++ SaHpiFumiLogicalComponentInfoT *) __asm__("NewSimulatorGetFumiLogicalTargetComponent") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiLogicalTargetComponent(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2579,7 +2579,7 @@ static SaErrorT NewSimulatorGetFumiLogic
+ **/
+ static SaErrorT NewSimulatorStartFumiBackup(void *,
+ SaHpiResourceIdT,
+- SaHpiFumiNumT) __attribute__((used));
++ SaHpiFumiNumT) __asm__("NewSimulatorStartFumiBackup") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartFumiBackup(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2612,7 +2612,7 @@ static SaErrorT NewSimulatorSetFumiBankO
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+ SaHpiBankNumT,
+- SaHpiUint32T) __attribute__((used));
++ SaHpiUint32T) __asm__("NewSimulatorSetFumiBankOrder") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetFumiBankOrder(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2647,7 +2647,7 @@ static SaErrorT NewSimulatorStartFumiBan
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+ SaHpiBankNumT,
+- SaHpiBankNumT) __attribute__((used));
++ SaHpiBankNumT) __asm__("NewSimulatorStartFumiBankCopy") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartFumiBankCopy(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2680,7 +2680,7 @@ static SaErrorT NewSimulatorStartFumiBan
+ static SaErrorT NewSimulatorStartFumiInstall(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBankNumT) __attribute__((used));
++ SaHpiBankNumT) __asm__("NewSimulatorStartFumiInstall") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartFumiInstall(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2714,7 +2714,7 @@ static SaErrorT NewSimulatorGetFumiStatu
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+ SaHpiBankNumT,
+- SaHpiFumiUpgradeStatusT *) __attribute__((used));
++ SaHpiFumiUpgradeStatusT *) __asm__("NewSimulatorGetFumiStatus") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiStatus(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2747,7 +2747,7 @@ static SaErrorT NewSimulatorGetFumiStatu
+ static SaErrorT NewSimulatorStartFumiVerification(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBankNumT) __attribute__((used));
++ SaHpiBankNumT) __asm__("NewSimulatorStartFumiVerification") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartFumiVerification(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2776,7 +2776,7 @@ static SaErrorT NewSimulatorStartFumiVer
+ **/
+ static SaErrorT NewSimulatorStartFumiVerificationMain(void *,
+ SaHpiResourceIdT,
+- SaHpiFumiNumT) __attribute__((used));
++ SaHpiFumiNumT) __asm__("NewSimulatorStartFumiVerificationMain") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartFumiVerificationMain(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2807,7 +2807,7 @@ static SaErrorT NewSimulatorStartFumiVer
+ static SaErrorT NewSimulatorCancelFumiUpgrade(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBankNumT) __attribute__((used));
++ SaHpiBankNumT) __asm__("NewSimulatorCancelFumiUpgrade") __attribute__((used));
+
+ static SaErrorT NewSimulatorCancelFumiUpgrade(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2838,7 +2838,7 @@ static SaErrorT NewSimulatorCancelFumiUp
+ static SaErrorT NewSimulatorGetFumiRollback(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBoolT *) __attribute__((used));
++ SaHpiBoolT *) __asm__("NewSimulatorGetFumiRollback") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetFumiRollback(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2870,7 +2870,7 @@ static SaErrorT NewSimulatorGetFumiRollb
+ static SaErrorT NewSimulatorSetFumiRollback(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBoolT) __attribute__((used));
++ SaHpiBoolT) __asm__("NewSimulatorSetFumiRollback") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetFumiRollback(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2900,7 +2900,7 @@ static SaErrorT NewSimulatorSetFumiRollb
+ **/
+ static SaErrorT NewSimulatorStartFumiRollback(void *,
+ SaHpiResourceIdT,
+- SaHpiFumiNumT) __attribute__((used));
++ SaHpiFumiNumT) __asm__("NewSimulatorStartFumiRollback") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartFumiRollback(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2929,7 +2929,7 @@ static SaErrorT NewSimulatorStartFumiRol
+ **/
+ static SaErrorT NewSimulatorActivateFumi(void *,
+ SaHpiResourceIdT,
+- SaHpiFumiNumT) __attribute__((used));
++ SaHpiFumiNumT) __asm__("NewSimulatorActivateFumi") __attribute__((used));
+
+ static SaErrorT NewSimulatorActivateFumi(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2960,7 +2960,7 @@ static SaErrorT NewSimulatorActivateFumi
+ static SaErrorT NewSimulatorStartFumiActivation(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBoolT) __attribute__((used));
++ SaHpiBoolT) __asm__("NewSimulatorStartFumiActivation") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartFumiActivation(void *hnd,
+ SaHpiResourceIdT id,
+@@ -2992,7 +2992,7 @@ static SaErrorT NewSimulatorStartFumiAct
+ static SaErrorT NewSimulatorCleanupFumi(void *,
+ SaHpiResourceIdT,
+ SaHpiFumiNumT,
+- SaHpiBankNumT) __attribute__((used));
++ SaHpiBankNumT) __asm__("NewSimulatorCleanupFumi") __attribute__((used));
+
+ static SaErrorT NewSimulatorCleanupFumi(void *hnd,
+ SaHpiResourceIdT id,
+@@ -3023,7 +3023,7 @@ static SaErrorT NewSimulatorCleanupFumi(
+ static SaErrorT NewSimulatorGetDimiInfo( void *,
+ SaHpiResourceIdT,
+ SaHpiDimiNumT,
+- SaHpiDimiInfoT *) __attribute__((used));
++ SaHpiDimiInfoT *) __asm__("NewSimulatorGetDimiInfo") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetDimiInfo( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3057,7 +3057,7 @@ static SaErrorT NewSimulatorGetDimiTestI
+ SaHpiResourceIdT,
+ SaHpiDimiNumT,
+ SaHpiDimiTestNumT,
+- SaHpiDimiTestT *) __attribute__((used));
++ SaHpiDimiTestT *) __asm__("NewSimulatorGetDimiTestInfo") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetDimiTestInfo( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3092,7 +3092,7 @@ static SaErrorT NewSimulatorGetDimiTestR
+ SaHpiResourceIdT,
+ SaHpiDimiNumT,
+ SaHpiDimiTestNumT,
+- SaHpiDimiReadyT *) __attribute__((used));
++ SaHpiDimiReadyT *) __asm__("NewSimulatorGetDimiTestReadiness") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetDimiTestReadiness( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3129,7 +3129,7 @@ static SaErrorT NewSimulatorStartDimiTes
+ SaHpiDimiNumT,
+ SaHpiDimiTestNumT,
+ SaHpiUint8T,
+- SaHpiDimiTestVariableParamsT *) __attribute__((used));
++ SaHpiDimiTestVariableParamsT *) __asm__("NewSimulatorStartDimiTest") __attribute__((used));
+
+ static SaErrorT NewSimulatorStartDimiTest( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3163,7 +3163,7 @@ static SaErrorT NewSimulatorStartDimiTes
+ static SaErrorT NewSimulatorCancelDimiTest( void *,
+ SaHpiResourceIdT,
+ SaHpiDimiNumT,
+- SaHpiDimiTestNumT) __attribute__((used));
++ SaHpiDimiTestNumT) __asm__("NewSimulatorCancelDimiTest") __attribute__((used));
+
+ static SaErrorT NewSimulatorCancelDimiTest( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3199,7 +3199,7 @@ static SaErrorT NewSimulatorGetDimiTestS
+ SaHpiDimiNumT,
+ SaHpiDimiTestNumT,
+ SaHpiDimiTestPercentCompletedT *,
+- SaHpiDimiTestRunStatusT *) __attribute__((used));
++ SaHpiDimiTestRunStatusT *) __asm__("NewSimulatorGetDimiTestStatus") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetDimiTestStatus( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3234,7 +3234,7 @@ static SaErrorT NewSimulatorGetDimiTestR
+ SaHpiResourceIdT,
+ SaHpiDimiNumT,
+ SaHpiDimiTestNumT,
+- SaHpiDimiTestResultsT *) __attribute__((used));
++ SaHpiDimiTestResultsT *) __asm__("NewSimulatorGetDimiTestResults") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetDimiTestResults( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3263,7 +3263,7 @@ static SaErrorT NewSimulatorGetDimiTestR
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorSetAutoInsertTimeout( void *,
+- SaHpiTimeoutT ) __attribute__((used));
++ SaHpiTimeoutT ) __asm__("NewSimulatorSetAutoInsertTimeout") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetAutoInsertTimeout( void *hnd, SaHpiTimeoutT timeout) {
+ NewSimulator *newsim = VerifyNewSimulator( hnd );
+@@ -3289,7 +3289,7 @@ static SaErrorT NewSimulatorSetAutoInser
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorGetAutoExtractTimeout( void *, SaHpiResourceIdT,
+- SaHpiTimeoutT * ) __attribute__((used));
++ SaHpiTimeoutT * ) __asm__("NewSimulatorGetAutoExtractTimeout") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
+ SaHpiTimeoutT *timeout ) {
+@@ -3319,7 +3319,7 @@ static SaErrorT NewSimulatorGetAutoExtra
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorSetAutoExtractTimeout( void *, SaHpiResourceIdT,
+- SaHpiTimeoutT ) __attribute__((used));
++ SaHpiTimeoutT ) __asm__("NewSimulatorSetAutoExtractTimeout") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
+ SaHpiTimeoutT timeout ) {
+@@ -3350,7 +3350,7 @@ static SaErrorT NewSimulatorSetAutoExtra
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorGetPowerState( void *, SaHpiResourceIdT,
+- SaHpiPowerStateT * ) __attribute__((used));
++ SaHpiPowerStateT * ) __asm__("NewSimulatorGetPowerState") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetPowerState( void *hnd, SaHpiResourceIdT id,
+ SaHpiPowerStateT *state ) {
+@@ -3382,7 +3382,7 @@ static SaErrorT NewSimulatorGetPowerStat
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorSetPowerState( void *, SaHpiResourceIdT,
+- SaHpiPowerStateT ) __attribute__((used));
++ SaHpiPowerStateT ) __asm__("NewSimulatorSetPowerState") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetPowerState( void *hnd, SaHpiResourceIdT id,
+ SaHpiPowerStateT state ) {
+@@ -3414,7 +3414,7 @@ static SaErrorT NewSimulatorSetPowerStat
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorGetIndicatorState( void *, SaHpiResourceIdT,
+- SaHpiHsIndicatorStateT * ) __attribute__((used));
++ SaHpiHsIndicatorStateT * ) __asm__("NewSimulatorGetIndicatorState") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetIndicatorState( void *hnd, SaHpiResourceIdT id,
+ SaHpiHsIndicatorStateT *state ) {
+@@ -3446,7 +3446,7 @@ static SaErrorT NewSimulatorGetIndicator
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorSetIndicatorState( void *, SaHpiResourceIdT,
+- SaHpiHsIndicatorStateT ) __attribute__((used));
++ SaHpiHsIndicatorStateT ) __asm__("NewSimulatorSetIndicatorState") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetIndicatorState( void *hnd, SaHpiResourceIdT id,
+ SaHpiHsIndicatorStateT state ) {
+@@ -3479,7 +3479,7 @@ static SaErrorT NewSimulatorSetIndicator
+ **/
+ static SaErrorT NewSimulatorControlParm( void *,
+ SaHpiResourceIdT,
+- SaHpiParmActionT ) __attribute__((used));
++ SaHpiParmActionT ) __asm__("NewSimulatorControlParm") __attribute__((used));
+
+ static SaErrorT NewSimulatorControlParm( void *hnd,
+ SaHpiResourceIdT id,
+@@ -3512,7 +3512,7 @@ static SaErrorT NewSimulatorControlParm(
+ * @return HPI error code
+ **/
+ static SaErrorT NewSimulatorGetResetState( void *, SaHpiResourceIdT,
+- SaHpiResetActionT * ) __attribute__((used));
++ SaHpiResetActionT * ) __asm__("NewSimulatorGetResetState") __attribute__((used));
+
+ static SaErrorT NewSimulatorGetResetState( void *hnd, SaHpiResourceIdT id,
+ SaHpiResetActionT *act ) {
+@@ -3545,7 +3545,7 @@ static SaErrorT NewSimulatorGetResetStat
+ **/
+ static SaErrorT NewSimulatorSetResetState( void *,
+ SaHpiResourceIdT,
+- SaHpiResetActionT ) __attribute__((used));
++ SaHpiResetActionT ) __asm__("NewSimulatorSetResetState") __attribute__((used));
+
+ static SaErrorT NewSimulatorSetResetState( void *hnd,
+ SaHpiResourceIdT id,
+Index: openhpi-3.6.1/plugins/dynamic_simulator/new_sim_file.cpp
+===================================================================
+--- openhpi-3.6.1.orig/plugins/dynamic_simulator/new_sim_file.cpp
++++ openhpi-3.6.1/plugins/dynamic_simulator/new_sim_file.cpp
+@@ -44,9 +44,9 @@
+ ///< Global skip characters for oh_scanner_config
+ static gchar skip_characters[] = " \t\n";
+ ///< Global identifier_first for oh_scanner_config
+-static gchar identifier_first[] = G_CSET_a_2_z"_/."G_CSET_A_2_Z;
++static gchar identifier_first[] = G_CSET_a_2_z "_/." G_CSET_A_2_Z;
+ ///< Global identifier_nth for oh_scanner_config
+-static gchar identifier_nth[] = G_CSET_a_2_z"_-0123456789/."G_CSET_A_2_Z;
++static gchar identifier_nth[] = G_CSET_a_2_z "_-0123456789/." G_CSET_A_2_Z;
+ ///< Global comment signs for oh_scanner_config
+ static gchar comment_single[] = "#\n";
+
+Index: openhpi-3.6.1/plugins/ipmidirect/ipmi.cpp
+===================================================================
+--- openhpi-3.6.1.orig/plugins/ipmidirect/ipmi.cpp
++++ openhpi-3.6.1/plugins/ipmidirect/ipmi.cpp
+@@ -279,7 +279,7 @@ extern "C" {
+ // ABI Interface functions
+
+ static void *
+-IpmiOpen( GHashTable *, unsigned int, oh_evt_queue * ) __attribute__((used));
++IpmiOpen( GHashTable *, unsigned int, oh_evt_queue * ) __asm__("IpmiOpen") __attribute__((used));
+
+ static void *
+ IpmiOpen( GHashTable *handler_config, unsigned int hid, oh_evt_queue *eventq )
+@@ -388,7 +388,7 @@ IpmiOpen( GHashTable *handler_config, un
+
+
+ static void
+-IpmiClose( void * ) __attribute__((used));
++IpmiClose( void * ) __asm__("IpmiClose") __attribute__((used));
+
+ static void
+ IpmiClose( void *hnd )
+@@ -436,7 +436,7 @@ IpmiClose( void *hnd )
+
+
+ static SaErrorT
+-IpmiGetEvent( void * ) __attribute__((used));
++IpmiGetEvent( void * ) __asm__("IpmiGetEvent") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetEvent( void *hnd )
+@@ -458,7 +458,7 @@ IpmiGetEvent( void *hnd )
+
+
+ static SaErrorT
+-IpmiDiscoverResources( void * ) __attribute__((used));
++IpmiDiscoverResources( void * ) __asm__("IpmiDiscoverResources") __attribute__((used));
+
+ static SaErrorT
+ IpmiDiscoverResources( void *hnd )
+@@ -479,7 +479,7 @@ IpmiDiscoverResources( void *hnd )
+
+
+ static SaErrorT
+-IpmiSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __attribute__((used));
++IpmiSetResourceTag( void *, SaHpiResourceIdT, SaHpiTextBufferT * ) __asm__("IpmiSetResourceTag") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetResourceTag( void *hnd, SaHpiResourceIdT id, SaHpiTextBufferT *tag )
+@@ -499,7 +499,7 @@ IpmiSetResourceTag( void *hnd, SaHpiReso
+
+
+ static SaErrorT
+-IpmiSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __attribute__((used));
++IpmiSetResourceSeverity( void *, SaHpiResourceIdT, SaHpiSeverityT ) __asm__("IpmiSetResourceSeverity") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetResourceSeverity( void *hnd, SaHpiResourceIdT id, SaHpiSeverityT sev )
+@@ -523,7 +523,7 @@ IpmiGetSensorReading( void *,
+ SaHpiResourceIdT id,
+ SaHpiSensorNumT num,
+ SaHpiSensorReadingT *data,
+- SaHpiEventStateT *state ) __attribute__((used));
++ SaHpiEventStateT *state ) __asm__("IpmiGetSensorReading") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetSensorReading( void *hnd,
+@@ -550,7 +550,7 @@ static SaErrorT
+ IpmiGetSensorThresholds( void *hnd,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiSensorThresholdsT * ) __attribute__((used));
++ SaHpiSensorThresholdsT * ) __asm__("IpmiGetSensorThresholds") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetSensorThresholds( void *hnd,
+@@ -581,7 +581,7 @@ static SaErrorT
+ IpmiSetSensorThresholds( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- const SaHpiSensorThresholdsT * ) __attribute__((used));
++ const SaHpiSensorThresholdsT * ) __asm__("IpmiSetSensorThresholds") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetSensorThresholds( void *hnd,
+@@ -612,7 +612,7 @@ static SaErrorT
+ IpmiGetSensorEnable( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT * ) __attribute__((used));
++ SaHpiBoolT * ) __asm__("IpmiGetSensorEnable") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetSensorEnable( void *hnd,
+@@ -638,7 +638,7 @@ static SaErrorT
+ IpmiSetSensorEnable( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT ) __attribute__((used));
++ SaHpiBoolT ) __asm__("IpmiSetSensorEnable") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetSensorEnable( void *hnd,
+@@ -664,7 +664,7 @@ static SaErrorT
+ IpmiGetSensorEventEnables( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT * ) __attribute__((used));
++ SaHpiBoolT * ) __asm__("IpmiGetSensorEventEnables") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetSensorEventEnables( void *hnd,
+@@ -690,7 +690,7 @@ static SaErrorT
+ IpmiSetSensorEventEnables( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+- SaHpiBoolT ) __attribute__((used));
++ SaHpiBoolT ) __asm__("IpmiSetSensorEventEnables") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetSensorEventEnables( void *hnd,
+@@ -717,7 +717,7 @@ IpmiGetSensorEventMasks( void *,
+ SaHpiResourceIdT,
+ SaHpiSensorNumT,
+ SaHpiEventStateT *,
+- SaHpiEventStateT * ) __attribute__((used));
++ SaHpiEventStateT * ) __asm__("IpmiGetSensorEventMasks") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetSensorEventMasks( void *hnd,
+@@ -747,7 +747,7 @@ IpmiSetSensorEventMasks( void *,
+ SaHpiSensorNumT,
+ SaHpiSensorEventMaskActionT,
+ SaHpiEventStateT,
+- SaHpiEventStateT ) __attribute__((used));
++ SaHpiEventStateT ) __asm__("IpmiSetSensorEventMasks") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetSensorEventMasks( void *hnd,
+@@ -776,7 +776,7 @@ static SaErrorT
+ IpmiGetControlState( void *, SaHpiResourceIdT,
+ SaHpiCtrlNumT,
+ SaHpiCtrlModeT *,
+- SaHpiCtrlStateT * ) __attribute__((used));
++ SaHpiCtrlStateT * ) __asm__("IpmiGetControlState") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetControlState( void *hnd, SaHpiResourceIdT id,
+@@ -802,7 +802,7 @@ static SaErrorT
+ IpmiSetControlState( void *, SaHpiResourceIdT,
+ SaHpiCtrlNumT,
+ SaHpiCtrlModeT,
+- SaHpiCtrlStateT * ) __attribute__((used));
++ SaHpiCtrlStateT * ) __asm__("IpmiSetControlState") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetControlState( void *hnd, SaHpiResourceIdT id,
+@@ -828,7 +828,7 @@ static SaErrorT
+ IpmiGetIdrInfo( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiIdrInfoT * ) __attribute__((used));
++ SaHpiIdrInfoT * ) __asm__("IpmiGetIdrInfo") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetIdrInfo( void *hnd,
+@@ -857,7 +857,7 @@ IpmiGetIdrAreaHeader( void *,
+ SaHpiIdrAreaTypeT,
+ SaHpiEntryIdT,
+ SaHpiEntryIdT *,
+- SaHpiIdrAreaHeaderT * ) __attribute__((used));
++ SaHpiIdrAreaHeaderT * ) __asm__("IpmiGetIdrAreaHeader") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetIdrAreaHeader( void *hnd,
+@@ -887,7 +887,7 @@ IpmiAddIdrArea( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+ SaHpiIdrAreaTypeT,
+- SaHpiEntryIdT * ) __attribute__((used));
++ SaHpiEntryIdT * ) __asm__("IpmiAddIdrArea") __attribute__((used));
+
+ static SaErrorT
+ IpmiAddIdrArea( void *hnd,
+@@ -914,7 +914,7 @@ static SaErrorT
+ IpmiDelIdrArea( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiEntryIdT ) __attribute__((used));
++ SaHpiEntryIdT ) __asm__("IpmiDelIdrArea") __attribute__((used));
+
+ static SaErrorT
+ IpmiDelIdrArea( void *hnd,
+@@ -944,7 +944,7 @@ IpmiGetIdrField( void *,
+ SaHpiIdrFieldTypeT,
+ SaHpiEntryIdT,
+ SaHpiEntryIdT *,
+- SaHpiIdrFieldT * ) __attribute__((used));
++ SaHpiIdrFieldT * ) __asm__("IpmiGetIdrField") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetIdrField( void *hnd,
+@@ -974,7 +974,7 @@ static SaErrorT
+ IpmiAddIdrField( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiIdrFieldT * ) __attribute__((used));
++ SaHpiIdrFieldT * ) __asm__("IpmiAddIdrField") __attribute__((used));
+
+ static SaErrorT
+ IpmiAddIdrField( void *hnd,
+@@ -1000,7 +1000,7 @@ static SaErrorT
+ IpmiSetIdrField( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+- SaHpiIdrFieldT * ) __attribute__((used));
++ SaHpiIdrFieldT * ) __asm__("IpmiSetIdrField") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetIdrField( void *hnd,
+@@ -1027,7 +1027,7 @@ IpmiDelIdrField( void *,
+ SaHpiResourceIdT,
+ SaHpiIdrIdT,
+ SaHpiEntryIdT,
+- SaHpiEntryIdT ) __attribute__((used));
++ SaHpiEntryIdT ) __asm__("IpmiDelIdrField") __attribute__((used));
+
+ static SaErrorT
+ IpmiDelIdrField( void *hnd,
+@@ -1053,7 +1053,7 @@ IpmiDelIdrField( void *hnd,
+ static SaErrorT
+ IpmiGetSelInfo( void *,
+ SaHpiResourceIdT,
+- SaHpiEventLogInfoT * ) __attribute__((used));
++ SaHpiEventLogInfoT * ) __asm__("IpmiGetSelInfo") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetSelInfo( void *hnd,
+@@ -1075,7 +1075,7 @@ IpmiGetSelInfo( void *hnd,
+
+
+ static SaErrorT
+-IpmiSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __attribute__((used));
++IpmiSetSelTime( void *, SaHpiResourceIdT, SaHpiTimeT ) __asm__("IpmiSetSelTime") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetSelTime( void *hnd, SaHpiResourceIdT id, SaHpiTimeT t )
+@@ -1096,7 +1096,7 @@ IpmiSetSelTime( void *hnd, SaHpiResource
+
+ static SaErrorT
+ IpmiAddSelEntry( void *, SaHpiResourceIdT,
+- const SaHpiEventT * ) __attribute__((used));
++ const SaHpiEventT * ) __asm__("IpmiAddSelEntry") __attribute__((used));
+
+ static SaErrorT
+ IpmiAddSelEntry( void *hnd, SaHpiResourceIdT id,
+@@ -1118,7 +1118,7 @@ IpmiAddSelEntry( void *hnd, SaHpiResourc
+ #ifdef NOTUSED
+ static SaErrorT
+ IpmiDelSelEntry( void *, SaHpiResourceIdT,
+- SaHpiEventLogEntryIdT ) __attribute__((used));
++ SaHpiEventLogEntryIdT ) __asm__("IpmiDelSelEntry") __attribute__((used));
+
+ static SaErrorT
+ IpmiDelSelEntry( void *hnd, SaHpiResourceIdT id,
+@@ -1145,7 +1145,7 @@ IpmiGetSelEntry( void *hnd, SaHpiResourc
+ SaHpiEventLogEntryIdT *, SaHpiEventLogEntryIdT *,
+ SaHpiEventLogEntryT *,
+ SaHpiRdrT *,
+- SaHpiRptEntryT * ) __attribute__((used));
++ SaHpiRptEntryT * ) __asm__("IpmiGetSelEntry") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetSelEntry( void *hnd, SaHpiResourceIdT id,
+@@ -1170,7 +1170,7 @@ IpmiGetSelEntry( void *hnd, SaHpiResourc
+
+
+ static SaErrorT
+-IpmiClearSel( void *, SaHpiResourceIdT ) __attribute__((used));
++IpmiClearSel( void *, SaHpiResourceIdT ) __asm__("IpmiClearSel") __attribute__((used));
+
+ static SaErrorT
+ IpmiClearSel( void *hnd, SaHpiResourceIdT id )
+@@ -1190,7 +1190,7 @@ IpmiClearSel( void *hnd, SaHpiResourceId
+
+ static SaErrorT
+ IpmiHotswapPolicyCancel( void *, SaHpiResourceIdT,
+- SaHpiTimeoutT ) __attribute__((used));
++ SaHpiTimeoutT ) __asm__("IpmiHotswapPolicyCancel") __attribute__((used));
+
+ static SaErrorT
+ IpmiHotswapPolicyCancel( void *hnd, SaHpiResourceIdT id,
+@@ -1210,7 +1210,7 @@ IpmiHotswapPolicyCancel( void *hnd, SaHp
+ }
+
+ static SaErrorT
+-IpmiSetAutoInsertTimeout( void *, SaHpiTimeoutT ) __attribute__((used));
++IpmiSetAutoInsertTimeout( void *, SaHpiTimeoutT ) __asm__("IpmiSetAutoInsertTimeout") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetAutoInsertTimeout( void *hnd, SaHpiTimeoutT timeout)
+@@ -1229,7 +1229,7 @@ IpmiSetAutoInsertTimeout( void *hnd, SaH
+
+ static SaErrorT
+ IpmiGetAutoExtractTimeout( void *, SaHpiResourceIdT,
+- SaHpiTimeoutT * ) __attribute__((used));
++ SaHpiTimeoutT * ) __asm__("IpmiGetAutoExtractTimeout") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
+@@ -1250,7 +1250,7 @@ IpmiGetAutoExtractTimeout( void *hnd, Sa
+
+ static SaErrorT
+ IpmiSetAutoExtractTimeout( void *, SaHpiResourceIdT,
+- SaHpiTimeoutT ) __attribute__((used));
++ SaHpiTimeoutT ) __asm__("IpmiSetAutoExtractTimeout") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetAutoExtractTimeout( void *hnd, SaHpiResourceIdT id,
+@@ -1271,7 +1271,7 @@ IpmiSetAutoExtractTimeout( void *hnd, Sa
+
+ static SaErrorT
+ IpmiGetHotswapState( void *, SaHpiResourceIdT ,
+- SaHpiHsStateT * ) __attribute__((used));
++ SaHpiHsStateT * ) __asm__("IpmiGetHotswapState") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetHotswapState( void *hnd, SaHpiResourceIdT id,
+@@ -1293,7 +1293,7 @@ IpmiGetHotswapState( void *hnd, SaHpiRes
+
+ static SaErrorT
+ IpmiSetHotswapState( void *, SaHpiResourceIdT,
+- SaHpiHsStateT ) __attribute__((used));
++ SaHpiHsStateT ) __asm__("IpmiSetHotswapState") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetHotswapState( void *hnd, SaHpiResourceIdT id,
+@@ -1315,7 +1315,7 @@ IpmiSetHotswapState( void *hnd, SaHpiRes
+
+ static SaErrorT
+ IpmiRequestHotswapAction( void *, SaHpiResourceIdT,
+- SaHpiHsActionT ) __attribute__((used));
++ SaHpiHsActionT ) __asm__("IpmiRequestHotswapAction") __attribute__((used));
+
+ static SaErrorT
+ IpmiRequestHotswapAction( void *hnd, SaHpiResourceIdT id,
+@@ -1337,7 +1337,7 @@ IpmiRequestHotswapAction( void *hnd, SaH
+
+ static SaErrorT
+ IpmiGetPowerState( void *, SaHpiResourceIdT,
+- SaHpiPowerStateT * ) __attribute__((used));
++ SaHpiPowerStateT * ) __asm__("IpmiGetPowerState") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetPowerState( void *hnd, SaHpiResourceIdT id,
+@@ -1359,7 +1359,7 @@ IpmiGetPowerState( void *hnd, SaHpiResou
+
+ static SaErrorT
+ IpmiSetPowerState( void *, SaHpiResourceIdT,
+- SaHpiPowerStateT ) __attribute__((used));
++ SaHpiPowerStateT ) __asm__("IpmiSetPowerState") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetPowerState( void *hnd, SaHpiResourceIdT id,
+@@ -1381,7 +1381,7 @@ IpmiSetPowerState( void *hnd, SaHpiResou
+
+ static SaErrorT
+ IpmiGetIndicatorState( void *, SaHpiResourceIdT,
+- SaHpiHsIndicatorStateT * ) __attribute__((used));
++ SaHpiHsIndicatorStateT * ) __asm__("IpmiGetIndicatorState") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetIndicatorState( void *hnd, SaHpiResourceIdT id,
+@@ -1403,7 +1403,7 @@ IpmiGetIndicatorState( void *hnd, SaHpiR
+
+ static SaErrorT
+ IpmiSetIndicatorState( void *, SaHpiResourceIdT,
+- SaHpiHsIndicatorStateT ) __attribute__((used));
++ SaHpiHsIndicatorStateT ) __asm__("IpmiSetIndicatorState") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetIndicatorState( void *hnd, SaHpiResourceIdT id,
+@@ -1426,7 +1426,7 @@ IpmiSetIndicatorState( void *hnd, SaHpiR
+ static SaErrorT
+ IpmiControlParm( void *,
+ SaHpiResourceIdT,
+- SaHpiParmActionT ) __attribute__((used));
++ SaHpiParmActionT ) __asm__("IpmiControlParm") __attribute__((used));
+
+ static SaErrorT
+ IpmiControlParm( void *hnd,
+@@ -1449,7 +1449,7 @@ IpmiControlParm( void *hnd,
+
+ static SaErrorT
+ IpmiGetResetState( void *, SaHpiResourceIdT,
+- SaHpiResetActionT * ) __attribute__((used));
++ SaHpiResetActionT * ) __asm__("IpmiGetResetState") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetResetState( void *hnd, SaHpiResourceIdT id,
+@@ -1472,7 +1472,7 @@ IpmiGetResetState( void *hnd, SaHpiResou
+ static SaErrorT
+ IpmiSetResetState( void *,
+ SaHpiResourceIdT,
+- SaHpiResetActionT ) __attribute__((used));
++ SaHpiResetActionT ) __asm__("IpmiSetResetState") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetResetState( void *hnd,
+@@ -1496,7 +1496,7 @@ static SaErrorT
+ IpmiGetWatchdogInfo(void *,
+ SaHpiResourceIdT,
+ SaHpiWatchdogNumT,
+- SaHpiWatchdogT *) __attribute__((used));
++ SaHpiWatchdogT *) __asm__("IpmiGetWatchdogInfo") __attribute__((used));
+
+ static SaErrorT
+ IpmiGetWatchdogInfo(void *hnd,
+@@ -1517,7 +1517,7 @@ static SaErrorT
+ IpmiSetWatchdogInfo(void *,
+ SaHpiResourceIdT,
+ SaHpiWatchdogNumT,
+- SaHpiWatchdogT *) __attribute__((used));
++ SaHpiWatchdogT *) __asm__("IpmiSetWatchdogInfo") __attribute__((used));
+
+ static SaErrorT
+ IpmiSetWatchdogInfo(void *hnd,
+@@ -1537,7 +1537,7 @@ IpmiSetWatchdogInfo(void *hnd,
+ static SaErrorT
+ IpmiResetWatchdog(void *,
+ SaHpiResourceIdT,
+- SaHpiWatchdogNumT) __attribute__((used));
++ SaHpiWatchdogNumT) __asm__("IpmiResetWatchdog") __attribute__((used));
+
+ static SaErrorT
+ IpmiResetWatchdog(void *hnd,
+Index: openhpi-3.6.1/plugins/ipmidirect/ipmi_auth.h
+===================================================================
+--- openhpi-3.6.1.orig/plugins/ipmidirect/ipmi_auth.h
++++ openhpi-3.6.1/plugins/ipmidirect/ipmi_auth.h
+@@ -32,7 +32,7 @@ class cIpmiAuthSg
+ {
+ public:
+ void *data; /* NULL to terminate. */
+- int len;
++ unsigned int len;
+ };
+
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/fix-narrowing-warning.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/fix-narrowing-warning.patch
new file mode 100644
index 000000000..4c545708f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/fix-narrowing-warning.patch
@@ -0,0 +1,20 @@
+Fix
+
+sensor_factors_000.cpp:66:5: error: non-constant-expression cannot be narrowed from type 'int' to 'unsigned char' in initializer list [-Wc++11-narrowing]
+((dRExp << 4) & 0xf0) | (dBExp & 0x0f ), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: openhpi-3.6.1/plugins/ipmidirect/t/sensor_factors_000.cpp
+===================================================================
+--- openhpi-3.6.1.orig/plugins/ipmidirect/t/sensor_factors_000.cpp
++++ openhpi-3.6.1/plugins/ipmidirect/t/sensor_factors_000.cpp
+@@ -63,7 +63,7 @@ static cIpmiSdr sdr =
+ dB & 0xff,
+ ((dB >> 2) & 0xc0) | (dAccuracy & 0x3f),
+ ((dAccuracy >> 2) & 0xf0) | ((dAccuracyExp << 2) & 0x0c),
+- ((dRExp << 4) & 0xf0) | (dBExp & 0x0f ),
++ (unsigned char)(((dRExp << 4) & 0xf0) | (dBExp & 0x0f )),
+ 0,
+ 0,
+ }
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-add-libnetsnmp-when-link.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-add-libnetsnmp-when-link.patch
new file mode 100644
index 000000000..4644910b7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-add-libnetsnmp-when-link.patch
@@ -0,0 +1,25 @@
+[PATCH] add libnetsnmp when link
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ plugins/snmp_bc/t/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/snmp_bc/t/Makefile.am b/plugins/snmp_bc/t/Makefile.am
+index 57e77ac..9894620 100644
+--- a/plugins/snmp_bc/t/Makefile.am
++++ b/plugins/snmp_bc/t/Makefile.am
+@@ -74,7 +74,7 @@ nodist_libsnmp_bc_la_SOURCES = $(GENERATED_EVENT_CODE) $(REMOTE_SIM_SOURCES)
+ # libopenhpi_la_LIBADD = $(top_builddir)/utils/libopenhpiutils.la
+ # libopenhpi_la_LDFLAGS = -L$(top_builddir)/utils -version-info @HPI_LIB_VERSION@ -export-symbols $(top_srcdir)/src/hpi.sym
+
+-libsnmp_bc_la_LIBADD = -luuid @SNMPLIBS@ $(top_builddir)/utils/libopenhpiutils.la
++libsnmp_bc_la_LIBADD = -luuid @SNMPLIBS@ $(top_builddir)/utils/libopenhpiutils.la -lnetsnmp
+ libsnmp_bc_la_LDFLAGS = -L$(top_builddir)/utils -module -version-info @HPI_LIB_VERSION@
+ # libsnmp_bc_la_LDFLAGS = -version 0:0:0
+
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-alignment-issue.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-alignment-issue.patch
new file mode 100644
index 000000000..077e26cbf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-alignment-issue.patch
@@ -0,0 +1,23 @@
+Fix alignment issue in ipmi_inventory.c
+
+Upstream-Status: Pending
+
+Signed-of-by: Aws Ismail <aws.ismail@windriver.com>
+
+diff --git a/plugins/ipmi/ipmi_inventory.c b/plugins/ipmi/ipmi_inventory.c
+index 5382186..01655c6 100644
+--- a/plugins/ipmi/ipmi_inventory.c
++++ b/plugins/ipmi/ipmi_inventory.c
+@@ -2546,8 +2546,11 @@ static SaErrorT modify_inventory(SaHpiIdrFieldT *field,
+ if (tb->DataLength == 0) {
+ rv = ipmi_fru_set_board_info_mfg_time(fru, 0);
+ } else {
++ time_t the_time;
++ /* tb->Data is not aligned -- copy to temp */
++ memcpy(&the_time, tb->Data, sizeof(the_time));
+ rv = ipmi_fru_set_board_info_mfg_time(fru,
+- *(time_t *)tb->Data);
++ the_time);
+ }
+ break;
+ case SAHPI_IDR_FIELDTYPE_MANUFACTURER:
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-host-gcc.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-host-gcc.patch
new file mode 100644
index 000000000..97c515e00
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-host-gcc.patch
@@ -0,0 +1,24 @@
+fix host gcc warnings
+
+Remove gcc warnings when gcc is v3.2
+
+Upstream-Status: Pending
+
+Signed-of-by: Aws Ismail <aws.ismail@windriver.com>
+
+Index: openhpi-3.6.1/configure.ac
+===================================================================
+--- openhpi-3.6.1.orig/configure.ac
++++ openhpi-3.6.1/configure.ac
+@@ -656,11 +656,6 @@ AC_ARG_ENABLE([werror],
+ fi],
+ [])
+
+-if test -n "`gcc --version | grep ' 3.2'`" ; then
+- CC_WARNINGS=`echo $CC_WARNINGS | sed -e 's/-Wno-strict-aliasing//g'`
+- CXX_WARNINGS=`echo $CC_WARNINGS | sed -e 's/-Wno-strict-aliasing//g'`
+-fi
+-
+ case $host_os in
+ solaris*)
+ CC_WARNINGS=`echo $CC_WARNINGS | sed -e 's/-Wcast-qual//g'`
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-testfail-errors.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-testfail-errors.patch
new file mode 100644
index 000000000..60e2e7919
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-fix-testfail-errors.patch
@@ -0,0 +1,33 @@
+Fix for saftest failures.
+
+Upstream-Status: Pending
+
+Signed-off-by: yanjun.zhu <yanjun.zhu@windriver.com>
+
+Index: openhpi-3.6.1/openhpid/safhpi.c
+===================================================================
+--- openhpi-3.6.1.orig/openhpid/safhpi.c
++++ openhpi-3.6.1/openhpid/safhpi.c
+@@ -1933,7 +1933,7 @@ SaErrorT SAHPI_API saHpiSensorThresholds
+ oh_release_domain(d); /* Unlock domain */
+
+ OH_CALL_ABI(h, set_sensor_thresholds, SA_ERR_HPI_INVALID_CMD, rv,
+- ResourceId, SensorNum, SensorThresholds);
++ ResourceId, SensorNum, &tmp);
+ oh_release_handler(h);
+
+ return rv;
+Index: openhpi-3.6.1/utils/sahpi_struct_utils.c
+===================================================================
+--- openhpi-3.6.1.orig/utils/sahpi_struct_utils.c
++++ openhpi-3.6.1/utils/sahpi_struct_utils.c
+@@ -3861,6 +3861,9 @@ SaHpiBoolT oh_valid_textbuffer(SaHpiText
+ /* found a unpaired surrogate */
+ return SAHPI_FALSE;
+ }
++ } else {
++ /*the first 2 bytes wrong*/
++ return SAHPI_FALSE;
+ }
+ }
+ break;
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-glib-cross-compile.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-glib-cross-compile.patch
new file mode 100644
index 000000000..1627c9797
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-glib-cross-compile.patch
@@ -0,0 +1,33 @@
+Fix glib cross compile
+
+Uses proper PKG_CONFIG_PATH when cross-compiling
+
+Upstream-Status: Pending
+
+Signed-of-by: Aws Ismail <aws.ismail@windriver.com>
+
+diff --git a/configure.ac b/configure.ac
+index b5f5aad..f5a5b74 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -110,13 +110,13 @@ else
+ *** GLIB is always available from ftp://ftp.gtk.org/.])
+ fi
+
+-exact_version=`pkg-config --modversion $GLIB`;
+-GLIB_CFLAGS=`pkg-config --cflags $GLIB $GTHREAD`
+-GLIB_LIBS=`pkg-config --libs $GLIB $GTHREAD`
+-GLIB_ONLY_CFLAGS=`pkg-config --cflags $GLIB`
+-GLIB_ONLY_LIBS=`pkg-config --libs $GLIB`
+-GMODULE_ONLY_CFLAGS=`pkg-config --cflags $GMODULE`
+-GMODULE_ONLY_LIBS=`pkg-config --libs $GMODULE`
++exact_version=`PKG_CONFIG_PATH=$PKG_CONFIG_PATH pkg-config --modversion $GLIB`;
++GLIB_CFLAGS=`PKG_CONFIG_PATH=$PKG_CONFIG_PATH pkg-config --cflags $GLIB $GTHREAD`
++GLIB_LIBS=`PKG_CONFIG_PATH=$PKG_CONFIG_PATH pkg-config --libs $GLIB $GTHREAD`
++GLIB_ONLY_CFLAGS=`PKG_CONFIG_PATH=$PKG_CONFIG_PATH pkg-config --cflags $GLIB`
++GLIB_ONLY_LIBS=`PKG_CONFIG_PATH=$PKG_CONFIG_PATH pkg-config --libs $GLIB`
++GMODULE_ONLY_CFLAGS=`PKG_CONFIG_PATH=$PKG_CONFIG_PATH pkg-config --cflags $GMODULE`
++GMODULE_ONLY_LIBS=`PKG_CONFIG_PATH=$PKG_CONFIG_PATH pkg-config --libs $GMODULE`
+
+ # On some versions of Solaris the pkg-config file for gthread-2.0 contains a
+ # compiler option, '-mt', that is incompatible with gcc
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-hpi-shell-thread-fix.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-hpi-shell-thread-fix.patch
new file mode 100644
index 000000000..cc21ff8c7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-hpi-shell-thread-fix.patch
@@ -0,0 +1,29 @@
+commit e9f9a73c9dba8dd59f3d6c3acd9988ec8361d55a
+Author: Aws Ismail <aws.ismail@windriver.com>
+Date: Mon Dec 17 16:23:45 2012 -0500
+
+ Correct dangling g_thread_exit in session.c
+
+ hpi_shell's session.c has its progress_bar
+ thread created using pthread_create but
+ exited using g_thread_exit. Use pthread_exit
+ instead to avoid unpredictable GLIB thread
+ errors.
+
+ Upstream-Status: Pending
+
+ Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+
+Index: openhpi-3.6.1/hpi_shell/session.c
+===================================================================
+--- openhpi-3.6.1.orig/hpi_shell/session.c
++++ openhpi-3.6.1/hpi_shell/session.c
+@@ -73,7 +73,7 @@ static void* progress_bar(void *unused)
+ if (i < (PROGRESS_BUF_SIZE - mes_len - 1)) i++;
+ t++;
+ };
+- g_thread_exit(0);
++ pthread_exit(0);
+ return (void *)1;
+ }
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-invalide-session.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-invalide-session.patch
new file mode 100644
index 000000000..d03c97e18
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-invalide-session.patch
@@ -0,0 +1,21 @@
+Upstream-Status: Submitted
+
+Package saftest run a test case to pass invalid session id to function
+saHpiResourceIdGet that expect return SA_ERR_HPI_INVALID_SESSION. But the check
+for SA_ERR_HPI_INVALID_SESSION is missed somehow in function saHpiResourceIdGet.
+
+Add check for SA_ERR_HPI_INVALID_SESSION.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+-----
+--- openhpi-3.4.0/baselib/safhpi.cpp.orig 2014-02-25 10:45:20.911734868 +0800
++++ openhpi-3.4.0/baselib/safhpi.cpp 2014-02-25 10:46:05.366925389 +0800
+@@ -477,6 +477,8 @@
+ &rpt_update_count );
+ if ( rv == SA_ERR_HPI_NOT_PRESENT ) {
+ return SA_ERR_HPI_NOT_PRESENT;
++ } else if ( rv == SA_ERR_HPI_INVALID_SESSION) {
++ return SA_ERR_HPI_INVALID_SESSION;
+ } else if ( rv != SA_OK ) {
+ return SA_ERR_HPI_UNKNOWN;
+ }
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-libxml2-cross-compile.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-libxml2-cross-compile.patch
new file mode 100644
index 000000000..c848b3502
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-libxml2-cross-compile.patch
@@ -0,0 +1,21 @@
+Fix libxml2 for cross-compiling
+
+Use proper XML2_INCLUDE path when cross-compiling
+
+Upstream-Status: Pending
+
+Signed-of-by: Aws Ismail <aws.ismail@windriver.com>
+
+Index: openhpi-3.6.1/configure.ac
+===================================================================
+--- openhpi-3.6.1.orig/configure.ac
++++ openhpi-3.6.1/configure.ac
+@@ -177,7 +177,7 @@ AC_CHECK_HEADERS([openssl/md2.h openssl/
+
+ dnl xml is used for XML-based communication in ilo2_ribcl and oa_soap
+ AC_CHECK_LIB([xml2],[xmlParseMemory],[XML2_LIB=-lxml2],[XML2_LIB=])
+-AC_CHECK_HEADERS([libxml2/libxml/xmlexports.h],[XML2_INCLUDE="-I/usr/include/libxml2"],[XML2_INCLUDE])
++AC_CHECK_HEADERS([libxml2/libxml/xmlexports.h],[XML2_INCLUDE="$XML2_INCLUDE"],[XML2_INCLUDE])
+ AC_SUBST(XML2_LIB)
+ AC_SUBST(XML2_INCLUDE)
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-linkfix.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-linkfix.patch
new file mode 100644
index 000000000..3222f5d13
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-linkfix.patch
@@ -0,0 +1,33 @@
+Fix ipmi plugin's test dir compilation
+
+The ipmi plugin's test dir is not included
+in compilation since it does not compile
+properly with SSL
+
+Signed-of-by: Aws Ismail <aws.ismail@windriver.com>
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ plugins/ipmi/Makefile.in | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/plugins/ipmi/Makefile.in b/plugins/ipmi/Makefile.in
+index 7c6b0a4..6204dbe 100644
+--- a/plugins/ipmi/Makefile.in
++++ b/plugins/ipmi/Makefile.in
+@@ -448,7 +448,9 @@ top_srcdir = @top_srcdir@
+ MAINTAINERCLEANFILES = Makefile.in
+ AM_CPPFLAGS = -DG_LOG_DOMAIN=\"ipmi\" @OPENHPI_INCLUDES@
+ EXTRA_DIST = ipmi.sym ekeyfru.h
+-SUBDIRS = t
++#SUBDIRS = t
++#Tests don't compile wih SSL properly so comment them out
++SUBDIRS =
+ AM_CFLAGS = @OPENIPMI_CFLAGS@
+ pkglib_LTLIBRARIES = libipmi.la
+ libipmi_la_SOURCES = ipmi.c \
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-netsnmp-cross-compile.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-netsnmp-cross-compile.patch
new file mode 100644
index 000000000..95b0abc91
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-netsnmp-cross-compile.patch
@@ -0,0 +1,48 @@
+Fix net-snmp when cross-compiling
+
+Remove irrelevant references to net-snmp libs and flags
+when cross-compiling net-snmp
+
+Signed-of-by: Aws Ismail <aws.ismail@windriver.com>
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ acinclude.m4 | 4 ++--
+ configure | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 82c33f6..727e461 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -160,8 +160,8 @@ AC_DEFUN([OH_CHECK_NETSNMP],
+ ],
+ [
+ have_netsnmp=yes
+- SNMPFLAGS=`${net_snmp_config:-net-snmp-config} --cflags | perl -p -e 's/-O\S*//g'`
+- SNMPLIBS=`${net_snmp_config:-net-snmp-config} --libs`
++ SNMPFLAGS=""
++ SNMPLIBS=""
+ AC_MSG_RESULT(yes)
+ ],
+ [AC_MSG_RESULT(no. No SNMP based plugins can be built!)])
+diff --git a/configure b/configure
+index 00067bc..36b913c 100755
+--- a/configure
++++ b/configure
+@@ -15949,8 +15949,8 @@ _ACEOF
+ if ac_fn_c_try_link "$LINENO"; then :
+
+ have_netsnmp=yes
+- SNMPFLAGS=`${net_snmp_config:-net-snmp-config} --cflags | perl -p -e 's/-O\S*//g'`
+- SNMPLIBS=`${net_snmp_config:-net-snmp-config} --libs`
++ SNMPFLAGS=""
++ SNMPLIBS=""
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-sysfs-cross-compile.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-sysfs-cross-compile.patch
new file mode 100644
index 000000000..38d9a6742
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-sysfs-cross-compile.patch
@@ -0,0 +1,23 @@
+Fix sysfs when cross-compiling
+
+Use proper paths for sysfs plugins when cross-compiling
+
+Signed-of-by: Aws Ismail <aws.ismail@windriver.com>
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+
+diff --git a/plugins/sysfs/sysfs2hpi.c b/plugins/sysfs/sysfs2hpi.c
+index a745214..3685598 100644
+--- a/plugins/sysfs/sysfs2hpi.c
++++ b/plugins/sysfs/sysfs2hpi.c
+@@ -18,7 +18,7 @@
+
+ #include <stdlib.h>
+ #include <string.h>
+-#include <libsysfs.h>
++#include <sysfs/libsysfs.h>
+
+ #include <SaHpi.h>
+ #include <oh_utils.h>
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-use-serial-tests-config-needed-by-ptest.patch b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-use-serial-tests-config-needed-by-ptest.patch
new file mode 100644
index 000000000..3e09180d4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi-use-serial-tests-config-needed-by-ptest.patch
@@ -0,0 +1,28 @@
+From 36fbaa27e7299f63c1324b0ad22b970e9365d6a7 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 24 Dec 2014 10:54:59 +0800
+Subject: [PATCH] openhpi: use serial-tests config needed by ptest
+
+ptest needs buildtest-TESTS and runtest-TESTS targets.
+serial-tests is required to generate those targets.
+
+Upstream-Status: Inappropriate [default automake behavior incompatible with ptest]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure.ac | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+Index: openhpi-3.6.1/configure.ac
+===================================================================
+--- openhpi-3.6.1.orig/configure.ac
++++ openhpi-3.6.1/configure.ac
+@@ -7,7 +7,7 @@ dnl various hacks by Sean Dague <http:
+ AC_PREREQ(2.57)
+ AC_INIT(openhpi, 3.6.1)
+ AC_CONFIG_SRCDIR(openhpi.spec.in)
+-AM_INIT_AUTOMAKE([1.8])
++AM_INIT_AUTOMAKE([1.8 serial-tests])
+
+ AM_CONFIG_HEADER(config.h)
+ AH_TOP([#ifndef __OPENHPI_CONFIG_H
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi.init b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi.init
new file mode 100755
index 000000000..3a5f4a06a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpi.init
@@ -0,0 +1,230 @@
+#! /bin/sh
+#
+### BEGIN INIT INFO
+# Provides: openhpid
+# Required-Start: $network $remote_fs $syslog
+# Required-Stop: $network $remote_fs $syslog
+# Should-Start: $named
+# Should-Stop: $named
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Start OpenHPI daemon at boot time
+# Description: Enable OpenHPI service which is provided by openhpid.
+### END INIT INFO
+#
+# openhpid.sh Start/Stop the openhpi daemon.
+#
+# description: openhpid is standard UNIX program which uses the OpenHPI \
+# APIs and provides a standard internet server to access those \
+# APIs for client programs.
+# processname: openhpid
+# config: the standard openhpi conf file specified on the command line or the env.
+# pidfile: /var/run/openhpid.pid
+#
+# Author(s):
+# W. David Ashley <dashley@us.ibm.com>
+# Daniel de Araujo <ddearauj@us.ibm.com>
+
+# Source function library.
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+prog="OpenHPI"
+
+# If the openhpid executable is not available, we can't do any of this
+test -f /usr/sbin/openhpid || exit 0
+
+# Determine whether the lsb package is installed
+# If it is, determine which lsb is installed:
+# redhat, suse, or standard lsb
+
+if test -f /etc/init.d/functions
+then
+ lsbtype="rh"
+ . /etc/init.d/functions
+elif test -f /etc/rc.status
+then
+ lsbtype="suse"
+ . /etc/rc.status
+elif test -f /lib/lsb/init-functions
+then
+ lsbtype="lsb"
+ . /lib/lsb/init-functions
+elif test -f /etc/gentoo-release
+then
+ lsbtype="gentoo"
+ . /sbin/functions.sh
+else
+ lsbtype="nolsb"
+fi
+
+print_outcome()
+{
+
+ case "${lsbtype}" in
+
+ suse)
+ rc_status -v
+ ;;
+
+ lsb)
+ if test "$?" -eq 0
+ then
+ log_success_msg "success"
+ else
+ log_failure_msg "failed"
+ fi
+ ;;
+
+ gentoo)
+ eend $?
+ ;;
+
+ nolsb | rh)
+ if test "$?" -eq 0
+ then
+ echo " ... success"
+ fi
+ if test "$?" -ne 0
+ then
+ echo " ... failed"
+ fi
+ ;;
+ esac
+}
+
+start() {
+ case "${lsbtype}" in
+
+ suse)
+ echo -n "Starting $prog: "
+ startproc /usr/sbin/openhpid -c /etc/openhpi/openhpi.conf
+ RETVAL=$?
+ ;;
+ lsb)
+ echo -n "Starting $prog: "
+ start_daemon /usr/sbin/openhpid -c /etc/openhpi/openhpi.conf
+ RETVAL=$?
+ ;;
+ gentoo | rh)
+ echo "Starting $prog: "
+ start-stop-daemon --start --quiet --exec /usr/sbin/openhpid -- -c /etc/openhpi/openhpi.conf
+ RETVAL=$?
+ ;;
+ nolsb)
+ echo -n "Starting $prog: "
+ /usr/sbin/openhpid -c /etc/openhpi/openhpi.conf
+ RETVAL=$?
+ ;;
+
+ esac
+
+ print_outcome
+
+}
+
+stop() {
+ case "${lsbtype}" in
+
+ lsb | suse)
+ echo -n "Stopping $prog: "
+ killproc /usr/sbin/openhpid
+ RETVAL=$?
+ ;;
+
+ gentoo)
+ echo "Stopping $prog: "
+ start-stop-daemon --stop --quiet --exec /usr/sbin/openhpid
+ RETVAL=$?
+ ;;
+
+ nolsb | rh)
+ echo -n "Stopping $prog: "
+ if test -f /var/run/openhpid.pid && test "`cat /var/run/openhpid.pid`" != ""
+ then
+ kill "`cat /var/run/openhpid.pid`"
+ RETVAL=$?
+ else
+ RETVAL=0
+ fi
+ ;;
+
+ esac
+
+ print_outcome
+
+ if test "$RETVAL" -eq 0 && test -f /var/run/openhpid.pid
+ then
+ rm -f /var/lock/openhpid
+ rm -f /var/run/openhpid.pid
+ fi
+
+}
+
+dstatus() {
+ echo "Checking for $prog daemon: "
+
+ case "${lsbtype}" in
+
+ suse)
+ checkproc /usr/sbin/openhpid
+ rc_status -v
+ ;;
+ lsb)
+ pid="`pidofproc /usr/sbin/openhpid`"
+ if test "${pid}" != ""
+ then
+ log_success_msg "$prog is running"
+ else
+ log_success_msg "$prog is not running"
+ fi
+ ;;
+ gentoo | nolsb | rh)
+ if test -f /var/run/openhpid.pid &&
+ test "`cat /var/run/openhpid.pid`" != "" &&
+ kill -s 0 "`cat /var/run/openhpid.pid`"
+ then
+ echo "$prog is running"
+ else
+ echo "$prog is not running"
+ fi
+
+ ;;
+
+ esac
+
+
+
+}
+
+restart() {
+ stop
+ start
+}
+
+force_reload() {
+ # We don't currently support a reload, but can do a restart
+ stop
+ start
+}
+
+# See how we were called.
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ status)
+ dstatus
+ ;;
+ force-reload)
+ force_reload
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|status|force-reload}"
+ exit 1
+esac
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpid.service b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpid.service
new file mode 100644
index 000000000..cd4168f8e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/openhpid.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Daemon providing access to the SAF Hardware Platform Interface
+After=syslog.target
+
+[Service]
+Type=forking
+PIDFile=/var/run/openhpid.pid
+ExecStart=@SBINDIR@/openhpid -c @SYSCONFDIR@/openhpi/openhpi.conf
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/run-ptest b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/run-ptest
new file mode 100755
index 000000000..5b187d908
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/files/run-ptest
@@ -0,0 +1,5 @@
+#!/bin/sh
+for x in `find ./ -name Makefile`;
+do
+ make -C `dirname ${x}` -k runtest-TESTS
+done
diff --git a/meta-openembedded/meta-networking/recipes-daemons/openhpi/openhpi_3.6.1.bb b/meta-openembedded/meta-networking/recipes-daemons/openhpi/openhpi_3.6.1.bb
new file mode 100644
index 000000000..ecf71d70f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/openhpi/openhpi_3.6.1.bb
@@ -0,0 +1,115 @@
+SUMMARY = "Hardware Platform Interface Library and Tools"
+
+DESCRIPTION = "\
+OpenHPI is an open source project created with the intent of providing an \
+implementation of the SA Forum's Hardware Platform Interface (HPI). HPI \
+provides an abstracted interface to managing computer hardware, typically for \
+chassis and rack based servers. HPI includes resource modeling; access to and \
+control over sensor, control, watchdog, and inventory data associated with \
+resources; abstracted System Event Log interfaces; hardware events and alerts; \
+and a managed hotswap interface. \
+\
+OpenHPI provides a modular mechanism for adding new hardware and device support \
+easily. Many plugins exist in the OpenHPI source tree to provide access to \
+various types of hardware. This includes, but is not limited to, IPMI based \
+servers, Blade Center, and machines which export data via sysfs. \
+"
+
+HOMEPAGE = "http://openhpi.sourceforge.net/Home"
+SECTION = "net"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e3c772a32386888ccb5ae1c0ba95f1a4"
+
+DEPENDS = "net-snmp libxml2 ncurses openssl glib-2.0 popt e2fsprogs autoconf-archive-native"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz \
+ file://openhpi.init \
+ file://openhpid.service \
+ file://run-ptest \
+ file://openhpi-netsnmp-cross-compile.patch \
+ file://openhpi-sysfs-cross-compile.patch \
+ file://openhpi-libxml2-cross-compile.patch \
+ file://openhpi-glib-cross-compile.patch \
+ file://openhpi-linkfix.patch \
+ file://openhpi-fix-host-gcc.patch \
+ file://openhpi-hpi-shell-thread-fix.patch \
+ file://openhpi-fix-testfail-errors.patch \
+ file://openhpi-add-libnetsnmp-when-link.patch \
+ file://openhpi-invalide-session.patch \
+ file://openhpi-use-serial-tests-config-needed-by-ptest.patch \
+ file://openhpi-fix-alignment-issue.patch \
+ file://0001-Fix-build-failures-with-gcc7.patch \
+ file://c++11.patch \
+ file://clang-c++11.patch \
+ file://fix-narrowing-warning.patch \
+ file://0001-plugins-Check-for-PTHREAD_RECURSIVE_MUTEX_INITIALIZE.patch \
+ file://0001-ipmidirect-Replace-__STRING.patch \
+ "
+
+SRC_URI[md5sum] = "4718b16e0f749b5ad214a9b04f45dd23"
+SRC_URI[sha256sum] = "e0a810cb401c4bdcfc9551f2e6afd5a8ca4b411f5ee3bc60c19f82fd6e84a3dc"
+
+inherit autotools pkgconfig ptest update-rc.d systemd
+
+PACKAGES =+ "${PN}-libs"
+
+FILES_${PN}-libs = "${libdir}/${BPN}/*.so /usr/lib/${BPN}/*.so"
+
+INSANE_SKIP_${PN}-libs = "dev-so"
+RDEPENDS_${PN} += "${PN}-libs"
+
+PACKAGECONFIG ??= "libgcrypt non32bit"
+PACKAGECONFIG[sysfs] = "--enable-sysfs,--disable-sysfs,sysfsutils,"
+PACKAGECONFIG[libgcrypt] = "--enable-encryption,--disable-encryption,libgcrypt,"
+PACKAGECONFIG[non32bit] = "--enable-non32bit-int,--disable-non32bit-int,,"
+
+do_install_append () {
+ install -m 0755 -d ${D}${sysconfdir}/${BPN}
+ install -m 0755 ${S}/openhpiclient.conf.example ${D}${sysconfdir}/${BPN}/openhpiclient.conf
+ install -m 0700 ${S}/openhpi.conf.example ${D}${sysconfdir}/${BPN}/openhpi.conf
+ install -m 0755 ${S}/simulation.data.example ${D}${sysconfdir}/${BPN}/simulation.data
+ install -m 0755 ${S}/test_agent.data.example ${D}${sysconfdir}/${BPN}/test_agent.data
+ install -m 0755 ${WORKDIR}/openhpi.init ${D}${sysconfdir}/init.d/openhpid
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/openhpid.service ${D}${systemd_unitdir}/system
+ sed -i -e "s,@SBINDIR@,${sbindir},g" -e "s,@SYSCONFDIR@,${sysconfdir},g" \
+ ${D}${systemd_unitdir}/system/openhpid.service
+}
+
+do_compile_ptest () {
+ for x in `find ${B} -name Makefile -exec grep -l buildtest-TESTS {} \;`; do
+ dir=`dirname ${x}`
+ upper=`dirname ${dir}`
+ if [ `basename ${upper}` != "cpp" ]; then
+ oe_runmake -C ${dir} buildtest-TESTS
+ fi
+ done
+}
+
+do_install_ptest () {
+ cp -rf ${B}/openhpid/t/ohpi/.libs/* ${B}/openhpid/t/ohpi/
+ TESTS="utils marshal openhpid"
+ for subtest in ${TESTS}; do
+ mkdir -p ${D}${PTEST_PATH}/${subtest}/t
+ cp -rf ${B}/${subtest}/t/* ${D}${PTEST_PATH}/${subtest}/t
+ done
+
+ for x in `find ${D}${PTEST_PATH} -name Makefile`; do
+ sed -i "s:${S}:${PTEST_PATH}/:g" ${x};
+ sed -i "s/^Makefile:/MM:/g" ${x};
+ done;
+
+ mkdir -p ${D}${PTEST_PATH}/plugins/watchdog/
+ cp -L ${D}/${libdir}/${BPN}/libwatchdog.so ${D}${PTEST_PATH}/plugins/watchdog/
+ cp -L ${D}/${libdir}/${BPN}/libsimulator.so ${D}${PTEST_PATH}/plugins/watchdog/
+ find ${D}${PTEST_PATH}/ -name "*.c" -exec rm {} \;
+ find ${D}${PTEST_PATH}/ -name "*.o" -exec rm {} \;
+ find ${D}${PTEST_PATH}/ -name "*.h" -exec rm {} \;
+}
+
+INITSCRIPT_NAME = "openhpid"
+INITSCRIPT_PARAMS = "start 30 . stop 70 0 1 2 3 4 5 6 ."
+
+SYSTEMD_SERVICE_${PN} = "openhpid.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Disable-format-overflow-if-supported-by-gc.patch b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Disable-format-overflow-if-supported-by-gc.patch
new file mode 100644
index 000000000..effe25c85
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Disable-format-overflow-if-supported-by-gc.patch
@@ -0,0 +1,123 @@
+From ab00d6f5793b2d850f975bcb6d5d0aa6d7a9eaa4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 22 Apr 2017 12:34:37 -0700
+Subject: [PATCH] configure: Disable format-overflow if supported by gcc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.am | 6 ++--
+ configure.ac | 2 ++
+ m4/ax_check_compile_flag.m4 | 74 +++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 79 insertions(+), 3 deletions(-)
+ create mode 100644 m4/ax_check_compile_flag.m4
+
+Index: opensaf-5.18.02/Makefile.am
+===================================================================
+--- opensaf-5.18.02.orig/Makefile.am
++++ opensaf-5.18.02/Makefile.am
+@@ -52,10 +52,10 @@ AM_CPPFLAGS = \
+ -pthread \
+ -D_GNU_SOURCE -DINTERNAL_VERSION_ID='"@INTERNAL_VERSION_ID@"' \
+ $(CORE_INCLUDES) \
+- $(all_includes)
++ $(all_includes) @NOWARNINGS@
+
+-AM_CFLAGS = -pipe -std=gnu11 @OSAF_HARDEN_FLAGS@ -Wall -Wformat=2 -Werror
+-AM_CXXFLAGS = -pipe -std=gnu++11 @OSAF_HARDEN_FLAGS@ -Wall -Wformat=2 -Werror
++AM_CFLAGS = -pipe -std=gnu11 @OSAF_HARDEN_FLAGS@ -Wall -Wformat=2 -Werror @NOWARNINGS@
++AM_CXXFLAGS = -pipe -std=gnu++11 @OSAF_HARDEN_FLAGS@ -Wall -Wformat=2 -Werror @NOWARNINGS@
+
+ if ENABLE_GCOV
+ AM_CFLAGS += --coverage
+Index: opensaf-5.18.02/configure.ac
+===================================================================
+--- opensaf-5.18.02.orig/configure.ac
++++ opensaf-5.18.02/configure.ac
+@@ -593,6 +593,8 @@ if test -z "$OSAF_HARDEN_FLAGS"; then
+ fi
+ AC_SUBST(OSAF_HARDEN_FLAGS)
+
++AX_CHECK_COMPILE_FLAG([-Werror=format-overflow],[NOWARNINGS=-Wno-error=format-overflow])
++AC_SUBST(NOWARNINGS)
+ #############################################
+ # List the output Makefiles
+ #############################################
+Index: opensaf-5.18.02/m4/ax_check_compile_flag.m4
+===================================================================
+--- /dev/null
++++ opensaf-5.18.02/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
diff --git a/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Pass-linker-specific-options-with-Wl.patch b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Pass-linker-specific-options-with-Wl.patch
new file mode 100644
index 000000000..5756a027b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-configure-Pass-linker-specific-options-with-Wl.patch
@@ -0,0 +1,29 @@
+From 6248b717b4861d16b80235fd8e57d64e4f636428 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Apr 2017 17:39:07 -0700
+Subject: [PATCH] configure: Pass linker specific options with -Wl
+
+This helps make it pass the options to linker correctly
+and we can use non-gcc compilers
+
+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 df4fc58..02771c6 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -553,7 +553,7 @@ if test -z "$OSAF_HARDEN_FLAGS"; then
+ if echo "${CFLAGS} ${CXXFLAGS}" | grep -q -- -O0; then
+ OSAF_HARDEN_FLAGS=""
+ fi
+- OSAF_HARDEN_FLAGS="${OSAF_HARDEN_FLAGS} -fstack-protector --param ssp-buffer-size=4 -fPIE -pie -zrelro -znow"
++ OSAF_HARDEN_FLAGS="${OSAF_HARDEN_FLAGS} -fstack-protector --param ssp-buffer-size=4 -fPIE -pie -Wl,-z,relro,-z,now"
+ fi
+ AC_SUBST(OSAF_HARDEN_FLAGS)
+
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch
new file mode 100644
index 000000000..76c47c658
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch
@@ -0,0 +1,34 @@
+From 508ea7c0d67243feb1684eaa83569cb687561d64 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 Sep 2017 10:09:03 -0700
+Subject: [PATCH] immpbe_dump.cc: Use sys/wait.h instead of wait.h
+
+Fixes
+redirecting incorrect #include <wait.h> to <sys/wait.h>
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/imm/common/immpbe_dump.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/imm/common/immpbe_dump.cc b/src/imm/common/immpbe_dump.cc
+index 100222f37..33e47ce3c 100644
+--- a/src/imm/common/immpbe_dump.cc
++++ b/src/imm/common/immpbe_dump.cc
+@@ -26,12 +26,12 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <time.h>
+-#include <wait.h>
+ #include <unistd.h>
+ #include <iostream>
+ #include <sstream>
+ #include <stdint.h>
+ #include <sys/stat.h>
++#include <sys/wait.h>
+ #include <libgen.h>
+
+ #include <saAis.h>
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch
new file mode 100644
index 000000000..4a2a825f9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf/0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch
@@ -0,0 +1,122 @@
+From 6442b57a855e273aa5a3d93e8596783cea128073 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 15 Sep 2017 09:39:40 -0700
+Subject: [PATCH] src: Add missing header limits.h for _POSIX_HOST_NAME_MAX
+
+Use _GNU_SOURCE instead of libc internal __USE_GNU
+Do not use the deprecated headers under include/sys
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/base/os_defs.h | 5 +++--
+ src/mds/mds_dt_tcp.c | 1 -
+ src/mds/mds_dt_tcp_disc.h | 2 +-
+ src/mds/mds_dt_tipc.c | 1 -
+ src/mds/mds_dt_tipc.h | 2 +-
+ src/mds/mds_dt_trans.c | 1 -
+ src/ntf/ntfd/NtfLogger.cc | 2 +-
+ 7 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/src/base/os_defs.h b/src/base/os_defs.h
+index 50a9bf5fc..af6842863 100644
+--- a/src/base/os_defs.h
++++ b/src/base/os_defs.h
+@@ -47,17 +47,18 @@
+ #include <sys/stat.h>
+ #include <sys/msg.h> /* Added for message-queues : PM : 28/10/03 */
+ #include <syslog.h>
+-#ifndef __USE_GNU
++#include <limits.h>
++#ifndef _GNU_SOURCE
+ struct msgbuf {
+ long int mtype;
+ char mtext[1];
+ };
+ #endif /* else defined in <sys/msg.h> */
+ #include <sys/time.h>
+-#include <sys/fcntl.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+
++#include <fcntl.h>
+ #include <signal.h>
+ #include <pthread.h>
+
+diff --git a/src/mds/mds_dt_tcp.c b/src/mds/mds_dt_tcp.c
+index 1407eb1ab..a87c22faa 100644
+--- a/src/mds/mds_dt_tcp.c
++++ b/src/mds/mds_dt_tcp.c
+@@ -27,7 +27,6 @@
+
+ #include <stdlib.h>
+ #include <sched.h>
+-#include <sys/poll.h>
+ #include <poll.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+diff --git a/src/mds/mds_dt_tcp_disc.h b/src/mds/mds_dt_tcp_disc.h
+index a6249d73e..574f52681 100644
+--- a/src/mds/mds_dt_tcp_disc.h
++++ b/src/mds/mds_dt_tcp_disc.h
+@@ -24,7 +24,7 @@
+ #include "base/ncssysf_tsk.h"
+ #include "base/ncssysf_mem.h"
+ #include "mds_dt_tcp_disc.h"
+-#include "sys/poll.h"
++#include <poll.h>
+
+ /* mds_indentifire + mds_version + msg_type + scope_type + server_type +
+ server_instance_lower + server_instance_upper + sub_ref_val + sub_ref_val +
+diff --git a/src/mds/mds_dt_tipc.c b/src/mds/mds_dt_tipc.c
+index 37745e7f0..9b3255567 100644
+--- a/src/mds/mds_dt_tipc.c
++++ b/src/mds/mds_dt_tipc.c
+@@ -35,7 +35,6 @@
+ #include <stdbool.h>
+ #include <stdlib.h>
+ #include <sched.h>
+-#include <sys/poll.h>
+ #include <poll.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+diff --git a/src/mds/mds_dt_tipc.h b/src/mds/mds_dt_tipc.h
+index e73a11b09..401d208c2 100644
+--- a/src/mds/mds_dt_tipc.h
++++ b/src/mds/mds_dt_tipc.h
+@@ -32,7 +32,7 @@
+ #include <assert.h>
+ #include <string.h>
+ #include <sys/param.h>
+-#include <sys/poll.h>
++#include <poll.h>
+ #include <netdb.h>
+ #include <errno.h>
+ #include <fcntl.h>
+diff --git a/src/mds/mds_dt_trans.c b/src/mds/mds_dt_trans.c
+index 6f621e04e..5aacbd33e 100644
+--- a/src/mds/mds_dt_trans.c
++++ b/src/mds/mds_dt_trans.c
+@@ -26,7 +26,6 @@
+ #include "mds_core.h"
+ #include "base/osaf_utility.h"
+
+-#include <sys/poll.h>
+ #include <poll.h>
+
+ #define MDS_PROT_TCP 0xA0
+diff --git a/src/ntf/ntfd/NtfLogger.cc b/src/ntf/ntfd/NtfLogger.cc
+index 84014b578..31b1ccc6c 100644
+--- a/src/ntf/ntfd/NtfLogger.cc
++++ b/src/ntf/ntfd/NtfLogger.cc
+@@ -20,7 +20,7 @@
+ * INCLUDE FILES
+ * ========================================================================
+ */
+-#include <sys/poll.h>
++#include <poll.h>
+
+ #include "base/osaf_utility.h"
+ #include <saAis.h>
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf_5.18.02.bb b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf_5.18.02.bb
new file mode 100644
index 000000000..4b556ce8c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/opensaf/opensaf_5.18.02.bb
@@ -0,0 +1,67 @@
+SUMMARY = "OpenSAF is an open source implementation of the SAF AIS specification"
+DESCRIPTION = "OpenSAF is an open source project established to develop a base platform \
+middleware consistent with Service Availability Forum (SA Forum) \
+specifications, under the LGPLv2.1 license. The OpenSAF Foundation was \
+established by leading Communications and Enterprise Computing Companies to \
+facilitate the OpenSAF Project and to accelerate the adoption of the OpenSAF \
+code base in commercial products. \
+The OpenSAF project was launched in mid 2007 and has been under development by \
+an informal group of supporters of the OpenSAF initiative. The OpenSAF \
+Foundation was founded on January 22nd 2008 with Emerson Network Power, \
+Ericsson, Nokia Siemens Networks, HP and Sun Microsystems as founding members."
+HOMEPAGE = "http://www.opensaf.org"
+SECTION = "admin"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=a916467b91076e631dd8edb7424769c7"
+
+DEPENDS = "libxml2 python"
+TOOLCHAIN = "gcc"
+
+SECURITY_CFLAGS = "${SECURITY_NO_PIE_CFLAGS}"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/releases/${BPN}-${PV}.tar.gz \
+ file://0001-configure-Pass-linker-specific-options-with-Wl.patch \
+ file://0001-configure-Disable-format-overflow-if-supported-by-gc.patch \
+ file://0001-src-Add-missing-header-limits.h-for-_POSIX_HOST_NAME.patch \
+ file://0001-immpbe_dump.cc-Use-sys-wait.h-instead-of-wait.h.patch \
+"
+SRC_URI[md5sum] = "42064f5ddbc7f560bfc5ff93ea9eecc7"
+SRC_URI[sha256sum] = "f9e24897f9cfd63bb3115f6275c706de1702d3d9bae2fc423227db72b23c37f0"
+
+inherit autotools useradd systemd pkgconfig
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "-f -r opensaf"
+USERADD_PARAM_${PN} = "-r -g opensaf -d ${datadir}/opensaf/ -s ${sbindir}/nologin -c \"OpenSAF\" opensaf"
+
+SYSTEMD_SERVICE_${PN} += "opensafd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+PACKAGECONFIG[systemd] = ",,systemd"
+PACKAGECONFIG[openhpi] = "--with-hpi-interface=B03 --enable-ais-plm,,openhpi"
+
+PACKAGECONFIG_append = "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', ' systemd', '', d)}"
+
+PKGLIBDIR="${libdir}"
+
+LDFLAGS += "-Wl,--as-needed -latomic -Wl,--no-as-needed"
+
+do_install_append() {
+ cp -av --no-preserve=ownership ${B}/lib/.libs/*.so* ${D}${libdir}
+ rm -fr "${D}${localstatedir}/lock"
+ rm -fr "${D}${localstatedir}/run"
+ rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
+ rmdir --ignore-fail-on-non-empty "${D}${datadir}/java"
+ if [ ! -d "${D}${sysconfdir}/init.d" ]; then
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${B}/osaf/services/infrastructure/nid/scripts/opensafd ${D}${sysconfdir}/init.d/
+ fi
+}
+
+FILES_${PN} += "${systemd_unitdir}/system/*.service"
+FILES_${PN}-staticdev += "${PKGLIBDIR}/*.a"
+
+INSANE_SKIP_${PN} = "dev-so"
+
+RDEPENDS_${PN} += "bash python"
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-Check-for-glibc-before-setting-CANT_USE_SEND_RECV_MS.patch b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-Check-for-glibc-before-setting-CANT_USE_SEND_RECV_MS.patch
new file mode 100644
index 000000000..6b86e3925
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-Check-for-glibc-before-setting-CANT_USE_SEND_RECV_MS.patch
@@ -0,0 +1,26 @@
+From 63619acf25151d4dade6d65732722ec4a710a5ac Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 09:54:25 -0700
+Subject: [PATCH] Check for glibc before setting CANT_USE_SEND_RECV_MSG
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/util/sys_defs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/util/sys_defs.h b/src/util/sys_defs.h
+index f720e2a..7314c63 100644
+--- a/src/util/sys_defs.h
++++ b/src/util/sys_defs.h
+@@ -813,7 +813,7 @@ extern int initgroups(const char *, int);
+ #define KERNEL_VERSION(a,b,c) (LINUX_VERSION_CODE + 1)
+ #endif
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,2,0)) \
+- || (__GLIBC__ < 2)
++ || (defined(__GLIBC__) && (__GLIBC__ < 2))
+ #define CANT_USE_SEND_RECV_MSG
+ #define DEF_SMTP_CACHE_DEMAND 0
+ #else
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-makedefs-Use-native-compiler-to-build-makedefs.test.patch b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-makedefs-Use-native-compiler-to-build-makedefs.test.patch
new file mode 100644
index 000000000..763a4a9b9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/0001-makedefs-Use-native-compiler-to-build-makedefs.test.patch
@@ -0,0 +1,64 @@
+From a0d0de10e4c5ab55bc2fa48798079e2876b1211d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 10:29:37 -0700
+Subject: [PATCH] makedefs: Use native compiler to build makedefs.test
+
+Its a binary used during build
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ makedefs | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/makedefs b/makedefs
+index 9fd4bc2..5ee7747 100644
+--- a/makedefs
++++ b/makedefs
+@@ -526,7 +526,7 @@ int main(int argc, char **argv)
+ exit(0);
+ }
+ EOF
+- ${CC-gcc} -o makedefs.test makedefs.test.c || exit 1
++ ${BUILD_CC-gcc} -o makedefs.test makedefs.test.c || exit 1
+ rm -f makedefs.test makedefs.test.[co]
+ fi;;
+ esac
+@@ -762,7 +762,7 @@ int main(int argc, char **argv)
+ exit(0);
+ }
+ EOF
+- ${CC-gcc} -o makedefs.test makedefs.test.c || exit 1
++ ${BUILD_CC-gcc} -o makedefs.test makedefs.test.c || exit 1
+ ./makedefs.test 2>/dev/null ||
+ CCARGS="$CCARGS -DNO_SIGSETJMP"
+ rm -f makedefs.test makedefs.test.[co]
+@@ -796,7 +796,7 @@ int main(int argc, char **argv)
+ &error) != 14);
+ }
+ EOF
+- ${CC-gcc} -o makedefs.test makedefs.test.c $icu_cppflags \
++ ${BUILD_CC-gcc} -o makedefs.test makedefs.test.c $icu_cppflags \
+ $icu_ldflags >/dev/null 2>&1
+ if ./makedefs.test 2>/dev/null ; then
+ CCARGS="$CCARGS $icu_cppflags"
+@@ -911,7 +911,7 @@ int main(void)
+ exit(ferror(stdout) ? 1 : 0);
+ }
+ EOF
+- eval ${CC-gcc} ${CCARGS} -o makedefs.test makedefs.test.c || exit 1
++ eval ${BUILD_CC-gcc} ${CCARGS} -o makedefs.test makedefs.test.c || exit 1
+ ./makedefs.test || exit 1
+ rm -f makedefs.test makedefs.test.[co]
+ }
+@@ -1067,7 +1067,7 @@ int main(void)
+ exit(ferror(stdout) ? 1 : 0);
+ }
+ EOF
+- eval ${CC-gcc} ${CCARGS} -o makedefs.test makedefs.test.c || exit 1
++ eval ${BUILD_CC-gcc} ${CCARGS} -o makedefs.test makedefs.test.c || exit 1
+ parm_val=`./makedefs.test` || exit 1
+ rm -f makedefs.test makedefs.test.[co]
+ eval ${parm_name}=\""\$parm_val"\"
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/aliasesdb b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/aliasesdb
new file mode 100755
index 000000000..855a64f70
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/aliasesdb
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+ALIASESDB_STAMP=/var/lib/misc/postfix.aliasesdb-stamp
+
+make_aliasesdb() {
+ if [ "$(/usr/sbin/postconf -h alias_database)" = "hash:/etc/aliases" ]
+ then
+ # /etc/aliases.db may be used by other MTA, make sure nothing
+ # has touched it since our last newaliases call
+ [ /etc/aliases -nt /etc/aliases.db ] ||
+ [ "$ALIASESDB_STAMP" -nt /etc/aliases.db ] ||
+ [ "$ALIASESDB_STAMP" -ot /etc/aliases.db ] || return 0
+ /usr/bin/newaliases
+ touch -r /etc/aliases.db "$ALIASESDB_STAMP"
+ else
+ /usr/bin/newaliases
+ fi
+}
+
+make_aliasesdb
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/check_hostname.sh b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/check_hostname.sh
new file mode 100755
index 000000000..37a0dd088
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/check_hostname.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+
+HOSTNAME=$(/bin/hostname)
+
+if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" -o ! -z "`echo $HOSTNAME | sed -n '/^[0-9]*\.[0-9].*/p'`" ]; then
+ # If hostname is invalid, and myhostname not existed in main.cf
+ /usr/sbin/postconf -h "myhostname" 2>/dev/null
+ if [ $? -ne 0 ]; then
+ # Set "localhost" to main.cf
+ /usr/sbin/postconf -e "myhostname=localhost"
+ fi
+fi
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/icu-config.patch b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/icu-config.patch
new file mode 100644
index 000000000..9bd9c2f03
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/icu-config.patch
@@ -0,0 +1,21 @@
+do not entertain cppflags from icu, this is because
+icu-config feeds the -I path without sysroot which
+caused native headers to be included and build is
+corrupted in any case its just adding -I/usr/include
+to the CCARGS which we loose nothing if its not
+entertained.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: postfix-3.2.2/makedefs
+===================================================================
+--- postfix-3.2.2.orig/makedefs
++++ postfix-3.2.2/makedefs
+@@ -799,7 +799,6 @@ EOF
+ ${BUILD_CC-gcc} -o makedefs.test makedefs.test.c $icu_cppflags \
+ $icu_ldflags >/dev/null 2>&1
+ if ./makedefs.test 2>/dev/null ; then
+- CCARGS="$CCARGS $icu_cppflags"
+ SYSLIBS="$SYSLIBS $icu_ldflags"
+ else
+ CCARGS="$CCARGS -DNO_EAI"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/install.patch b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/install.patch
new file mode 100644
index 000000000..d023680f3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/install.patch
@@ -0,0 +1,93 @@
+From 190650e1cd5700cd6950ead3fcb17ebcec192a2e Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 19 Jun 2015 17:14:58 +0900
+Subject: [PATCH] Change fixed postconf to a variable for cross-compiling
+
+Upstreamstatus: Inappropriate [embedded specific]
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+ postfix-install | 18 ++++++++++--------
+ 1 file changed, 10 insertions(+), 8 deletions(-)
+
+diff --git a/postfix-install b/postfix-install
+index 1662c3d..d11fa12 100644
+--- a/postfix-install
++++ b/postfix-install
+@@ -226,8 +226,8 @@ test -z "$non_interactive" -a ! -t 0 && {
+ exit 1
+ }
+
+-test -x bin/postconf || {
+- echo $0: Error: no bin/postconf file. Did you forget to run \"make\"? 1>&2
++test -x "$POSTCONF" || {
++ echo $0: Error: no $POSTCONF file. Did you forget to run \"make\"? 1>&2
+ exit 1
+ }
+
+@@ -248,7 +248,7 @@ do
+ case "$junk" in
+ *MAIL_VERSION*)
+ case "$mail_version" in
+- "") mail_version="`bin/postconf -dhx mail_version`" || exit 1
++ "") mail_version="`$POSTCONF -dhx mail_version`" || exit 1
+ esac
+ val=`echo "$junk" | sed 's/MAIL_VERSION$/'"$mail_version/g"` || exit 1
+ case "$val" in
+@@ -434,7 +434,7 @@ template files main.cf.proto and master.cf.proto."
+
+ : ${install_root=/}
+ : ${tempdir=`pwd`}
+-: ${config_directory=`bin/postconf -c conf -h -d config_directory`}
++: ${config_directory=`$POSTCONF -c conf -h -d config_directory`}
+
+ # Find out the location of installed configuration files.
+
+@@ -500,7 +500,7 @@ test -f $CONFIG_DIRECTORY/main.cf && {
+ case "$junk" in
+ "") eval unset $name;;
+ esac
+- eval : \${$name=\`bin/postconf -c $CONFIG_DIRECTORY -hx $name\`} ||
++ eval : \${$name=\`$POSTCONF -c $CONFIG_DIRECTORY -hx $name\`} ||
+ exit 1
+ done
+ }
+@@ -513,7 +513,7 @@ do
+ case "$junk" in
+ "") eval unset $name;;
+ esac
+- eval : \${$name=\`bin/postconf -c conf -d -hx $name\`} || exit 1
++ eval : \${$name=\`$POSTCONF -c conf -d -hx $name\`} || exit 1
+ done
+
+ # Override settings manually.
+@@ -639,6 +639,8 @@ README_DIRECTORY=$install_root$readme_directory
+ SHLIB_DIRECTORY=$install_root$shlib_directory
+ META_DIRECTORY=$install_root$meta_directory
+
++test "x$POSTCONF" != "x" || POSTCONF="bin/postconf"
++
+ # Avoid repeated tests for existence of these; default permissions suffice.
+
+ test -d $DAEMON_DIRECTORY || mkdir -p $DAEMON_DIRECTORY || exit 1
+@@ -810,7 +812,7 @@ IFS="$BACKUP_IFS"
+ # the wrong place when Postfix is being upgraded.
+
+ case "$mail_version" in
+-"") mail_version="`bin/postconf -dhx mail_version`" || exit 1
++"") mail_version="`$POSTCONF -dhx mail_version`" || exit 1
+ esac
+
+ # Undo MAIL_VERSION expansion at the end of a parameter value. If
+@@ -830,7 +832,7 @@ do
+ esac
+ done
+
+-bin/postconf -c $CONFIG_DIRECTORY -e \
++"$POSTCONF" -c $CONFIG_DIRECTORY -e \
+ "daemon_directory = $daemon_directory" \
+ "data_directory = $data_directory" \
+ "command_directory = $command_directory" \
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/internal_recipient b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/internal_recipient
new file mode 100644
index 000000000..6a8f2681b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/internal_recipient
@@ -0,0 +1 @@
+root@ permit_mynetworks,reject
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/main.cf b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/main.cf
new file mode 100644
index 000000000..e75c6fc0d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/main.cf
@@ -0,0 +1,105 @@
+compatibility_level = 2
+smtputf8_enable = no
+
+# Configure your domain and accounts
+#mydomain=sample.com
+#FQDN from gethostname
+#myhostname =
+mydomain=localdomain
+mydestination = $myhostname, localhost.localdomain localhost
+mynetworks = 127.0.0.1/8
+inet_interfaces = 127.0.0.1
+
+virtual_mailbox_domains = sample.com, other.net
+virtual_mailbox_maps = hash:/etc/postfix/virtual
+virtual_alias_maps = hash:/etc/postfix/virtual_alias
+
+alias_maps = hash:/etc/aliases
+
+# You'll start with the following lines for maildir storage
+virtual_mailbox_base = /var/spool/vmail
+virtual_uid_maps = static:`grep vmail /etc/passwd | cut -d ":" -f 3`
+virtual_gid_maps = static:`grep vmail /etc/passwd | cut -d ":" -f 4`
+
+
+# You'll start with the following lines for IMAP storage
+#virtual_transport = lmtp:unix:/var/lib/cyrus/socket/lmtp
+
+
+# General stuff here again
+#config_directory = /etc/postfix
+sample_directory = /etc/postfix
+queue_directory = /var/spool/postfix
+mail_spool_directory = /var/spool/mail
+readme_directory = no
+command_directory = /usr/sbin
+daemon_directory = @LIBEXECDIR@/postfix
+mail_owner = postfix
+setgid_group = postdrop
+unknown_local_recipient_reject_code = 450
+mynetworks_style = host
+debug_peer_level = 2
+sendmail_path = /usr/sbin/sendmail
+newaliases_path = /usr/bin/newaliases
+mailq_path = /usr/bin/mailq
+
+smtpd_data_restrictions =
+ permit_mynetworks,
+ reject_unauth_pipelining,
+ permit
+
+smtpd_client_restrictions =
+ permit_mynetworks,
+ # reject_unknown_client, # This can cause a lot of false rejects.
+ reject_invalid_hostname,
+ reject_rbl_client list.dsbl.org,
+ reject_rbl_client sbl.spamhaus.org,
+ reject_rbl_client cbl.abuseat.org,
+ reject_rbl_client dul.dnsbl.sorbs.net,
+ permit
+
+smtpd_helo_required = yes
+smtpd_helo_restrictions =
+ permit_mynetworks,
+ reject_unauth_pipelining,
+ # reject_non_fqdn_hostname, # This can cause a lot of false rejects.
+ # reject_unknown_hostname, # This can cause a lot of false rejects.
+ reject_invalid_hostname,
+ permit
+
+smtpd_sender_restrictions =
+ permit_mynetworks,
+ reject_non_fqdn_sender,
+ # check_sender_access hash:/etc/postfix/access_domains,
+ reject_unknown_sender_domain,
+ permit
+
+smtpd_recipient_restrictions =
+ permit_mynetworks,
+ permit_sasl_authenticated,
+ reject_unauth_destination,
+
+ # check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
+ # check_helo_access pcre:/etc/postfix/helo_checks.pcre,
+
+ # check_client_access hash:/etc/postfix/maps/access_client,
+ # check_client_access hash:/etc/postfix/maps/exceptions_client,
+ # check_helo_access hash:/etc/postfix/maps/access_helo,
+ # check_helo_access hash:/etc/postfix/maps/verify_helo,
+ # check_sender_access hash:/etc/postfix/maps/access_sender,
+ # check_sender_access hash:/etc/postfix/maps/verify_sender,
+ # check_recipient_access hash:/etc/postfix/maps/access_recipient,
+
+ # reject_multi_recipient_bounce,
+ reject_non_fqdn_recipient,
+ reject_unknown_recipient_domain,
+ # reject_unlisted_recipient,
+ #check_policy_service unix:private/policy,
+
+ # check_sender_access hash:/etc/postfix/maps/no_verify_sender,
+ # check_sender_access hash:/etc/postfix/access_domains,
+ # reject_unverified_sender,
+ # reject_unverified_recipient
+ check_recipient_access hash:/etc/postfix/internal_recipient
+
+disable_vrfy_command = yes
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/makedefs.patch b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/makedefs.patch
new file mode 100644
index 000000000..98d5f7ed6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/makedefs.patch
@@ -0,0 +1,116 @@
+From 4f49e2ce420fb3c17415937530493158ef312733 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 19 Jun 2015 16:45:54 +0900
+Subject: [PATCH] 1)remove RANLIB, SYSLIBS, AR and get them from env.
+
+2)reference sysroot when searching header files
+3)include sysroot path instead of absolute include path
+for Linux2 and Linux3 systems.
+4)for non-native build, search STAGING_BASELIBDIR/LIBDIR
+ native build, search host library path for nsl and resolv library
+ which comes from libc
+
+Upstreamstatus: Inappropriate [embedded specific]
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+ makedefs | 27 +++++++++++----------------
+ 1 file changed, 11 insertions(+), 16 deletions(-)
+
+diff --git a/makedefs b/makedefs
+index 8b84e47..893fb0d 100644
+--- a/makedefs
++++ b/makedefs
+@@ -170,9 +170,6 @@ echo "# pie=$pie"
+
+ # Defaults for most sane systems
+
+-RANLIB=ranlib
+-SYSLIBS=
+-AR=ar
+ ARFL=rv
+
+ # Ugly function to make our error message more visible among the
+@@ -424,12 +421,12 @@ case "$SYSTEM.$RELEASE" in
+ case "$CCARGS" in
+ *-DNO_DB*) ;;
+ *-DHAS_DB*) ;;
+- *) if [ -f /usr/include/db.h ]
++ *) if [ -f "$BUILD_SYSROOT"/usr/include/db.h ]
+ then
+ : we are all set
+- elif [ -f /usr/include/db/db.h ]
++ elif [ -f "$BUILD_SYSROOT"/usr/include/db/db.h ]
+ then
+- CCARGS="$CCARGS -I/usr/include/db"
++ CCARGS="$CCARGS -I"$BUILD_SYSROOT"/usr/include/db"
+ else
+ # No, we're not going to try db1 db2 db3 etc.
+ # On a properly installed system, Postfix builds
+@@ -438,12 +435,12 @@ case "$SYSTEM.$RELEASE" in
+ echo "Install the appropriate db*-devel package first." 1>&2
+ exit 1
+ fi
+- SYSLIBS="-ldb"
++ SYSLIBS="$SYSLIBS -ldb"
+ ;;
+ esac
+ for name in nsl resolv $GDBM_LIBS
+ do
+- for lib in /usr/lib64 /lib64 /usr/lib /lib
++ for lib in $BUILD_SYSROOT_NSL_PATH
+ do
+ test -e $lib/lib$name.a -o -e $lib/lib$name.so && {
+ SYSLIBS="$SYSLIBS -l$name"
+@@ -463,7 +460,7 @@ case "$SYSTEM.$RELEASE" in
+ if [ `expr "X$CCARGS" : "X.*-DNO_EPOLL"` -gt 0 ]
+ then
+ :
+- elif [ ! -e /usr/include/sys/epoll.h ]
++ elif [ ! -e "$BUILD_SYSROOT"/usr/include/sys/epoll.h ]
+ then
+ echo CCARGS="$CCARGS -DNO_EPOLL"
+ else
+@@ -487,8 +484,6 @@ int main(int argc, char **argv)
+ }
+ EOF
+ ${CC-gcc} -o makedefs.test makedefs.test.c || exit 1
+- ./makedefs.test 2>/dev/null ||
+- CCARGS="$CCARGS -DNO_EPOLL"
+ rm -f makedefs.test makedefs.test.[co]
+ fi;;
+ esac
+@@ -504,12 +499,12 @@ EOF
+ case "$CCARGS" in
+ *-DNO_DB*) ;;
+ *-DHAS_DB*) ;;
+- *) if [ -f /usr/include/db.h ]
++ *) if [ -f "$BUILD_SYSROOT"/usr/include/db.h ]
+ then
+ : we are all set
+- elif [ -f /usr/include/db/db.h ]
++ elif [ -f "$BUILD_SYSROOT"/usr/include/db/db.h ]
+ then
+- CCARGS="$CCARGS -I/usr/include/db"
++ CCARGS="$CCARGS -I"$BUILD_SYSROOT"/usr/include/db"
+ else
+ # On a properly installed system, Postfix builds
+ # by including <db.h> and by linking with -ldb
+@@ -517,12 +512,12 @@ EOF
+ echo "Install the appropriate db*-devel package first." 1>&2
+ exit 1
+ fi
+- SYSLIBS="-ldb"
++ SYSLIBS="$SYSLIBS -ldb"
+ ;;
+ esac
+ for name in nsl resolv
+ do
+- for lib in /usr/lib64 /lib64 /usr/lib /usr/lib/* /lib /lib/*
++ for lib in $BUILD_SYSROOT_NSL_PATH
+ do
+ test -e $lib/lib$name.a -o -e $lib/lib$name.so && {
+ SYSLIBS="$SYSLIBS -l$name"
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix
new file mode 100755
index 000000000..8c7a60175
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix
@@ -0,0 +1,94 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: postfix MTA
+# Default-Start: 2345
+# Default-Stop: 016
+# Short-Description: start and stop postfix
+# Description: Postfix is a Mail Transport Agent, which is the program
+# that moves mail from one machine to another.
+### END INIT INFO
+
+success() {
+ echo " Successful"
+ exit 0
+}
+
+fail() {
+ echo " Failed"
+ exit 1
+
+}
+
+check_return () {
+ local ret="$1"
+
+ if [ "$ret" = "0" ]; then
+ success
+ else
+ fail
+ fi
+}
+
+PIDFile=/var/spool/postfix/pid/master.pid
+case "$1" in
+
+ start)
+ echo -n "Starting Postfix..."
+ if [ ! -e /etc/aliases.db ]; then
+ # The alias database is necessary for postfix to work correctly.
+ echo "Creating aliases database ..."
+ newaliases
+ fi
+ if ! postfix status >/dev/null 2>&1; then
+ /usr/sbin/check_hostname.sh
+ postfix start
+ check_return $?
+ else
+ success
+ fi
+ ;;
+
+ stop)
+ echo -n "Stopping Postfix..."
+ if postfix status >/dev/null 2>&1; then
+ postfix stop
+ check_return $?
+ else
+ success
+ fi
+ ;;
+
+ reload)
+ echo -n "Reloading Postfix..."
+ if postfix status >/dev/null 2>&1; then
+ postfix reload
+ check_return $?
+ else
+ postfix start
+ check_return $?
+ fi
+ ;;
+
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+
+ status)
+ if postfix status >/dev/null 2>&1; then
+ pid=`sed -e 's/\s//g' $PIDFile`
+ echo "The Postfix mail system is running (PID: $pid)"
+ exit 0
+ else
+ echo "The Postfix mail system is not running"
+ exit 1
+ fi
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|status|reload|restart}"
+ exit 1
+ ;;
+esac
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix-install.patch b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix-install.patch
new file mode 100644
index 000000000..45479bd52
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix-install.patch
@@ -0,0 +1,26 @@
+Index: postfix-3.2.2/postfix-install
+===================================================================
+--- postfix-3.2.2.orig/postfix-install
++++ postfix-3.2.2/postfix-install
+@@ -843,7 +843,7 @@ IFS="$BACKUP_IFS"
+ # the wrong place when Postfix is being upgraded.
+
+ case "$mail_version" in
+-"") mail_version="`$POSTCONF -dhx mail_version`" || exit 1
++"") mail_version="`$POSTCONF -c $CONFIG_DIRECTORY -dhx mail_version`" || exit 1
+ esac
+
+ # Undo MAIL_VERSION expansion at the end of a parameter value. If
+Index: postfix-3.2.2/Makefile.in
+===================================================================
+--- postfix-3.2.2.orig/Makefile.in
++++ postfix-3.2.2/Makefile.in
+@@ -20,7 +20,7 @@ META = meta/main.cf.proto meta/master.cf
+ EXPAND = sed -e "s;\$${LIB_PREFIX};$(LIB_PREFIX);" \
+ -e "s;\$${LIB_SUFFIX};$(LIB_SUFFIX);"
+ SHLIB_DIR_OVERRIDE = \
+- $${shlib_directory:-`$(SHLIB_ENV) bin/postconf -dhx shlib_directory`}
++ $${shlib_directory:-`$(SHLIB_ENV) $(POSTCONF) -dhx shlib_directory`}
+
+ default: update
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix.service b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix.service
new file mode 100644
index 000000000..30d54a440
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/files/postfix.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Postfix Mail Transport Agent
+After=syslog.target network.target
+Conflicts=sendmail.service exim.service
+
+[Service]
+Type=forking
+PIDFile=@LOCALSTATEDIR@/spool/postfix/pid/master.pid
+ExecStartPre=-@SBINDIR@/check_hostname.sh
+ExecStartPre=-@LIBEXECDIR@/postfix/aliasesdb
+ExecStart=@SBINDIR@/postfix start
+ExecReload=@SBINDIR@/postfix reload
+ExecStop=@SBINDIR@/postfix stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/postfix.inc b/meta-openembedded/meta-networking/recipes-daemons/postfix/postfix.inc
new file mode 100644
index 000000000..09447d50a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/postfix.inc
@@ -0,0 +1,262 @@
+SUMMARY = "Postfix Mail Transport Agent"
+DESCRIPTION = "Postfix is Wietse Venema's mail server that started life at \
+IBM research as an alternative to the widely-used Sendmail program. \
+Postfix attempts to be fast, easy to administer, and secure. The outsidei \
+has a definite Sendmail-ish flavor, but the inside is completely different."
+
+HOMEPAGE= "http://www.postfix.org"
+SECTION = "mail"
+DEPENDS = "db icu libpcre openssl postfix-native \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ldap', 'openldap', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'sasl', 'cyrus-sasl', '', d)} \
+"
+DEPENDS_class-native = "db-native icu-native openssl-native libpcre-native"
+
+LICENSE = "IPL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=64375f37431336ea1b1b3005fe3fa354"
+
+SRC_URI = "ftp://ftp.porcupine.org/mirrors/postfix-release/official/postfix-${PV}.tar.gz \
+ file://makedefs.patch \
+ file://install.patch \
+ file://main.cf \
+ file://postfix \
+ file://internal_recipient \
+ file://postfix.service \
+ file://aliasesdb \
+ file://check_hostname.sh \
+"
+
+S = "${WORKDIR}/postfix-${PV}"
+
+CLEANBROKEN = "1"
+
+BBCLASSEXTEND = "native"
+
+inherit update-rc.d useradd update-alternatives systemd
+
+INITSCRIPT_NAME = "postfix"
+INITSCRIPT_PARAMS = "start 58 3 4 5 . stop 13 0 1 6 ."
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = \
+"-d /var/spool/postfix -r -g postfix --shell /bin/false postfix; \
+ -d /var/spool/vmail -r -g vmail --shell /bin/false vmail \
+"
+GROUPADD_PARAM_${PN} = "--system postfix;--system postdrop;--system vmail"
+
+export SYSLIBS = "${LDFLAGS}"
+
+# CCARGS specifies includes, defines
+# AUXLIBS specifies libraries
+# Linux2/Linux3 has HAS_DB defined
+# makedefs will make CC to be CC+CCARGS
+
+# ldap support
+export CCARGS-ldap = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ldap', '-DHAS_LDAP', '', d)}"
+export AUXLIBS-ldap = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ldap', '-lldap -llber', '', d)}"
+
+# no native openldap
+export CCARGS-ldap_class-native = ""
+export AUXLIBS-ldap_class-native = ""
+
+export CCARGS-nonis_libc-musl = "-DNO_NIS"
+export CCARGS-nonis = ""
+
+# SASL support -DUSE_LDAP_SASL -DUSE_SASL_AUTH
+# current openldap didn't enable SASL
+export CCARGS-sasl = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'sasl', '-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I${STAGING_INCDIR}/sasl', '', d)}"
+export AUXLIBS-sasl = "\
+ ${@bb.utils.contains('DISTRO_FEATURES', 'sasl', '-lsasl2', '', d)}"
+export CCARGS-sasl_class-native = ""
+export AUXLIBS-sasl_class-native = ""
+
+# PCRE, TLS support default
+export CCARGS = "${CFLAGS} -DHAS_PCRE -DUSE_TLS -I${STAGING_INCDIR}/openssl ${CCARGS-ldap} ${CCARGS-sasl} ${CCARGS-nonis}"
+export AUXLIBS = "-lpcre -lssl -lcrypto ${AUXLIBS-sasl} ${AUXLIBS-ldap}"
+export POSTCONF = "${STAGING_DIR_NATIVE}${sbindir_native}/postconf"
+
+export CCARGS-nonis_libc-musl = "-DNO_NIS"
+# OPT,DEBUG is aready in CFLAGS
+# ignore the OPTS="CC=$CC" in Makefile it will not use the CC=$CC $CCARGS
+EXTRA_OEMAKE += "OPT= DEBUG= OPTS= "
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS
+ local native_build
+
+ native_build="${@['0', '1'][bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d)]}"
+
+ # if not native build, then pass SYSTEM and RELEASE to makedefs
+ if [ "${native_build}" != "1" ]; then
+ # uname -s for target
+ SYSTEM="Linux"
+
+ # uname -r, use 2.6 as bottomline, even target kernel ver > 2.6
+ RELEASE="2.6.34"
+ sed -i -e \
+ "s:\$(SHELL) makedefs):\$(SHELL) makedefs $SYSTEM $RELEASE):" \
+ ${S}/Makefile.in
+ export BUILD_SYSROOT="${STAGING_DIR_HOST}"
+ export BUILD_SYSROOT_NSL_PATH="${STAGING_BASELIBDIR} \
+ ${STAGING_LIBDIR}"
+ else
+ # native build
+ export BUILD_SYSROOT="${STAGING_DIR_NATIVE}"
+
+ # ubuntu x86 host: /lib/x86_64-linux-gnu(64) /lib/i386-linux-gnu (32)
+ # on 64 bits, 32 libs in i386-linux-gnu
+ # let makedefs finds nsl and resolv libs, host CC will link
+ # the correct libraries
+ BUILD_SYSROOT_NSL_PATH="$(${CC} -print-search-dirs 2>/dev/null | \
+ sed -n '/^libraries: =/s/libraries: =//p' | \
+ sed -e 's/:/\n/g' | xargs -n1 readlink -f | \
+ grep -v 'gcc\|/[0-9.]\+$' | sort -u)"
+ if [ -z "$BUILD_SYSROOT_NSL_PATH" ]; then
+ BUILD_SYSROOT_NSL_PATH="/usr/lib64 /lib64 \
+ /lib/x86_64-linux-gnu \
+ /usr/lib /lib \
+ /lib/i386-linux-gnu"
+ fi
+ export BUILD_SYSROOT_NSL_PATH
+ fi
+
+ oe_runmake makefiles
+ oe_runmake
+}
+
+do_install_prepend_class-native() {
+ export POSTCONF="bin/postconf"
+}
+
+SYSTEMD_SERVICE_${PN} = "postfix.service"
+
+do_install () {
+ sh ./postfix-install 'install_root=${D}' \
+ 'config_directory=${sysconfdir}/postfix' \
+ 'daemon_directory=${libexecdir}/postfix' \
+ 'command_directory=${sbindir}' \
+ 'queue_directory=${localstatedir}/spool/postfix' \
+ 'sendmail_path=${sbindir}/sendmail.postfix' \
+ 'newaliases_path=${bindir}/newaliases' \
+ 'mailq_path=${bindir}/mailq' \
+ 'manpage_directory=${mandir}' \
+ 'readme_directory=${datadir}/doc/postfix' \
+ 'data_directory=${localstatedir}/lib/postfix' \
+ -non-interactive
+ rm -rf ${D}${localstatedir}/spool/postfix
+ mv ${D}${sysconfdir}/postfix/main.cf ${D}${sysconfdir}/postfix/sample-main.cf
+ install -m 755 ${S}/bin/smtp-sink ${D}/${sbindir}/
+ install -d ${D}${sysconfdir}/init.d
+ install -m 644 ${WORKDIR}/main.cf ${D}${sysconfdir}/postfix/main.cf
+ sed -i 's#@LIBEXECDIR@#${libexecdir}#' ${D}${sysconfdir}/postfix/main.cf
+
+ install -m 755 ${WORKDIR}/check_hostname.sh ${D}${sbindir}/
+
+ install -m 755 ${WORKDIR}/postfix ${D}${sysconfdir}/init.d/postfix
+ install -m 644 ${WORKDIR}/internal_recipient ${D}${sysconfdir}/postfix/internal_recipient
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/postfix.service ${D}${systemd_unitdir}/system
+ sed -i -e 's#@LIBEXECDIR@#${libexecdir}#g' ${D}${systemd_unitdir}/system/postfix.service
+ sed -i -e 's#@LOCALSTATEDIR@#${localstatedir}#g' ${D}${systemd_unitdir}/system/postfix.service
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/postfix.service
+
+ install -m 0755 ${WORKDIR}/aliasesdb ${D}${libexecdir}/postfix
+
+ install -m 770 -d ${D}${localstatedir}/spool/postfix
+ chown postfix:postfix ${D}${localstatedir}/spool/postfix
+
+ install -m 0755 -d ${D}${localstatedir}/lib/postfix
+ chown postfix:nogroup ${D}${localstatedir}/lib/postfix
+ install -m 0755 -d ${D}${localstatedir}/spool/postfix
+ chown root:postfix ${D}${localstatedir}/spool/postfix
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/active
+ chown postfix:root ${D}${localstatedir}/spool/postfix/active
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/bounce
+ chown postfix:root ${D}${localstatedir}/spool/postfix/bounce
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/corrupt
+ chown postfix:root ${D}${localstatedir}/spool/postfix/corrupt
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/defer
+ chown postfix:root ${D}${localstatedir}/spool/postfix/defer
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/deferred
+ chown postfix:root ${D}${localstatedir}/spool/postfix/deferred
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/flush
+ chown postfix:root ${D}${localstatedir}/spool/postfix/flush
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/hold
+ chown postfix:root ${D}${localstatedir}/spool/postfix/hold
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/incoming
+ chown postfix:root ${D}${localstatedir}/spool/postfix/incoming
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/saved
+ chown postfix:root ${D}${localstatedir}/spool/postfix/saved
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/trace
+ chown postfix:root ${D}${localstatedir}/spool/postfix/trace
+ install -m 0730 -d ${D}${localstatedir}/spool/postfix/maildrop
+ chown postfix:postdrop ${D}${localstatedir}/spool/postfix/maildrop
+ install -m 0755 -d ${D}${localstatedir}/spool/postfix/pid
+ chown root:root ${D}${localstatedir}/spool/postfix/pid
+ install -m 0700 -d ${D}${localstatedir}/spool/postfix/private
+ chown postfix:root ${D}${localstatedir}/spool/postfix/private
+ install -m 0710 -d ${D}${localstatedir}/spool/postfix/public
+ chown postfix:postdrop ${D}${localstatedir}/spool/postfix/public
+ install -m 0755 -d ${D}${localstatedir}/spool/vmail
+ chown vmail:vmail ${D}${localstatedir}/spool/vmail
+
+ chown :postdrop ${D}${sbindir}/postqueue
+ chown :postdrop ${D}${sbindir}/postdrop
+ chmod g+s ${D}${sbindir}/postqueue
+ chmod g+s ${D}${sbindir}/postdrop
+}
+
+do_install_append_class-native() {
+ ln -sf ../sbin/sendmail.postfix ${D}${bindir}/newaliases
+ ln -sf ../sbin/sendmail.postfix ${D}${bindir}/mailq
+}
+
+do_install_append_class-target() {
+ # Remove references to buildmachine paths in target makedefs.out
+ sed -i 's:-fdebug-prefix-map[^ ]*::g; s:--sysroot=${STAGING_DIR_TARGET}::g' ${D}/etc/postfix/makedefs.out
+}
+
+ALTERNATIVE_${PN} = "sendmail"
+ALTERNATIVE_TARGET[sendmail] = "${sbindir}/sendmail.postfix"
+ALTERNATIVE_LINK_NAME[sendmail] = "${sbindir}/sendmail"
+ALTERNATIVE_PRIORITY = "120"
+
+ALTERNATIVE_${PN}-doc += "mailq.1 newaliases.1 sendmail.1"
+ALTERNATIVE_LINK_NAME[mailq.1] = "${mandir}/man1/mailq.1"
+ALTERNATIVE_LINK_NAME[newaliases.1] = "${mandir}/man1/newaliases.1"
+ALTERNATIVE_LINK_NAME[sendmail.1] = "${mandir}/man1/sendmail.1"
+
+PACKAGE_WRITE_DEPS += "postfix-native"
+pkg_postinst_${PN} () {
+ if [ "x$D" = "x" ]; then
+ touch /etc/aliases
+ newaliases
+
+ # generate virtual_alias, default is hash
+ touch /etc/postfix/virtual_alias
+ postmap /etc/postfix/virtual_alias
+ else
+ if ${@'true' if 'linuxstdbase' in d.getVar('DISTROOVERRIDES', False) else 'false'}; then
+ # /usr/lib/sendmail is required by LSB core test
+ [ ! -L $D/usr/lib/sendmail ] && ln -sf ${sbindir}/sendmail $D/usr/lib/
+ fi
+
+ touch $D/etc/aliases
+ # This can fail depending on host setup
+ if ! newaliases -C $D/etc/postfix/main.cf -oA$D/etc/aliases; then
+ $INTERCEPT_DIR/postinst_intercept delay_to_first_boot ${PKG} mlprefix=${MLPREFIX}
+ exit 0
+ fi
+ touch $D/etc/postfix/virtual_alias
+ postmap -c $D/etc/postfix $D/etc/postfix/virtual_alias
+
+ fi
+}
+
+# Exclude .debug directories from the main package
+FILES_${PN} = "${sysconfdir} ${localstatedir} ${bindir}/* ${sbindir}/* \
+ ${libexecdir}/* ${systemd_unitdir}/*"
+FILES_${PN}-dbg += "${libexecdir}/postfix/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/postfix/postfix_3.2.2.bb b/meta-openembedded/meta-networking/recipes-daemons/postfix/postfix_3.2.2.bb
new file mode 100644
index 000000000..89af406ac
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/postfix/postfix_3.2.2.bb
@@ -0,0 +1,9 @@
+require postfix.inc
+
+SRC_URI += "file://0001-Check-for-glibc-before-setting-CANT_USE_SEND_RECV_MS.patch \
+ file://0001-makedefs-Use-native-compiler-to-build-makedefs.test.patch \
+ file://postfix-install.patch \
+ file://icu-config.patch \
+ "
+SRC_URI[md5sum] = "aea073a9b0bea5bdb590460a270a4aa0"
+SRC_URI[sha256sum] = "d06849418d119d09366997b2b481bb23f737629769b4e4a52da42fb3ad8b0576"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/basic.conf.patch b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/basic.conf.patch
new file mode 100644
index 000000000..4967bed1e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/basic.conf.patch
@@ -0,0 +1,21 @@
+Upstream-Status: Inappropriate [configuration]
+
+proftpd tries to get the IP address from the hostname.
+Unluckily now the hostname is not properly configured in /etc/hosts.
+We can use this patch as a workaround.
+
+Author: Dexuan Cui <dexuan.cui@intel.com>
+Tue Oct 25 12:59:27 CST 2011
+
+--- proftpd-1.3.3c.orig/sample-configurations/basic.conf
++++ proftpd-1.3.3c/sample-configurations/basic.conf
+@@ -7,6 +7,9 @@
+ ServerType standalone
+ DefaultServer on
+
++#By default we bind to all interfaces.
++DefaultAddress 0.0.0.0
++
+ # Port 21 is the standard FTP port.
+ Port 21
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/build_fixup.patch b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/build_fixup.patch
new file mode 100644
index 000000000..9816d4d22
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/build_fixup.patch
@@ -0,0 +1,112 @@
+Upstream-Status: Inappropriate [configuration]
+
+combined the following patches into one:
+make, move-pidfile-to-var-run, move-runfile-to-var-run
+
+move pidfile to /var/run
+redefine PR_RUN_DIR as ${localstatedir}/run
+
+Signed-off-By: Armin Kuster <akuster808@gmail.com>
+
+
+Index: proftpd-1.3.6/Make.rules.in
+===================================================================
+--- proftpd-1.3.6.orig/Make.rules.in
++++ proftpd-1.3.6/Make.rules.in
+@@ -30,9 +30,9 @@ INSTALL=@INSTALL@
+ INSTALL_STRIP=@INSTALL_STRIP@
+ INSTALL_USER=@install_user@
+ INSTALL_GROUP=@install_group@
+-INSTALL_BIN=$(INSTALL) $(INSTALL_STRIP) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
+-INSTALL_SBIN=$(INSTALL) $(INSTALL_STRIP) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755
+-INSTALL_MAN=$(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0644
++INSTALL_BIN=$(INSTALL) -m 0755
++INSTALL_SBIN=$(INSTALL) -m 0755
++INSTALL_MAN=$(INSTALL) -m 0644
+
+ RM=rm -f
+ SHELL=@CONFIG_SHELL@
+Index: proftpd-1.3.6/Makefile.in
+===================================================================
+--- proftpd-1.3.6.orig/Makefile.in
++++ proftpd-1.3.6/Makefile.in
+@@ -105,7 +105,6 @@ check: proftpd$(EXEEXT)
+ $(DESTDIR)$(localedir) $(DESTDIR)$(includedir) $(DESTDIR)$(includedir)/proftpd $(DESTDIR)$(libdir) $(DESTDIR)$(pkgconfigdir) $(DESTDIR)$(libdir)/proftpd $(DESTDIR)$(libexecdir) $(DESTDIR)$(localstatedir) $(DESTDIR)$(sysconfdir) $(DESTDIR)$(bindir) $(DESTDIR)$(sbindir) $(DESTDIR)$(mandir) $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(mandir)/man5 $(DESTDIR)$(mandir)/man8:
+ @if [ ! -d $@ ]; then \
+ mkdir -p $@; \
+- chown $(INSTALL_USER):$(INSTALL_GROUP) $@; \
+ chmod 0755 $@; \
+ fi
+
+@@ -115,7 +114,6 @@ install-proftpd: proftpd $(DESTDIR)$(inc
+ rm -f $(DESTDIR)$(sbindir)/in.proftpd ; \
+ fi
+ ln -s proftpd $(DESTDIR)$(sbindir)/in.proftpd
+- -chown -h $(INSTALL_USER):$(INSTALL_GROUP) $(DESTDIR)$(sbindir)/in.proftpd
+
+ install-libs: $(DESTDIR)$(libdir)/proftpd
+ cd lib/ && $(MAKE) install
+@@ -152,11 +150,11 @@ install-utils: $(DESTDIR)$(sbindir) $(DE
+ $(INSTALL_SBIN) ftpshut $(DESTDIR)$(sbindir)/ftpshut
+ $(INSTALL_BIN) ftptop $(DESTDIR)$(bindir)/ftptop
+ $(INSTALL_BIN) ftpwho $(DESTDIR)$(bindir)/ftpwho
+- $(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755 src/prxs $(DESTDIR)$(bindir)/prxs
++ $(INSTALL) -m 0755 src/prxs $(DESTDIR)$(bindir)/prxs
+
+ install-conf: $(DESTDIR)$(sysconfdir)
+ if [ ! -f $(DESTDIR)$(sysconfdir)/proftpd.conf ] ; then \
+- $(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0644 \
++ $(INSTALL) -m 0644 \
+ $(top_srcdir)/sample-configurations/basic.conf \
+ $(DESTDIR)$(sysconfdir)/proftpd.conf ; \
+ fi
+Index: proftpd-1.3.6/configure
+===================================================================
+--- proftpd-1.3.6.orig/configure
++++ proftpd-1.3.6/configure
+@@ -41777,7 +41777,7 @@ _ACEOF
+
+
+ cat >>confdefs.h <<_ACEOF
+-#define PR_RUN_DIR "`eval echo "${localstatedir}"`"
++#define PR_RUN_DIR "`eval echo "${localstatedir}"/run/`"
+ _ACEOF
+
+
+@@ -41787,7 +41787,7 @@ _ACEOF
+
+
+ cat >>confdefs.h <<_ACEOF
+-#define PR_PID_FILE_PATH "`eval echo "${localstatedir}/proftpd.pid"`"
++#define PR_PID_FILE_PATH "`eval echo "${localstatedir}/run/proftpd.pid"`"
+ _ACEOF
+
+
+Index: proftpd-1.3.6/configure.in
+===================================================================
+--- proftpd-1.3.6.orig/configure.in
++++ proftpd-1.3.6/configure.in
+@@ -3833,8 +3833,8 @@ locale_dir="`eval echo ${locale_dir}`"
+ AC_DEFINE_UNQUOTED(PR_LOCALE_DIR, "`eval echo "${locale_dir}"`", [Define the locale directory])
+
+ AC_DEFINE_UNQUOTED(PR_RUN_DIR, "`eval echo "${localstatedir}"`", [Define the run directory])
+-AC_DEFINE_UNQUOTED(PR_CONFIG_FILE_PATH, "`eval echo "${sysconfdir}/proftpd.conf"`", [Define the configuration file path])
+-AC_DEFINE_UNQUOTED(PR_PID_FILE_PATH, "`eval echo "${localstatedir}/proftpd.pid"`", [Define the PID file path])
++AC_DEFINE_UNQUOTED(PR_CONFIG_FILE_PATH, "`eval echo "${sysconfdir}/run/proftpd.conf"`", [Define the configuration file path])
++AC_DEFINE_UNQUOTED(PR_PID_FILE_PATH, "`eval echo "${localstatedir}/run/proftpd.pid"`", [Define the PID file path])
+
+ prefix="$pr_saved_prefix"
+ exec_prefix="$pr_saved_exec_prefix"
+Index: proftpd-1.3.6/lib/libcap/Makefile
+===================================================================
+--- proftpd-1.3.6.orig/lib/libcap/Makefile
++++ proftpd-1.3.6/lib/libcap/Makefile
+@@ -26,7 +26,7 @@ OBJS=$(addsuffix .o, $(FILES))
+ all: $(LIBNAME)
+
+ _makenames: _makenames.c cap_names.sed
+- $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@
++ $(BUILD_CC) $(CFLAGS) $(LDFLAGS) $< -o $@
+
+ cap_names.h: _makenames
+ ./_makenames > cap_names.h
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/close-RequireValidShell-check.patch b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/close-RequireValidShell-check.patch
new file mode 100644
index 000000000..c64535cac
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/close-RequireValidShell-check.patch
@@ -0,0 +1,27 @@
+close RequireValidShell check
+
+Upstream-Status: Inappropriate [configuration]
+
+close RequireValidShell check since we like to make /bin/false as shell
+for ftp user
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ sample-configurations/basic.conf | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/sample-configurations/basic.conf b/sample-configurations/basic.conf
+index 314eb79..abcb284 100644
+--- a/sample-configurations/basic.conf
++++ b/sample-configurations/basic.conf
+@@ -53,6 +53,7 @@ AllowOverwrite on
+ # We want clients to be able to login with "anonymous" as well as "ftp"
+ UserAlias anonymous ftp
+
++ RequireValidShell off
+ # Limit the maximum number of anonymous logins
+ MaxClients 10
+
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/contrib.patch b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/contrib.patch
new file mode 100644
index 000000000..7e2a8e3ce
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/contrib.patch
@@ -0,0 +1,42 @@
+The contrib directory now contains its own Makefile which is
+used during installation. It was required to pass DESTDIR through
+when it gets called from the base Makefile.
+
+Upstream-Status: Pending
+
+Signed-off-by: Kevin Strasser <kevin.strasser@linux.intel.com>
+---
+ Makefile.in | 2 +-
+ contrib/Makefile.in | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 5b2e683..ee72fe1 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -120,7 +120,7 @@ install-modules: $(DESTDIR)$(libexecdir) $(DESTDIR)$(sysconfdir)
+ test -z "$(SHARED_MODULE_OBJS)" -a -z "$(SHARED_MODULE_DIRS)" -a -z "$(STATIC_MODULE_DIRS)" || (cd modules/ && $(MAKE) install)
+
+ install-utils: $(DESTDIR)$(sbindir) $(DESTDIR)$(bindir)
+- cd contrib/ && $(MAKE) install-utils
++ cd contrib/ && $(MAKE) DESTDIR=${DESTDIR} install-utils
+ $(INSTALL_BIN) ftpcount $(DESTDIR)$(bindir)/ftpcount
+ $(INSTALL_BIN) ftpdctl $(DESTDIR)$(bindir)/ftpdctl
+ $(INSTALL_SBIN) ftpscrub $(DESTDIR)$(sbindir)/ftpscrub
+diff --git a/contrib/Makefile.in b/contrib/Makefile.in
+index 5bcc038..51d248c 100644
+--- a/contrib/Makefile.in
++++ b/contrib/Makefile.in
+@@ -18,6 +18,6 @@ Makefile: Makefile.in ../config.status
+ cd ../ && ./config.status
+
+ install-utils:
+- $(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755 ftpasswd $(DESTDIR)$(bindir)/ftpasswd
+- $(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755 ftpmail $(DESTDIR)$(bindir)/ftpmail
+- $(INSTALL) -o $(INSTALL_USER) -g $(INSTALL_GROUP) -m 0755 ftpquota $(DESTDIR)$(bindir)/ftpquota
++ $(INSTALL) -m 0755 ftpasswd $(DESTDIR)$(bindir)/ftpasswd
++ $(INSTALL) -m 0755 ftpmail $(DESTDIR)$(bindir)/ftpmail
++ $(INSTALL) -m 0755 ftpquota $(DESTDIR)$(bindir)/ftpquota
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/default b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/default
new file mode 100644
index 000000000..b31f36ce2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/default
@@ -0,0 +1,9 @@
+# Defaults for proftpd initscript
+
+# Master system-wide proftpd switch. The initscript
+# will not run if it is not set to yes.
+RUN="yes"
+
+# Default options.
+# For more exhaustive logging, try "-d 3".
+OPTIONS=""
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd-basic.init b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd-basic.init
new file mode 100644
index 000000000..01c998c92
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd-basic.init
@@ -0,0 +1,220 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: proftpd
+# Required-Start: $remote_fs $syslog $local_fs $network
+# Required-Stop: $remote_fs $syslog $local_fs $network
+# Should-Start: $named
+# Should-Stop: $named
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Starts ProFTPD daemon
+# Description: This script runs the FTP service offered
+# by the ProFTPD daemon
+### END INIT INFO
+
+# Start the proftpd FTP daemon.
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DAEMON=/usr/sbin/proftpd
+NAME=proftpd
+
+# Defaults
+RUN="no"
+OPTIONS=""
+CONFIG_FILE=/etc/proftpd.conf
+
+PIDFILE=`grep -i '^pidfile' $CONFIG_FILE|awk '{ print $2 }'`
+if [ "x$PIDFILE" = "x" ];
+then
+ PIDFILE=/var/run/proftpd.pid
+fi
+
+# Read config (will override defaults)
+[ -r /etc/default/proftpd ] && . /etc/default/proftpd
+
+trap "" 1
+trap "" 15
+
+test -f $DAEMON || exit 0
+
+. /etc/init.d/functions
+
+#
+# Servertype could be inetd|standalone|none.
+# In all cases check against inetd and xinetd support.
+#
+if ! egrep -qi "^[[:space:]]*ServerType.*standalone" $CONFIG_FILE
+then
+ if egrep -qi "server[[:space:]]*=[[:space:]]*/usr/sbin/proftpd" /etc/xinetd.conf 2>/dev/null || \
+ egrep -qi "server[[:space:]]*=[[:space:]]*/usr/sbin/proftpd" /etc/xinetd.d/* 2>/dev/null || \
+ egrep -qi "^ftp.*/usr/sbin/proftpd" /etc/inetd.conf 2>/dev/null
+ then
+ RUN="no"
+ INETD="yes"
+ else
+ if ! egrep -qi "^[[:space:]]*ServerType.*inetd" $CONFIG_FILE
+ then
+ RUN="yes"
+ INETD="no"
+ else
+ RUN="no"
+ INETD="no"
+ fi
+ fi
+fi
+
+# /var/run could be on a tmpfs
+
+[ ! -d /var/run/proftpd ] && mkdir /var/run/proftpd
+
+inetd_check()
+{
+ if [ ! -x /usr/sbin/inetd -a ! -x /usr/sbin/xinetd ]; then
+ echo "Neither inetd nor xinetd appears installed: check your configuration."
+ fi
+}
+
+start()
+{
+ set -e
+ echo -n "Starting ftp server $NAME... "
+ start-stop-daemon --start --quiet --pidfile "$PIDFILE" --oknodo --exec $DAEMON -- -c $CONFIG_FILE $OPTIONS
+ echo "done."
+}
+
+signal()
+{
+
+ if [ "$1" = "stop" ]; then
+ SIGNAL="TERM"
+ echo -n "Stopping ftp server $NAME... "
+ else
+ if [ "$1" = "reload" ]; then
+ SIGNAL="HUP"
+ echo -n "Reloading ftp server $NAME... "
+ else
+ echo "ERR: wrong parameter given to signal()"
+ exit 1
+ fi
+ fi
+ if [ -f "$PIDFILE" ]; then
+ start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE"
+ if [ $? = 0 ]; then
+ echo "done."
+ return
+ else
+ SIGNAL="KILL"
+ start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile "$PIDFILE"
+ if [ $? != 0 ]; then
+ echo
+ [ $2 != 0 ] || exit 0
+ else
+ echo "done."
+ return
+ fi
+ fi
+ if [ "$SIGNAL" = "KILL" ]; then
+ rm -f "$PIDFILE"
+ fi
+ else
+ echo "done."
+ return
+ fi
+}
+
+case "$1" in
+ start)
+ if [ "x$RUN" = "xyes" ] ; then
+ start
+ else
+ if [ "x$INETD" = "xyes" ] ; then
+ echo "ProFTPD is started from inetd/xinetd."
+ inetd_check
+ else
+ echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration."
+ fi
+ fi
+ ;;
+
+ force-start)
+ if [ "x$INETD" = "xyes" ] ; then
+ echo "Warning: ProFTPD is started from inetd/xinetd (trying to start anyway)."
+ inetd_check
+ fi
+ start
+ ;;
+
+ stop)
+ if [ "x$RUN" = "xyes" ] ; then
+ signal stop 0
+ else
+ if [ "x$INETD" = "xyes" ] ; then
+ echo "ProFTPD is started from inetd/xinetd."
+ inetd_check
+ else
+ echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration."
+ fi
+ fi
+ ;;
+
+ force-stop)
+ if [ "x$INETD" = "xyes" ] ; then
+ echo "Warning: ProFTPD is started from inetd/xinetd (trying to kill anyway)."
+ inetd_check
+ fi
+ signal stop 0
+ ;;
+
+ reload)
+ signal reload 0
+ ;;
+
+ force-reload|restart)
+ if [ "x$RUN" = "xyes" ] ; then
+ signal stop 1
+ sleep 2
+ start
+ else
+ if [ "x$INETD" = "xyes" ] ; then
+ echo "ProFTPD is started from inetd/xinetd."
+ inetd_check
+ else
+ echo "ProFTPD warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration."
+ fi
+ fi
+ ;;
+
+ status)
+ if [ "x$INETD" = "xyes" ] ; then
+ echo "ProFTPD is started from inetd/xinetd."
+ inetd_check
+ exit 0
+ else
+ if [ -f "$PIDFILE" ]; then
+ pid=$(cat $PIDFILE)
+ else
+ pid="x"
+ fi
+ if [ `pidof proftpd|grep "$pid"|wc -l` -ne 0 ] ; then
+ echo "ProFTPD is started in standalone mode, currently running."
+ exit 0
+ else
+ echo "ProFTPD is started in standalone mode, currently not running."
+ exit 3
+ fi
+ fi
+ ;;
+
+ check-config)
+ $DAEMON -t >/dev/null && echo "ProFTPD configuration OK" && exit 0
+ exit 1
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|status|force-start|stop|force-stop|reload|restart|force-reload|check-config}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd.service b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd.service
new file mode 100644
index 000000000..18764385e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/files/proftpd.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=proftpd Daemon
+After=network.target
+
+[Service]
+Type=forking
+ExecStart=@SBINDIR@/proftpd -c @SYSCONFDIR@/proftpd.conf
+StandardError=syslog
+
+[Install]
+WantedBy=default.target
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/proftpd/proftpd_1.3.6.bb b/meta-openembedded/meta-networking/recipes-daemons/proftpd/proftpd_1.3.6.bb
new file mode 100644
index 000000000..409947265
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/proftpd/proftpd_1.3.6.bb
@@ -0,0 +1,138 @@
+SUMMARY = "Secure and configurable FTP server"
+SECTION = "net"
+HOMEPAGE = "http://www.proftpd.org"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fb0d1484d11915fa88a6a7702f1dc184"
+
+SRC_URI = "ftp://ftp.proftpd.org/distrib/source/${BPN}-${PV}.tar.gz \
+ file://basic.conf.patch \
+ file://proftpd-basic.init \
+ file://default \
+ file://close-RequireValidShell-check.patch \
+ file://contrib.patch \
+ file://build_fixup.patch \
+ file://proftpd.service \
+ "
+iSRC_URI[md5sum] = "13270911c42aac842435f18205546a1b"
+SRC_URI[sha256sum] = "91ef74b143495d5ff97c4d4770c6804072a8c8eb1ad1ecc8cc541b40e152ecaf"
+
+inherit autotools-brokensep useradd update-rc.d systemd
+
+PACKAGECONFIG ??= "shadow \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 pam', d)} \
+ "
+
+PACKAGECONFIG[curses] = "--enable-curses --enable-ncurses, --disable-curses --disable-ncurses, ncurses"
+PACKAGECONFIG[openssl] = "--enable-openssl, --disable-openssl, openssl, openssl"
+PACKAGECONFIG[pam] = "--enable-auth-pam, --disable-auth-pam, libpam, libpam"
+PACKAGECONFIG[ipv6] = "--enable-ipv6, --disable-ipv6"
+PACKAGECONFIG[shadow] = "--enable-shadow, --disable-shadow"
+PACKAGECONFIG[pcre] = "--enable-pcre, --disable-pcre, libpcre "
+
+# enable POSIX.1e capabilities
+PACKAGECONFIG[cap] = "--enable-cap, --disable-cap, libcap, libcap"
+
+#enable support for POSIX ACLs
+PACKAGECONFIG[acl] = "--enable-facl, --disable-facl"
+
+#enable proftpd controls via ftpdct
+PACKAGECONFIG[ctrls] = "--enable-ctrls, --disable-crtls"
+
+#prevent proftpd from using its bundled getopt implementation.
+PACKAGECONFIG[getopt] = "--with-getopt, --without-getopt"
+
+#do not strip debugging symbols from installed code
+PACKAGECONFIG[strip] = "--enable-strip, --disable-strip"
+
+#enable SIA authentication support (Tru64)
+PACKAGECONFIG[sia] = "--enable-sia, --disable-sia"
+PACKAGECONFIG[sendfile] = "-enable-sendfile, --disable-sendfile"
+
+#enable Native Language Support (NLS)
+PACKAGECONFIG[nls] = "--enable-nls, --disable-nls"
+
+#add mod_dso to core modules
+PACKAGECONFIG[dso] = "--enable-dso, --disable-dso"
+PACKAGECONFIG[largefile] = "--enable-largefile, --disable-largefile"
+
+#omit mod_auth_file from core modules
+PACKAGECONFIG[auth] = "--enable-auth-file, --disable-auth-file"
+
+
+# proftpd uses libltdl which currently makes configuring using
+# autotools.bbclass a pain...
+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
+ cp ${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool ${S}/libtool
+}
+
+FTPUSER = "ftp"
+FTPGROUP = "ftp"
+
+do_install () {
+ oe_runmake DESTDIR=${D} install
+ rmdir ${D}${libdir}/proftpd ${D}${datadir}/locale
+ [ -d ${D}${libexecdir} ] && rmdir ${D}${libexecdir}
+ sed -i '/ *User[ \t]*/s/ftp/${FTPUSER}/' ${D}${sysconfdir}/proftpd.conf
+ sed -i '/ *Group[ \t]*/s/ftp/${FTPGROUP}/' ${D}${sysconfdir}/proftpd.conf
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/proftpd-basic.init ${D}${sysconfdir}/init.d/proftpd
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/proftpd
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/proftpd
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/proftpd
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}${sysconfdir}/init.d/proftpd
+
+ install -d ${D}${sysconfdir}/default
+ install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/proftpd
+
+ # create the pub directory
+ mkdir -p ${D}/home/${FTPUSER}/pub/
+ chown -R ${FTPUSER}:${FTPGROUP} ${D}/home/${FTPUSER}/pub
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'true', 'false', d)}; then
+ # install proftpd pam configuration
+ install -d ${D}${sysconfdir}/pam.d
+ install -m 644 ${S}/contrib/dist/rpm/ftp.pamd ${D}${sysconfdir}/pam.d/proftpd
+ sed -i '/ftpusers/d' ${D}${sysconfdir}/pam.d/proftpd
+ # specify the user Authentication config
+ sed -i '/^MaxInstances/a\AuthPAM on\nAuthPAMConfig proftpd' \
+ ${D}${sysconfdir}/proftpd.conf
+ fi
+
+ install -d ${D}/${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/proftpd.service ${D}/${systemd_unitdir}/system
+ sed -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -i ${D}${systemd_unitdir}/system/*.service
+
+ sed -e 's|--sysroot=${STAGING_DIR_HOST}||g' \
+ -e 's|${STAGING_DIR_NATIVE}||g' \
+ -e 's|-fdebug-prefix-map=[^ ]*||g' \
+ -i ${D}/${bindir}/prxs
+
+ # ftpmail perl script, which reads the proftpd log file and sends
+ # automatic email notifications once an upload finishs,
+ # depends on an old perl Mail::Sendmail
+ # The Mail::Sendmail has not been maintained for almost 10 years
+ # Other distribution not ship with ftpmail, so do the same to
+ # avoid confusion about having it fails to run
+ rm -rf ${D}${bindir}/ftpmail
+ rm -rf ${D}${mandir}/man1/ftpmail.1
+}
+
+INITSCRIPT_NAME = "proftpd"
+INITSCRIPT_PARAM = "defaults 85 15"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "proftpd.service"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system ${FTPGROUP}"
+USERADD_PARAM_${PN} = "--system -g ${FTPGROUP} --home-dir /var/lib/${FTPUSER} --no-create-home \
+ --shell /bin/false ${FTPUSER}"
+
+FILES_${PN} += "/home/${FTPUSER}"
+
+RDEPENDS_${PN} += "perl"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd-use-pkgconfig.patch b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd-use-pkgconfig.patch
new file mode 100644
index 000000000..e4578dda7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd-use-pkgconfig.patch
@@ -0,0 +1,35 @@
+From 4c850b92a1cf8cfa19677c66bcde2edfab1a4490 Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Tue, 24 Feb 2015 23:02:14 -0500
+Subject: [PATCH] ptpd: use pkgconfig
+
+Yocto uses pkg-config for libpcap, rather than pcap-config, so use that
+instead as the source for libs and cflags.
+
+Upstream-status: Inappropriate [ embedded specific ]
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index dc9541f..288f547 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -112,10 +112,10 @@ case "$try_pcap" in
+ yes)
+ case "$PATH_PCAP_CONFIG" in
+ /*)
+- PCAP_LIBS=`$PATH_PCAP_CONFIG --libs`
++ PCAP_LIBS=`$PATH_PCAP_CONFIG --libs libpcap`
+ AC_SUBST([PCAP_LIBS])
+ # Separate CPPFLAGS and CFLAGS
+- foo=`$PATH_PCAP_CONFIG --cflags`
++ foo=`$PATH_PCAP_CONFIG --cflags libpcap`
+ PCAP_CPPFLAGS=
+ PCAP_CFLAGS=
+ for i in $foo; do
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.conf b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.conf
new file mode 100644
index 000000000..ddd571036
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.conf
@@ -0,0 +1,7 @@
+#
+# PTPD Configuration
+#
+# See man ptpd2 for arguments.
+#
+# Example arguments
+PTPDARGS="-d 1 -i eth0"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.service b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.service
new file mode 100644
index 000000000..f84799eb5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd/ptpd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=ptpd time precision daemon
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/ptpd
+ExecStart=@BINDIR@/ptpd2 $PTPDARGS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd_2.3.1.bb b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd_2.3.1.bb
new file mode 100644
index 000000000..e13619320
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd_2.3.1.bb
@@ -0,0 +1,58 @@
+SUMMARY = "The PTP daemon (PTPd)"
+DESCRIPTION = "The PTP daemon (PTPd) implements the Precision Time protocol (PTP) as \
+defined by the relevant IEEE 1588 standard. PTP Version 1 implements IEEE-1588-2002, \
+and PTP Version 2 implements IEEE-1588-2008. PTP was developed to provide very precise \
+time coordination of LAN connected computers."
+HOMEPAGE = "http://sourceforge.net/projects/ptpd"
+SECTION = "net"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://README;md5=0733e1b3788ab2ebbc63bf33a020da1d"
+
+DEPENDS = "libpcap"
+
+inherit autotools pkgconfig systemd
+
+# return something like '1.2.3' or '1.2.3/rc1'
+#
+def get_sub(d):
+ parts = d.getVar('PV').split('-')
+ try:
+ return parts[0] + '/' + parts[1]
+ except:
+ return parts[0]
+
+SRC_URI = "http://downloads.sourceforge.net/project/ptpd/ptpd/${@get_sub(d)}/ptpd-${PV}.tar.gz \
+ file://ptpd-use-pkgconfig.patch \
+ file://ptpd.service \
+ file://ptpd.conf \
+"
+
+SRC_URI[md5sum] = "253bab7ab51d969616ea811be1f132f3"
+SRC_URI[sha256sum] = "0dbf54dd2c178bd9fe62481d2c37513ee36636d8bf137cfdad96891490cdbf93"
+
+S = "${WORKDIR}/ptpd-${PV}"
+
+EXTRA_OEMAKE = ""
+
+EXTRA_OECONF += "--disable-snmp --with-pcap-config=pkg-config"
+
+do_install() {
+ install -d ${D}${bindir} ${D}${mandir}/man8
+ install -m 0755 ${B}/src/ptpd2 ${D}${bindir}
+ install -m 0644 ${B}/src/ptpd2.8 ${D}${mandir}/man8
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/ptpd.service ${D}${systemd_unitdir}/system
+
+ sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' ${D}${systemd_unitdir}/system/ptpd.service
+ sed -i -e 's#@BINDIR@#${bindir}#g' ${D}${systemd_unitdir}/system/ptpd.service
+
+ install -d ${D}${sysconfdir}/default/
+ install -m 0644 ${WORKDIR}/ptpd.conf ${D}${sysconfdir}/default/ptpd
+ fi
+}
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "ptpd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/0001-Remove-hardcoded-usr-local-includes-from-configure.a.patch b/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/0001-Remove-hardcoded-usr-local-includes-from-configure.a.patch
new file mode 100644
index 000000000..76523fb99
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/0001-Remove-hardcoded-usr-local-includes-from-configure.a.patch
@@ -0,0 +1,39 @@
+From 1bafadf2502334a3e972ff667061469316d0d2ca Mon Sep 17 00:00:00 2001
+From: Tudor Florea <tudor.florea@enea.com>
+Date: Tue, 4 Aug 2015 02:46:39 +0200
+Subject: [PATCH] Remove hardcoded /usr/local includes from configure.ac
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com>
+Signed-off-by: Tudor Florea <tudor.florea@enea.com>
+---
+ configure.ac | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6c78e8c..851d45d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -100,18 +100,6 @@ AC_ARG_VAR(PYTHON,local path to the python interpreter)
+ python_possible_path="/usr/bin:/usr/local/bin:/bin:/opt/python/bin:/opt/python/usr/bin:/opt/python/usr/local/bin"
+ AC_PATH_PROG(PYTHON,python,/usr/bin/env python,$python_possible_path)
+
+-if test -d /usr/local/include; then
+- CPPFLAGS="$CPPFLAGS -I/usr/local/include"
+-fi
+-
+-if test -d /usr/kerberos/include; then
+- CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
+-fi
+-
+-if test -d /usr/local/lib; then
+- LDFLAGS="$LDFLAGS -L/usr/local/lib"
+-fi
+-
+ CPPFLAGS="$CPPFLAGS -D_FORTIFY_SOURCE=2"
+
+ dnl Checks for header files
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/nostrip.patch b/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/nostrip.patch
new file mode 100644
index 000000000..4cb33bc5c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd/nostrip.patch
@@ -0,0 +1,31 @@
+From 0290bd6f4ceddff2c52dff833c9d31d24de7d0e1 Mon Sep 17 00:00:00 2001
+From: Tudor Florea <tudor.florea@enea.com>
+Date: Tue, 4 Aug 2015 03:07:01 +0200
+Subject: [PATCH] Don't mess with CFLAGS and LDFLAGS when --with-minimal is specified
+
+We especially don't want stripping enabled.
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+Signed-off-by: Tudor Florea <tudor.florea@enea.com>
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 851d45d..dc410a1 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -423,8 +423,6 @@ AC_ARG_WITH(minimal,
+ AC_DEFINE(NO_FTP_USERS)
+ AC_DEFINE(WITHOUT_ASCII)
+ AC_DEFINE(BORING_MODE)
+- CFLAGS="$CFLAGS -Os -fomit-frame-pointer -fno-unroll-loops "
+- LDFLAGS="$LDFLAGS -s "
+ fi ])
+
+ AC_ARG_WITH(paranoidmsg,
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd_1.0.42.bb b/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd_1.0.42.bb
new file mode 100644
index 000000000..c1f150405
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/pure-ftpd/pure-ftpd_1.0.42.bb
@@ -0,0 +1,22 @@
+SUMMARY = "FTP Server with a strong focus on software security"
+DESCRIPTION = "Pure-FTPd is a free (BSD license), secure, production-quality and standard-conformant FTP server."
+HOMEPAGE = "http://www.pureftpd.org/project/pure-ftpd"
+SECTION = "net"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=90352fb2bfe17f4261687a0d6e09f489"
+
+DEPENDS = "libcap"
+
+
+SRC_URI = "http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-${PV}.tar.gz \
+ file://0001-Remove-hardcoded-usr-local-includes-from-configure.a.patch \
+ file://nostrip.patch \
+"
+SRC_URI[md5sum] = "4195af8f0e5ee2a798b1014071dae3a3"
+SRC_URI[sha256sum] = "7be73a8e58b190a7054d2ae00c5e650cb9e091980420082d02ec3c3b68d8e7f9"
+
+inherit autotools
+
+EXTRA_OECONF = "--with-minimal"
+PACKAGECONFIG[libsodium] ="ac_cv_lib_sodium_crypto_pwhash_scryptsalsa208sha256_str=yes, \
+ ac_cv_lib_sodium_crypto_pwhash_scryptsalsa208sha256_str=no, libsodium"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.default b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.default
new file mode 100644
index 000000000..7cb73c771
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.default
@@ -0,0 +1 @@
+OPTIONS="-u radvd"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.init b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.init
new file mode 100755
index 000000000..8b26317ee
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.init
@@ -0,0 +1,135 @@
+#! /bin/sh
+#
+### BEGIN INIT INFO
+# Provides: radvd
+# Required-Start: $remote_fs $named $syslog
+# Required-Stop: $remote_fs $named $syslog
+# Default-Start: 3 5
+# Default-Stop: 0 1 2 6
+# Description: router advertisement daemon
+### END INIT INFO
+
+# Source function library.
+. /etc/init.d/functions
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/radvd
+NAME=radvd
+DESC=radvd
+CONFIG=/etc/radvd.conf
+SAVED_SETTINGS=/var/run/radvd/saved-settings
+PIDFILE=/var/run/radvd/radvd.pid
+OPTIONS="-u radvd -p $PIDFILE"
+
+test -x $DAEMON || exit 0
+
+set -e
+
+# Check for IPv6 support in kernel
+if test \! -e /proc/sys/net/ipv6; then
+ echo "IPv6 support must be enabled in the kernel for $DESC to work."
+ exit
+fi
+
+save_settings()
+{
+ local file=$1
+
+ rm -f $file
+ for if_conf in /proc/sys/net/ipv6/conf/*; do
+ echo -e "$if_conf/forwarding\t `cat $if_conf/forwarding`" >> $file
+ done
+ return 0
+}
+
+restore_settings()
+{
+ file=$1
+
+ if [ ! -f $file ]; then
+ echo "$0: warning: cannot restore settings"
+ return
+ fi
+
+ (
+ while read f value; do
+ if [ -w $f ]; then
+ echo $value > $f
+ fi
+ done
+ ) < $file
+}
+
+chkconfig() {
+ if [ ! -e $CONFIG -o ! -s $CONFIG ]; then
+ echo ""
+ echo "* $CONFIG does not exist or is empty."
+ echo "* See /usr/share/doc/radvd/radvd.conf.example for a simple"
+ echo "* configuration suitable for most systems, and radvd.conf(5)"
+ echo "* for configuration file syntax. radvd will *not* be started."
+ exit 0
+ fi
+}
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ chkconfig
+ save_settings $SAVED_SETTINGS
+
+ # We must enable IPv6 forwarding for radvd to work
+ echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+
+ # Check for stale pidfile; radvd won't start if one is lying around
+ if [ -f $PIDFILE ] && ! ps `cat $PIDFILE` > /dev/null; then
+ rm -f $PIDFILE
+ fi
+ if ! start-stop-daemon --oknodo --start --pidfile $PIDFILE \
+ --exec $DAEMON -- $OPTIONS; then
+ echo "failed." && exit 1
+ fi
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ if ! [ -f $PIDFILE ] ; then
+ echo "not running."
+ exit 0
+ fi
+ start-stop-daemon --oknodo --stop --pidfile $PIDFILE \
+ --exec $DAEMON
+ restore_settings $SAVED_SETTINGS
+ rm -f $SAVED_SETTINGS
+ echo "$NAME."
+ ;;
+ status)
+ status $DAEMON;
+ exit $?
+ ;;
+ reload|force-reload)
+ echo "Reloading $DESC configuration files."
+ start-stop-daemon --stop --signal HUP --quiet --pidfile \
+ $PIDFILE --exec $DAEMON
+ ;;
+ restart)
+ chkconfig
+ echo -n "Restarting $DESC: "
+ if ! start-stop-daemon --stop --quiet --pidfile \
+ $PIDFILE --exec $DAEMON; then
+ # stop failed, so we were not running
+ save_settings $SAVED_SETTINGS
+ echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
+ fi
+ sleep 1
+ start-stop-daemon --start --quiet --pidfile \
+ $PIDFILE --exec $DAEMON -- $OPTIONS
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|status|restart|reload|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.service b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.service
new file mode 100644
index 000000000..e60798a6b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/radvd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Router advertisement daemon for IPv6
+After=network.target
+ConditionPathExists=@SYSCONFDIR@/radvd.conf
+
+[Service]
+EnvironmentFile=-@SYSCONFDIR@/default/radvd
+ExecStart=@SBINDIR@/radvd -n $OPTIONS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/radvd/files/volatiles.03_radvd b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/volatiles.03_radvd
new file mode 100644
index 000000000..89256a40e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/radvd/files/volatiles.03_radvd
@@ -0,0 +1,2 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d radvd root 0755 /var/run/radvd none
diff --git a/meta-openembedded/meta-networking/recipes-daemons/radvd/radvd.inc b/meta-openembedded/meta-networking/recipes-daemons/radvd/radvd.inc
new file mode 100644
index 000000000..06d16a4ce
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/radvd/radvd.inc
@@ -0,0 +1,67 @@
+SUMMARY = "IPv6 router advertisement daemon"
+DESCRIPTION = "radvd is the router advertisement daemon for IPv6. It \
+listens to router solicitations and sends router \
+advertisements as described in RFC 2461, Neighbor \
+Discovery for IP Version 6 (IPv6). With these \
+advertisements hosts can automatically configure their \
+addresses and some other parameters. They also can \
+choose a default router based on these advertisements."
+HOMEPAGE = "http://www.litech.org/radvd/"
+SECTION = "net"
+DEPENDS = "flex-native bison-native libdaemon "
+
+# License is BSD-Style (with advertising clause) but also has an additional 0th clause
+LICENSE = "radvd"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=73ebbf7182ae996e65e8fadc9a8c45db"
+
+SRC_URI = "http://v6web.litech.org/radvd/dist/radvd-${PV}.tar.gz \
+ file://radvd.init \
+ file://radvd.service \
+ file://volatiles.03_radvd \
+ file://radvd.default"
+
+inherit autotools update-rc.d useradd pkgconfig systemd
+
+SYSTEMD_SERVICE_${PN} = "radvd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_install_append () {
+ install -m 0755 -d ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/default/volatiles \
+ ${D}${docdir}/radvd
+ # Install init script and volatiles
+ install -m 0755 ${WORKDIR}/radvd.init ${D}${sysconfdir}/init.d/radvd
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/radvd
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/radvd
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/radvd
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}${sysconfdir}/init.d/radvd
+
+ install -m 0644 ${WORKDIR}/volatiles.03_radvd ${D}${sysconfdir}/default/volatiles/volatiles.03_radvd
+
+ # Install systemd service files
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/radvd.service ${D}${systemd_unitdir}/system
+ sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' \
+ -e 's#@SBINDIR@#${sbindir}#g' \
+ -e 's#@BASE_BINDIR@#${base_bindir}#g' ${D}${systemd_unitdir}/system/radvd.service
+
+ # Install default environment file
+ install -m 0644 ${WORKDIR}/radvd.default ${D}${sysconfdir}/default/radvd
+
+ # Documentation
+ for i in radvd.conf.example README; do \
+ install -m 0644 ${S}/$i ${D}${docdir}/radvd; \
+ done
+}
+
+INITSCRIPT_NAME = "radvd"
+INITSCRIPT_PARAMS = "defaults 20 80"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --home ${localstatedir}/run/radvd/ -M -g nogroup radvd"
+
+pkg_postinst_${PN} () {
+ if [ -z "$D" -a -x /etc/init.d/populate-volatile.sh ]; then
+ /etc/init.d/populate-volatile.sh update
+ fi
+}
diff --git a/meta-openembedded/meta-networking/recipes-daemons/radvd/radvd_2.17.bb b/meta-openembedded/meta-networking/recipes-daemons/radvd/radvd_2.17.bb
new file mode 100644
index 000000000..4baea01d0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/radvd/radvd_2.17.bb
@@ -0,0 +1,5 @@
+
+require radvd.inc
+
+SRC_URI[md5sum] = "64ee3fdb5544bcddef1c6cd80d77fa0a"
+SRC_URI[sha256sum] = "53757e7f2164899e1145482f1ae91829600a6e2f6fec29cfb3b350a3bb45bd5d"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-SquidNew-use-noexcept-instead-of-throw-for-C-11-comp.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-SquidNew-use-noexcept-instead-of-throw-for-C-11-comp.patch
new file mode 100644
index 000000000..f482f8088
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-SquidNew-use-noexcept-instead-of-throw-for-C-11-comp.patch
@@ -0,0 +1,46 @@
+From 27e10667bf27baf5f119a791e3473bb9435a786a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 23 Apr 2017 10:28:28 -0700
+Subject: [PATCH] SquidNew: use noexcept instead of throw for C++11 compilers
+
+Fixes errors with gcc7 which is more pedantic about c++11
+conformance regarding deprecated features
+
+include/SquidNew.h:21:51: error: dynamic exception specifications are deprecated in C++11
+_SQUID_EXTERNNEW_ void *operator new[] (size_t size) throw (std::bad_alloc)
+ ^~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ include/SquidNew.h | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/include/SquidNew.h b/include/SquidNew.h
+index 39fcee0..c960347 100644
+--- a/include/SquidNew.h
++++ b/include/SquidNew.h
+@@ -18,19 +18,19 @@
+ */
+ #include <new>
+
+-_SQUID_EXTERNNEW_ void *operator new(size_t size) throw (std::bad_alloc)
++_SQUID_EXTERNNEW_ void *operator new(size_t size) noexcept(false)
+ {
+ return xmalloc(size);
+ }
+-_SQUID_EXTERNNEW_ void operator delete (void *address) throw()
++_SQUID_EXTERNNEW_ void operator delete (void *address) noexcept(true)
+ {
+ xfree(address);
+ }
+-_SQUID_EXTERNNEW_ void *operator new[] (size_t size) throw (std::bad_alloc)
++_SQUID_EXTERNNEW_ void *operator new[] (size_t size) noexcept(false)
+ {
+ return xmalloc(size);
+ }
+-_SQUID_EXTERNNEW_ void operator delete[] (void *address) throw()
++_SQUID_EXTERNNEW_ void operator delete[] (void *address) noexcept(true)
+ {
+ xfree(address);
+ }
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-configure-Check-for-Wno-error-format-truncation-comp.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-configure-Check-for-Wno-error-format-truncation-comp.patch
new file mode 100644
index 000000000..302136a03
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-configure-Check-for-Wno-error-format-truncation-comp.patch
@@ -0,0 +1,118 @@
+From c21adbb0b230ffba97cf5d059e2bd024e13a37df 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+)
+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>
+
+---
+ acinclude/ax_check_compile_flag.m4 | 74 ++++++++++++++++++++++++++++++++++++++
+ configure.ac | 2 ++
+ 2 files changed, 76 insertions(+)
+ create mode 100644 acinclude/ax_check_compile_flag.m4
+
+diff --git a/acinclude/ax_check_compile_flag.m4 b/acinclude/ax_check_compile_flag.m4
+new file mode 100644
+index 0000000..dcabb92
+--- /dev/null
++++ b/acinclude/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
+diff --git a/configure.ac b/configure.ac
+index ff4688c..9382fdf 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -26,6 +26,7 @@ m4_include([acinclude/pkg.m4])
+ m4_include([acinclude/lib-checks.m4])
+ m4_include([acinclude/ax_cxx_compile_stdcxx_11.m4])
+ m4_include([acinclude/ax_cxx_0x_types.m4])
++m4_include([acinclude/ax_check_compile_flag.m4])
+
+ HOSTCXX="$BUILD_CXX"
+ PRESET_CFLAGS="$CFLAGS"
+@@ -44,6 +45,7 @@ AC_PROG_CXX
+ AC_LANG([C++])
+ AC_CANONICAL_HOST
+
++AX_CHECK_COMPILE_FLAG([-Werror=format-truncation],[CFLAGS="$CFLAGS -Wno-error=format-truncation" CXXFLAGS="$CXXFLAGS -Wno-error=format-truncation"])
+ # Clang 3.2 on some CPUs requires -march-native to detect correctly.
+ # GCC 4.3+ can also produce faster executables when its used.
+ # But building inside a virtual machine environment has been found to
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-tools.cc-fixed-unused-result-warning.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-tools.cc-fixed-unused-result-warning.patch
new file mode 100644
index 000000000..8ea55d0e1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/0001-tools.cc-fixed-unused-result-warning.patch
@@ -0,0 +1,32 @@
+From faaa796a138cbd5033b1e53f33faac0cf4162bf5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 25 Jun 2017 00:59:24 -0700
+Subject: [PATCH] tools.cc: fixed unused-result warning
+
+fix
+| ../../squid-3.5.26/src/tools.cc: In function 'void enter_suid()':
+| ../../squid-3.5.26/src/tools.cc:616:11: error: ignoring return value of 'int setuid(__uid_t)', declared with attribute warn_unused_result [-Werror=unused-result]
+| setuid(0);
+| ~~~~~~^~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/tools.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/tools.cc b/src/tools.cc
+index 8137a03..843e266 100644
+--- a/src/tools.cc
++++ b/src/tools.cc
+@@ -612,8 +612,8 @@ enter_suid(void)
+ if (setresuid((uid_t)-1, 0, (uid_t)-1) < 0)
+ debugs (21, 3, "enter_suid: setresuid failed: " << xstrerror ());
+ #else
+-
+- setuid(0);
++ if (setuid(0) < 0)
++ debugs(50, DBG_IMPORTANT, "WARNING: no_suid: setuid(0): " << xstrerror());
+ #endif
+ #if HAVE_PRCTL && defined(PR_SET_DUMPABLE)
+ /* Set Linux DUMPABLE flag */
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/Fix-flawed-dynamic-ldb-link-test-in-configure.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/Fix-flawed-dynamic-ldb-link-test-in-configure.patch
new file mode 100644
index 000000000..25f68aff8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/Fix-flawed-dynamic-ldb-link-test-in-configure.patch
@@ -0,0 +1,40 @@
+From b4943594654cd340b95aabdc2f3750a4705cc0de Mon Sep 17 00:00:00 2001
+From: Jim Somerville <Jim.Somerville@windriver.com>
+Date: Mon, 21 Oct 2013 12:50:44 -0400
+Subject: [PATCH] Fix flawed dynamic -ldb link test in configure
+
+The test uses dbopen, but just ignores the fact
+that this function may not exist in the db version
+used. This leads to the dynamic link test failing
+and the configure script just making assumptions
+about why and setting the need for -ldb incorrectly.
+
+Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
+
+---
+ configure.ac | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 57cd1ac..3827222 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3229,8 +3229,16 @@ AC_CHECK_DECL(dbopen,,,[
+ #include <db.h>
+ #endif])
+
+-dnl 1.85
+-SQUID_CHECK_DBOPEN_NEEDS_LIBDB
++if test "x$ac_cv_have_decl_dbopen" = "xyes"; then
++ dnl 1.85
++ SQUID_CHECK_DBOPEN_NEEDS_LIBDB
++else
++ # dbopen isn't there. So instead of running a compile/link test that
++ # uses it and is thus guaranteed to fail, we just assume that we will
++ # need to link in the db library, rather than fabricate some other
++ # dynamic compile/link test.
++ ac_cv_dbopen_libdb="yes"
++fi
+ if test "x$ac_cv_dbopen_libdb" = "xyes"; then
+ LIB_DB="-ldb"
+ fi
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/Set-up-for-cross-compilation.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/Set-up-for-cross-compilation.patch
new file mode 100644
index 000000000..3852f7c25
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/Set-up-for-cross-compilation.patch
@@ -0,0 +1,28 @@
+From 995aaf30799fa972441354b6feb45f0621968929 Mon Sep 17 00:00:00 2001
+From: Jim Somerville <Jim.Somerville@windriver.com>
+Date: Wed, 16 Oct 2013 16:41:03 -0400
+Subject: [PATCH] Set up for cross compilation
+
+Message-Id: <17e5a28667f667859c48bee25e575a072d39ee1b.1381956170.git.Jim.Somerville@windriver.com>
+
+Set the host compiler to BUILD_CXX so
+proper cross compilation can occur.
+
+Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
+
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index fe80ee0..57cd1ac 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -27,6 +27,7 @@ m4_include([acinclude/lib-checks.m4])
+ m4_include([acinclude/ax_cxx_compile_stdcxx_11.m4])
+ m4_include([acinclude/ax_cxx_0x_types.m4])
+
++HOSTCXX="$BUILD_CXX"
+ PRESET_CFLAGS="$CFLAGS"
+ PRESET_CXXFLAGS="$CXXFLAGS"
+ PRESET_LDFLAGS="$LDFLAGS"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/Skip-AC_RUN_IFELSE-tests.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/Skip-AC_RUN_IFELSE-tests.patch
new file mode 100644
index 000000000..6a3352548
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/Skip-AC_RUN_IFELSE-tests.patch
@@ -0,0 +1,65 @@
+From a85311965707ba2fa78f7ce044e6f61e65e66fd0 Mon Sep 17 00:00:00 2001
+From: Jim Somerville <Jim.Somerville@windriver.com>
+Date: Tue, 14 Oct 2014 02:56:08 -0400
+Subject: [PATCH] Skip AC_RUN_IFELSE tests
+
+Upstream-Status: Inappropriate [cross compiling specific]
+
+Such tests are not supported in a cross compile
+environment. Choose sane defaults.
+
+Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+---
+ acinclude/krb5.m4 | 10 +++++++++-
+ acinclude/lib-checks.m4 | 8 ++++++--
+ 2 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/acinclude/krb5.m4 b/acinclude/krb5.m4
+index 5c83d88..c264118 100644
+--- a/acinclude/krb5.m4
++++ b/acinclude/krb5.m4
+@@ -61,7 +61,15 @@ main(void)
+
+ return 0;
+ }
+-]])], [ squid_cv_broken_heimdal_krb5_h=yes ], [ squid_cv_broken_heimdal_krb5_h=no ])
++]])], [ squid_cv_broken_heimdal_krb5_h=yes ], [ squid_cv_broken_heimdal_krb5_h=no ],
++[
++ dnl Can't test in cross compiled env - so assume good
++ squid_cv_broken_heimdal_krb5_h=no
++])
++ ],
++ [
++ dnl Can't test in cross compiled env - so assume good
++ squid_cv_broken_heimdal_krb5_h=no
+ ])
+ ])
+ ]) dnl SQUID_CHECK_KRB5_HEIMDAL_BROKEN_KRB5_H
+diff --git a/acinclude/lib-checks.m4 b/acinclude/lib-checks.m4
+index c4874da..ba72982 100644
+--- a/acinclude/lib-checks.m4
++++ b/acinclude/lib-checks.m4
+@@ -177,7 +177,9 @@ AC_DEFUN([SQUID_CHECK_OPENSSL_CONST_SSL_METHOD],[
+ [
+ AC_MSG_RESULT([no])
+ ],
+- [])
++ [
++ AC_MSG_RESULT([skipped - can't test in cross-compiled env])
++ ])
+
+ SQUID_STATE_ROLLBACK(check_const_SSL_METHOD)
+ ]
+@@ -265,7 +267,9 @@ AC_DEFUN([SQUID_CHECK_OPENSSL_TXTDB],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(SQUID_USE_SSLLHASH_HACK, 1)
+ ],
+-[])
++[
++ AC_MSG_RESULT([skipped - can't test in cross-compiled env])
++])
+
+ SQUID_STATE_ROLLBACK(check_TXTDB)
+ ])
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/gcc7-fixes.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/gcc7-fixes.patch
new file mode 100644
index 000000000..2feca4986
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/gcc7-fixes.patch
@@ -0,0 +1,26 @@
+From 660fce9cfa00a57e5b7cec46116a31e21595c306 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 19 Jun 2017 23:47:01 -0700
+Subject: [PATCH] squid: Upgrade to 3.5.26
+
+../../squid-3.5.26/src/DiskIO/DiskThreads/aiops.cc: In function 'void squidaio_init()': ../../squid-3.5.26/src/DiskIO/DiskThreads/DiskThreads.h:30:50: error: '*' in boolean context, suggest '&&' instead [-Werror=int-in-bool-context] #define NUMTHREADS (Config.cacheSwap.n_configured*16)
+
+Upstream-Status: Backport
+
+---
+ src/DiskIO/DiskThreads/aiops.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/DiskIO/DiskThreads/aiops.cc b/src/DiskIO/DiskThreads/aiops.cc
+index b44adfa..e11f948 100644
+--- a/src/DiskIO/DiskThreads/aiops.cc
++++ b/src/DiskIO/DiskThreads/aiops.cc
+@@ -290,7 +290,7 @@ squidaio_init(void)
+ /* Create threads and get them to sit in their wait loop */
+ squidaio_thread_pool = memPoolCreate("aio_thread", sizeof(squidaio_thread_t));
+
+- assert(NUMTHREADS);
++ assert(NUMTHREADS != 0);
+
+ for (i = 0; i < NUMTHREADS; ++i) {
+ threadp = (squidaio_thread_t *)squidaio_thread_pool->alloc();
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/run-ptest b/meta-openembedded/meta-networking/recipes-daemons/squid/files/run-ptest
new file mode 100644
index 000000000..de79a293c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+#
+make -C test-suite -k runtest-TESTS
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/set_sysroot_patch.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/set_sysroot_patch.patch
new file mode 100644
index 000000000..e990480a6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/set_sysroot_patch.patch
@@ -0,0 +1,41 @@
+From 702bd881b66dc034e711c0ff47805f2da40b6e0d Mon Sep 17 00:00:00 2001
+From: Yue Tao <yue.tao@windriver.com>
+Date: Mon, 8 Aug 2016 16:04:33 +0800
+Subject: [PATCH] Set the SYSROOT for libxml2 header file to avoid host
+ contamination.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+---
+ configure.ac | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 504a844..ff4688c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -974,15 +974,15 @@ if test "x$squid_opt_use_esi" = "xyes" -a "x$with_libxml2" != "xno" ; then
+ dnl Find the main header and include path...
+ AC_CACHE_CHECK([location of libxml2 include files], [ac_cv_libxml2_include], [
+ AC_CHECK_HEADERS([libxml/parser.h], [], [
+- AC_MSG_NOTICE([Testing in /usr/include/libxml2])
++ AC_MSG_NOTICE([Testing in $SYSROOT/usr/include/libxml2])
+ SAVED_CPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="-I/usr/include/libxml2 $CPPFLAGS"
++ CPPFLAGS="-I$SYSROOT/usr/include/libxml2 $CPPFLAGS"
+ unset ac_cv_header_libxml_parser_h
+- AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I/usr/include/libxml2"], [
+- AC_MSG_NOTICE([Testing in /usr/local/include/libxml2])
+- CPPFLAGS="-I/usr/local/include/libxml2 $SAVED_CPPFLAGS"
++ AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I$SYSROOT/usr/include/libxml2"], [
++ AC_MSG_NOTICE([Testing in $SYSROOT/usr/local/include/libxml2])
++ CPPFLAGS="-I$SYSROOT/usr/local/include/libxml2 $SAVED_CPPFLAGS"
+ unset ac_cv_header_libxml_parser_h
+- AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I/usr/local/include/libxml2"], [
++ AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I$SYSROOT/usr/local/include/libxml2"], [
+ AC_MSG_NOTICE([Failed to find libxml2 header file libxml/parser.h])
+ ])
+ ])
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-don-t-do-squid-conf-tests-at-build-time.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-don-t-do-squid-conf-tests-at-build-time.patch
new file mode 100644
index 000000000..e5267ea2b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-don-t-do-squid-conf-tests-at-build-time.patch
@@ -0,0 +1,61 @@
+From 8786b91488dae3f6dfeadd686e80d2ffc5c29320 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Thu, 25 Aug 2016 15:22:57 +0800
+Subject: [PATCH] squid: don't do squid-conf-tests at build time
+
+* squid-conf-tests is a test to run "squid -k parse -f"
+ to perse the config files, which should not be run
+ at build time since we are cross compiling, so remove
+ it but it will be added back for the runtime ptest.
+
+* Fix the directories of the conf files for squid-conf-tests
+ so that it can run on the target board.
+
+Upstream-Status: Inappropriate [cross compile specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+---
+ test-suite/Makefile.am | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/test-suite/Makefile.am b/test-suite/Makefile.am
+index 061a463..350dfb2 100644
+--- a/test-suite/Makefile.am
++++ b/test-suite/Makefile.am
+@@ -41,8 +41,7 @@ TESTS += debug \
+ MemPoolTest\
+ mem_node_test\
+ mem_hdr_test\
+- $(ESI_TESTS) \
+- squid-conf-tests
++ $(ESI_TESTS)
+
+ ## Sort by alpha - any build failures are significant.
+ check_PROGRAMS += debug \
+@@ -125,19 +124,19 @@ VirtualDeleteOperator_SOURCES = VirtualDeleteOperator.cc $(DEBUG_SOURCE)
+ ##$(TARGLIB): $(LIBOBJS)
+ ## $(AR_R) $(TARGLIB) $(LIBOBJS)
+
+-squid-conf-tests: $(top_builddir)/src/squid.conf.default $(srcdir)/squidconf/*
++squid-conf-tests: $(sysconfdir)/squid.conf.default squidconf/*
+ @failed=0; cfglist="$?"; rm -f $@ || $(TRUE); \
+ for cfg in $$cfglist ; do \
+- $(top_builddir)/src/squid -k parse -f $$cfg || \
++ squid -k parse -f $$cfg || \
+ { echo "FAIL: squid.conf test: $$cfg" | \
+- sed s%$(top_builddir)/src/%% | \
+- sed s%$(srcdir)/squidconf/%% ; \
++ sed s%$(sysconfdir)/%% | \
++ sed s%squidconf/%% ; \
+ failed=1; break; \
+ }; \
+ if test "$$failed" -eq 0; then \
+ echo "PASS: squid.conf test: $$cfg" | \
+- sed s%$(top_builddir)/src/%% | \
+- sed s%$(srcdir)/squidconf/%% ; \
++ sed s%$(sysconfdir)/%% | \
++ sed s%squidconf/%% ; \
+ else break; fi; \
+ done; \
+ if test "$$failed" -eq 0; then cp $(TRUE) $@ ; fi
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-use-serial-tests-config-needed-by-ptest.patch b/meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-use-serial-tests-config-needed-by-ptest.patch
new file mode 100644
index 000000000..9c75f17e7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/squid-use-serial-tests-config-needed-by-ptest.patch
@@ -0,0 +1,29 @@
+From 9bcec221a2bb438d8a9ed59aed846ffe3be9cffa Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Tue, 19 Jul 2016 01:56:23 -0400
+Subject: [PATCH] squid: use serial-tests config needed by ptest
+
+ptest needs buildtest-TESTS and runtest-TESTS targets.
+serial-tests is required to generate those targets.
+
+Upstream-Status: Inappropriate [default automake behavior incompatible with ptest]
+
+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 3827222..504a844 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -10,7 +10,7 @@ AC_PREREQ(2.61)
+ AC_CONFIG_HEADERS([include/autoconf.h])
+ AC_CONFIG_AUX_DIR(cfgaux)
+ AC_CONFIG_SRCDIR([src/main.cc])
+-AM_INIT_AUTOMAKE([tar-ustar nostdinc subdir-objects])
++AM_INIT_AUTOMAKE([tar-ustar nostdinc subdir-objects serial-tests])
+ AC_REVISION($Revision$)dnl
+ AC_PREFIX_DEFAULT(/usr/local/squid)
+ AM_MAINTAINER_MODE
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/files/volatiles.03_squid b/meta-openembedded/meta-networking/recipes-daemons/squid/files/volatiles.03_squid
new file mode 100644
index 000000000..83e1f8b7a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/files/volatiles.03_squid
@@ -0,0 +1,3 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d squid squid 0755 /var/run/squid none
+d squid squid 0750 /var/log/squid none
diff --git a/meta-openembedded/meta-networking/recipes-daemons/squid/squid_3.5.26.bb b/meta-openembedded/meta-networking/recipes-daemons/squid/squid_3.5.26.bb
new file mode 100644
index 000000000..3ee96abb7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/squid/squid_3.5.26.bb
@@ -0,0 +1,114 @@
+SUMMARY = "A fully-featured http proxy and web-cache daemon for Linux"
+DESCRIPTION = "A fully-featured http proxy and web-cache daemon for Linux. \
+Squid offers a rich access control, authorization and logging environment to \
+develop web proxy and content serving applications. \
+Squid offers a rich set of traffic optimization options, most of which are \
+enabled by default for simpler installation and high performance. \
+"
+HOMEPAGE = "http://www.squid-cache.org"
+SECTION = "web"
+LICENSE = "GPLv2+"
+
+MAJ_VER = "${@oe.utils.trim_version("${PV}", 1)}"
+MIN_VER = "${@oe.utils.trim_version("${PV}", 2)}"
+
+SRC_URI = "http://www.squid-cache.org/Versions/v${MAJ_VER}/${MIN_VER}/${BPN}-${PV}.tar.bz2 \
+ file://Set-up-for-cross-compilation.patch \
+ file://Skip-AC_RUN_IFELSE-tests.patch \
+ file://Fix-flawed-dynamic-ldb-link-test-in-configure.patch \
+ file://squid-use-serial-tests-config-needed-by-ptest.patch \
+ file://run-ptest \
+ file://volatiles.03_squid \
+ file://set_sysroot_patch.patch \
+ file://squid-don-t-do-squid-conf-tests-at-build-time.patch \
+ file://0001-SquidNew-use-noexcept-instead-of-throw-for-C-11-comp.patch \
+ file://0001-configure-Check-for-Wno-error-format-truncation-comp.patch \
+ file://gcc7-fixes.patch \
+ file://0001-tools.cc-fixed-unused-result-warning.patch \
+ "
+
+SRC_URI_remove_toolchain-clang = "file://0001-configure-Check-for-Wno-error-format-truncation-comp.patch"
+
+SRC_URI[md5sum] = "dc1830cd361e077814aa39bcc3691d8b"
+SRC_URI[sha256sum] = "41d8845863dcd026c856508cd1599d417c8947ffd96e86e24085f9893cb8b8c2"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=c492e2d6d32ec5c1aad0e0609a141ce9 \
+ file://errors/COPYRIGHT;md5=8861130fae91400bcf99b66f133172b3 \
+ "
+DEPENDS = "libtool krb5 openldap db cyrus-sasl openssl expat libxml2"
+
+inherit autotools pkgconfig useradd ptest perlnative
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --no-create-home --home-dir /var/run/squid --shell /bin/false --user-group squid"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('TARGET_ARCH', 'powerpc', 'noatomics', '', d)} \
+ ${@bb.utils.contains('TARGET_ARCH', 'mips', 'noatomics', '', d)} \
+ ${@bb.utils.contains('TARGET_ARCH', 'mipsel', 'noatomics', '', d)} \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+ "
+PACKAGECONFIG[libnetfilter-conntrack] = "--with-netfilter-conntrack=${includedir}, --without-netfilter-conntrack, libnetfilter-conntrack"
+PACKAGECONFIG[noatomics] = "squid_cv_gnu_atomics=no,squid_cv_gnu_atomics=yes,,"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+BASIC_AUTH = "DB SASL LDAP"
+
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+BASIC_AUTH += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'PAM', '', d)}"
+
+EXTRA_OECONF += "--with-default-user=squid --enable-auth-basic='${BASIC_AUTH}' \
+ --sysconfdir=${sysconfdir}/${BPN} \
+ --with-logdir=${localstatedir}/log/${BPN} \
+ 'PERL=${USRBINPATH}/env perl'"
+
+export BUILDCXXFLAGS="${BUILD_CXXFLAGS}"
+
+TESTDIR = "test-suite"
+
+do_configure_prepend() {
+ export SYSROOT=$PKG_CONFIG_SYSROOT_DIR
+}
+
+do_compile_ptest() {
+ oe_runmake -C ${TESTDIR} buildtest-TESTS
+}
+
+do_install_ptest() {
+ cp -rf ${B}/${TESTDIR} ${D}${PTEST_PATH}
+ cp -rf ${S}/${TESTDIR} ${D}${PTEST_PATH}
+
+ # do NOT need to rebuild Makefile itself
+ sed -i 's/^Makefile:.*$/Makefile:/' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
+
+ # Add squid-conf-tests for runtime tests
+ sed -e 's/^\(runtest-TESTS:\)/\1 squid-conf-tests/' \
+ -e "s/\(list=' \$(TESTS)\)/\1 squid-conf-tests/" \
+ -i ${D}${PTEST_PATH}/${TESTDIR}/Makefile
+
+ # Ensure the path for command true is correct
+ sed -i 's:^TRUE = .*$:TRUE = /bin/true:' ${D}${PTEST_PATH}/${TESTDIR}/Makefile
+}
+
+do_install_append() {
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d ${localstatedir}/run/${BPN} 0755 squid squid -" >> ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+ echo "d ${localstatedir}/log/${BPN} 0750 squid squid -" >> ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+ fi
+
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/volatiles.03_squid ${D}${sysconfdir}/default/volatiles/03_squid
+
+ rmdir "${D}${localstatedir}/run/${BPN}"
+ rmdir --ignore-fail-on-non-empty "${D}${localstatedir}/run"
+
+ rmdir "${D}${localstatedir}/log/${BPN}"
+ rmdir --ignore-fail-on-non-empty "${D}${localstatedir}/log"
+}
+
+FILES_${PN} += "${libdir} ${datadir}/errors ${datadir}/icons"
+FILES_${PN}-dbg += "/usr/src/debug"
+FILES_${PN}-doc += "${datadir}/*.txt"
+
+RDEPENDS_${PN} += "perl"
+RDEPENDS_${PN}-ptest += "make"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/0001-__progname-is-provided-by-libc.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/0001-__progname-is-provided-by-libc.patch
new file mode 100644
index 000000000..cead977e2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/0001-__progname-is-provided-by-libc.patch
@@ -0,0 +1,62 @@
+From 941038fc05be21202cab7a7a9434097fb55ecbe0 Mon Sep 17 00:00:00 2001
+From: Thorsten Glaser <tg@mirbsd.de>
+Date: Thu, 31 Jul 2014 16:29:41 +0930
+Subject: [PATCH] __progname[] is provided by libc
+
+Rename local variable to tftpd_progname to avoid a clash with glibc
+global symbols and work around Debian bug #519006 (Closes: #564052).
+
+[ hpa: specifically, double-underscore symbols in C are reserved for
+ the implementation, i.e. compiler/libc. ]
+
+Signed-off-by: Ron Lee <ron@debian.org>
+Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
+---
+ tftpd/tftpd.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/tftpd/tftpd.c b/tftpd/tftpd.c
+index e247b97..5fec7bf 100644
+--- a/tftpd/tftpd.c
++++ b/tftpd/tftpd.c
+@@ -76,7 +76,7 @@ static int ai_fam = AF_INET;
+ #define TRIES 6 /* Number of attempts to send each packet */
+ #define TIMEOUT_LIMIT ((1 << TRIES)-1)
+
+-const char *__progname;
++const char *tftpd_progname;
+ static int peer;
+ static unsigned long timeout = TIMEOUT; /* Current timeout value */
+ static unsigned long rexmtval = TIMEOUT; /* Basic timeout value */
+@@ -395,9 +395,9 @@ int main(int argc, char **argv)
+ /* basename() is way too much of a pain from a portability standpoint */
+
+ p = strrchr(argv[0], '/');
+- __progname = (p && p[1]) ? p + 1 : argv[0];
++ tftpd_progname = (p && p[1]) ? p + 1 : argv[0];
+
+- openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON);
++ openlog(tftpd_progname, LOG_PID | LOG_NDELAY, LOG_DAEMON);
+
+ srand(time(NULL) ^ getpid());
+
+@@ -946,14 +946,14 @@ int main(int argc, char **argv)
+ syslog daemon gets restarted by the time we get here. */
+ if (secure && standalone) {
+ closelog();
+- openlog(__progname, LOG_PID | LOG_NDELAY, LOG_DAEMON);
++ openlog(tftpd_progname, LOG_PID | LOG_NDELAY, LOG_DAEMON);
+ }
+
+ #ifdef HAVE_TCPWRAPPERS
+ /* Verify if this was a legal request for us. This has to be
+ done before the chroot, while /etc is still accessible. */
+ request_init(&wrap_request,
+- RQ_DAEMON, __progname,
++ RQ_DAEMON, tftpd_progname,
+ RQ_FILE, fd,
+ RQ_CLIENT_SIN, &from, RQ_SERVER_SIN, &myaddr, 0);
+ sock_methods(&wrap_request);
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/add-error-check-for-disk-filled-up.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/add-error-check-for-disk-filled-up.patch
new file mode 100644
index 000000000..d01c20d38
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/add-error-check-for-disk-filled-up.patch
@@ -0,0 +1,81 @@
+From bd5773947af5ca80ca546ad5625818fc912bdd60 Mon Sep 17 00:00:00 2001
+From: "Roy.Li" <rongqing.li@windriver.com>
+Date: Thu, 22 Aug 2013 08:56:09 +0800
+Subject: [PATCH] tftp-hpa: add error check for disk filled up
+
+Upstream-status: Pending [Sent to http://www.syslinux.org/archives/2013-August/020765.html]
+
+Add error check when the write-buffer is finally flushed to the file,
+the caller can detect if the disk filled up (or had an i/o error) and
+return a NOSAPCE nak to the other side.
+
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ common/tftpsubs.c | 8 +++++---
+ tftpd/tftpd.c | 12 ++++++++++--
+ 2 files changed, 15 insertions(+), 5 deletions(-)
+
+diff --git a/common/tftpsubs.c b/common/tftpsubs.c
+index 8c999f6..b4d4ffe 100644
+--- a/common/tftpsubs.c
++++ b/common/tftpsubs.c
+@@ -206,20 +206,22 @@ int write_behind(FILE * file, int convert)
+
+ p = buf;
+ ct = count;
++ count = 0;
+ while (ct--) { /* loop over the buffer */
+ c = *p++; /* pick up a character */
+ if (prevchar == '\r') { /* if prev char was cr */
+ if (c == '\n') /* if have cr,lf then just */
+- fseek(file, -1, 1); /* smash lf on top of the cr */
++ count = count - 1;
+ else if (c == '\0') /* if have cr,nul then */
+ goto skipit; /* just skip over the putc */
+ /* else just fall through and allow it */
+ }
+- putc(c, file);
++ buf[count] = c;
++ count ++;
+ skipit:
+ prevchar = c;
+ }
+- return count;
++ return write(fileno(file), buf, count);
+ }
+
+ /* When an error has occurred, it is possible that the two sides
+diff --git a/tftpd/tftpd.c b/tftpd/tftpd.c
+index 1873e70..c2adbda 100644
+--- a/tftpd/tftpd.c
++++ b/tftpd/tftpd.c
+@@ -1681,7 +1681,11 @@ static void tftp_recvfile(const struct formats *pf, struct tftphdr *oap, int oac
+ syslog(LOG_WARNING, "tftpd: write(ack): %m");
+ goto abort;
+ }
+- write_behind(file, pf->f_convert);
++ if(write_behind(file, pf->f_convert) < 0) {
++ nak(ENOSPACE, NULL);
++ (void)fclose(file);
++ goto abort;
++ }
+ for (;;) {
+ n = recv_time(peer, dp, PKTSIZE, 0, &r_timeout);
+ if (n < 0) { /* really? */
+@@ -1712,7 +1716,11 @@ static void tftp_recvfile(const struct formats *pf, struct tftphdr *oap, int oac
+ goto abort;
+ }
+ } while (size == segsize);
+- write_behind(file, pf->f_convert);
++ if(write_behind(file, pf->f_convert) < 0) {
++ nak(ENOSPACE, NULL);
++ (void)fclose(file);
++ goto abort;
++ }
+ (void)fclose(file); /* close data file */
+
+ ap->th_opcode = htons((u_short) ACK); /* send the "final" ack */
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/default b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/default
new file mode 100644
index 000000000..1dce7fdfe
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/default
@@ -0,0 +1,3 @@
+#Defaults for tftpd-hpa
+RUN_DAEMON="yes"
+OPTIONS="-l -s /var/lib/tftpboot"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/fix-writing-emtpy-file.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/fix-writing-emtpy-file.patch
new file mode 100644
index 000000000..452aa05f8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/fix-writing-emtpy-file.patch
@@ -0,0 +1,39 @@
+[PATCH] fix the empty file writting
+
+Upstream-Status: pending
+
+With the feature that checking the disk filled up, the return
+value of function write_behind was checked and used to detect
+the disk status. While for empty file, without data being
+written, this function will return -1 thus the disk filled up
+error was miss-raised.
+
+make write_behind to return 0 if written file is empty, to fix
+the this bug.
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ common/tftpsubs.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/common/tftpsubs.c b/common/tftpsubs.c
+index b4ea3f2..9f6cafc 100644
+--- a/common/tftpsubs.c
++++ b/common/tftpsubs.c
+@@ -198,9 +198,12 @@ int write_behind(FILE * file, int convert)
+ nextone = !nextone; /* incr for next time */
+ buf = dp->th_data;
+
+- if (count <= 0)
++ if (count < 0)
+ return -1; /* nak logic? */
+
++ if (count == 0)
++ return 0;
++
+ if (convert == 0)
+ return write(fileno(file), buf, count);
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/init b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/init
new file mode 100644
index 000000000..9e1843635
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/init
@@ -0,0 +1,105 @@
+#! /bin/sh
+#
+# Author: Jaakko Niemi <liiwi@iki.fi>
+# Modified from skeleton file in sarge
+
+### BEGIN INIT INFO
+# Provides: tftp-hpa
+# Required-Start: $local_fs $remote_fs $syslog $network
+# Required-Stop: $local_fs $remote_fs $syslog $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 1
+# Short-Description: HPA's tftp client
+# Description: tftp server to allow booting clients which support
+# the PXE protocol.
+### END INIT INFO
+
+set -e
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DESC="HPA's tftpd"
+NAME=in.tftpd-hpa
+SCRIPTNAME=/etc/init.d/tftpd-hpa
+
+# Read config file if it is present.
+if [ -r /etc/default/tftpd-hpa ]
+then
+ . /etc/default/tftpd-hpa
+fi
+
+DAEMON=/usr/sbin/$NAME
+PIDFILE=/var/run/$NAME.pid
+
+# Gracefully exit if the package has been removed.
+test -x $DAEMON || exit 0
+
+if [ "$RUN_DAEMON" != "yes" ] ; then
+ echo "tftpd-hpa disabled in /etc/default/tftpd-hpa"
+ exit 0
+fi
+
+#
+# Function that starts the daemon/service.
+#
+d_start() {
+ start-stop-daemon --start --quiet --exec $DAEMON -- $OPTIONS
+}
+
+#
+# Function that stops the daemon/service.
+#
+d_stop() {
+ start-stop-daemon --stop --quiet --name $NAME
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service.
+#
+d_reload() {
+ start-stop-daemon --stop --quiet --name $NAME --signal 1
+}
+
+case "$1" in
+ start)
+ echo "Starting $DESC: $NAME"
+ d_start
+ echo "."
+ ;;
+ stop)
+ echo "Stopping $DESC: $NAME"
+ d_stop
+ echo "."
+ ;;
+ #reload)
+ #
+ # If the daemon can reload its configuration without
+ # restarting (for example, when it is sent a SIGHUP),
+ # then implement that here.
+ #
+ # If the daemon responds to changes in its config file
+ # directly anyway, make this an "exit 0".
+ #
+ # echo -n "Reloading $DESC configuration..."
+ # d_reload
+ # echo "done."
+ #;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented, move the "force-reload"
+ # option to the "reload" entry above. If not, "force-reload" is
+ # just the same as "restart".
+ #
+ echo "Restarting $DESC: $NAME"
+ d_stop
+ sleep 1
+ d_start
+ echo "."
+ ;;
+ *)
+ # echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
+ echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.40-remap.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.40-remap.patch
new file mode 100644
index 000000000..3f690609a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.40-remap.patch
@@ -0,0 +1,25 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -up tftp-hpa-0.49/tftpd/remap.c.zero tftp-hpa-0.49/tftpd/remap.c
+--- tftp-hpa-0.49/tftpd/remap.c.zero 2008-10-20 18:08:31.000000000 -0400
++++ tftp-hpa-0.49/tftpd/remap.c 2008-11-25 11:41:09.000000000 -0500
+@@ -286,6 +286,7 @@ struct rule *parserulefile(FILE * f)
+ int lineno = 0;
+ int err = 0;
+
++ memset(this_rule, '\0', sizeof(struct rule));
+ while (lineno++, fgets(line, MAXLINE, f)) {
+ rv = parseline(line, this_rule, lineno);
+ if (rv < 0)
+@@ -294,6 +295,7 @@ struct rule *parserulefile(FILE * f)
+ *last_rule = this_rule;
+ last_rule = &this_rule->next;
+ this_rule = tfmalloc(sizeof(struct rule));
++ memset(this_rule, '\0', sizeof(struct rule));
+ }
+ }
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.42-tftpboot.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.42-tftpboot.patch
new file mode 100644
index 000000000..98a86b78b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.42-tftpboot.patch
@@ -0,0 +1,60 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -up tftp-hpa-0.48/tftp-xinetd.tftpboot tftp-hpa-0.48/tftp-xinetd
+--- tftp-hpa-0.48/tftp-xinetd.tftpboot 2007-01-31 00:51:05.000000000 +0100
++++ tftp-hpa-0.48/tftp-xinetd 2008-05-20 12:05:53.000000000 +0200
+@@ -10,7 +10,7 @@ service tftp
+ wait = yes
+ user = root
+ server = /usr/sbin/in.tftpd
+- server_args = -s /tftpboot
++ server_args = -s /var/lib/tftpboot
+ disable = yes
+ per_source = 11
+ cps = 100 2
+diff -up tftp-hpa-0.48/README.security.tftpboot tftp-hpa-0.48/README.security
+--- tftp-hpa-0.48/README.security.tftpboot 2008-05-29 17:36:32.000000000 +0200
++++ tftp-hpa-0.48/README.security 2008-05-29 17:37:21.000000000 +0200
+@@ -17,10 +17,10 @@ probably the following:
+
+ 1. Create a separate "tftpd" user and group only used for tftpd;
+ 2. Have all your boot files in a single directory tree (usually called
+- /tftpboot).
+-3. Specify "-p -u tftpd -s /tftpboot" on the tftpd command line; if
++ /var/lib/tftpboot).
++3. Specify "-p -u tftpd -s /var/lib/tftpboot" on the tftpd command line; if
+ you want clients to be able to create files use
+- "-p -c -U 002 -u tftpd -s /tftpboot" (replace 002 with whatever
++ "-p -c -U 002 -u tftpd -s /var/lib/tftpboot" (replace 002 with whatever
+ umask is appropriate for your setup.)
+
+ =======================================
+@@ -40,12 +40,12 @@ directly. Thus, if your /etc/inetd.conf
+ line):
+
+ tftp dgram udp wait root /usr/sbin/tcpd
+-/usr/sbin/in.tftpd -s /tftpboot -r blksize
++/usr/sbin/in.tftpd -s /var/lib/tftpboot -r blksize
+
+ ... it's better to change to ...
+
+ tftp dgram udp wait root /usr/sbin/in.tftpd
+-in.tftpd -s /tftpboot -r blksize
++in.tftpd -s /var/lib/tftpboot -r blksize
+
+ You should make sure that you are using "wait" option in tftpd; you
+ also need to have tftpd spawned as root in order for chroot (-s) to
+diff -up tftp-hpa-0.48/tftpd/sample.rules.tftpboot tftp-hpa-0.48/tftpd/sample.rules
+--- tftp-hpa-0.48/tftpd/sample.rules.tftpboot 2008-05-29 17:38:46.000000000 +0200
++++ tftp-hpa-0.48/tftpd/sample.rules 2008-05-29 17:38:05.000000000 +0200
+@@ -30,5 +30,5 @@ rg \\ / # Convert backslashes to slash
+ rg \# @ # Convert hash marks to @ signs
+ rg /../ /..no../ # Convert /../ to /..no../
+ e ^ok/ # These are always ok
+-r ^[^/] /tftpboot/\0 # Convert non-absolute files
++r ^[^/] /var/lib/tftpboot/\0 # Convert non-absolute files
+ a \.pvt$ # Reject requests for private files
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-chk_retcodes.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-chk_retcodes.patch
new file mode 100644
index 000000000..7ae1a8722
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-chk_retcodes.patch
@@ -0,0 +1,21 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -up tftp-hpa-0.49/tftpd/tftpd.c.chk_retcodes tftp-hpa-0.49/tftpd/tftpd.c
+--- tftp-hpa-0.49/tftpd/tftpd.c.chk_retcodes 2009-01-15 15:28:50.000000000 +0100
++++ tftp-hpa-0.49/tftpd/tftpd.c 2009-01-15 15:31:36.000000000 +0100
+@@ -932,7 +932,10 @@ int main(int argc, char **argv)
+ exit(EX_OSERR);
+ }
+ #ifdef __CYGWIN__
+- chdir("/"); /* Cygwin chroot() bug workaround */
++ if (chdir("/") < 0) { /* Cygwin chroot() bug workaround */
++ syslog(LOG_ERR, "chroot: %m");
++ exit(EX_OSERR);
++ }
+ #endif
+ }
+ #ifdef HAVE_SETREGID
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-cmd_arg.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-cmd_arg.patch
new file mode 100644
index 000000000..6b8ceaaeb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-0.49-cmd_arg.patch
@@ -0,0 +1,165 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -up tftp-hpa-0.49/config.h.cmd_arg tftp-hpa-0.49/config.h
+--- tftp-hpa-0.49/config.h.cmd_arg 2010-04-19 15:29:10.567331454 +0200
++++ tftp-hpa-0.49/config.h 2010-04-20 07:33:03.133232772 +0200
+@@ -291,6 +291,7 @@ typedef int socklen_t;
+ /* Prototypes for libxtra functions */
+
+ void *xmalloc(size_t);
++void *xrealloc(void *, size_t);
+ char *xstrdup(const char *);
+
+ #ifndef HAVE_BSD_SIGNAL
+diff -up tftp-hpa-0.49/configure.in.cmd_arg tftp-hpa-0.49/configure.in
+--- tftp-hpa-0.49/configure.in.cmd_arg 2008-10-21 00:08:31.000000000 +0200
++++ tftp-hpa-0.49/configure.in 2010-04-19 11:05:12.387340698 +0200
+@@ -152,6 +152,7 @@ OBJROOT=`pwd`
+
+ XTRA=false
+ PA_SEARCH_LIBS_AND_ADD(xmalloc, iberty)
++PA_SEARCH_LIBS_AND_ADD(xrealloc, iberty)
+ PA_SEARCH_LIBS_AND_ADD(xstrdup, iberty)
+ PA_SEARCH_LIBS_AND_ADD(bsd_signal, bsd, bsdsignal)
+ PA_SEARCH_LIBS_AND_ADD(getopt_long, getopt, getopt_long)
+diff -up tftp-hpa-0.49/lib/xrealloc.c.cmd_arg tftp-hpa-0.49/lib/xrealloc.c
+--- tftp-hpa-0.49/lib/xrealloc.c.cmd_arg 2010-04-19 11:05:12.387340698 +0200
++++ tftp-hpa-0.49/lib/xrealloc.c 2010-04-19 11:05:12.387340698 +0200
+@@ -0,0 +1,20 @@
++/*
++ * xrealloc.c
++ *
++ * Simple error-checking version of realloc()
++ *
++ */
++
++#include "config.h"
++
++void *xrealloc(void *ptr, size_t size)
++{
++ void *p = realloc(ptr, size);
++
++ if (!p) {
++ fprintf(stderr, "Out of memory!\n");
++ exit(128);
++ }
++
++ return p;
++}
+diff -up tftp-hpa-0.49/tftp/main.c.cmd_arg tftp-hpa-0.49/tftp/main.c
+--- tftp-hpa-0.49/tftp/main.c.cmd_arg 2008-10-21 00:08:31.000000000 +0200
++++ tftp-hpa-0.49/tftp/main.c 2010-04-19 11:05:12.389329337 +0200
+@@ -89,11 +89,14 @@ int connected;
+ const struct modes *mode;
+ #ifdef WITH_READLINE
+ char *line = NULL;
++char *remote_pth = NULL;
+ #else
+ char line[LBUFLEN];
++char remote_pth[LBUFLEN];
+ #endif
+ int margc;
+-char *margv[20];
++char **margv;
++int sizeof_margv=0;
+ const char *prompt = "tftp> ";
+ sigjmp_buf toplevel;
+ void intr(int);
+@@ -379,6 +382,10 @@ static void getmoreargs(const char *part
+ free(line);
+ line = NULL;
+ }
++ if (remote_pth) {
++ free(remote_pth);
++ remote_pth = NULL;
++ }
+ line = xmalloc(len + elen + 1);
+ strcpy(line, partial);
+ strcpy(line + len, eline);
+@@ -535,6 +542,7 @@ void put(int argc, char *argv[])
+ int fd;
+ int n, err;
+ char *cp, *targ;
++ long dirlen, namelen, lastlen=0;
+
+ if (argc < 2) {
+ getmoreargs("send ", "(file) ");
+@@ -588,9 +596,22 @@ void put(int argc, char *argv[])
+ }
+ /* this assumes the target is a directory */
+ /* on a remote unix system. hmmmm. */
+- cp = strchr(targ, '\0');
+- *cp++ = '/';
++ dirlen = strlen(targ)+1;
++#ifdef WITH_READLINE
++ remote_pth = xmalloc(dirlen+1);
++#endif
++ strcpy(remote_pth, targ);
++ remote_pth[dirlen-1] = '/';
++ cp = remote_pth + dirlen;
+ for (n = 1; n < argc - 1; n++) {
++#ifdef WITH_READLINE
++ namelen = strlen(tail(argv[n])) + 1;
++ if (namelen > lastlen) {
++ remote_pth = xrealloc(remote_pth, dirlen + namelen + 1);
++ cp = remote_pth + dirlen;
++ lastlen = namelen;
++ }
++#endif
+ strcpy(cp, tail(argv[n]));
+ fd = open(argv[n], O_RDONLY | mode->m_openflags);
+ if (fd < 0) {
+@@ -600,9 +621,9 @@ void put(int argc, char *argv[])
+ }
+ if (verbose)
+ printf("putting %s to %s:%s [%s]\n",
+- argv[n], hostname, targ, mode->m_mode);
++ argv[n], hostname, remote_pth, mode->m_mode);
+ sa_set_port(&peeraddr, port);
+- tftp_sendfile(fd, targ, mode->m_mode);
++ tftp_sendfile(fd, remote_pth, mode->m_mode);
+ }
+ }
+
+@@ -801,6 +822,10 @@ static void command(void)
+ free(line);
+ line = NULL;
+ }
++ if (remote_pth) {
++ free(remote_pth);
++ remote_pth = NULL;
++ }
+ line = readline(prompt);
+ if (!line)
+ exit(0); /* EOF */
+@@ -872,7 +897,13 @@ struct cmd *getcmd(char *name)
+ static void makeargv(void)
+ {
+ char *cp;
+- char **argp = margv;
++ char **argp;
++
++ if (!sizeof_margv) {
++ sizeof_margv = 20;
++ margv = xmalloc(sizeof_margv * sizeof(char *));
++ }
++ argp = margv;
+
+ margc = 0;
+ for (cp = line; *cp;) {
+@@ -882,6 +913,11 @@ static void makeargv(void)
+ break;
+ *argp++ = cp;
+ margc += 1;
++ if (margc == sizeof_margv) {
++ sizeof_margv += 20;
++ margv = xrealloc(margv, sizeof_margv * sizeof(char *));
++ argp = margv + margc;
++ }
+ while (*cp != '\0' && !isspace(*cp))
+ cp++;
+ if (*cp == '\0')
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.39-tzfix.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.39-tzfix.patch
new file mode 100644
index 000000000..85110eb28
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.39-tzfix.patch
@@ -0,0 +1,24 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -up tftp-hpa-0.49/tftpd/tftpd.c.tzfix tftp-hpa-0.49/tftpd/tftpd.c
+--- tftp-hpa-0.49/tftpd/tftpd.c.tzfix 2008-10-20 18:08:31.000000000 -0400
++++ tftp-hpa-0.49/tftpd/tftpd.c 2008-11-25 11:45:27.000000000 -0500
+@@ -350,6 +350,14 @@ int main(int argc, char **argv)
+ const char *pidfile = NULL;
+ u_short tp_opcode;
+
++ time_t my_time = 0;
++ struct tm* p_tm;
++ char envtz[10];
++ my_time = time(NULL);
++ p_tm = localtime(&my_time);
++ snprintf(envtz, sizeof(envtz) - 1, "UTC%+d", (p_tm->tm_gmtoff * -1)/3600);
++ setenv("TZ", envtz, 0);
++
+ /* basename() is way too much of a pain from a portability standpoint */
+
+ p = strrchr(argv[0], '/');
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-fortify-strcpy-crash.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-fortify-strcpy-crash.patch
new file mode 100644
index 000000000..08d2b5b7d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-fortify-strcpy-crash.patch
@@ -0,0 +1,32 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -urN tftp-hpa-0.49.orig/tftp/tftp.c tftp-hpa-0.49/tftp/tftp.c
+--- tftp-hpa-0.49.orig/tftp/tftp.c 2008-10-20 18:08:31.000000000 -0400
++++ tftp-hpa-0.49/tftp/tftp.c 2009-08-05 09:47:18.072585848 -0400
+@@ -279,15 +279,16 @@
+ struct tftphdr *tp, const char *mode)
+ {
+ char *cp;
++ size_t len;
+
+ tp->th_opcode = htons((u_short) request);
+ cp = (char *)&(tp->th_stuff);
+- strcpy(cp, name);
+- cp += strlen(name);
+- *cp++ = '\0';
+- strcpy(cp, mode);
+- cp += strlen(mode);
+- *cp++ = '\0';
++ len = strlen(name) + 1;
++ memcpy(cp, name, len);
++ cp += len;
++ len = strlen(mode) + 1;
++ memcpy(cp, mode, len);
++ cp += len;
+ return (cp - (char *)tp);
+ }
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-stats.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-stats.patch
new file mode 100644
index 000000000..720cd69de
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-0.49-stats.patch
@@ -0,0 +1,20 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -up tftp-hpa-0.49/tftp/tftp.c.stats tftp-hpa-0.49/tftp/tftp.c
+--- tftp-hpa-0.49/tftp/tftp.c.stats 2011-01-03 15:38:34.217918067 +0100
++++ tftp-hpa-0.49/tftp/tftp.c 2011-01-03 15:38:37.498917014 +0100
+@@ -400,8 +400,8 @@ static void printstats(const char *direc
+ {
+ double delta;
+
+- delta = (tstop.tv_sec + (tstop.tv_usec / 100000.0)) -
+- (tstart.tv_sec + (tstart.tv_usec / 100000.0));
++ delta = (tstop.tv_sec + (tstop.tv_usec / 1000000.0)) -
++ (tstart.tv_sec + (tstart.tv_usec / 1000000.0));
+ if (verbose) {
+ printf("%s %lu bytes in %.1f seconds", direction, amount, delta);
+ printf(" [%.0f bit/s]", (amount * 8.) / delta);
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-5.2-pktinfo.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-5.2-pktinfo.patch
new file mode 100644
index 000000000..216349d26
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-5.2-pktinfo.patch
@@ -0,0 +1,29 @@
+Patch originally from Fedora
+
+http://pkgs.fedoraproject.org/cgit/tftp.git/
+
+Upstream-Status: Pending
+
+diff -up tftp-hpa-5.2/tftpd/recvfrom.c.test tftp-hpa-5.2/tftpd/recvfrom.c
+--- tftp-hpa-5.2/tftpd/recvfrom.c.test 2011-12-11 23:13:52.000000000 +0100
++++ tftp-hpa-5.2/tftpd/recvfrom.c 2012-01-04 10:05:17.852042256 +0100
+@@ -149,16 +149,16 @@ myrecvfrom(int s, void *buf, int len, un
+
+ /* Try to enable getting the return address */
+ #ifdef IP_RECVDSTADDR
+- if (from->sa_family == AF_INET)
++ if (from->sa_family == AF_INET || !from->sa_family)
+ setsockopt(s, IPPROTO_IP, IP_RECVDSTADDR, &on, sizeof(on));
+ #endif
+ #ifdef IP_PKTINFO
+- if (from->sa_family == AF_INET)
++ if (from->sa_family == AF_INET || !from->sa_family)
+ setsockopt(s, IPPROTO_IP, IP_PKTINFO, &on, sizeof(on));
+ #endif
+ #ifdef HAVE_IPV6
+ #ifdef IPV6_RECVPKTINFO
+- if (from->sa_family == AF_INET6)
++ if (from->sa_family == AF_INET6 || !from->sa_family)
+ setsockopt(s, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on, sizeof(on));
+ #endif
+ #endif
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-bug-fix-on-separated-CR-and-LF.patch b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-bug-fix-on-separated-CR-and-LF.patch
new file mode 100644
index 000000000..3e220ec38
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-hpa-bug-fix-on-separated-CR-and-LF.patch
@@ -0,0 +1,38 @@
+From 6ed1eb8829dee351b54e183bc42c007cb306aaa5 Mon Sep 17 00:00:00 2001
+From: Zhang Xiao <xiao.zhang@windriver.com>
+Date: Wed, 11 Jun 2014 14:01:16 +0800
+Subject: [PATCH] tftp-hpa: bug fix on separated CR and LF
+
+In ascii mode, if the CR and LF was separated into different transfer
+blocks, LF will be just dropped instead of replacing the previous CR.
+Add a checking on the first character to fix it.
+
+Upstream-Status: pending
+
+Signed-off-by: Zhang Xiao <xiao.zhang@windriver.com>
+---
+ common/tftpsubs.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/common/tftpsubs.c b/common/tftpsubs.c
+index b4d4ffe..b4ea3f2 100644
+--- a/common/tftpsubs.c
++++ b/common/tftpsubs.c
+@@ -207,6 +207,14 @@ int write_behind(FILE * file, int convert)
+ p = buf;
+ ct = count;
+ count = 0;
++
++ /* Check the first character together with prevchar */
++ c = *p;
++ if ((prevchar == '\r') && (c == '\n')) {
++ lseek(fileno(file), -1, SEEK_CUR);
++ count++;
++ }
++
+ while (ct--) { /* loop over the buffer */
+ c = *p++; /* pick up a character */
+ if (prevchar == '\r') { /* if prev char was cr */
+--
+1.8.5.2.233.g932f7e4
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-xinetd b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-xinetd
new file mode 100644
index 000000000..fe7016396
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftp-xinetd
@@ -0,0 +1,18 @@
+# default: off
+# description: The tftp server serves files using the trivial file transfer \
+# protocol. The tftp protocol is often used to boot diskless \
+# workstations, download configuration files to network-aware printers, \
+# and to start the installation process for some operating systems.
+service tftp
+{
+ socket_type = dgram
+ protocol = udp
+ wait = yes
+ user = root
+ server = /usr/sbin/in.tftpd-hpa
+ server_args = -s /var/lib/tftpboot
+ disable = yes
+ per_source = 11
+ cps = 100 2
+ flags = IPv6
+}
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.service b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.service
new file mode 100644
index 000000000..97d56586b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Tftp Server
+Requires=tftpd-hpa.socket
+
+[Service]
+ExecStart=@SBINDIR@/in.tftpd-hpa -s /var/lib/tftpboot
+StandardInput=socket
+
+[Install]
+Also=tftpd-hpa.socket
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.socket b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.socket
new file mode 100644
index 000000000..8764c1de3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/files/tftpd-hpa.socket
@@ -0,0 +1,8 @@
+[Unit]
+Description=Tftp Server Activation Socket
+
+[Socket]
+ListenDatagram=69
+
+[Install]
+WantedBy=sockets.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/tftp-hpa_5.2.bb b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/tftp-hpa_5.2.bb
new file mode 100644
index 000000000..132972b33
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/tftp-hpa/tftp-hpa_5.2.bb
@@ -0,0 +1,91 @@
+SUMMARY = "Client for the Trivial File Transfer Protocol"
+DESCRIPTION = \
+"The Trivial File Transfer Protocol (TFTP) is normally used only for \
+booting diskless workstations. The tftp package provides the user \
+interface for TFTP, which allows users to transfer files to and from a \
+remote machine. This program and TFTP provide very little security, \
+and should not be enabled unless it is expressly needed."
+DEPENDS = "tcp-wrappers readline"
+SECTION = "net"
+HOMEPAGE = "http://freecode.com/projects/tftp-hpa"
+LICENSE = "BSD-4-Clause"
+LIC_FILES_CHKSUM = "file://MCONFIG.in;beginline=1;endline=9;md5=c28ba5adb43041fae4629db05c83cbdd \
+ file://tftp/tftp.c;beginline=1;endline=32;md5=988c1cba99d70858a26cd877209857f4"
+
+
+SRC_URI = "http://kernel.org/pub/software/network/tftp/tftp-hpa/tftp-hpa-${PV}.tar.bz2 \
+ file://tftp-0.40-remap.patch \
+ file://tftp-0.42-tftpboot.patch \
+ file://tftp-0.49-chk_retcodes.patch \
+ file://tftp-0.49-cmd_arg.patch \
+ file://tftp-hpa-0.39-tzfix.patch \
+ file://tftp-hpa-0.49-fortify-strcpy-crash.patch \
+ file://tftp-hpa-0.49-stats.patch \
+ file://tftp-hpa-5.2-pktinfo.patch \
+ file://default \
+ file://init \
+ file://add-error-check-for-disk-filled-up.patch \
+ file://tftp-hpa-bug-fix-on-separated-CR-and-LF.patch \
+ file://fix-writing-emtpy-file.patch \
+ file://0001-__progname-is-provided-by-libc.patch \
+ file://tftpd-hpa.socket \
+ file://tftpd-hpa.service \
+"
+
+SRC_URI[md5sum] = "46c9bd20bbffa62f79c958c7b99aac21"
+SRC_URI[sha256sum] = "0a9f88d4c1c02687b4853b02ab5dd8779d4de4ffdb9b2e5c9332841304d1a269"
+
+inherit autotools-brokensep update-rc.d update-alternatives systemd
+
+export AR = "${HOST_PREFIX}ar cq"
+
+EXTRA_OECONF += "--disable-option-checking"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+# configure.in has errors
+do_configure() {
+ oe_runconf
+}
+
+do_install() {
+ oe_runmake install INSTALLROOT=${D}
+ mv ${D}${bindir}/tftp ${D}${bindir}/tftp-hpa
+ mv ${D}${sbindir}/in.tftpd ${D}${sbindir}/in.tftpd-hpa
+
+ install -m 755 -d ${D}${localstatedir}/lib/tftpboot/
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/tftpd-hpa
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/tftpd-hpa
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/tftpd-hpa
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/tftpd-hpa
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}${sysconfdir}/init.d/tftpd-hpa
+
+ install -d ${D}${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/default ${D}${sysconfdir}/default/tftpd-hpa
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/tftpd-hpa.socket ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/tftpd-hpa.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/tftpd-hpa.service
+}
+
+FILES_${PN} = "${bindir}"
+
+PACKAGES += "tftp-hpa-server"
+SUMMARY_tftp-hpa-server = "Server for the Trivial File Transfer Protocol"
+FILES_tftp-hpa-server = "${sbindir} ${sysconfdir} ${localstatedir}"
+CONFFILES_tftp-hpa-server = "${sysconfdir}/default/tftpd-hpa"
+
+INITSCRIPT_PACKAGES = "tftp-hpa-server"
+INITSCRIPT_NAME = "tftpd-hpa"
+INITSCRIPT_PARAMS = "start 20 2 3 4 5 . stop 20 1 ."
+
+ALTERNATIVE_${PN} = "tftp"
+ALTERNATIVE_TARGET[tftp] = "${bindir}/tftp-hpa"
+ALTERNATIVE_PRIORITY = "60"
+
+SYSTEMD_PACKAGES = "tftp-hpa-server"
+SYSTEMD_SERVICE_tftp-hpa-server = "tftpd-hpa.socket tftpd-hpa.service"
+SYSTEMD_AUTO_ENABLE_tftp-hpa-server = "enable"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vblade/files/cross.patch b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/cross.patch
new file mode 100644
index 000000000..d2eb15614
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/cross.patch
@@ -0,0 +1,16 @@
+Remove CC and CFLAGS values, we set these ourselves
+
+Upstream-Status: Inappropriate [config]
+
+diff -urN vblade-19.old//makefile vblade-19//makefile
+--- vblade-19.old//makefile 2008-10-08 22:07:40.000000000 +0100
++++ vblade-19//makefile 2008-11-18 19:07:51.700365029 +0000
+@@ -9,8 +9,6 @@
+ mandir = ${sharedir}/man
+
+ O=aoe.o bpf.o ${PLATFORM}.o ata.o
+-CFLAGS += -Wall -g -O2
+-CC = gcc
+
+ vblade: $O
+ ${CC} -o vblade $O
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vblade/files/makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/makefile-add-ldflags.patch
new file mode 100644
index 000000000..a74452db6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/makefile-add-ldflags.patch
@@ -0,0 +1,19 @@
+Add LDFLAGS variable to Makefile, make sure the extra linker flags can be passed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/makefile b/makefile
+index 98008da..c328ba7 100644
+--- a/makefile
++++ b/makefile
+@@ -11,7 +11,7 @@ mandir = ${sharedir}/man
+ O=aoe.o bpf.o ${PLATFORM}.o ata.o
+
+ vblade: $O
+- ${CC} -o vblade $O
++ ${CC} ${LDFLAGS} -o vblade $O
+
+ aoe.o : aoe.c config.h dat.h fns.h makefile
+ ${CC} ${CFLAGS} -c $<
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.conf b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.conf
new file mode 100644
index 000000000..e8b93ec37
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.conf
@@ -0,0 +1,2 @@
+# network_device shelf slot file/disk/partition mac[,mac[,mac]]
+#eth0 0 0 /dev/sdb 00:11:22:33:44:55
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.init b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.init
new file mode 100644
index 000000000..0298c8001
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.init
@@ -0,0 +1,193 @@
+#!/bin/sh
+#
+# Init script for vblade (ATA over Ethernet daemon)
+#
+# chkconfig: - 30 70
+# description: vblade AoE daemon
+#
+# processname: vblade
+# config: /etc/vblade.conf
+#
+# Shamelessly hacked together from other init scripts (sshd, mostly)
+# integrate vblade.init from Fedora's vblade-14-6.fc12.src.rpm
+#
+
+RETVAL=0
+prog=vblade
+
+spawn_vblade() {
+ ALLOWMACS=""
+ [ -n "$5" ] && ALLOWMACS="-m $5"
+ ID="$1-e$2.$3"
+ if [ ! -d "/var/run/$prog" ]; then
+ mkdir /var/run/$prog
+ fi
+ PID_FILE=/var/run/$prog/${ID}.pid
+ $prog $ALLOWMACS $2 $3 $1 $4 >> /var/log/$prog.log 2>&1 &
+ pid=$!
+ RETVAL=$?
+ echo $pid > $PID_FILE
+ echo -n $"$4 (e$2.$3@$1) [pid $pid]"
+ [ "$RETVAL" = 0 ] && echo "success" || echo "failure"
+ echo
+}
+
+start() {
+ local ret
+
+ echo $"Starting up $prog: "
+
+ #/var/lock/subsys/$prog exists?
+ status $prog 2>&1 > /dev/null
+ ret=$?
+
+ if [ "$ret" = "2" ]; then
+ echo "$prog dead but subsys locked"
+ echo
+ return 2
+ else
+ if [ "$ret" = "0" ]; then
+ #is running
+ echo "already running"
+ return 0
+ fi
+ fi
+
+ if [ 0 -ne `grep -vc '^#\|^$' /etc/$prog.conf` ]
+ then
+ grep -v '^#' /etc/$prog.conf | sed -e 's/ / /g' -e 's/ / /g' | while read line
+ do
+ spawn_vblade $line
+ done
+ touch /var/lock/subsys/$prog
+ else
+ echo -n "empty $prog.conf?"
+ echo " passed"
+ echo
+ fi
+}
+
+stop() {
+ echo -n $"Shutting down $prog: "
+ for pidfile in `ls /var/run/$prog/*.pid 2>/dev/null`
+ do
+ kill -TERM `cat $pidfile`
+ rm -f $pidfile
+ done
+ echo "success"
+ echo
+ rm -f /var/lock/subsys/$prog
+}
+
+__pids_var_run() {
+ local base=${1##*/}
+ local pid_file=${2:-/var/run/$base.pid}
+
+ pid=
+ if [ -f "$pid_file" ] ; then
+ local line p
+
+ while : ; do
+ read line
+ [ -z "$line" ] && break
+ for p in $line ; do
+ [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
+ done
+ done < "$pid_file"
+
+ if [ -n "$pid" ]; then
+ return 0
+ fi
+ return 1 # "Program is dead and /var/run pid file exists"
+ fi
+ return 3 # "Program is not running"
+}
+
+__pids_pidof() {
+ pidof "$1" || pidof "${1##*/}"
+}
+
+status() {
+ local base pid lock_file= pid_file=
+
+ # Test syntax.
+ if [ "$#" = 0 ] ; then
+ echo $"Usage: status [-p pidfile] {program}"
+ return 1
+ fi
+ if [ "$1" = "-p" ]; then
+ pid_file=$2
+ shift 2
+ fi
+ if [ "$1" = "-l" ]; then
+ lock_file=$2
+ shift 2
+ fi
+ base=${1##*/}
+
+ # First try "pidof"
+ __pids_var_run "$1" "$pid_file"
+ RC=$?
+ if [ -z "$pid_file" -a -z "$pid" ]; then
+ pid="$(__pids_pidof "$1")"
+ fi
+ if [ -n "$pid" ]; then
+ echo $"${base} (pid $pid) is running..."
+ return 0
+ fi
+
+ case "$RC" in
+ 0)
+ echo $"${base} (pid $pid) is running..."
+ return 0
+ ;;
+ 1)
+ echo $"${base} dead but pid file exists"
+ return 1
+ ;;
+ esac
+ if [ -z "${lock_file}" ]; then
+ lock_file=${base}
+ fi
+ # See if /var/lock/subsys/${lock_file} exists
+ if [ -f /var/lock/subsys/${lock_file} ]; then
+ echo $"${base} dead but subsys locked"
+ return 2
+ fi
+ echo $"${base} is stopped"
+ return 3
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart)
+ stop
+ start
+ ;;
+ reload)
+ # yes, this sucks, but the vblade processes die on SIGHUP
+ stop
+ start
+ ;;
+ condrestart)
+ if [ -f /var/lock/subsys/$prog ]; then
+ stop
+ # avoid race
+ sleep 3
+ start
+ fi
+ ;;
+ status)
+ status $prog
+ RETVAL=$?
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
+ RETVAL=1
+esac
+exit $RETVAL
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.service b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.service
new file mode 100644
index 000000000..83a4d5dcb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/vblade.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Virtual EtherDrive blade AoE target
+After=syslog.target network.target
+
+[Service]
+Type=forking
+ExecStart=@BINDIR@/vblade.init start
+ExecStop=@BINDIR@/vblade.init stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vblade/files/volatiles.99_vblade b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/volatiles.99_vblade
new file mode 100644
index 000000000..64a5881c0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vblade/files/volatiles.99_vblade
@@ -0,0 +1 @@
+d root root 0755 /var/run/vblade none
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vblade/vblade_22.bb b/meta-openembedded/meta-networking/recipes-daemons/vblade/vblade_22.bb
new file mode 100644
index 000000000..d7b1dfaad
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vblade/vblade_22.bb
@@ -0,0 +1,51 @@
+SUMMARY = "Virtual EtherDrive blade AoE target"
+SECTION = "admin"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/aoetools/${BP}.tar.gz \
+ file://cross.patch \
+ file://makefile-add-ldflags.patch \
+ file://${BPN}.conf \
+ file://${BPN}.init \
+ file://${BPN}.service \
+ file://volatiles.99_vblade \
+ "
+
+SRC_URI[md5sum] = "510d98ba0f231284a5fbe2da11cb2d6e"
+SRC_URI[sha256sum] = "a990378f273f10eb431e42954a871aed52714035bbab28c54cef600c458356bb"
+
+inherit autotools-brokensep update-rc.d systemd
+
+do_install() {
+ install -D -m 0755 ${S}/vblade ${D}/${sbindir}/vblade
+ install -D -m 0755 ${S}/vbladed ${D}/${sbindir}/vbladed
+ install -D -m 0644 ${S}/vblade.8 ${D}/${mandir}/man8/vblade.8
+
+ install -D -m 0644 ${WORKDIR}/${BPN}.conf ${D}/${sysconfdir}/${BPN}.conf
+ install -D -m 0755 ${WORKDIR}/${BPN}.init ${D}/${sysconfdir}/init.d/${BPN}
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}/${sysconfdir}/default/volatiles
+ install -m 0755 ${WORKDIR}/volatiles.99_vblade ${D}/${sysconfdir}/default/volatiles/99_vblade
+ fi
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}/${bindir}
+ install -m 0755 ${WORKDIR}/${BPN}.init ${D}/${bindir}/
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /var/run/${BPN} 0755 root root -" > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/vblade.service ${D}${systemd_system_unitdir}
+ sed -e 's,@BINDIR@,${bindir},g' -i ${D}${systemd_system_unitdir}/*.service
+ fi
+
+}
+
+INITSCRIPT_NAME = "vblade"
+INITSCRIPT_PARAMS = "start 30 . stop 70 0 1 2 3 4 5 6 ."
+
+SYSTEMD_SERVICE_${PN} = "vblade.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/change-secure_chroot_dir.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/change-secure_chroot_dir.patch
new file mode 100644
index 000000000..b69de1d1c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/change-secure_chroot_dir.patch
@@ -0,0 +1,62 @@
+From ce2be5d4967445828d5ae9d9462cfaa78ae03c73 Mon Sep 17 00:00:00 2001
+From: Ming Liu <ming.liu@windriver.com>
+Date: Wed, 18 Sep 2013 09:44:20 +0800
+Subject: [PATCH] vsftpd: change default value of secure_chroot_dir
+
+Upstream-Status: Pending
+
+Change secure_chroot_dir pointing to a volatile directory.
+
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+
+---
+ INSTALL | 6 +++---
+ tunables.c | 2 +-
+ vsftpd.conf.5 | 2 +-
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/INSTALL b/INSTALL
+index 4f811aa..427122a 100644
+--- a/INSTALL
++++ b/INSTALL
+@@ -27,11 +27,11 @@ user in case it does not already exist. e.g.:
+ [root@localhost root]# useradd nobody
+ useradd: user nobody exists
+
+-2b) vsftpd needs the (empty) directory /usr/share/empty in the default
++2b) vsftpd needs the (empty) directory /var/run/vsftpd/empty in the default
+ configuration. Add this directory in case it does not already exist. e.g.:
+
+-[root@localhost root]# mkdir /usr/share/empty/
+-mkdir: cannot create directory `/usr/share/empty': File exists
++[root@localhost root]# mkdir /var/run/vsftpd/empty/
++mkdir: cannot create directory `/var/run/vsftpd/empty': File exists
+
+ 2c) For anonymous FTP, you will need the user "ftp" to exist, and have a
+ valid home directory (which is NOT owned or writable by the user "ftp").
+diff --git a/tunables.c b/tunables.c
+index 284a10d..8c63c3f 100644
+--- a/tunables.c
++++ b/tunables.c
+@@ -254,7 +254,7 @@ tunables_load_defaults()
+ /* -rw------- */
+ tunable_chown_upload_mode = 0600;
+
+- install_str_setting("/usr/share/empty", &tunable_secure_chroot_dir);
++ install_str_setting("/var/run/vsftpd/empty", &tunable_secure_chroot_dir);
+ install_str_setting("ftp", &tunable_ftp_username);
+ install_str_setting("root", &tunable_chown_username);
+ install_str_setting("/var/log/xferlog", &tunable_xferlog_file);
+diff --git a/vsftpd.conf.5 b/vsftpd.conf.5
+index fcc6022..e4ffdee 100644
+--- a/vsftpd.conf.5
++++ b/vsftpd.conf.5
+@@ -969,7 +969,7 @@ This option should be the name of a directory which is empty. Also, the
+ directory should not be writable by the ftp user. This directory is used
+ as a secure chroot() jail at times vsftpd does not require filesystem access.
+
+-Default: /usr/share/empty
++Default: /var/run/vsftpd/empty
+ .TP
+ .B ssl_ciphers
+ This option can be used to select which SSL ciphers vsftpd will allow for
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/init b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/init
new file mode 100755
index 000000000..72adf0d9a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/init
@@ -0,0 +1,50 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: vsftpd
+# Default-Start: 2345
+# Default-Stop: 016
+# Short-Description: Very Secure Ftp Daemon
+# Description: vsftpd is a Very Secure FTP daemon. It was written completely from
+# scratch
+### END INIT INFO
+
+DAEMON=/usr/sbin/vsftpd
+NAME=vsftpd
+DESC="FTP Server"
+ARGS=""
+FTPDIR=/var/lib/ftp
+
+test -f $DAEMON || exit 0
+
+set -e
+
+case "$1" in
+ start)
+ echo -n "* starting $DESC: $NAME... "
+ if ! test -d $FTPDIR; then
+ mkdir -p $FTPDIR/in
+ chown ftp $FTPDIR -R
+ chmod a-w $FTPDIR
+ chmod u+w $FTPDIR/in
+ fi
+ start-stop-daemon -S -b -x $DAEMON -- $ARGS
+ echo "done."
+ ;;
+ stop)
+ echo -n "* stopping $DESC: $NAME... "
+ start-stop-daemon -K -x $DAEMON
+ 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-networking/recipes-daemons/vsftpd/files/volatiles.99_vsftpd b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/volatiles.99_vsftpd
new file mode 100644
index 000000000..8a602ba37
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/volatiles.99_vsftpd
@@ -0,0 +1 @@
+d root root 0755 /var/run/vsftpd/empty none
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.conf b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.conf
new file mode 100644
index 000000000..bb1929480
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.conf
@@ -0,0 +1,139 @@
+# Example config file /etc/vsftpd.conf
+#
+# The default compiled in settings are fairly paranoid. This sample file
+# loosens things up a bit, to make the ftp daemon more usable.
+# Please see vsftpd.conf.5 for all compiled in defaults.
+#
+# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
+# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
+# capabilities.
+
+# run standalone
+listen=YES
+
+# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
+anonymous_enable=NO
+#
+# Uncomment this to allow local users to log in.
+local_enable=YES
+#
+# Uncomment this to enable any form of FTP write command.
+write_enable=YES
+#
+# Default umask for local users is 077. You may wish to change this to 022,
+# if your users expect that (022 is used by most other ftpd's)
+local_umask=022
+#
+# Uncomment this to allow the anonymous FTP user to upload files. This only
+# has an effect if the above global write enable is activated. Also, you will
+# obviously need to create a directory writable by the FTP user.
+#anon_upload_enable=YES
+#
+# Uncomment this if you want the anonymous FTP user to be able to create
+# new directories.
+#anon_mkdir_write_enable=YES
+#
+# Activate directory messages - messages given to remote users when they
+# go into a certain directory.
+dirmessage_enable=YES
+#
+# Activate logging of uploads/downloads.
+xferlog_enable=YES
+#
+# Make sure PORT transfer connections originate from port 20 (ftp-data).
+connect_from_port_20=YES
+#
+# If you want, you can arrange for uploaded anonymous files to be owned by
+# a different user. Note! Using "root" for uploaded files is not
+# recommended!
+#chown_uploads=YES
+#chown_username=whoever
+#
+# You may override where the log file goes if you like. The default is shown
+# below.
+#xferlog_file=/var/log/vsftpd.log
+#
+# If you want, you can have your log file in standard ftpd xferlog format
+xferlog_std_format=YES
+#
+# You may change the default value for timing out an idle session.
+#idle_session_timeout=600
+#
+# You may change the default value for timing out a data connection.
+#data_connection_timeout=120
+#
+# It is recommended that you define on your system a unique user which the
+# ftp server can use as a totally isolated and unprivileged user.
+#nopriv_user=ftp
+#
+# Enable this and the server will recognise asynchronous ABOR requests. Not
+# recommended for security (the code is non-trivial). Not enabling it,
+# however, may confuse older FTP clients.
+#async_abor_enable=YES
+#
+# By default the server will pretend to allow ASCII mode but in fact ignore
+# the request. Turn on the below options to have the server actually do ASCII
+# mangling on files when in ASCII mode.
+# Beware that turning on ascii_download_enable enables malicious remote parties
+# to consume your I/O resources, by issuing the command "SIZE /big/file" in
+# ASCII mode.
+# These ASCII options are split into upload and download because you may wish
+# to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
+# without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
+# on the client anyway..
+#ascii_upload_enable=YES
+#ascii_download_enable=YES
+#
+# You may fully customise the login banner string:
+#ftpd_banner=Welcome to blah FTP service.
+#
+# You may specify a file of disallowed anonymous e-mail addresses. Apparently
+# useful for combatting certain DoS attacks.
+#deny_email_enable=YES
+# (default follows)
+#banned_email_file=/etc/vsftpd.banned_emails
+#
+# You may specify an explicit list of local users to chroot() to their home
+# directory. If chroot_local_user is YES, then this list becomes a list of
+# users to NOT chroot().
+#chroot_list_enable=YES
+# (default follows)
+#chroot_list_file=/etc/vsftpd.chroot_list
+#
+# You may activate the "-R" option to the builtin ls. This is disabled by
+# default to avoid remote users being able to cause excessive I/O on large
+# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
+# the presence of the "-R" option, so there is a strong case for enabling it.
+#ls_recurse_enable=YES
+#
+# This string is the name of the PAM service vsftpd will use.
+pam_service_name=vsftpd
+#
+# This option is examined if userlist_enable is activated. If you set this
+# setting to NO, then users will be denied login unless they are explicitly
+# listed in the file specified by userlist_file. When login is denied, the
+# denial is issued before the user is asked for a password.
+userlist_deny=YES
+#
+# If enabled, vsftpd will load a list of usernames, from the filename given by
+# userlist_file. If a user tries to log in using a name in this file, they
+# will be denied before they are asked for a password. This may be useful in
+# preventing cleartext passwords being transmitted. See also userlist_deny.
+userlist_enable=YES
+#
+# If enabled, vsftpd will display directory listings with the time in your
+# local time zone. The default is to display GMT. The times returned by the
+# MDTM FTP command are also affected by this option.
+use_localtime=YES
+#
+# If set to YES, local users will be (by default) placed in a chroot() jail in
+# their home directory after login. Warning: This option has security
+# implications, especially if the users have upload permission, or shell access.
+# Only enable if you know what you are doing. Note that these security implications
+# are not vsftpd specific. They apply to all FTP daemons which offer to put
+# local users in chroot() jails.
+chroot_local_user=YES
+#
+allow_writeable_chroot=YES
+#
+tcp_wrappers=YES
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.ftpusers b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.ftpusers
new file mode 100644
index 000000000..096142f5d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.ftpusers
@@ -0,0 +1,15 @@
+# Users that are not allowed to login via ftp
+root
+bin
+daemon
+adm
+lp
+sync
+shutdown
+halt
+mail
+news
+uucp
+operator
+games
+nobody
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.service b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.service
new file mode 100644
index 000000000..e27102026
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Vsftpd ftp daemon
+After=network.target
+
+[Service]
+ExecStart=@SBINDIR@/vsftpd
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.user_list b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.user_list
new file mode 100644
index 000000000..d283e3d26
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/files/vsftpd.user_list
@@ -0,0 +1,20 @@
+# vsftpd userlist
+# If userlist_deny=NO, only allow users in this file
+# If userlist_deny=YES (default), never allow users in this file, and
+# do not even prompt for a password.
+# Note that the default vsftpd pam config also checks /etc/vsftpd.ftpusers
+# for users that are denied.
+root
+bin
+daemon
+adm
+lp
+sync
+shutdown
+halt
+mail
+news
+uucp
+operator
+games
+nobody
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-sysdeputil.c-Fix-with-musl-which-does-not-have-utmpx.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-sysdeputil.c-Fix-with-musl-which-does-not-have-utmpx.patch
new file mode 100644
index 000000000..d81c94a4a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-sysdeputil.c-Fix-with-musl-which-does-not-have-utmpx.patch
@@ -0,0 +1,26 @@
+From c5caf52b9ed79da8916ef5722efe6df61a856e2f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 20:09:12 -0700
+Subject: [PATCH] sysdeputil.c: Fix with musl which does not have utmpx
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ sysdeputil.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/sysdeputil.c b/sysdeputil.c
+index 06f01f4..a8cff3b 100644
+--- a/sysdeputil.c
++++ b/sysdeputil.c
+@@ -58,7 +58,9 @@
+ #define VSF_SYSDEP_HAVE_SHADOW
+ #define VSF_SYSDEP_HAVE_USERSHELL
+ #define VSF_SYSDEP_HAVE_LIBCAP
+-#define VSF_SYSDEP_HAVE_UTMPX
++#if defined(__GLIBC__)
++ #define VSF_SYSDEP_HAVE_UTMPX
++#endif
+
+ #define __USE_GNU
+ #include <utmpx.h>
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-vsftpd-allow-sysinfo-in-the-seccomp-sandbox.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-vsftpd-allow-sysinfo-in-the-seccomp-sandbox.patch
new file mode 100644
index 000000000..c6c0f80a1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/0001-vsftpd-allow-sysinfo-in-the-seccomp-sandbox.patch
@@ -0,0 +1,43 @@
+From 9c4826c19f04da533886209361a2caddf582d65c Mon Sep 17 00:00:00 2001
+From: Mingli Yu <Mingli.Yu@windriver.com>
+Date: Tue, 6 Sep 2016 17:17:44 +0800
+Subject: [PATCH] vsftpd: allow sysinfo() in the seccomp sandbox
+
+Upstream-Status: Pending
+
+* Allow sysinfo() in the seccomp sandbox otherwise
+ comes below OOPS: priv_sock_get_cmd as the syscall
+ sysinfo() not allowed
+
+tnftp 192.168.1.1
+Connected to 192.168.1.1.
+220 (vsFTPd 3.0.3)
+Name (192.168.1.1:root): anonymous
+331 Please specify the password.
+Password:
+230 Login successful.
+Remote system type is UNIX.
+Using binary mode to transfer files.
+ftp> prompt
+Interactive mode off.
+ftp> mget small*
+OOPS: priv_sock_get_cmd
+
+Signed-off-by: Mingli Yu <Mingli.Yu@windriver.com>
+
+---
+ seccompsandbox.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/seccompsandbox.c b/seccompsandbox.c
+index 2c350a9..67d9ca5 100644
+--- a/seccompsandbox.c
++++ b/seccompsandbox.c
+@@ -409,6 +409,7 @@ seccomp_sandbox_setup_postlogin(const struct vsf_session* p_sess)
+ allow_nr(__NR_getcwd);
+ allow_nr(__NR_chdir);
+ allow_nr(__NR_getdents);
++ allow_nr(__NR_sysinfo);
+ /* Misc */
+ allow_nr(__NR_umask);
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-destdir.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-destdir.patch
new file mode 100644
index 000000000..5ad5c14e7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-destdir.patch
@@ -0,0 +1,52 @@
+From bab3f62f1fd5b7c2ab197f4311ad191bf18816b9 Mon Sep 17 00:00:00 2001
+From: Paul Eggleton <paul.eggleton@linux.intel.com>
+Date: Mon, 20 Feb 2012 13:51:49 +0000
+Subject: [PATCH] Use DESTDIR within install to allow installing under a prefix
+
+Upstream-Status: Pending
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+---
+ Makefile | 26 +++++++++++++-------------
+ 1 file changed, 13 insertions(+), 13 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index c63ed1b..9e4f35f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -29,21 +29,21 @@ vsftpd: $(OBJS)
+ $(CC) -o vsftpd $(OBJS) $(LINK) $(LDFLAGS) $(LIBS)
+
+ install:
+- if [ -x /usr/local/sbin ]; then \
+- $(INSTALL) -m 755 vsftpd /usr/local/sbin/vsftpd; \
++ if [ -x ${DESTDIR}/usr/local/sbin ]; then \
++ $(INSTALL) -m 755 vsftpd ${DESTDIR}/usr/local/sbin/vsftpd; \
+ else \
+- $(INSTALL) -m 755 vsftpd /usr/sbin/vsftpd; fi
+- if [ -x /usr/local/man ]; then \
+- $(INSTALL) -m 644 vsftpd.8 /usr/local/man/man8/vsftpd.8; \
+- $(INSTALL) -m 644 vsftpd.conf.5 /usr/local/man/man5/vsftpd.conf.5; \
+- elif [ -x /usr/share/man ]; then \
+- $(INSTALL) -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8; \
+- $(INSTALL) -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5; \
++ $(INSTALL) -m 755 vsftpd ${DESTDIR}/usr/sbin/vsftpd; fi
++ if [ -x ${DESTDIR}/usr/local/man ]; then \
++ $(INSTALL) -m 644 vsftpd.8 ${DESTDIR}/usr/local/man/man8/vsftpd.8; \
++ $(INSTALL) -m 644 vsftpd.conf.5 ${DESTDIR}/usr/local/man/man5/vsftpd.conf.5; \
++ elif [ -x ${DESTDIR}/usr/share/man ]; then \
++ $(INSTALL) -m 644 vsftpd.8 ${DESTDIR}/usr/share/man/man8/vsftpd.8; \
++ $(INSTALL) -m 644 vsftpd.conf.5 ${DESTDIR}/usr/share/man/man5/vsftpd.conf.5; \
+ else \
+- $(INSTALL) -m 644 vsftpd.8 /usr/man/man8/vsftpd.8; \
+- $(INSTALL) -m 644 vsftpd.conf.5 /usr/man/man5/vsftpd.conf.5; fi
+- if [ -x /etc/xinetd.d ]; then \
+- $(INSTALL) -m 644 xinetd.d/vsftpd /etc/xinetd.d/vsftpd; fi
++ $(INSTALL) -m 644 vsftpd.8 ${DESTDIR}/usr/man/man8/vsftpd.8; \
++ $(INSTALL) -m 644 vsftpd.conf.5 ${DESTDIR}/usr/man/man5/vsftpd.conf.5; fi
++ if [ -x ${DESTDIR}/etc/xinetd.d ]; then \
++ $(INSTALL) -m 644 xinetd.d/vsftpd ${DESTDIR}/etc/xinetd.d/vsftpd; fi
+
+ clean:
+ rm -f *.o *.swp vsftpd
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-libs.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-libs.patch
new file mode 100644
index 000000000..d2e58a325
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-libs.patch
@@ -0,0 +1,30 @@
+From 328799d0cd5c523ad7a814fefec16d8a84aa8010 Mon Sep 17 00:00:00 2001
+From: Paul Eggleton <paul.eggleton@linux.intel.com>
+Date: Tue, 16 Apr 2013 10:53:55 +0000
+Subject: [PATCH] Hardcode LIBS instead of using a script to determine
+ available libs
+
+We want to avoid this dynamic detection so we have a deterministic
+build.
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 9e4f35f..3a5535d 100644
+--- a/Makefile
++++ b/Makefile
+@@ -8,7 +8,7 @@ CFLAGS = -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 \
+ -D_FORTIFY_SOURCE=2 \
+ #-pedantic -Wconversion
+
+-LIBS = `./vsf_findlibs.sh`
++LIBS = -lssl -lcrypto -lnsl -lresolv
+ LINK = -Wl,-s
+ LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-strip.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-strip.patch
new file mode 100644
index 000000000..e59607388
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/makefile-strip.patch
@@ -0,0 +1,25 @@
+From 261874ea47973ea156141185082252fc92081906 Mon Sep 17 00:00:00 2001
+From: Paul Eggleton <paul.eggleton@linux.intel.com>
+Date: Tue, 16 Apr 2013 10:53:55 +0000
+Subject: [PATCH] Disable stripping at link time
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+---
+ Makefile | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 3a5535d..e78019a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -9,7 +9,6 @@ CFLAGS = -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 \
+ #-pedantic -Wconversion
+
+ LIBS = -lssl -lcrypto -lnsl -lresolv
+-LINK = -Wl,-s
+ LDFLAGS = -fPIE -pie -Wl,-z,relro -Wl,-z,now
+
+ OBJS = main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o \
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam-with-tcp_wrappers.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam-with-tcp_wrappers.patch
new file mode 100644
index 000000000..a4387c132
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam-with-tcp_wrappers.patch
@@ -0,0 +1,26 @@
+From 71628ddc91b6efb9b922a3fcf8cc18522f5387be Mon Sep 17 00:00:00 2001
+From: "Roy.Li" <rongqing.li@windriver.com>
+Date: Mon, 20 Feb 2012 13:51:49 +0000
+Subject: [PATCH] Disable PAM
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+
+---
+ builddefs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/builddefs.h b/builddefs.h
+index 0106d1a..f48a568 100644
+--- a/builddefs.h
++++ b/builddefs.h
+@@ -2,7 +2,7 @@
+ #define VSF_BUILDDEFS_H
+
+ #define VSF_BUILD_TCPWRAPPERS
+-#define VSF_BUILD_PAM
++#undef VSF_BUILD_PAM
+ #undef VSF_BUILD_SSL
+
+ #endif /* VSF_BUILDDEFS_H */
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam.patch
new file mode 100644
index 000000000..cf0d68e27
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/nopam.patch
@@ -0,0 +1,16 @@
+Disable PAM
+
+Upstream-Status: Inappropriate [config]
+
+diff -ur vsftpd-2.0.1_org/builddefs.h vsftpd-2.0.1_patch/builddefs.h
+--- vsftpd-2.0.1_org/builddefs.h 2004-07-02 16:36:59.000000000 +0200
++++ vsftpd-2.0.1_patch/builddefs.h 2004-07-21 09:34:49.044900488 +0200
+@@ -2,7 +2,7 @@
+ #define VSF_BUILDDEFS_H
+
+ #undef VSF_BUILD_TCPWRAPPERS
+-#define VSF_BUILD_PAM
++#undef VSF_BUILD_PAM
+ #undef VSF_BUILD_SSL
+
+ #endif /* VSF_BUILDDEFS_H */
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-2.1.0-filter.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-2.1.0-filter.patch
new file mode 100644
index 000000000..590eb5857
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-2.1.0-filter.patch
@@ -0,0 +1,89 @@
+From b756444854c5ab3b1284fd7113043fe8860e99ec Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Fri, 24 Apr 2015 09:36:48 +0800
+Subject: [PATCH] Fix the CVE-2015-1419
+
+Upstream-Status: Pending
+
+Try to fix deny_file parsing to do more what is expected. Taken
+from fedora. CVE-2015-1419
+
+ftp://195.220.108.108/linux/fedora/linux/development/rawhide/source/SRPMS/v/vsftpd-3.0.2-13.fc22.src.rpm
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ ls.c | 26 ++++++++++++++++++++++++--
+ str.c | 11 +++++++++++
+ str.h | 1 +
+ 3 files changed, 36 insertions(+), 2 deletions(-)
+
+diff --git a/ls.c b/ls.c
+index 7e1376d..e9302dd 100644
+--- a/ls.c
++++ b/ls.c
+@@ -246,9 +246,31 @@ vsf_filename_passes_filter(const struct mystr* p_filename_str,
+ int ret = 0;
+ char last_token = 0;
+ int must_match_at_current_pos = 1;
++
++
+ str_copy(&filter_remain_str, p_filter_str);
+- str_copy(&name_remain_str, p_filename_str);
+-
++
++ if (!str_isempty (&filter_remain_str) && !str_isempty(p_filename_str)) {
++ if (str_get_char_at(p_filter_str, 0) == '/') {
++ if (str_get_char_at(p_filename_str, 0) != '/') {
++ str_getcwd (&name_remain_str);
++
++ if (str_getlen(&name_remain_str) > 1) /* cwd != root dir */
++ str_append_char (&name_remain_str, '/');
++
++ str_append_str (&name_remain_str, p_filename_str);
++ }
++ else
++ str_copy (&name_remain_str, p_filename_str);
++ } else {
++ if (str_get_char_at(p_filter_str, 0) != '{')
++ str_basename (&name_remain_str, p_filename_str);
++ else
++ str_copy (&name_remain_str, p_filename_str);
++ }
++ } else
++ str_copy(&name_remain_str, p_filename_str);
++
+ while (!str_isempty(&filter_remain_str) && *iters < VSFTP_MATCHITERS_MAX)
+ {
+ static struct mystr s_match_needed_str;
+diff --git a/str.c b/str.c
+index 6596204..ba4b92a 100644
+--- a/str.c
++++ b/str.c
+@@ -711,3 +711,14 @@ str_replace_unprintable(struct mystr* p_str, char new_char)
+ }
+ }
+
++void
++str_basename (struct mystr* d_str, const struct mystr* path)
++{
++ static struct mystr tmp;
++
++ str_copy (&tmp, path);
++ str_split_char_reverse(&tmp, d_str, '/');
++
++ if (str_isempty(d_str))
++ str_copy (d_str, path);
++}
+diff --git a/str.h b/str.h
+index ab0a9a4..3a21b50 100644
+--- a/str.h
++++ b/str.h
+@@ -100,6 +100,7 @@ void str_replace_unprintable(struct mystr* p_str, char new_char);
+ int str_atoi(const struct mystr* p_str);
+ filesize_t str_a_to_filesize_t(const struct mystr* p_str);
+ unsigned int str_octal_to_uint(const struct mystr* p_str);
++void str_basename (struct mystr* d_str, const struct mystr* path);
+
+ /* PURPOSE: Extract a line of text (delimited by \n or EOF) from a string
+ * buffer, starting at character position 'p_pos'. The extracted line will
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-tcp_wrappers-support.patch b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-tcp_wrappers-support.patch
new file mode 100644
index 000000000..c558aee0a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd-3.0.3/vsftpd-tcp_wrappers-support.patch
@@ -0,0 +1,26 @@
+From c026b0c0de4eebb189bc77b2d4c3b9528454ac04 Mon Sep 17 00:00:00 2001
+From: "Roy.Li" <rongqing.li@windriver.com>
+Date: Fri, 19 Jul 2013 10:19:25 +0800
+Subject: [PATCH] Enable tcp_wrapper.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+
+---
+ builddefs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/builddefs.h b/builddefs.h
+index e908352..0106d1a 100644
+--- a/builddefs.h
++++ b/builddefs.h
+@@ -1,7 +1,7 @@
+ #ifndef VSF_BUILDDEFS_H
+ #define VSF_BUILDDEFS_H
+
+-#undef VSF_BUILD_TCPWRAPPERS
++#define VSF_BUILD_TCPWRAPPERS
+ #define VSF_BUILD_PAM
+ #undef VSF_BUILD_SSL
+
diff --git a/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd_3.0.3.bb b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd_3.0.3.bb
new file mode 100644
index 000000000..7a2035601
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-daemons/vsftpd/vsftpd_3.0.3.bb
@@ -0,0 +1,112 @@
+SUMMARY = "Very Secure FTP server"
+HOMEPAGE = "https://security.appspot.com/vsftpd.html"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6067ad950b28336613aed9dd47b1271"
+
+DEPENDS = "libcap openssl"
+
+SRC_URI = "https://security.appspot.com/downloads/vsftpd-${PV}.tar.gz \
+ file://makefile-destdir.patch \
+ file://makefile-libs.patch \
+ file://makefile-strip.patch \
+ file://init \
+ file://vsftpd.conf \
+ file://vsftpd.user_list \
+ file://vsftpd.ftpusers \
+ file://change-secure_chroot_dir.patch \
+ file://volatiles.99_vsftpd \
+ file://vsftpd.service \
+ file://vsftpd-2.1.0-filter.patch \
+ file://0001-vsftpd-allow-sysinfo-in-the-seccomp-sandbox.patch \
+ ${@bb.utils.contains('PACKAGECONFIG', 'tcp-wrappers', 'file://vsftpd-tcp_wrappers-support.patch', '', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '', '${NOPAM_SRC}', d)} \
+ file://0001-sysdeputil.c-Fix-with-musl-which-does-not-have-utmpx.patch \
+ "
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6067ad950b28336613aed9dd47b1271 \
+ file://COPYRIGHT;md5=04251b2eb0f298dae376d92454f6f72e \
+ file://LICENSE;md5=654df2042d44b8cac8a5654fc5be63eb"
+SRC_URI[md5sum] = "da119d084bd3f98664636ea05b5bb398"
+SRC_URI[sha256sum] = "9d4d2bf6e6e2884852ba4e69e157a2cecd68c5a7635d66a3a8cf8d898c955ef7"
+
+
+PACKAGECONFIG ??= "tcp-wrappers"
+PACKAGECONFIG[tcp-wrappers] = ",,tcp-wrappers"
+
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+RDEPENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam-plugin-listfile', '', d)}"
+PAMLIB = "${@bb.utils.contains('DISTRO_FEATURES', 'pam', '-L${STAGING_BASELIBDIR} -lpam', '', d)}"
+WRAPLIB = "${@bb.utils.contains('PACKAGECONFIG', 'tcp-wrappers', '-lwrap', '', d)}"
+NOPAM_SRC ="${@bb.utils.contains('PACKAGECONFIG', 'tcp-wrappers', 'file://nopam-with-tcp_wrappers.patch', 'file://nopam.patch', d)}"
+
+inherit update-rc.d useradd systemd
+
+CONFFILES_${PN} = "${sysconfdir}/vsftpd.conf"
+LDFLAGS_append =" -lcrypt -lcap"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_configure() {
+ # Fix hardcoded /usr, /etc, /var mess.
+ cat tunables.c|sed s:\"/usr:\"${prefix}:g|sed s:\"/var:\"${localstatedir}:g \
+ |sed s:\"/etc:\"${sysconfdir}:g > tunables.c.new
+ mv tunables.c.new tunables.c
+}
+
+do_compile() {
+ oe_runmake "LIBS=-L${STAGING_LIBDIR} -lcrypt -lcap ${PAMLIB} ${WRAPLIB}"
+}
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man8
+ install -d ${D}${mandir}/man5
+ oe_runmake 'DESTDIR=${D}' install
+ install -d ${D}${sysconfdir}
+ install -m 600 ${WORKDIR}/vsftpd.conf ${D}${sysconfdir}/vsftpd.conf
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/vsftpd
+ install -d ${D}/${sysconfdir}/default/volatiles
+ install -m 644 ${WORKDIR}/volatiles.99_vsftpd ${D}/${sysconfdir}/default/volatiles/99_vsftpd
+
+ install -m 600 ${WORKDIR}/vsftpd.ftpusers ${D}${sysconfdir}/
+ install -m 600 ${WORKDIR}/vsftpd.user_list ${D}${sysconfdir}/
+ if ! test -z "${PAMLIB}" ; then
+ install -d ${D}${sysconfdir}/pam.d/
+ cp ${S}/RedHat/vsftpd.pam ${D}${sysconfdir}/pam.d/vsftpd
+ sed -i "s:/lib/security:${base_libdir}/security:" ${D}${sysconfdir}/pam.d/vsftpd
+ sed -i "s:ftpusers:vsftpd.ftpusers:" ${D}${sysconfdir}/pam.d/vsftpd
+ fi
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /var/run/vsftpd/empty 0755 root root -" \
+ > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+ fi
+
+ # Install systemd unit files
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/vsftpd.service ${D}${systemd_unitdir}/system
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/vsftpd.service
+}
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME_${PN} = "vsftpd"
+INITSCRIPT_PARAMS_${PN} = "defaults 80"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --home-dir /var/lib/ftp --no-create-home -g ftp \
+ --shell /bin/false ftp "
+GROUPADD_PARAM_${PN} = "-r ftp"
+
+SYSTEMD_SERVICE_${PN} = "vsftpd.service"
+
+pkg_postinst_${PN}() {
+ if [ -z "$D" ]; then
+ if type systemd-tmpfiles >/dev/null; then
+ systemd-tmpfiles --create
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+ fi
+}
diff --git a/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/run-ptest b/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/run-ptest
new file mode 100644
index 000000000..f1c833e6c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/run-ptest
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+
+# prepare testing config
+CONF_USERS=`readlink -f /etc/raddb/users`
+mv ${CONF_USERS} ${CONF_USERS}_orig
+echo "testing Cleartext-Password := \"testpassword\"" > ${CONF_USERS}
+cat ${CONF_USERS}_orig >> ${CONF_USERS}
+
+# restart radiusd server
+systemctl restart radiusd || /etc/init.d/radiusd restart || {
+ echo "FAIL: Start radiusd service."
+ exit 1
+}
+
+# run teests
+perl test.pl
+
+# restore the config and restart
+mv ${CONF_USERS}_orig ${CONF_USERS}
+systemctl restart radiusd || /etc/init.d/radiusd restart
diff --git a/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/test.pl-adjust-for-ptest.patch b/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/test.pl-adjust-for-ptest.patch
new file mode 100644
index 000000000..9798af497
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl/test.pl-adjust-for-ptest.patch
@@ -0,0 +1,90 @@
+From 829302792bf0e4935d29efc23ca1f2e9e7ee7dfd Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Thu, 7 Jan 2016 03:12:38 -0500
+Subject: [PATCH] test.pl: adjust for ptest
+
+* Don't use interactive inputs, set default test
+ settings instead.
+* Change the test results output to the ptest format
+
+Upstream-Status: Inappropriate [OE ptest specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ test.pl | 31 ++++++++++++++++++-------------
+ 1 file changed, 18 insertions(+), 13 deletions(-)
+
+diff --git a/test.pl b/test.pl
+index cfd1c1e..9b4f10e 100644
+--- a/test.pl
++++ b/test.pl
+@@ -7,11 +7,11 @@
+ # Change 1..1 below to 1..last_test_to_print .
+ # (It may become useful if the test is moved to ./t subdirectory.)
+
+-BEGIN {print "1..5\n";}
+-END {print "not ok 1\n" unless $loaded;}
++BEGIN {print "Start testing for libauthen-radius-perl\n";}
++END {print "\nFAIL: test1\n" unless $loaded;}
+ use Authen::Radius;
+ $loaded = 1;
+-print "ok 1\n";
++print "\nPASS: test1\n";
+
+ ######################### End of black magic.
+
+@@ -19,26 +19,31 @@ print "ok 1\n";
+ # (correspondingly "not ok 13") depending on the success of chunk 13
+ # of the test code):
+
++$host = "127.0.0.1";
++$secret = "testing123";
++$user = "testing";
++$pwd = "testpassword";
++
+ print "Make sure this machine is in your Radius clients file!\n";
+-print "Enter hostname[:port] of your Radius server: "; chomp ($host = <STDIN>);
+-print "Enter shared-secret of your Radius server: "; chomp ($secret = <STDIN>);
+-print "Enter a username to be validated: "; chomp ($user = <STDIN>);
+-print "Enter this user's password: "; chomp ($pwd = <STDIN>);
++print "hostname of your Radius server: $host\n";
++print "shared-secret of your Radius server: $secret\n";
++print "The username to be validated: $user\n";
++print "The user's password: $pwd\n";
+
+ $t = 2;
+ if ($host ne '') {
+ $r = new Authen::Radius(Host => $host, Secret => $secret, Debug => 1);
+- print defined($r) ? "" : "not ", "ok $t\n"; $t++;
++ print defined($r) ? "\nPASS: test$t\n" : "\nFAIL: test$t\n"; $t++;
+ #Authen::Radius->load_dictionary;
+- print $r->check_pwd($user, $pwd) ? "" : "not ", "ok $t\n"; $t++;
++ print $r->check_pwd($user, $pwd) ? "\nPASS: test$t\n" : "\nFAIL: test$t\n"; $t++;
+ @a = $r->get_attributes;
+- print $#a != -1 ? "" : "not ", "ok $t\n"; $t++;
++ print $#a != -1 ? "\nPASS: test$t\n" : "\nFAIL: test$t\n"; $t++;
+ #for $a (@a) {
+ # print "attr: name=$a->{'Name'} value=$a->{'Value'}\n";
+ #}
+ } else {
+ foreach my $t (2..4) {
+- print "skipped $t\n";
++ print "\nSKIP test$t\n";
+ }
+ }
+
+@@ -53,9 +58,9 @@ my $data = "what do ya want for nothing?";
+ my $etalon_digest = hex_to_ascii("750c783e6ab0b503eaa86e310a5db738");
+ my $digest = Authen::Radius::hmac_md5(undef, $data, $key);
+ if ($etalon_digest eq $digest) {
+- print "ok 5\n";
++ print "\nPASS: test5\n";
+ } else {
+- print "not ok 5\n";
++ print "\nFAIL: test5\n";
+ }
+
+ exit;
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl_0.22.bb b/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl_0.22.bb
new file mode 100644
index 000000000..ea5bb1b0c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-devtools/perl/libauthen/libauthen-radius-perl_0.22.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Authen::Radius - provide simple Radius client facilities"
+DESCRIPTION = "The Authen::Radius module provides a simple class that \
+ allows you to send/receive Radius requests/responses to/from a \
+ Radius server. \
+"
+
+HOMEPAGE = "http://search.cpan.org/~manowar/RadiusPerl"
+SECTION = "libs"
+
+LICENSE = "Artistic-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=78ab6ea0cba1f1ec1680ebb149e3bc11"
+
+DEPENDS = "perl"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MA/MANOWAR/RadiusPerl-${PV}.tar.gz \
+ file://test.pl-adjust-for-ptest.patch \
+ file://run-ptest \
+"
+SRC_URI[md5sum] = "d1fe2d6ecf7ea99299e4e3a8f945aad8"
+SRC_URI[sha256sum] = "3b276506986ccaa4949d92b13ce053a0017ad11562a991cc753364923fe81ca7"
+
+S = "${WORKDIR}/Authen-Radius-${PV}"
+
+inherit cpan ptest
+
+do_install_ptest() {
+ install -m 0755 ${S}/test.pl ${D}${PTEST_PATH}
+}
+
+RDEPENDS_${PN} += "\
+ libdata-hexdump-perl \
+ perl-module-digest-md5 \
+ perl-module-data-dumper \
+ perl-module-io-select \
+ perl-module-io-socket \
+"
+RDEPENDS_${PN}-ptest += "${PN} freeradius"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-devtools/python/python-ldap_2.4.41.bb b/meta-openembedded/meta-networking/recipes-devtools/python/python-ldap_2.4.41.bb
new file mode 100644
index 000000000..3dbc8b13e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-devtools/python/python-ldap_2.4.41.bb
@@ -0,0 +1,29 @@
+#
+# Copyright (C) 2012 Wind River Systems, Inc.
+#
+SUMMARY = "Provides a wrapper in Python to LDAP"
+DESCRIPTION = "This module provides access to the LDAP \
+(Lightweight Directory Access Protocol) through Python operations \
+instead of C API. The module mainly acts as a wrapper for the \
+OpenLDAP 2.x libraries. Errors will appear as exceptions."
+
+LICENSE = "PSF"
+HOMEPAGE = "http://www.python-ldap.org/"
+DEPENDS = "python openldap cyrus-sasl"
+
+PYPI_PACKAGE = "python-ldap"
+inherit pypi setuptools
+
+LIC_FILES_CHKSUM = "file://LICENCE;md5=a41c82edffa04912007cae1d20cac555"
+SRC_URI[md5sum] = "18db2d009150ec1864710fea3ed76173"
+SRC_URI[sha256sum] = "6d430ecf040f2fc704ee316d3390cb1f5419c191371e1e131baef54a0e42cef0"
+
+do_configure_prepend() {
+ sed -i -e 's:^library_dirs =.*::' setup.cfg
+ sed -i -e 's:^include_dirs =.*:include_dirs = =/usr/include/sasl/:' setup.cfg
+}
+
+RDEPENDS_${PN} = " \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-networking/recipes-extended/corosync/corosync_2.4.3.bb b/meta-openembedded/meta-networking/recipes-extended/corosync/corosync_2.4.3.bb
new file mode 100644
index 000000000..9673fa362
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/corosync/corosync_2.4.3.bb
@@ -0,0 +1,79 @@
+SUMMARY = "The Corosync Cluster Engine and Application Programming Interfaces"
+DESCRIPTION = "This package contains the Corosync Cluster Engine Executive, several default \
+APIs and libraries, default configuration files, and an init script."
+HOMEPAGE = "http://corosync.github.io/corosync/"
+
+SECTION = "base"
+
+inherit autotools pkgconfig systemd useradd
+
+SRC_URI = "http://build.clusterlabs.org/corosync/releases/${BP}.tar.gz"
+
+SRC_URI[md5sum] = "bf0ede13018aadc8a046183bc593b0e0"
+SRC_URI[sha256sum] = "b1e7e422e8d2f7af8e5315fa329b1dbd1175fff32efaa55e8054584c80a2c597"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a85eb4ce24033adb6088dd1d6ffc5e5d"
+
+DEPENDS = "groff-native nss libqb"
+
+SYSTEMD_SERVICE_${PN} = "corosync.service corosync-notifyd.service \
+ ${@bb.utils.contains('PACKAGECONFIG', 'qdevice', 'corosync-qdevice.service', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'qnetd', 'corosync-qnetd.service', '', d)} \
+"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+INITSCRIPT_NAME = "corosync-daemon"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ dbus qdevice qnetd snmp \
+"
+
+PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus"
+PACKAGECONFIG[qdevice] = "--enable-qdevices,--disable-qdevices"
+PACKAGECONFIG[qnetd] = "--enable-qnetd,--disable-qnetd"
+PACKAGECONFIG[rdma] = "--enable-rdma,--disable-rdma"
+PACKAGECONFIG[snmp] = "--enable-snmp,--disable-snmp,net-snmp"
+PACKAGECONFIG[systemd] = "--enable-systemd --with-systemddir=${systemd_system_unitdir},--disable-systemd --without-systemddir,systemd"
+
+EXTRA_OECONF = "ac_cv_path_BASHPATH=${base_bindir}/bash ap_cv_cc_pie=no"
+EXTRA_OEMAKE = "tmpfilesdir_DATA="
+
+do_configure_prepend() {
+ ( cd ${S}
+ ${S}/autogen.sh )
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/sysconfig/
+ install -m 0644 ${S}/init/corosync.sysconfig.example ${D}${sysconfdir}/sysconfig/corosync
+ install -m 0644 ${S}/tools/corosync-notifyd.sysconfig.example ${D}${sysconfdir}/sysconfig/corosync-notifyd
+
+ rm -rf "${D}${localstatedir}/run"
+
+ install -d ${D}${sysconfdir}/default/volatiles
+ echo "d root root 0755 ${localstatedir}/log/cluster none" > ${D}${sysconfdir}/default/volatiles/05_corosync
+
+ if [ ${@bb.utils.filter('PACKAGECONFIG', 'qnetd', d)} ]; then
+ chown -R coroqnetd:coroqnetd ${D}${sysconfdir}/${BPN}/qnetd
+ echo "d coroqnetd coroqnetd 0770 /var/run/corosync-qnetd none" >> ${D}${sysconfdir}/default/volatiles/05_corosync
+ fi
+
+ if [ ${@bb.utils.filter('DISTRO_FEATURES','systemd',d)} ]; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d ${localstatedir}/log/cluster - - - -" > ${D}${sysconfdir}/tmpfiles.d/corosync.conf
+
+ if [ ${@bb.utils.filter('PACKAGECONFIG', 'qnetd', d)} ]; then
+ install -m 0644 ${S}/conf/tmpfiles.d/corosync-qnetd.conf ${D}${sysconfdir}/tmpfiles.d
+ fi
+ fi
+}
+
+RDEPENDS_${PN} += "bash ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'sysvinit-pidof', 'procps', d)}"
+
+FILES_${PN}-dbg += "${libexecdir}/lcrso/.debug"
+FILES_${PN}-doc += "${datadir}/snmp/mibs/COROSYNC-MIB.txt"
+
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system coroqnetd"
+USERADD_PARAM_${PN} = "--system -d / -M -s /bin/nologin -c 'User for corosync-qnetd' -g coroqnetd coroqnetd"
diff --git a/meta-openembedded/meta-networking/recipes-extended/dlm/dlm/respect-ldflags-also-from-bin_ldflags.patch b/meta-openembedded/meta-networking/recipes-extended/dlm/dlm/respect-ldflags-also-from-bin_ldflags.patch
new file mode 100644
index 000000000..69b2f903c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/dlm/dlm/respect-ldflags-also-from-bin_ldflags.patch
@@ -0,0 +1,36 @@
+diff -uNr dlm-4.0.2.orig/dlm_controld/Makefile dlm-4.0.2/dlm_controld/Makefile
+--- dlm-4.0.2.orig/dlm_controld/Makefile 2017-04-04 10:49:23.661320260 +0200
++++ dlm-4.0.2/dlm_controld/Makefile 2017-04-04 10:50:36.121326429 +0200
+@@ -55,7 +55,7 @@
+ BIN_CFLAGS += -fPIE -DPIE
+ BIN_CFLAGS += -I../include -I../libdlm
+
+-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
++BIN_LDFLAGS += $(LDFLAGS) -Wl,-z,now -Wl,-z,relro -pie
+ BIN_LDFLAGS += -lpthread -lrt -lcpg -lcmap -lcfg -lquorum
+
+ LIB_CFLAGS += $(BIN_CFLAGS)
+diff -uNr dlm-4.0.2.orig/dlm_tool/Makefile dlm-4.0.2/dlm_tool/Makefile
+--- dlm-4.0.2.orig/dlm_tool/Makefile 2013-07-31 17:50:26.000000000 +0200
++++ dlm-4.0.2/dlm_tool/Makefile 2017-04-04 10:50:44.617327153 +0200
+@@ -32,7 +32,7 @@
+ BIN_CFLAGS += -fPIE -DPIE
+ BIN_CFLAGS += -I../include -I../libdlm -I../dlm_controld
+
+-BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
++BIN_LDFLAGS += $(LDFLAGS) -Wl,-z,now -Wl,-z,relro -pie
+ BIN_LDFLAGS += -L../libdlm -L../dlm_controld
+ BIN_LDFLAGS += -lpthread -ldlm -ldlmcontrol
+
+diff -uNr dlm-4.0.2.orig/dlm_controld/Makefile dlm-4.0.2/dlm_controld/Makefile
+--- dlm-4.0.2.orig/dlm_controld/Makefile 2017-04-04 11:02:58.578389641 +0200
++++ dlm-4.0.2/dlm_controld/Makefile 2017-04-04 11:07:55.672414935 +0200
+@@ -59,7 +59,7 @@
+ BIN_LDFLAGS += -lpthread -lrt -lcpg -lcmap -lcfg -lquorum
+
+ LIB_CFLAGS += $(BIN_CFLAGS)
+-LIB_LDFLAGS += -Wl,-z,relro -pie
++LIB_LDFLAGS += $(LDFLAGS) -Wl,-z,relro -pie
+
+ ifeq ($(USE_SD_NOTIFY),yes)
+ BIN_CFLAGS += $(shell pkg-config --cflags libsystemd-daemon) \
diff --git a/meta-openembedded/meta-networking/recipes-extended/dlm/dlm_4.0.2.bb b/meta-openembedded/meta-networking/recipes-extended/dlm/dlm_4.0.2.bb
new file mode 100644
index 000000000..31e411e86
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/dlm/dlm_4.0.2.bb
@@ -0,0 +1,51 @@
+DESCRIPTION = "dlm control daemon and tool"
+
+SECTION = "utils"
+HOMEPAGE = "https://fedorahosted.org/cluster/wiki/HomePage"
+
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+SRC_URI = "https://git.fedorahosted.org/cgit/dlm.git/snapshot/${BP}.tar.xz \
+ file://respect-ldflags-also-from-bin_ldflags.patch \
+"
+
+SRC_URI[md5sum] = "efc2ee6093aa6aa0a88aaad83e998a3f"
+SRC_URI[sha256sum] = "b89bc557aaffbab0ac005398025f247718a5589cff6574d902eaffe2b20e683e"
+
+LICENSE = "LGPLv2+ & GPLv2 & GPLv2+"
+LIC_FILES_CHKSUM = "file://README.license;md5=8f0bbcdd678df1bce9863492b6c8832d"
+
+DEPENDS = "corosync systemd"
+
+inherit pkgconfig systemd distro_features_check
+
+SYSTEMD_SERVICE_${PN} = "dlm.service"
+SYSTEMD_AUTO_ENABLE = "enable"
+
+export EXTRA_OEMAKE = ""
+
+do_compile_prepend() {
+ sed -i "s/libsystemd-daemon/libsystemd/g" ${S}/dlm_controld/Makefile
+}
+
+do_compile () {
+ oe_runmake 'CC=${CC}'
+}
+
+do_install_append (){
+ install -d ${D}${sysconfdir}/sysconfig/
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0644 ${S}/init/dlm.sysconfig ${D}${sysconfdir}/sysconfig/dlm
+ install -m 0644 ${S}/init/dlm.init ${D}${sysconfdir}/init.d/dlm
+
+ # install systemd unit files
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${S}/init/dlm.service ${D}${systemd_unitdir}/system
+ fi
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} LIBDIR=${libdir}
+}
+
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/0001-kernel-event-netlink_ack-now-requires-4-arguments.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/0001-kernel-event-netlink_ack-now-requires-4-arguments.patch
new file mode 100644
index 000000000..4426d3552
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/0001-kernel-event-netlink_ack-now-requires-4-arguments.patch
@@ -0,0 +1,40 @@
+From cbc5f8151017f45231b75a826f18354a81c287c4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 07:52:59 -0700
+Subject: [PATCH] kernel/event: netlink_ack() now requires 4 arguments
+
+see https://patchwork.kernel.org/patch/9670181/
+
+event.c:32:4: error: too few arguments to function 'netlink_ack'
+| netlink_ack(skb, nlh, 0);
+| ^~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ kernel/event.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: iscsitarget-1.4.20.3+svn502/kernel/event.c
+===================================================================
+--- iscsitarget-1.4.20.3+svn502.orig/kernel/event.c
++++ iscsitarget-1.4.20.3+svn502/kernel/event.c
+@@ -6,6 +6,7 @@
+ * Some functions are based on audit code.
+ */
+
++#include <linux/version.h>
+ #include <linux/module.h>
+ #include <net/tcp.h>
+ #include "iet_u.h"
+@@ -29,7 +30,11 @@ static void event_recv_skb(struct sk_buf
+ ietd_pid = NETLINK_CB(skb).portid;
+ WARN_ON(ietd_pid == 0);
+ if (nlh->nlmsg_flags & NLM_F_ACK)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
++ netlink_ack(skb, nlh, 0, NULL);
++#else
+ netlink_ack(skb, nlh, 0);
++#endif
+ skb_pull(skb, rlen);
+ }
+ }
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/access-sk_v6_daddr-iff-IPV6-defined.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/access-sk_v6_daddr-iff-IPV6-defined.patch
new file mode 100644
index 000000000..4444234b2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/access-sk_v6_daddr-iff-IPV6-defined.patch
@@ -0,0 +1,28 @@
+The element skc_v6_daddr (in struct sock_common) is defined in
+kernel source only when CONFIG_IPV6 is enabled. Hence, access
+sk_v6_daddr element (i.e __sk_common.skc_v6_daddr) only when CONFIG_IPV6
+is defined; to fix below error in world build:
+
+-- snip --
+/home/jenkins/oe/world/shr-core/tmp-glibc/work-shared/qemux86/kernel-source/include/net/sock.h:330:33: error: 'struct sock_common' has no member named 'skc_v6_daddr'
+-- CUT --
+
+Upstream-Status: Pending
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
+
+--- iscsitarget-1.4.20.3+svn502_org/kernel/conn.c 2015-12-29 21:57:50.547932217 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/conn.c 2015-12-29 22:47:25.254657627 -0800
+@@ -46,10 +46,12 @@ void conn_info_show(struct seq_file *seq
+ snprintf(buf, sizeof(buf),
+ "%pI4", &inet_sk(sk)->inet_daddr);
+ break;
++#if defined(CONFIG_IPV6)
+ case AF_INET6:
+ snprintf(buf, sizeof(buf), "[%pI6]",
+ &(sk)->sk_v6_daddr);
+ break;
++#endif /* defined(CONFIG_IPV6) */
+ default:
+ break;
+ }
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_bio_struct_of_linux_v4.3_and_above.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_bio_struct_of_linux_v4.3_and_above.patch
new file mode 100644
index 000000000..bce38baee
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_bio_struct_of_linux_v4.3_and_above.patch
@@ -0,0 +1,108 @@
+Description: Fix source to compile with 4.3+ kernels
+ commit 4246a0b63bd8f56a1469b12eafeb875b1041a451
+ block: add a bi_error field to struct bio
+ -> Removes BIO_UPTODATE and error argument to bio_endio.
+ commit b54ffb73cadcdcff9cc1ae0e11f502407e3e2e4c
+ block: remove bio_get_nr_vecs()
+ -> Removed that call (always use BIO_MAX_PAGES)
+ commit 676d23690fb62b5d51ba5d659935e9f7d9da9f8e
+ net: Fix use after free by removing length arg from sk_data_ready callbacks.
+ -> Removes len argument from sk_data_ready() callback.
+Author: Stefan Bader <stefan.bader@canonical.com>
+
+The original patch is at http://launchpadlibrarian.net/227478885/iscsitarget_1.4.20.3+svn502-2ubuntu2_1.4.20.3+svn502-2ubuntu3.diff.gz,
+those changes were taken using #ifs to allow compilation of iscsitarget
+package with kernel versions < 4.3.
+
+Upstream-Status: Submitted [http://launchpadlibrarian.net/227478885/iscsitarget_1.4.20.3+svn502-2ubuntu2_1.4.20.3+svn502-2ubuntu3.diff.gz]
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
+
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/block-io.c iscsitarget-1.4.20.3+svn502/kernel/block-io.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/block-io.c 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/block-io.c 2017-01-19 00:46:28.263951115 -0800
+@@ -29,14 +29,23 @@ struct tio_work {
+ struct completion tio_complete;
+ };
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
++static void blockio_bio_endio(struct bio *bio)
++#else
+ static void blockio_bio_endio(struct bio *bio, int error)
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) */
+ {
+ struct tio_work *tio_work = bio->bi_private;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
++ if (bio->bi_error)
++ atomic_set(&tio_work->error, bio->bi_error);
++#else
+ error = test_bit(BIO_UPTODATE, &bio->bi_flags) ? error : -EIO;
+
+ if (error)
+ atomic_set(&tio_work->error, error);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) */
+
+ /* If last bio signal completion */
+ if (atomic_dec_and_test(&tio_work->bios_remaining))
+@@ -61,14 +70,20 @@ blockio_make_request(struct iet_volume *
+ u32 size = tio->size;
+ u32 tio_index = 0;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
++ int max_pages = bdev_q ? BIO_MAX_PAGES : 1;
++#else
+ int max_pages = 1;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) */
+ int err = 0;
+
+ loff_t ppos = tio->offset;
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0)
+ /* Calculate max_pages for bio_alloc (memory saver) */
+ if (bdev_q)
+ max_pages = bio_get_nr_vecs(bio_data->bdev);
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) */
+
+ tio_work = kzalloc(sizeof (*tio_work), GFP_KERNEL);
+ if (!tio_work)
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/conn.c iscsitarget-1.4.20.3+svn502/kernel/conn.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/conn.c 2017-01-19 00:39:09.737117778 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/conn.c 2017-01-19 00:52:30.037223901 -0800
+@@ -89,13 +89,21 @@ static void iet_state_change(struct sock
+ target->nthread_info.old_state_change(sk);
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
++static void iet_data_ready(struct sock *sk)
++#else
+ static void iet_data_ready(struct sock *sk, int len)
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) */
+ {
+ struct iscsi_conn *conn = sk->sk_user_data;
+ struct iscsi_target *target = conn->session->target;
+
+ nthread_wakeup(target);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
++ target->nthread_info.old_data_ready(sk);
++#else
+ target->nthread_info.old_data_ready(sk, len);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) */
+ }
+
+ /*
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.h iscsitarget-1.4.20.3+svn502/kernel/iscsi.h
+--- iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.h 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/iscsi.h 2017-01-19 00:48:02.102837260 -0800
+@@ -81,7 +81,11 @@ struct network_thread_info {
+ spinlock_t nthread_lock;
+
+ void (*old_state_change)(struct sock *);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)
++ void (*old_data_ready)(struct sock *);
++#else
+ void (*old_data_ready)(struct sock *, int);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) */
+ void (*old_write_space)(struct sock *);
+ };
+
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch
new file mode 100644
index 000000000..e508a5e6c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch
@@ -0,0 +1,475 @@
+Resolve build error with linux kernel 4.8
+
+The below changes in kernel source, triggered iscsitarget
+build fail with linux kernel v4.8.
+
+1. An extra 'flags' argument has been passed to vfs_readv/vfs_writev
+ syscalls in v4.8. So, set this argument to "0" for now
+ (as there is no real need for that).
+ Ref: https://github.com/torvalds/linux/commit/793b80ef14af56d20c998265287648ad34239b6f
+ Solves:
+ -- snip --
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/nthread.c: In function 'write_data':
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/nthread.c:350:9: error: too few arguments to function 'vfs_writev'
+ res = vfs_writev(file, (struct iovec __user *) iop, count, &off);
+ ^~~~~~~~~~
+ -- snip --
+
+2. Redefine dropped PAGE_CACHE_* and page_cache_{get,release} definitions,
+ as they have been dropped with v4.8
+ Ref: https://github.com/torvalds/linux/commit/1fa64f198b9f8d6ec0f7aec7c18dc94684391140
+ Solves:
+ -- snip --
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/param.c: In function 'sess_param_check':
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/param.c:48:41: error: 'PAGE_CACHE_SIZE' undeclared (first use in this function)
+ (u32) ((ISCSI_CONN_IOV_MAX - 1) * PAGE_CACHE_SIZE));
+ ^
+ -- snip --
+
+3. Replace crypto_hash interfaces with crypto_ahash interfaces,
+ Ref: https://github.com/torvalds/linux/commit/896545098777564212b9e91af4c973f094649aa7
+ Ref: https://www.redhat.com/archives/dm-devel/2016-January/msg00244.html
+ Solves:
+ -- snip --
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c: In function 'digest_init':
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c:42:23: error: implicit declaration of function 'crypto_alloc_hash' [-Werror=implicit-function-declaration]
+ conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
+ ^~~~~~~~~~~~~~~~~
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c: In function 'digest_cleanup':
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c:77:3: error: implicit declaration of function 'crypto_free_hash' [-Werror=implicit-function-declaration]
+ crypto_free_hash(conn->tx_hash.tfm);
+ ^~~~~~~~~~~~~~~~
+ -- snip --
+
+4. The earlier "rw" parameter has been set in "bi_rw" within
+ bio structure, hence remove "rw" argument.
+ Ref: https://github.com/torvalds/linux/commit/4e49ea4a3d276365bf7396c9b77b4d1d5923835a
+ Solves:
+-- snip --
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/block-io.c:140:14: warning: passing argument 1 of 'submit_bio' makes pointer from integer without a cast [-Wint-conversion]
+ submit_bio(rw, bio);
+ ^~
+-- snip --
+
+5. The 'len' argument from sk_data_ready() callback has been removed in
+ linux kernel v4.3 and above.
+ Ref: https://github.com/torvalds/linux/commit/676d23690fb62b5d51ba5d659935e9f7d9da9f8e
+ Solves:
+-- snip --
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c: In function 'iet_socket_bind':
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c:143:38: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
+ target->nthread_info.old_data_ready = conn->sock->sk->sk_data_ready;
+ ^
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c:144:32: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
+ conn->sock->sk->sk_data_ready = iet_data_ready;
+ ^
+-- snip --
+
+6.
+ A. The "size" argument has been dropped from sock_recvmsg syscall in v4.8,
+ as all callers have it equal to msg_data_left(msg).
+ B. 'struct user_msghdr' is being used for userland-side msghdr instead
+ of 'struct msghdr', which is used for kernel-side msghdr in linux v3.19
+ and above, so typecase it while calling sock_recvmsg syscall.
+ Ref: https://github.com/torvalds/linux/commit/2da62906b1e298695e1bb725927041cd59942c98
+ https://github.com/torvalds/linux/commit/666547ff591cebdedc4679bf6b1b3f3383a8dea3
+ Solves:
+ -- snip --
+TOPDIR/tmp-glibc/work-shared/qemux86/kernel-source/include/linux/net.h:222:5: note: expected 'struct msghdr *' but argument is of type 'struct user_msghdr *'
+ int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags);
+ ^~~~~~~~~~~~
+TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/nthread.c:129:8: error: too many arguments to function 'sock_recvmsg'
+ res = sock_recvmsg(conn->sock, &msg, len, MSG_DONTWAIT | MSG_NOSIGNAL);
+ ^~~~~~~~~~~~
+ -- snip --
+
+Detailed error log is at: http://errors.yoctoproject.org/Errors/Details/83334/
+
+Upstream-Status: Pending
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
+
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/block-io.c iscsitarget-1.4.20.3+svn502/kernel/block-io.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/block-io.c 2017-01-19 20:19:27.400507354 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/block-io.c 2017-01-19 20:32:22.977988593 -0800
+@@ -104,7 +104,11 @@ blockio_make_request(struct iet_volume *
+ /* bi_sector is ALWAYS in units of 512 bytes */
+ bio->bi_iter.bi_sector = ppos >> 9;
+ bio->bi_bdev = bio_data->bdev;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ bio->bi_end_io = (bio_end_io_t *) blockio_bio_endio;
++#else
+ bio->bi_end_io = blockio_bio_endio;
++#endif
+ bio->bi_private = tio_work;
+
+ if (tio_bio)
+@@ -139,7 +143,12 @@ blockio_make_request(struct iet_volume *
+ tio_bio = tio_bio->bi_next;
+ bio->bi_next = NULL;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
++ submit_bio(bio);
++#else
+ submit_bio(rw, bio);
++#endif
+ }
+
+ blk_finish_plug(&plug);
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/conn.c iscsitarget-1.4.20.3+svn502/kernel/conn.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/conn.c 2017-01-19 20:19:27.400507354 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/conn.c 2017-01-19 20:32:22.978988614 -0800
+@@ -148,8 +148,14 @@ static void iet_socket_bind(struct iscsi
+ target->nthread_info.old_state_change = conn->sock->sk->sk_state_change;
+ conn->sock->sk->sk_state_change = iet_state_change;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ target->nthread_info.old_data_ready = (void (*) (struct sock *)) \
++ conn->sock->sk->sk_data_ready;
++ conn->sock->sk->sk_data_ready = (void (*) (struct sock *)) iet_data_ready;
++#else
+ target->nthread_info.old_data_ready = conn->sock->sk->sk_data_ready;
+ conn->sock->sk->sk_data_ready = iet_data_ready;
++#endif
+
+ target->nthread_info.old_write_space = conn->sock->sk->sk_write_space;
+ conn->sock->sk->sk_write_space = iet_write_space;
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/digest.c iscsitarget-1.4.20.3+svn502/kernel/digest.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/digest.c 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/digest.c 2017-01-19 20:32:22.978988614 -0800
+@@ -30,6 +30,9 @@ void digest_alg_available(unsigned int *
+ int digest_init(struct iscsi_conn *conn)
+ {
+ int err = 0;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ struct crypto_ahash *tfm;
++#endif
+
+ if (!(conn->hdigest_type & DIGEST_ALL))
+ conn->hdigest_type = DIGEST_NONE;
+@@ -39,15 +42,40 @@ int digest_init(struct iscsi_conn *conn)
+
+ if (conn->hdigest_type & DIGEST_CRC32C ||
+ conn->ddigest_type & DIGEST_CRC32C) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ tfm = crypto_alloc_ahash("crc32c", 0, CRYPTO_ALG_ASYNC);
++ if (IS_ERR(tfm)) {
++ tfm = NULL;
++#else
+ conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
+ CRYPTO_ALG_ASYNC);
+ conn->rx_hash.flags = 0;
+ if (IS_ERR(conn->rx_hash.tfm)) {
+ conn->rx_hash.tfm = NULL;
++#endif
+ err = -ENOMEM;
+ goto out;
+ }
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ conn->rx_hash = ahash_request_alloc(tfm, GFP_KERNEL);
++ if (!conn->rx_hash) {
++ pr_err("ahash_request_alloc() failed for conn->rx_hash\n");
++ crypto_free_ahash(tfm);
++ err = -ENOMEM;
++ goto out;
++ }
++ ahash_request_set_callback(conn->rx_hash, 0, NULL, NULL);
++ conn->tx_hash = ahash_request_alloc(tfm, GFP_KERNEL);
++ if(!conn->tx_hash) {
++ pr_err("ahash_request_alloc() failed for conn->tx_hash\n");
++ ahash_request_free(conn->rx_hash);
++ conn->rx_hash = NULL;
++ crypto_free_ahash(tfm);
++ err = -ENOMEM;
++ goto out;
++ }
++ ahash_request_set_callback(conn->tx_hash, 0, NULL, NULL);
++#else
+ conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0,
+ CRYPTO_ALG_ASYNC);
+ conn->tx_hash.flags = 0;
+@@ -56,6 +84,7 @@ int digest_init(struct iscsi_conn *conn)
+ err = -ENOMEM;
+ goto out;
+ }
++#endif
+ }
+
+ out:
+@@ -73,10 +102,21 @@ out:
+ */
+ void digest_cleanup(struct iscsi_conn *conn)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ ahash_request_free(conn->tx_hash);
++ if (conn->rx_hash) {
++ struct crypto_ahash *tfm;
++ tfm = crypto_ahash_reqtfm(conn->rx_hash);
++ ahash_request_free(conn->rx_hash);
++ crypto_free_ahash(tfm);
++ }
++
++#else
+ if (conn->tx_hash.tfm)
+ crypto_free_hash(conn->tx_hash.tfm);
+ if (conn->rx_hash.tfm)
+ crypto_free_hash(conn->rx_hash.tfm);
++#endif
+ }
+
+ /**
+@@ -160,8 +200,13 @@ static inline void __dbg_simulate_data_d
+ }
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++static void digest_header(struct ahash_request *hash, struct iscsi_pdu *pdu,
++ u8 *crc)
++#else
+ static void digest_header(struct hash_desc *hash, struct iscsi_pdu *pdu,
+ u8 *crc)
++#endif
+ {
+ struct scatterlist sg[2];
+ unsigned int nbytes = sizeof(struct iscsi_hdr);
+@@ -174,16 +219,27 @@ static void digest_header(struct hash_de
+ nbytes += pdu->ahssize;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ crypto_ahash_init(hash);
++ ahash_request_set_crypt(hash, sg, crc, nbytes);
++ crypto_ahash_update(hash);
++ crypto_ahash_digest(hash);
++#else
+ crypto_hash_init(hash);
+ crypto_hash_update(hash, sg, nbytes);
+ crypto_hash_final(hash, crc);
++#endif
+ }
+
+ int digest_rx_header(struct iscsi_cmnd *cmnd)
+ {
+ u32 crc;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ digest_header(cmnd->conn->rx_hash, &cmnd->pdu, (u8 *) &crc);
++#else
+ digest_header(&cmnd->conn->rx_hash, &cmnd->pdu, (u8 *) &crc);
++#endif
+ if (crc != cmnd->hdigest)
+ return -EIO;
+
+@@ -192,11 +248,20 @@ int digest_rx_header(struct iscsi_cmnd *
+
+ void digest_tx_header(struct iscsi_cmnd *cmnd)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ digest_header(cmnd->conn->tx_hash, &cmnd->pdu, (u8 *) &cmnd->hdigest);
++#else
+ digest_header(&cmnd->conn->tx_hash, &cmnd->pdu, (u8 *) &cmnd->hdigest);
++#endif
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++static void digest_data(struct ahash_request *hash, struct iscsi_cmnd *cmnd,
++ struct tio *tio, u32 offset, u8 *crc)
++#else
+ static void digest_data(struct hash_desc *hash, struct iscsi_cmnd *cmnd,
+ struct tio *tio, u32 offset, u8 *crc)
++#endif
+ {
+ struct scatterlist *sg = cmnd->conn->hash_sg;
+ u32 size, length, npages;
+@@ -214,7 +279,11 @@ static void digest_data(struct hash_desc
+ BUG_ON(npages > ISCSI_CONN_IOV_MAX);
+
+ sg_init_table(sg, ARRAY_SIZE(cmnd->conn->hash_sg));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ crypto_ahash_init(hash);
++#else
+ crypto_hash_init(hash);
++#endif
+
+ for (i = 0; size > 0; i++) {
+ length = min_t(u32, PAGE_CACHE_SIZE - offset, size);
+@@ -225,8 +294,14 @@ static void digest_data(struct hash_desc
+
+ sg_mark_end(&sg[i - 1]);
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ ahash_request_set_crypt(hash, sg, crc, nbytes);
++ crypto_ahash_update(hash);
++ crypto_ahash_digest(hash);
++#else
+ crypto_hash_update(hash, sg, nbytes);
+ crypto_hash_final(hash, crc);
++#endif
+ }
+
+ int digest_rx_data(struct iscsi_cmnd *cmnd)
+@@ -251,8 +326,11 @@ int digest_rx_data(struct iscsi_cmnd *cm
+ tio = cmnd->tio;
+ offset = 0;
+ }
+-
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ digest_data(cmnd->conn->rx_hash, cmnd, tio, offset, (u8 *) &crc);
++#else
+ digest_data(&cmnd->conn->rx_hash, cmnd, tio, offset, (u8 *) &crc);
++#endif
+
+ if (!cmnd->conn->read_overflow &&
+ (cmnd_opcode(cmnd) != ISCSI_OP_PDU_REJECT)) {
+@@ -269,6 +347,11 @@ void digest_tx_data(struct iscsi_cmnd *c
+ struct iscsi_data_out_hdr *req = (struct iscsi_data_out_hdr *)&cmnd->pdu.bhs;
+
+ assert(tio);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ digest_data(cmnd->conn->tx_hash, cmnd, tio,
++ be32_to_cpu(req->buffer_offset), (u8 *) &cmnd->ddigest);
++#else
+ digest_data(&cmnd->conn->tx_hash, cmnd, tio,
+ be32_to_cpu(req->buffer_offset), (u8 *) &cmnd->ddigest);
++#endif
+ }
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.h iscsitarget-1.4.20.3+svn502/kernel/iscsi.h
+--- iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.h 2017-01-19 20:19:27.400507354 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/iscsi.h 2017-01-19 20:32:22.979988634 -0800
+@@ -14,6 +14,7 @@
+ #include <linux/pagemap.h>
+ #include <linux/seq_file.h>
+ #include <linux/mm.h>
++#include <crypto/hash.h>
+ #include <linux/crypto.h>
+ #include <linux/scatterlist.h>
+ #include <net/sock.h>
+@@ -275,8 +276,13 @@ struct iscsi_conn {
+ u32 write_offset;
+ int write_state;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ struct ahash_request *rx_hash;
++ struct ahash_request *tx_hash;
++#else
+ struct hash_desc rx_hash;
+ struct hash_desc tx_hash;
++#endif
+ struct scatterlist hash_sg[ISCSI_CONN_IOV_MAX];
+ };
+
+@@ -552,4 +558,10 @@ enum cmnd_flags {
+ #define PRODUCT_ID "VIRTUAL-DISK"
+ #define PRODUCT_REV "0"
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++#define PAGE_CACHE_SHIFT PAGE_SHIFT
++#define PAGE_CACHE_SIZE PAGE_SIZE
++#define PAGE_CACHE_MASK PAGE_MASK
++#endif
++
+ #endif /* __ISCSI_H__ */
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c iscsitarget-1.4.20.3+svn502/kernel/nthread.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c 2017-01-19 20:19:27.276504928 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/nthread.c 2017-01-19 20:32:22.979988634 -0800
+@@ -155,7 +155,12 @@ static int do_recv(struct iscsi_conn *co
+
+ oldfs = get_fs();
+ set_fs(get_ds());
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ res = sock_recvmsg(conn->sock, (struct msghdr *) &msg, \
++ MSG_DONTWAIT | MSG_NOSIGNAL);
++#else
+ res = sock_recvmsg(conn->sock, &msg, len, MSG_DONTWAIT | MSG_NOSIGNAL);
++#endif
+ set_fs(oldfs);
+
+ if (res <= 0) {
+@@ -376,7 +381,11 @@ static int write_data(struct iscsi_conn
+ ;
+ oldfs = get_fs();
+ set_fs(KERNEL_DS);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ res = vfs_writev(file, (struct iovec __user *) iop, count, &off, 0);
++#else
+ res = vfs_writev(file, (struct iovec __user *) iop, count, &off);
++#endif
+ set_fs(oldfs);
+ dprintk(D_DATA, "%#Lx:%u: %d(%ld)\n",
+ (unsigned long long) conn->session->sid, conn->cid,
+@@ -503,7 +512,11 @@ static int tx_ddigest(struct iscsi_cmnd
+ iov.iov_base = (char *) (&cmnd->ddigest) + (sizeof(u32) - rest);
+ iov.iov_len = rest;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ res = kernel_sendmsg(cmnd->conn->sock, (struct msghdr *) &msg, &iov, 1, rest);
++#else
+ res = kernel_sendmsg(cmnd->conn->sock, &msg, &iov, 1, rest);
++#endif
+
+ if (res > 0) {
+ cmnd->conn->write_size -= res;
+@@ -702,7 +715,12 @@ static void close_conn(struct iscsi_conn
+
+ write_lock_bh(&conn->sock->sk->sk_callback_lock);
+ conn->sock->sk->sk_state_change = target->nthread_info.old_state_change;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ conn->sock->sk->sk_data_ready = (void (*) (struct sock *)) \
++ target->nthread_info.old_data_ready;
++#else
+ conn->sock->sk->sk_data_ready = target->nthread_info.old_data_ready;
++#endif
+ conn->sock->sk->sk_write_space = target->nthread_info.old_write_space;
+ write_unlock_bh(&conn->sock->sk->sk_callback_lock);
+
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/volume.c iscsitarget-1.4.20.3+svn502/kernel/volume.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/volume.c 2017-01-19 20:19:27.276504928 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/volume.c 2017-01-19 20:32:22.979988634 -0800
+@@ -84,12 +84,25 @@ static int set_scsisn(struct iet_volume
+ /* Generate a MD5 hash of the target IQN and LUN number */
+ static void gen_scsiid(struct iet_volume *volume)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ struct ahash_request *hash;
++ struct crypto_ahash *tfm;
++#else
+ struct hash_desc hash;
++#endif
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ tfm = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC);
++#else
+ hash.tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC);
+ hash.flags = 0;
++#endif
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ if (!IS_ERR(tfm)) {
++#else
+ if (!IS_ERR(hash.tfm)) {
++#endif
+ struct scatterlist sg[2];
+ unsigned int nbytes = 0;
+
+@@ -102,11 +115,19 @@ static void gen_scsiid(struct iet_volume
+ sg_set_buf(&sg[1], &volume->lun, sizeof(volume->lun));
+ nbytes += sizeof(volume->lun);
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
++ crypto_ahash_init(hash);
++ ahash_request_set_crypt(hash, sg, volume->scsi_id, nbytes);
++ crypto_ahash_update(hash);
++ crypto_ahash_digest(hash);
++ crypto_free_ahash(tfm);
++#else
+ crypto_hash_init(&hash);
+ crypto_hash_update(&hash, sg, nbytes);
+ crypto_hash_final(&hash, volume->scsi_id);
+
+ crypto_free_hash(hash.tfm);
++#endif
+ } else {
+ /* If no MD5 available set ID to TID and LUN */
+ memcpy(volume->scsi_id, &volume->target->tid,
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-call-trace-of-ahash-API-calling.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-call-trace-of-ahash-API-calling.patch
new file mode 100644
index 000000000..c99683478
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-call-trace-of-ahash-API-calling.patch
@@ -0,0 +1,85 @@
+The previous build_with_updated_interfaces_of_linux_v4.8_and_above.patch
+does not alloc struct ahash_request before using it. This will cause the
+kernel call trace below when calling gen_scsiid on kernel 4.8 or later
+version.
+
+This patch normalizes the calling of ahash API according to the example
+in kernel doc Documentation/crypto/api-intro.txt.
+
+BUG: unable to handle kernel NULL pointer dereference at 0000000000000020
+IP: [<ffffffffa0008d45>] volume_add+0x625/0x7f0 [iscsi_trgt]
+PGD dd77067 PUD dd7c067 PMD 0
+Oops: 0000 [#1] PREEMPT SMP
+Modules linked in: iscsi_trgt(O)
+CPU: 0 PID: 350 Comm: ietd Tainted: G O 4.8.12-yocto-standard #1
+Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
+task: ffff88000dfe2c00 task.stack: ffff88000de88000
+RIP: 0010:[<ffffffffa0008d45>] [<ffffffffa0008d45>] volume_add+0x625/0x7f0 [iscsi_trgt]
+RSP: 0018:ffff88000de8bd90 EFLAGS: 00000206
+RAX: 000000000000ddfa RBX: ffff88000ddd1d78 RCX: ffffea0000000000
+RDX: 0000000000000600 RSI: 0000000000000000 RDI: ffff88000ddd1c14
+RBP: ffff88000de8be38 R08: ffff88000de44180 R09: ffff88000de8bdd0
+R10: 000000000000002c R11: 0000000000000000 R12: ffff88000ddfa600
+R13: 0000000000000000 R14: 0000000000000000 R15: ffff88000de92200
+FS: 00007f767548b700(0000) GS:ffff88000fc00000(0000) knlGS:0000000000000000
+CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 0000000000000020 CR3: 000000000dd2d000 CR4: 00000000000006f0
+Stack:
+ ffff88000de8bdd0 ffff88000dc1b3d0 ffff88000ddfa650 ffff88000ddfa660
+ ffff88000df8f000 ffff88000ddd1c00 ffff88000de44180 0000000000000000
+ ffffea0000377440 0000000f00000c14 0000000000000000 0000000000000000
+Call Trace:
+ [<ffffffffa0006547>] ioctl+0x217/0x390 [iscsi_trgt]
+ [<ffffffff81192574>] do_vfs_ioctl+0x94/0x5c0
+ [<ffffffff8117ff73>] ? vfs_read+0xf3/0x120
+ [<ffffffff81192b19>] SyS_ioctl+0x79/0x90
+ [<ffffffff8191a45b>] entry_SYSCALL_64_fastpath+0x13/0x8f
+Code: 4c 01 e0 0f 82 a2 01 00 00 48 b9 00 00 00 80 ff 77 00 00 48 01
+c8 45 31 f6 48 b9 00 00 00 00 00 ea ff ff 89 54 24 68 48 c1 e8 0c <49>
+8b 56 20 4c 89 44 24 20 4c 89 f7 48 c1 e0 06 c7 44 24 6c 04
+RIP [<ffffffffa0008d45>] volume_add+0x625/0x7f0 [iscsi_trgt]
+ RSP <ffff88000de8bd90>
+CR2: 0000000000000020
+end trace cd2016297df21635 ]
+ietd_response_recv 200 0 -5
+Input/output error.
+
+Upstream-Status: Pending [This patch is based on the previous one which
+has not been merged upstream.]
+
+Signed-off-by: Zhe He <zhe.he@windriver.com>
+
+--- iscsitarget-1.4.20.3+svn502_orig/kernel/volume.c 2017-01-18 08:57:56.752187402 +0800
++++ iscsitarget-1.4.20.3+svn502/kernel/volume.c 2017-01-18 09:02:44.164195234 +0800
+@@ -93,13 +93,14 @@ static void gen_scsiid(struct iet_volume
+
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
+ tfm = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC);
++ hash = ahash_request_alloc(tfm, GFP_ATOMIC);
+ #else
+ hash.tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC);
+ hash.flags = 0;
+ #endif
+
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
+- if (!IS_ERR(tfm)) {
++ if (tfm && !IS_ERR(tfm)) {
+ #else
+ if (!IS_ERR(hash.tfm)) {
+ #endif
+@@ -116,10 +117,13 @@ static void gen_scsiid(struct iet_volume
+ nbytes += sizeof(volume->lun);
+
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
+- crypto_ahash_init(hash);
++ ahash_request_set_callback(hash, 0, NULL, NULL);
+ ahash_request_set_crypt(hash, sg, volume->scsi_id, nbytes);
+- crypto_ahash_update(hash);
+ crypto_ahash_digest(hash);
++ crypto_ahash_init(hash);
++ crypto_ahash_update(hash);
++ crypto_ahash_final(hash);
++ ahash_request_free(hash);
+ crypto_free_ahash(tfm);
+ #else
+ crypto_hash_init(&hash);
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
new file mode 100644
index 000000000..1e6a1d6d3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
@@ -0,0 +1,327 @@
+Description: Fix source to compile on 3.19 kernels
+Author: Stefan Bader <stefan.bader@canonical.com>
+Forward: no
+
+Fixes below inconsistent crash when trying to login to iSCSI target
+server, observed with linux kernel v4.1.
+
+-- snip --
+CPU: 1 PID: 29883 Comm: istd1 Tainted: G O 4.1.35-rt40-yocto-standard #1
+Hardware name: To be filled by O.E.M. To be filled by O.E.M./Larne CRB, BIOS 4.6.5.4 09/18/2014
+task: ffff88020f1f30c0 ti: ffff8800d7f3c000 task.ti: ffff8800d7f3c000
+RIP: 0010:[<ffffffff8140d1ae>] [<ffffffff8140d1ae>] copy_to_iter+0x3e/0x280
+RSP: 0018:ffff8800d7f3f728 EFLAGS: 00010246
+RAX: 00000000d7f3f928 RBX: 0000000000000030 RCX: 0000000000000030
+RDX: ffff8800d7f3f900 RSI: 0000000000000030 RDI: ffff8800d1501e82
+RBP: ffff8800d7f3f768 R08: 00000000c127d467 R09: 0000000000000000
+R10: ffff88020f29e118 R11: 0000000000000004 R12: ffff8800d7f3f900
+R13: 0000000000000030 R14: 0000000000000001 R15: 0000000000000246
+FS: 00007f86f9c4c700(0000) GS:ffff88021ec80000(0000) knlGS:00000000f7733700
+CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
+CR2: 000000000000024e CR3: 00000000d38b0000 CR4: 00000000000406e0
+Stack:
+ffff880214f14ec0 ffff8800d1501e82 ffff8800d7f3f748 0000000000000030
+ffff88020f122500 0000000000000030 0000000000000000 0000000000000030
+ffff8800d7f3f7c8 ffffffff81806981 ffff8800d7f3f798 ffffffff8105d72a
+Call Trace:
+[<ffffffff81806981>] skb_copy_datagram_iter+0x71/0x2b0
+[<ffffffff8105d72a>] ? __local_bh_enable_ip+0x4a/0xb0
+[<ffffffff8186c9c0>] tcp_recvmsg+0x5e0/0xbb0
+[<ffffffff81898ded>] inet_recvmsg+0x8d/0xb0
+[<ffffffff817f49f3>] sock_recvmsg+0x13/0x20
+[<ffffffffa01655c3>] do_recv+0xe3/0x1f0 [iscsi_trgt]
+[<ffffffff81153097>] ? __mod_zone_page_state+0x77/0xb0
+[<ffffffff81417613>] ? __this_cpu_preempt_check+0x13/0x20
+[<ffffffff81153097>] ? __mod_zone_page_state+0x77/0xb0
+[<ffffffff8140fed5>] ? find_next_bit+0x15/0x30
+[<ffffffff813fa8e0>] ? cpumask_next_and+0x30/0x50
+[<ffffffff8113f785>] ? __alloc_pages_nodemask+0x165/0x980
+[<ffffffff8107e370>] ? preempt_count_add+0xd0/0xf0
+[<ffffffff8195da8b>] ? _raw_spin_lock+0x1b/0x60
+[<ffffffff8109cfa8>] ? cpuacct_charge+0x58/0x70
+[<ffffffff81089039>] ? update_curr+0xb9/0x190
+[<ffffffff81417613>] ? __this_cpu_preempt_check+0x13/0x20
+[<ffffffff8112b43f>] ? __perf_event_task_sched_in+0x4f/0x90
+[<ffffffff8195dbbd>] ? _raw_spin_unlock_irq+0x1d/0x40
+[<ffffffff8107e223>] ? finish_task_switch+0x63/0xe0
+[<ffffffff81959e3b>] ? __schedule+0x38b/0x980
+[<ffffffff8107e370>] ? preempt_count_add+0xd0/0xf0
+[<ffffffffa0165c65>] istd+0x4d5/0x1390 [iscsi_trgt]
+[<ffffffff81959e3b>] ? __schedule+0x38b/0x980
+[<ffffffffa0165790>] ? nthread_wakeup+0x40/0x40 [iscsi_trgt]
+[<ffffffffa0165790>] ? nthread_wakeup+0x40/0x40 [iscsi_trgt]
+[<ffffffff8107748b>] kthread+0xbb/0xe0
+[<ffffffff81950000>] ? wireless_dev_seq_show+0x100/0x180
+[<ffffffff810773d0>] ? kthread_worker_fn+0x170/0x170
+[<ffffffff8195e7a2>] ret_from_fork+0x42/0x70
+[<ffffffff810773d0>] ? kthread_worker_fn+0x170/0x170
+Code: 5a 10 48 89 7d c8 48 39 f3 48 0f 47 de 48 85 db 0f 84 6f 01 00 00 8b 02 49 89
+d4 4c 8b 72 08 4c 8b 7a 18 a8 04 0f 85 a2 00 00 00 <4d> 8b 6f 08 4d 29 f5 49 39 dd 4c 0f 47 eb a8 02 0f 85 5c 01 00
+RSP <ffff8800d7f3f728>
+CR2: 000000000000024e
+------------[ cut here ]------------
+-- snip --
+
+The original patch is at
+http://launchpadlibrarian.net/218100509/iscsitarget_1.4.20.3+svn499-0ubuntu2_1.4.20.3+svn499-0ubuntu2.1.diff.gz,
+those changes were taken using #ifs, inorder to allow compilation of
+iscsitarget package with linux kernels < 3.19.
+
+Upstream-Status: Submitted [http://launchpadlibrarian.net/218100509/iscsitarget_1.4.20.3+svn499-0ubuntu2_1.4.20.3+svn499-0ubuntu2.1.diff.gz]
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
+
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/conn.c iscsitarget-1.4.20.3+svn502/kernel/conn.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/conn.c 2017-01-18 22:27:02.713167436 -0800
++++ iscsitarget-1.4.20.3+svn502/kernel/conn.c 2017-01-18 23:13:11.909214379 -0800
+@@ -129,7 +129,11 @@ static void iet_socket_bind(struct iscsi
+
+ dprintk(D_GENERIC, "%llu\n", (unsigned long long) session->sid);
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ conn->sock = SOCKET_I(file_inode(conn->file));
++#else
+ conn->sock = SOCKET_I(conn->file->f_dentry->d_inode);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ conn->sock->sk->sk_user_data = conn;
+
+ write_lock_bh(&conn->sock->sk->sk_callback_lock);
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/file-io.c iscsitarget-1.4.20.3+svn502/kernel/file-io.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/file-io.c 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/file-io.c 2017-01-18 23:54:38.505717079 -0800
+@@ -69,7 +69,11 @@ static int fileio_make_request(struct ie
+ static int fileio_sync(struct iet_volume *lu, struct tio *tio)
+ {
+ struct fileio_data *p = lu->private;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ struct inode *inode = file_inode(p->filp);
++#else
+ struct inode *inode = p->filp->f_dentry->d_inode;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ struct address_space *mapping = inode->i_mapping;
+ loff_t ppos, count;
+ int res;
+@@ -213,7 +217,11 @@ static int fileio_attach(struct iet_volu
+ eprintk("%d\n", err);
+ goto out;
+ }
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ inode = file_inode(p->filp);
++#else
+ inode = p->filp->f_dentry->d_inode;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+
+ if (S_ISREG(inode->i_mode))
+ ;
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.c iscsitarget-1.4.20.3+svn502/kernel/iscsi.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.c 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/iscsi.c 2017-01-18 23:37:36.462970326 -0800
+@@ -489,8 +489,12 @@ static void cmnd_skip_pdu(struct iscsi_c
+ }
+ conn->read_iov[i].iov_base = addr;
+ conn->read_iov[i].iov_len = size;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, ++i, conn->read_size);
++#else
+ conn->read_msg.msg_iov = conn->read_iov;
+ conn->read_msg.msg_iovlen = ++i;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ }
+
+ static void iscsi_cmnd_reject(struct iscsi_cmnd *req, int reason)
+@@ -718,7 +722,9 @@ static int cmnd_recv_pdu(struct iscsi_co
+ idx = offset >> PAGE_CACHE_SHIFT;
+ offset &= ~PAGE_CACHE_MASK;
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ conn->read_msg.msg_iov = conn->read_iov;
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
+ conn->read_size = size = (size + 3) & -4;
+ conn->read_overflow = 0;
+
+@@ -730,16 +736,25 @@ static int cmnd_recv_pdu(struct iscsi_co
+ conn->read_iov[i].iov_base = addr + offset;
+ if (offset + size <= PAGE_CACHE_SIZE) {
+ conn->read_iov[i].iov_len = size;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, ++i, conn->read_size);
++#else
+ conn->read_msg.msg_iovlen = ++i;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ break;
+ }
+ conn->read_iov[i].iov_len = PAGE_CACHE_SIZE - offset;
+ size -= conn->read_iov[i].iov_len;
+ offset = 0;
+ if (++i >= ISCSI_CONN_IOV_MAX) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ conn->read_msg.msg_iovlen = i;
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
+ conn->read_overflow = size;
+ conn->read_size -= size;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, i, conn->read_size);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ break;
+ }
+
+@@ -918,7 +933,9 @@ static int nop_out_start(struct iscsi_co
+
+ if ((size = cmnd->pdu.datasize)) {
+ size = (size + 3) & -4;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ conn->read_msg.msg_iov = conn->read_iov;
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
+ if (cmnd->pdu.bhs.itt != cpu_to_be32(ISCSI_RESERVED_TAG)) {
+ struct tio *tio;
+ int pg_cnt = get_pgcnt(size);
+@@ -946,7 +963,11 @@ static int nop_out_start(struct iscsi_co
+ }
+ assert(!size);
+ conn->read_overflow = size;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, i, conn->read_size);
++#else
+ conn->read_msg.msg_iovlen = i;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ }
+
+ out:
+@@ -986,7 +1007,11 @@ static void scsi_cmnd_start(struct iscsi
+ set_cmnd_lunit(req);
+
+ switch (req_hdr->scb[0]) {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ case SERVICE_ACTION_IN_16:
++#else
+ case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ if ((req_hdr->scb[1] & 0x1f) != 0x10)
+ goto error;
+ case INQUIRY:
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c iscsitarget-1.4.20.3+svn502/kernel/nthread.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/nthread.c 2017-01-18 23:45:03.291033881 -0800
+@@ -42,9 +42,14 @@ static inline void iscsi_conn_init_read(
+ len = (len + 3) & -4; // XXX ???
+ conn->read_iov[0].iov_base = data;
+ conn->read_iov[0].iov_len = len;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
+ conn->read_msg.msg_iov = conn->read_iov;
+ conn->read_msg.msg_iovlen = 1;
++#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
+ conn->read_size = (len + 3) & -4;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, 1, conn->read_size);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ }
+
+ static void iscsi_conn_read_ahs(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd)
+@@ -83,14 +88,31 @@ static int is_data_available(struct iscs
+
+ static void forward_iov(struct msghdr *msg, int len)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ struct iovec *iov;
++
++ while (msg->msg_iter.iov->iov_len <= len) {
++ len -= msg->msg_iter.iov->iov_len;
++ msg->msg_iter.iov++;
++ msg->msg_iter.nr_segs--;
++ }
++#else
+ while (msg->msg_iov->iov_len <= len) {
+ len -= msg->msg_iov->iov_len;
+ msg->msg_iov++;
+ msg->msg_iovlen--;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ /* XXX: discards const ... */
++ iov = msg->msg_iter.iov;
++ iov->iov_base = (char *) msg->msg_iter.iov->iov_base + len;
++ iov->iov_len -= len;
++#else
+ msg->msg_iov->iov_base = (char *) msg->msg_iov->iov_base + len;
+ msg->msg_iov->iov_len -= len;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ }
+
+ static int do_recv(struct iscsi_conn *conn, int state)
+@@ -98,6 +120,9 @@ static int do_recv(struct iscsi_conn *co
+ mm_segment_t oldfs;
+ struct msghdr msg;
+ struct iovec iov[ISCSI_CONN_IOV_MAX];
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ size_t iovlen = ISCSI_CONN_IOV_MAX;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ int i, len, res;
+
+ if (!test_bit(CONN_ACTIVE, &conn->state)) {
+@@ -110,12 +135,23 @@ static int do_recv(struct iscsi_conn *co
+ goto out;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ if (conn->read_msg.msg_iter.nr_segs < iovlen)
++ iovlen = conn->read_msg.msg_iter.nr_segs;
++
++ for (i = 0, len = 0; i < iovlen; i++) {
++ iov[i] = conn->read_msg.msg_iter.iov[i];
++ len += iov[i].iov_len;
++ }
++ iov_iter_init(&msg.msg_iter, READ, iov, iovlen, len);
++#else
+ msg.msg_iov = iov;
+ msg.msg_iovlen = min_t(size_t, conn->read_msg.msg_iovlen, ISCSI_CONN_IOV_MAX);
+ for (i = 0, len = 0; i < msg.msg_iovlen; i++) {
+ iov[i] = conn->read_msg.msg_iov[i];
+ len += iov[i].iov_len;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+
+ oldfs = get_fs();
+ set_fs(get_ds());
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/target_disk.c iscsitarget-1.4.20.3+svn502/kernel/target_disk.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/target_disk.c 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/target_disk.c 2017-01-18 23:45:51.451010417 -0800
+@@ -606,7 +606,11 @@ static int disk_execute_cmnd(struct iscs
+ case REQUEST_SENSE:
+ send_data_rsp(cmnd, build_request_sense_response);
+ break;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ case SERVICE_ACTION_IN_16:
++#else
+ case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ send_data_rsp(cmnd, build_service_action_in_response);
+ break;
+ case READ_6:
+diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/volume.c iscsitarget-1.4.20.3+svn502/kernel/volume.c
+--- iscsitarget-1.4.20.3+svn502_org/kernel/volume.c 2014-05-06 13:59:55.000000000 -0700
++++ iscsitarget-1.4.20.3+svn502/kernel/volume.c 2017-01-18 23:47:07.957561600 -0800
+@@ -398,7 +398,11 @@ int is_volume_reserved(struct iet_volume
+ case READ_CAPACITY:
+ /* allowed commands when reserved */
+ break;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ case SERVICE_ACTION_IN_16:
++#else
+ case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ if ((scb[1] & 0x1F) == 0x10)
+ break;
+ /* fall through */
+@@ -465,7 +469,11 @@ int is_volume_reserved(struct iet_volume
+ if (excl_access_ro && !registered)
+ err = -EBUSY;
+ break;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
++ case SERVICE_ACTION_IN_16:
++#else
+ case SERVICE_ACTION_IN:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
+ if ((scb[1] & 0x1F) == 0x10)
+ break;
+ /* fall through */
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch
new file mode 100644
index 000000000..95bd047b9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/use-kernel-makefile-to-get-kernel-version.patch
@@ -0,0 +1,67 @@
+Get linux kernel version from Makefile of kernel source
+
+We get below messages while building iscsitarget,
+
+-- snip --
+x86_64-poky-linux-gcc: error:
+/CGE7_SHDD/project_yocto_1.8/poky/build/tmp/work-shared/qemux86-64/kernel-source/include/linux/version.h:
+No such file or directory
+x86_64-poky-linux-gcc: fatal error: no input files
+compilation terminated.
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+/bin/sh: line 0: [: too many arguments
+-- CUT --
+
+These messages are due to absence of include/linux/version.h file in
+kernel source directory and failed to compute linux kernel version.
+So, use kernel source Makefile ( i.e $(KSRC)/Makefile) to find out
+actual kernel version.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
+
+--- iscsitarget-1.4.20.3+svn499_org/Makefile 2014-01-27 00:00:45.000000000 +0530
++++ iscsitarget-1.4.20.3+svn499/Makefile 2015-07-23 10:44:47.013600285 +0530
+@@ -18,27 +18,11 @@ ifeq ($(KSRC),)
+ endif
+
+
+-ifneq ($(wildcard $(KSRC)/include/generated/utsrelease.h),)
+- VERSION_FILE := $(KSRC)/include/generated/utsrelease.h
+-else
+- ifneq ($(wildcard $(KSRC)/include/linux/utsrelease.h),)
+- VERSION_FILE := $(KSRC)/include/linux/utsrelease.h
+- else
+- VERSION_FILE := $(KSRC)/include/linux/version.h
+- endif
+-endif
+-
+-KVER := $(shell $(CC) $(CFLAGS) $(LDFLAGS) -E -dM $(VERSION_FILE) | \
+- grep UTS_RELEASE | awk '{ print $$3 }' | sed 's/\"//g')
+-
+ KMOD := /lib/modules/$(KVER)/extra
+-
+-KMAJ := $(shell echo $(KVER) | \
+- sed -e 's/^\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*.*/\1/')
+-KMIN := $(shell echo $(KVER) | \
+- sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*.*/\1/')
+-KREV := $(shell echo $(KVER) | \
+- sed -e 's/^[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/')
++KMAJ := $(shell cat $(KSRC)/Makefile | grep ^VERSION | gawk -F " " '{ print $$NF }')
++KMIN := $(shell cat $(KSRC)/Makefile | grep ^PATCHLEVEL | gawk -F " " '{ print $$NF }')
++KREV := $(shell cat $(KSRC)/Makefile | grep ^SUBLEVEL | gawk -F " " '{ print $$NF }')
++KVER := ${KMAJ}.${KMIN}.${KREV}
+
+ kver_eq = $(shell [ $(KMAJ) -eq $(1) -a $(KMIN) -eq $(2) -a $(KREV) -eq $(3) ] && \
+ echo 1 || echo 0)
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb
new file mode 100644
index 000000000..5d1359165
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/iscsitarget_1.4.20.3+svn502.bb
@@ -0,0 +1,64 @@
+DESCRIPTION = "iSCSI Enterprise Target is aimed to develop an \
+ open source iSCSI target with professional features, \
+ that works well in enterprise environment under real \
+ workload, and is scalable and versatile enough to meet the \
+ challenge of future storage needs and developments."
+HOMEPAGE = "http://iscsitarget.sourceforge.net/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6e233eda45c807aa29aeaa6d94bc48a2"
+DEPENDS = "openssl virtual/kernel"
+
+SRC_URI = "http://ftp.heanet.ie/mirrors/ubuntu/pool/universe/i/${BPN}/${BPN}_${PV}.orig.tar.gz \
+ file://use-kernel-makefile-to-get-kernel-version.patch \
+ file://fix-errors-observed-with-linux-3.19-and-greater.patch \
+ file://access-sk_v6_daddr-iff-IPV6-defined.patch \
+ file://build_with_updated_bio_struct_of_linux_v4.3_and_above.patch \
+ file://build_with_updated_interfaces_of_linux_v4.8_and_above.patch \
+ file://fix-call-trace-of-ahash-API-calling.patch \
+ file://0001-kernel-event-netlink_ack-now-requires-4-arguments.patch \
+ "
+
+SRC_URI[md5sum] = "ef9bc823bbabd3c772208c00d5f2d089"
+SRC_URI[sha256sum] = "d3196ccb78a43266dce28587bfe30d8ab4db7566d7bce96057dfbb84100babb5"
+
+inherit module
+
+do_configure[noexec] = "1"
+
+# make_scripts requires kernel source directory to create
+# kernel scripts
+do_make_scripts[depends] += "virtual/kernel:do_shared_workdir"
+
+do_compile() {
+ oe_runmake KSRC=${STAGING_KERNEL_DIR} LDFLAGS='' V=1 kernel
+ oe_runmake KSRC=${STAGING_KERNEL_DIR} usr
+}
+
+do_install() {
+ # Module
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/iscsi
+ install -m 0644 kernel/iscsi_trgt.ko \
+ ${D}/lib/modules/${KERNEL_VERSION}/kernel/iscsi/iscsi_trgt.ko
+
+ # Userspace utilities
+ install -d ${D}${sbindir}
+ install -m 0755 usr/ietd ${D}${sbindir}/ietd
+ install -m 0755 usr/ietadm ${D}${sbindir}/ietadm
+
+ # Config files, init scripts
+ mkdir -p ${D}${sysconfdir}/iet
+ install -m 0644 etc/ietd.conf ${D}/${sysconfdir}/iet/ietd.conf
+ install -m 0644 etc/initiators.allow ${D}${sysconfdir}/iet/initiators.allow
+ install -m 0644 etc/targets.allow ${D}${sysconfdir}/iet/targets.allow
+ mkdir -p ${D}${sysconfdir}/init.d
+ install -m 0755 etc/initd/initd ${D}${sysconfdir}/init.d/iscsi-target
+ install -m 0644 etc/initiators.deny ${D}${sysconfdir}/iet/initiators.deny
+}
+
+FILES_${PN} += "${sbindir} \
+ ${sysconfdir}"
+
+RDEPENDS_${PN} = "kernel-module-iscsi-trgt"
+RRECOMMENDS_${PN} = "kernel-module-crc32c kernel-module-libcrc32c"
+
+PNBLACKLIST[iscsitarget] = "error: implicit declaration of function 'init_timer'; did you mean 'init_timers'?; 4.15 kernel issues"
diff --git a/meta-openembedded/meta-networking/recipes-filter/arno-iptables-firewall/arno-iptables-firewall_2.0.1g.bb b/meta-openembedded/meta-networking/recipes-filter/arno-iptables-firewall/arno-iptables-firewall_2.0.1g.bb
new file mode 100644
index 000000000..6fd0affdf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/arno-iptables-firewall/arno-iptables-firewall_2.0.1g.bb
@@ -0,0 +1,35 @@
+SUMMARY = "IPTables based firewall scripts"
+HOMEPAGE = "http://rocky.eld.leidenuniv.nl/joomla/index.php?option=com_content&view=article&id=45&Itemid=63"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://gpl_license.txt;md5=11c7b65c4a4acb9d5175f7e9bf99c403"
+
+SRC_URI = "http://rocky.eld.leidenuniv.nl/arno-iptables-firewall/${BPN}_${PV}.tar.gz \
+ "
+SRC_URI[md5sum] = "77eba7f148bf2840a3e35a6f50c9c353"
+SRC_URI[sha256sum] = "0bafd85ddc235752250eaec0c7fdb21e530912483f6807a97f86158ed2d301f7"
+
+S = "${WORKDIR}/${BPN}_${PV}"
+
+inherit systemd
+
+do_install() {
+ install -d ${D}${sysconfdir} ${D}${sbindir} ${D}${bindir} ${D}${systemd_unitdir}/system ${D}${sysconfdir}/init.d
+ install -d ${D}${datadir}/arno-iptables-firewall ${D}${sysconfdir}/arno-iptables-firewall
+ cp -r ${S}${sysconfdir}/arno-iptables-firewall ${D}${sysconfdir}/
+ install -m 0755 ${S}${sysconfdir}/init.d/arno-iptables-firewall ${D}${bindir}
+ install -m 0755 ${S}/bin/arno-iptables-firewall ${D}${sbindir}
+ install -m 0755 ${S}/bin/arno-fwfilter ${D}${bindir}
+ cp -r ${S}/share/arno-iptables-firewall/* ${D}${datadir}/arno-iptables-firewall
+ cp -r ${S}/etc/arno-iptables-firewall/* ${D}${sysconfdir}/arno-iptables-firewall
+ install -m 0644 ${S}/${systemd_unitdir}/system/arno-iptables-firewall.service ${D}${systemd_unitdir}/system
+ sed -i -e 's%/usr/local/sbin%${bindir}%g' ${D}${systemd_unitdir}/system/arno-iptables-firewall.service
+ sed -i -e 's%/usr/local/sbin%${sbindir}%g' ${D}${bindir}/arno-iptables-firewall
+ sed -i -e 's%/usr/local%${exec_prefix}%g' ${D}${sysconfdir}/arno-iptables-firewall/firewall.conf
+ sed -i -e 's%#!/bin/bash%#!/bin/sh%g' ${D}${bindir}/arno-fwfilter
+ sed -i -e 's%#!/bin/bash%#!/bin/sh%g' ${D}${datadir}/arno-iptables-firewall/plugins/traffic-accounting-helper
+ sed -i -e 's%#!/bin/bash%#!/bin/sh%g' ${D}${datadir}/arno-iptables-firewall/plugins/dyndns-host-open-helper
+}
+
+SYSTEMD_SERVICE_${PN} = "arno-iptables-firewall.service"
+FILES_${PN} += "${systemd_unitdir}/system/arno-iptables-firewall.service"
diff --git a/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.4.bb b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.4.bb
new file mode 100644
index 000000000..8b3490d7c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/conntrack-tools_1.4.4.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Connection tracking userspace tools for Linux"
+SECTION = "net"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+DEPENDS = "libnfnetlink libnetfilter-conntrack libnetfilter-cttimeout \
+ libnetfilter-cthelper libnetfilter-queue bison-native"
+
+DEPENDS_append_libc-musl = " libtirpc"
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LDFLAGS_append_libc-musl = " -ltirpc"
+
+SRC_URI = "http://www.netfilter.org/projects/conntrack-tools/files/conntrack-tools-${PV}.tar.bz2;name=tar \
+ file://conntrack-failover \
+ file://init \
+"
+SRC_URI[tar.md5sum] = "acd9e0b27cf16ae3092ba900e4d7560e"
+SRC_URI[tar.sha256sum] = "b7caf4fcc4c03575df57d25e5216584d597fd916c891f191dac616ce68bdba6c"
+
+inherit autotools update-rc.d pkgconfig
+
+INITSCRIPT_NAME = "conntrackd"
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/conntrackd
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 0644 ${S}/doc/sync/ftfw/conntrackd.conf ${D}/${sysconfdir}/conntrackd/conntrackd.conf.sample
+ install -m 0755 ${WORKDIR}/conntrack-failover ${D}/${sysconfdir}/init.d/conntrack-failover
+ install -m 0755 ${WORKDIR}/init ${D}/${sysconfdir}/init.d/conntrackd
+
+ # Fix hardcoded paths in scripts
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}/${sysconfdir}/init.d/conntrack-failover ${D}/${sysconfdir}/init.d/conntrackd
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}/${sysconfdir}/init.d/conntrack-failover ${D}/${sysconfdir}/init.d/conntrackd
+ sed -i 's!/var/!${localstatedir}/!g' ${D}/${sysconfdir}/init.d/conntrack-failover ${D}/${sysconfdir}/init.d/conntrackd ${D}/${sysconfdir}/conntrackd/conntrackd.conf.sample
+ sed -i 's!^export PATH=.*!export PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}/${sysconfdir}/init.d/conntrackd
+}
diff --git a/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/conntrack-failover b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/conntrack-failover
new file mode 100644
index 000000000..6d92e637f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/conntrack-failover
@@ -0,0 +1,77 @@
+#!/bin/sh
+#
+# (C) 2008 by Pablo Neira Ayuso <pablo@netfilter.org>
+# (C) 2009 Roman I Khimov <khimov@altell.ru>
+#
+# This software may be used and distributed according to the terms
+# of the GNU General Public License, incorporated herein by reference.
+#
+# Description:
+#
+# This is the script for primary-backup setups for keepalived
+# (http://www.keepalived.org). You may adapt it to make it work with other
+# high-availability managers.
+#
+# Do not forget to include the required modifications to your keepalived.conf
+# file to invoke this script during keepalived's state transitions.
+#
+# Contributions to improve this script are welcome :).
+#
+## Modified to work as init.d script under pacemaker control
+
+CONNTRACKD_BIN=/usr/sbin/conntrackd
+CONNTRACKD_LOCK=/var/lock/conntrack.lock
+CONNTRACKD_CONFIG=/etc/conntrackd/conntrackd.conf
+
+case "$1" in
+ start)
+ #
+ # commit the external cache into the kernel table
+ #
+ $CONNTRACKD_BIN -C $CONNTRACKD_CONFIG -c
+ if [ $? -eq 1 ]
+ then
+ logger "ERROR: failed to invoke conntrackd -c"
+ fi
+
+ #
+ # flush the internal and the external caches
+ #
+ $CONNTRACKD_BIN -C $CONNTRACKD_CONFIG -f
+ if [ $? -eq 1 ]
+ then
+ logger "ERROR: failed to invoke conntrackd -f"
+ fi
+
+ #
+ # resynchronize my internal cache to the kernel table
+ #
+ $CONNTRACKD_BIN -C $CONNTRACKD_CONFIG -R
+ if [ $? -eq 1 ]
+ then
+ logger "ERROR: failed to invoke conntrackd -R"
+ fi
+
+ #
+ # send a bulk update to backups
+ #
+ $CONNTRACKD_BIN -C $CONNTRACKD_CONFIG -B
+ if [ $? -eq 1 ]
+ then
+ logger "ERROR: failed to invoke conntrackd -B"
+ fi
+ ;;
+ stop)
+ $CONNTRACKD_BIN -t
+ $CONNTRACKD_BIN -n
+ ;;
+ status)
+ ;;
+ *)
+ logger "ERROR: unknown command"
+ echo "Usage: conntrack-failover {start|stop|status}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/init b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/init
new file mode 100644
index 000000000..bce2075a7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/conntrack-tools/files/init
@@ -0,0 +1,87 @@
+#!/bin/sh
+#
+# /etc/init.d/conntrackd
+#
+# Maximilian Wilhelm <max@rfc2324.org>
+# -- Mon, 06 Nov 2006 18:39:07 +0100
+#
+# Roman I Khimov <khimov@altell.ru>
+# -- Tue, 27 Oct 2009 14:34:00 +0300
+
+### BEGIN INIT INFO
+# Provides: conntrackd
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Description: Starts conntrackd
+# short-description: Starts conntrackd
+### END INIT INFO
+
+export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+
+NAME="conntrackd"
+DAEMON="/usr/sbin/conntrackd"
+CONFIG="/etc/conntrackd/conntrackd.conf"
+PIDFILE="/var/run/${NAME}.pid"
+
+
+# Gracefully exit if there is no daemon (debian way of life)
+if [ ! -x "${DAEMON}" ]; then
+ exit 0
+fi
+
+# Check for config file
+if [ ! -f /etc/conntrackd/conntrackd.conf ]; then
+ echo "Error: There is no config file for $NAME" >&2
+ exit 1;
+fi
+
+case "$1" in
+ start)
+ echo -n "Starting $NAME: "
+ for i in nf_conntrack_netlink nf_conntrack_netbios_ns nf_conntrack_proto_dccp nf_conntrack_tftp \
+ nf_conntrack_sane nf_conntrack_pptp nf_conntrack_irc nf_conntrack_amanda nf_conntrack_h323 \
+ nf_conntrack_proto_udplite nf_conntrack_proto_gre nf_conntrack_proto_sctp nf_conntrack_ftp \
+ nf_conntrack_sip; do
+ modprobe $i >/dev/null 2>/dev/null &
+ done
+ start-stop-daemon --start --quiet --make-pidfile --pidfile "/var/run/${NAME}.pid" --background --exec "${DAEMON}"
+ RET=$?
+ if [ "$?" = "0" ]; then
+ sleep 2
+ # Sync with other server
+ conntrackd -n
+ echo "done."
+ else
+ echo "FAILED!"
+ fi
+ exit $RET
+ ;;
+ stop)
+ echo -n "Stopping $NAME:"
+ start-stop-daemon --stop --quiet --oknodo --pidfile "/var/run/${NAME}.pid" && echo "done." || echo "FAILED!"
+ ;;
+ status)
+ echo -n "conntrackd "
+ start-stop-daemon -q -K -t -x $DAEMON
+ RET=$?
+ if [ "$RET" = "0" ]; then
+ PID=`cat $PIDFILE`
+ echo "($PID) is running"
+ else
+ echo "is not running"
+ exit $RET
+ fi
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/conntrackd {start|stop|restart}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0001-add-RARP-and-update-iana-url.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0001-add-RARP-and-update-iana-url.patch
new file mode 100644
index 000000000..90b69792b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0001-add-RARP-and-update-iana-url.patch
@@ -0,0 +1,45 @@
+From dd35afc9ce1004128a754d5eeb8c5c2cb32ae420 Mon Sep 17 00:00:00 2001
+From: Bart De Schuymer <bdschuym@pandora.be>
+Date: Tue, 3 Jul 2012 18:47:32 +0000
+Subject: [PATCH 01/10] add RARP and update iana url
+
+---
+ ethertypes | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/ethertypes b/ethertypes
+index 5e700f6..813177b 100644
+--- a/ethertypes
++++ b/ethertypes
+@@ -5,6 +5,7 @@
+ #
+ # This list could be found on:
+ # http://www.iana.org/assignments/ethernet-numbers
++# http://www.iana.org/assignments/ieee-802-numbers
+ #
+ # <name> <hexnumber> <alias1>...<alias35> #Comment
+ #
+@@ -21,15 +22,16 @@ LAT 6004 # DEC LAT
+ DIAG 6005 # DEC Diagnostics
+ CUST 6006 # DEC Customer use
+ SCA 6007 # DEC Systems Comms Arch
+-TEB 6558 # Trans Ether Bridging [RFC1701]
+-RAW_FR 6559 # Raw Frame Relay [RFC1701]
++TEB 6558 # Trans Ether Bridging [RFC1701]
++RAW_FR 6559 # Raw Frame Relay [RFC1701]
++RARP 8035 # Reverse ARP [RFC903]
+ AARP 80F3 # Appletalk AARP
+-ATALK 809B # Appletalk
++ATALK 809B # Appletalk
+ 802_1Q 8100 8021q 1q 802.1q dot1q # 802.1Q Virtual LAN tagged frame
+ IPX 8137 # Novell IPX
+ NetBEUI 8191 # NetBEUI
+ IPv6 86DD ip6 # IP version 6
+-PPP 880B # PPP
++PPP 880B # PPP
+ ATMMPOA 884C # MultiProtocol over ATM
+ PPP_DISC 8863 # PPPoE discovery messages
+ PPP_SES 8864 # PPPoE session messages
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0002-fix-compilation-warning.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0002-fix-compilation-warning.patch
new file mode 100644
index 000000000..87b0e9b87
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0002-fix-compilation-warning.patch
@@ -0,0 +1,25 @@
+From 2a5333fc8b4825251adfb717d980d89cefde38d6 Mon Sep 17 00:00:00 2001
+From: Petri Gynther <petri.gynther@gmail.com>
+Date: Sun, 24 Feb 2013 10:56:59 +0100
+Subject: [PATCH 02/10] fix compilation warning
+
+---
+ communication.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/communication.c b/communication.c
+index 62ed667..ba058c0 100644
+--- a/communication.c
++++ b/communication.c
+@@ -282,7 +282,7 @@ static int store_counters_in_file(char *filename, struct ebt_u_replace *repl)
+ }
+ close_file:
+ fclose(file);
+- return 0;
++ return ret;
+ }
+
+ /* Gets executed after ebt_deliver_table. Delivers the counters to the kernel
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0003-add-info-about-Wl-no-as-needed.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0003-add-info-about-Wl-no-as-needed.patch
new file mode 100644
index 000000000..c8573a464
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0003-add-info-about-Wl-no-as-needed.patch
@@ -0,0 +1,25 @@
+From a6faf3b50d6af4768b7b853cb536944fb18e1450 Mon Sep 17 00:00:00 2001
+From: Bart De Schuymer <bdschuym@pandora.be>
+Date: Wed, 3 Jul 2013 22:12:47 +0200
+Subject: [PATCH 03/10] add info about -Wl,-no-as-needed
+
+---
+ INSTALL | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/INSTALL b/INSTALL
+index 4a05c67..e90d5c1 100644
+--- a/INSTALL
++++ b/INSTALL
+@@ -39,6 +39,8 @@ That's all
+ You can also use a base directory different from the root directory (/),
+ using the DESTDIR option. See the Makefile for more details.
+
++You might need to set LDFLAGS=-Wl,-no-as-needed to build ebtables correctly
++on your system.
+
+ ADDITIONAL PROGRAMS:
+ ----------------------
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0004-workaround-for-kernel-regression-bug-IPv6-source-des.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0004-workaround-for-kernel-regression-bug-IPv6-source-des.patch
new file mode 100644
index 000000000..d8f2795bc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0004-workaround-for-kernel-regression-bug-IPv6-source-des.patch
@@ -0,0 +1,28 @@
+From b0617af37b8b1aafb43e8019135bea44c2d94c28 Mon Sep 17 00:00:00 2001
+From: Luis Fernando <tdthp@terra.com.br>
+Date: Wed, 3 Jul 2013 22:19:55 +0200
+Subject: [PATCH 04/10] workaround for kernel regression bug: IPv6
+ source/destination addresses are potentially not matched correctly
+
+---
+ extensions/ebt_ip6.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/extensions/ebt_ip6.c b/extensions/ebt_ip6.c
+index 0465e77..bbdc4ae 100644
+--- a/extensions/ebt_ip6.c
++++ b/extensions/ebt_ip6.c
+@@ -312,6 +312,10 @@ static void init(struct ebt_entry_match *match)
+
+ ipinfo->invflags = 0;
+ ipinfo->bitmask = 0;
++ memset(ipinfo->saddr.s6_addr, 0, sizeof(ipinfo->saddr.s6_addr));
++ memset(ipinfo->smsk.s6_addr, 0, sizeof(ipinfo->smsk.s6_addr));
++ memset(ipinfo->daddr.s6_addr, 0, sizeof(ipinfo->daddr.s6_addr));
++ memset(ipinfo->dmsk.s6_addr, 0, sizeof(ipinfo->dmsk.s6_addr));
+ }
+
+ #define OPT_SOURCE 0x01
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0005-Add-noflush-command-line-support-for-ebtables-restor.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0005-Add-noflush-command-line-support-for-ebtables-restor.patch
new file mode 100644
index 000000000..9585fd20e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0005-Add-noflush-command-line-support-for-ebtables-restor.patch
@@ -0,0 +1,75 @@
+From 15d3ab8a4a167dc44396b003d2ec01841949972f Mon Sep 17 00:00:00 2001
+From: Sanket Shah <sanket.shah@cyberoam.com>
+Date: Wed, 31 Jul 2013 21:40:08 +0200
+Subject: [PATCH 05/10] Add --noflush command line support for ebtables-restore
+
+---
+ ebtables-restore.c | 29 +++++++++++++++++++++++++----
+ 1 file changed, 25 insertions(+), 4 deletions(-)
+
+diff --git a/ebtables-restore.c b/ebtables-restore.c
+index ea02960..bb4d0cf 100644
+--- a/ebtables-restore.c
++++ b/ebtables-restore.c
+@@ -22,13 +22,25 @@
+ #include <string.h>
+ #include <errno.h>
+ #include <unistd.h>
++#include <getopt.h>
+ #include "include/ebtables_u.h"
+
++static const struct option options[] = {
++ {.name = "noflush", .has_arg = 0, .val = 'n'},
++ { 0 }
++};
++
+ static struct ebt_u_replace replace[3];
+ void ebt_early_init_once();
+
+ #define OPT_KERNELDATA 0x800 /* Also defined in ebtables.c */
+
++static void print_usage()
++{
++ fprintf(stderr, "Usage: ebtables-restore [ --noflush ]\n");
++ exit(1);
++}
++
+ static void copy_table_names()
+ {
+ strcpy(replace[0].name, "filter");
+@@ -41,11 +53,20 @@ static void copy_table_names()
+ int main(int argc_, char *argv_[])
+ {
+ char *argv[EBTD_ARGC_MAX], cmdline[EBTD_CMDLINE_MAXLN];
+- int i, offset, quotemode = 0, argc, table_nr = -1, line = 0, whitespace;
++ int i, offset, quotemode = 0, argc, table_nr = -1, line = 0, whitespace, c, flush = 1;
+ char ebtables_str[] = "ebtables";
+
+- if (argc_ != 1)
+- ebtrest_print_error("options are not supported");
++ while ((c = getopt_long(argc_, argv_, "n", options, NULL)) != -1) {
++ switch(c) {
++ case 'n':
++ flush = 0;
++ break;
++ default:
++ print_usage();
++ break;
++ }
++ }
++
+ ebt_silent = 0;
+ copy_table_names();
+ ebt_early_init_once();
+@@ -68,7 +89,7 @@ int main(int argc_, char *argv_[])
+ ebtrest_print_error("table '%s' was not recognized", cmdline+1);
+ table_nr = i;
+ replace[table_nr].command = 11;
+- ebt_get_kernel_table(&replace[table_nr], 1);
++ ebt_get_kernel_table(&replace[table_nr], flush);
+ replace[table_nr].command = 0;
+ replace[table_nr].flags = OPT_KERNELDATA; /* Prevent do_command from initialising replace */
+ continue;
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0006-don-t-print-IPv6-mask-if-it-s-all-ones-based-on-patc.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0006-don-t-print-IPv6-mask-if-it-s-all-ones-based-on-patc.patch
new file mode 100644
index 000000000..21f8e588d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0006-don-t-print-IPv6-mask-if-it-s-all-ones-based-on-patc.patch
@@ -0,0 +1,69 @@
+From 85a0f6d77a9d5c0e7ef7948395f0f6b1612dc987 Mon Sep 17 00:00:00 2001
+From: Bart De Schuymer <bdschuym@pandora.be>
+Date: Mon, 14 Apr 2014 22:04:55 +0200
+Subject: [PATCH 06/10] don't print IPv6 mask if it's all ones (based on patch
+ by Mariusz Mazur <mmazur at axeos.com>)
+
+---
+ extensions/ebt_ip6.c | 4 ++--
+ include/ebtables_u.h | 1 +
+ useful_functions.c | 13 +++++++++++++
+ 3 files changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/extensions/ebt_ip6.c b/extensions/ebt_ip6.c
+index bbdc4ae..e3e0956 100644
+--- a/extensions/ebt_ip6.c
++++ b/extensions/ebt_ip6.c
+@@ -449,14 +449,14 @@ static void print(const struct ebt_u_entry *entry,
+ if (ipinfo->invflags & EBT_IP6_SOURCE)
+ printf("! ");
+ printf("%s", ebt_ip6_to_numeric(&ipinfo->saddr));
+- printf("/%s ", ebt_ip6_to_numeric(&ipinfo->smsk));
++ printf("%s ", ebt_ip6_mask_to_string(&ipinfo->smsk));
+ }
+ if (ipinfo->bitmask & EBT_IP6_DEST) {
+ printf("--ip6-dst ");
+ if (ipinfo->invflags & EBT_IP6_DEST)
+ printf("! ");
+ printf("%s", ebt_ip6_to_numeric(&ipinfo->daddr));
+- printf("/%s ", ebt_ip6_to_numeric(&ipinfo->dmsk));
++ printf("%s ", ebt_ip6_mask_to_string(&ipinfo->dmsk));
+ }
+ if (ipinfo->bitmask & EBT_IP6_TCLASS) {
+ printf("--ip6-tclass ");
+diff --git a/include/ebtables_u.h b/include/ebtables_u.h
+index ab615c1..35a5bcc 100644
+--- a/include/ebtables_u.h
++++ b/include/ebtables_u.h
+@@ -303,6 +303,7 @@ char *ebt_mask_to_dotted(uint32_t mask);
+ void ebt_parse_ip6_address(char *address, struct in6_addr *addr,
+ struct in6_addr *msk);
+ char *ebt_ip6_to_numeric(const struct in6_addr *addrp);
++char *ebt_ip6_mask_to_string(const struct in6_addr *msk);
+
+
+ int do_command(int argc, char *argv[], int exec_style,
+diff --git a/useful_functions.c b/useful_functions.c
+index d20b68e..d14cbe9 100644
+--- a/useful_functions.c
++++ b/useful_functions.c
+@@ -411,3 +411,16 @@ char *ebt_ip6_to_numeric(const struct in6_addr *addrp)
+ static char buf[50+1];
+ return (char *)inet_ntop(AF_INET6, addrp, buf, sizeof(buf));
+ }
++
++char *ebt_ip6_mask_to_string(const struct in6_addr *msk)
++{
++ /* /0000:0000:0000:0000:0000:000.000.000.000
++ * /0000:0000:0000:0000:0000:0000:0000:0000 */
++ static char buf[51+1];
++ if (msk->s6_addr32[0] == 0xFFFFFFFFL && msk->s6_addr32[1] == 0xFFFFFFFFL &&
++ msk->s6_addr32[2] == 0xFFFFFFFFL && msk->s6_addr32[3] == 0xFFFFFFFFL)
++ *buf = '\0';
++ else
++ sprintf(buf, "/%s", ebt_ip6_to_numeric(msk));
++ return buf;
++}
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0007-extensions-Use-stdint-types.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0007-extensions-Use-stdint-types.patch
new file mode 100644
index 000000000..6fbe7df4c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0007-extensions-Use-stdint-types.patch
@@ -0,0 +1,67 @@
+From a60c7d4a6d05387aceb8ae9c38390d0f9bae84a2 Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sat, 16 May 2015 12:22:39 +0200
+Subject: [PATCH 07/10] extensions: Use stdint types
+
+Signed-off-by: Felix Janda <felix.janda@posteo.de>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ extensions/ebt_ip6.c | 4 ++--
+ extensions/ebt_limit.c | 10 +++++-----
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/extensions/ebt_ip6.c b/extensions/ebt_ip6.c
+index e3e0956..dd48547 100644
+--- a/extensions/ebt_ip6.c
++++ b/extensions/ebt_ip6.c
+@@ -53,8 +53,8 @@ static const struct option opts[] =
+
+ struct icmpv6_names {
+ const char *name;
+- u_int8_t type;
+- u_int8_t code_min, code_max;
++ uint8_t type;
++ uint8_t code_min, code_max;
+ };
+
+ static const struct icmpv6_names icmpv6_codes[] = {
+diff --git a/extensions/ebt_limit.c b/extensions/ebt_limit.c
+index ee40e5c..d189a09 100644
+--- a/extensions/ebt_limit.c
++++ b/extensions/ebt_limit.c
+@@ -59,11 +59,11 @@ static void print_help(void)
+ " default %u\n", EBT_LIMIT_BURST);
+ }
+
+-static int parse_rate(const char *rate, u_int32_t *val)
++static int parse_rate(const char *rate, uint32_t *val)
+ {
+ const char *delim;
+- u_int32_t r;
+- u_int32_t mult = 1; /* Seconds by default. */
++ uint32_t r;
++ uint32_t mult = 1; /* Seconds by default. */
+
+ delim = strchr(rate, '/');
+ if (delim) {
+@@ -151,7 +151,7 @@ static void final_check(const struct ebt_u_entry *entry,
+ struct rates
+ {
+ const char *name;
+- u_int32_t mult;
++ uint32_t mult;
+ };
+
+ static struct rates g_rates[] =
+@@ -162,7 +162,7 @@ static struct rates g_rates[] =
+ { "sec", EBT_LIMIT_SCALE }
+ };
+
+-static void print_rate(u_int32_t period)
++static void print_rate(uint32_t period)
+ {
+ unsigned int i;
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0008-ethernetdb.h-Remove-C-specific-compiler-hint-macro-_.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0008-ethernetdb.h-Remove-C-specific-compiler-hint-macro-_.patch
new file mode 100644
index 000000000..df3f52143
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0008-ethernetdb.h-Remove-C-specific-compiler-hint-macro-_.patch
@@ -0,0 +1,48 @@
+From 6ed23c8c2bc5efc3956e7bb6155afc8f45e6ae1a Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sat, 16 May 2015 12:31:58 +0200
+Subject: [PATCH 08/10] ethernetdb.h: Remove C++ specific compiler hint macro
+ _THROW
+
+Fixes compilation with musl libc
+
+Signed-off-by: Felix Janda <felix.janda@posteo.de>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ include/ethernetdb.h | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/include/ethernetdb.h b/include/ethernetdb.h
+index 46d8bfd..1683abe 100644
+--- a/include/ethernetdb.h
++++ b/include/ethernetdb.h
+@@ -38,21 +38,20 @@ struct ethertypeent {
+
+ /* Open ethertype data base files and mark them as staying open even
+ after a later search if STAY_OPEN is non-zero. */
+-extern void setethertypeent(int __stay_open) __THROW;
++extern void setethertypeent(int __stay_open);
+
+ /* Close ethertype data base files and clear `stay open' flag. */
+-extern void endethertypeent(void) __THROW;
++extern void endethertypeent(void);
+
+ /* Get next entry from ethertype data base file. Open data base if
+ necessary. */
+-extern struct ethertypeent *getethertypeent(void) __THROW;
++extern struct ethertypeent *getethertypeent(void);
+
+ /* Return entry from ethertype data base for network with NAME. */
+-extern struct ethertypeent *getethertypebyname(__const char *__name)
+- __THROW;
++extern struct ethertypeent *getethertypebyname(__const char *__name);
+
+ /* Return entry from ethertype data base which number is PROTO. */
+-extern struct ethertypeent *getethertypebynumber(int __ethertype) __THROW;
++extern struct ethertypeent *getethertypebynumber(int __ethertype);
+
+
+ #endif /* ethernetdb.h */
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0009-ebtables-Allow-RETURN-target-rules-in-user-defined-c.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0009-ebtables-Allow-RETURN-target-rules-in-user-defined-c.patch
new file mode 100644
index 000000000..248582c18
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0009-ebtables-Allow-RETURN-target-rules-in-user-defined-c.patch
@@ -0,0 +1,48 @@
+From e6b367c0c2668341c47242d099f4d2048ae575ef Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Alin=20N=C4=83stac?= <alin.nastac@gmail.com>
+Date: Thu, 22 Oct 2015 16:41:03 +0200
+Subject: [PATCH 09/10] ebtables: Allow RETURN target rules in user defined
+ chains
+
+During loop checking ebtables marks entries with '1 << NF_BR_NUMHOOKS' if
+they're called from a base chain rather than a user defined chain.
+
+This can be used by ebtables targets that can encode a special return
+value to bail out if e.g. RETURN is used from a base chain.
+
+Unfortunately, this is broken, since the '1 << NF_BR_NUMHOOKS' is also
+copied to called user-defined-chains (i.e., a user defined chain can no
+longer be distinguished from a base chain):
+
+root@OpenWrt:~# ebtables -N foo
+root@OpenWrt:~# ebtables -A OUTPUT -j foo
+root@OpenWrt:~# ebtables -A foo -j mark --mark-or 3 --mark-target RETURN
+--mark-target RETURN not allowed on base chain.
+
+This works if -A OUTPUT -j foo is omitted, but will still appear
+if we try to call foo from OUTPUT afterwards.
+
+After this patch we still reject
+'-A OUTPUT -j mark .. --mark-target RETURN'.
+
+Signed-off-by: Florian Westphal <fw@strlen.de>
+---
+ libebtc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libebtc.c b/libebtc.c
+index 17ba8f2..74830ec 100644
+--- a/libebtc.c
++++ b/libebtc.c
+@@ -1102,7 +1102,7 @@ void ebt_check_for_loops(struct ebt_u_replace *replace)
+ /* check if we've dealt with this chain already */
+ if (entries2->hook_mask & (1<<i))
+ goto letscontinue;
+- entries2->hook_mask |= entries->hook_mask;
++ entries2->hook_mask |= entries->hook_mask & ~(1 << NF_BR_NUMHOOKS);
+ /* Jump to the chain, make sure we know how to get back */
+ stack[sp].chain_nr = chain_nr;
+ stack[sp].n = j;
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0010-Adjust-header-include-sequence.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0010-Adjust-header-include-sequence.patch
new file mode 100644
index 000000000..a6ef9cd09
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/0010-Adjust-header-include-sequence.patch
@@ -0,0 +1,216 @@
+From b7cee37734007fced7a4d5ed586c3a9e5ad92878 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 26 Mar 2017 13:12:21 -0700
+Subject: [PATCH 10/10] Adjust header include sequence
+
+This fixes the build with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ extensions/ebt_among.c | 2 +-
+ extensions/ebt_arpreply.c | 2 +-
+ extensions/ebt_nat.c | 2 +-
+ include/linux/if_ether.h | 126 ----------------------------------------------
+ useful_functions.c | 4 +-
+ 5 files changed, 5 insertions(+), 131 deletions(-)
+ delete mode 100644 include/linux/if_ether.h
+
+diff --git a/extensions/ebt_among.c b/extensions/ebt_among.c
+index f97d07e..b096847 100644
+--- a/extensions/ebt_among.c
++++ b/extensions/ebt_among.c
+@@ -12,8 +12,8 @@
+ #include <getopt.h>
+ #include <ctype.h>
+ #include <unistd.h>
+-#include "../include/ebtables_u.h"
+ #include <netinet/ether.h>
++#include "../include/ebtables_u.h"
+ #include "../include/ethernetdb.h"
+ #include <linux/if_ether.h>
+ #include <linux/netfilter_bridge/ebt_among.h>
+diff --git a/extensions/ebt_arpreply.c b/extensions/ebt_arpreply.c
+index c3757f3..c5102a4 100644
+--- a/extensions/ebt_arpreply.c
++++ b/extensions/ebt_arpreply.c
+@@ -11,8 +11,8 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <getopt.h>
+-#include "../include/ebtables_u.h"
+ #include <netinet/ether.h>
++#include "../include/ebtables_u.h"
+ #include <linux/netfilter_bridge/ebt_arpreply.h>
+
+ static int mac_supplied;
+diff --git a/extensions/ebt_nat.c b/extensions/ebt_nat.c
+index e6afbf8..8d318d1 100644
+--- a/extensions/ebt_nat.c
++++ b/extensions/ebt_nat.c
+@@ -10,8 +10,8 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <getopt.h>
+-#include "../include/ebtables_u.h"
+ #include <netinet/ether.h>
++#include "../include/ebtables_u.h"
+ #include <linux/netfilter_bridge/ebt_nat.h>
+
+ static int to_source_supplied, to_dest_supplied;
+diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
+deleted file mode 100644
+index 28a15ff..0000000
+--- a/include/linux/if_ether.h
++++ /dev/null
+@@ -1,126 +0,0 @@
+-/*
+- * INET An implementation of the TCP/IP protocol suite for the LINUX
+- * operating system. INET is implemented using the BSD Socket
+- * interface as the means of communication with the user level.
+- *
+- * Global definitions for the Ethernet IEEE 802.3 interface.
+- *
+- * Version: @(#)if_ether.h 1.0.1a 02/08/94
+- *
+- * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
+- * Donald Becker, <becker@super.org>
+- * Alan Cox, <alan@lxorguk.ukuu.org.uk>
+- * Steve Whitehouse, <gw7rrm@eeshack3.swan.ac.uk>
+- *
+- * 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.
+- */
+-
+-#ifndef _LINUX_IF_ETHER_H
+-#define _LINUX_IF_ETHER_H
+-
+-#include <linux/types.h>
+-
+-/*
+- * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble
+- * and FCS/CRC (frame check sequence).
+- */
+-
+-#define ETH_ALEN 6 /* Octets in one ethernet addr */
+-#define ETH_HLEN 14 /* Total octets in header. */
+-#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */
+-#define ETH_DATA_LEN 1500 /* Max. octets in payload */
+-#define ETH_FRAME_LEN 1514 /* Max. octets in frame sans FCS */
+-#define ETH_FCS_LEN 4 /* Octets in the FCS */
+-
+-/*
+- * These are the defined Ethernet Protocol ID's.
+- */
+-
+-#define ETH_P_LOOP 0x0060 /* Ethernet Loopback packet */
+-#define ETH_P_PUP 0x0200 /* Xerox PUP packet */
+-#define ETH_P_PUPAT 0x0201 /* Xerox PUP Addr Trans packet */
+-#define ETH_P_IP 0x0800 /* Internet Protocol packet */
+-#define ETH_P_X25 0x0805 /* CCITT X.25 */
+-#define ETH_P_ARP 0x0806 /* Address Resolution packet */
+-#define ETH_P_BPQ 0x08FF /* G8BPQ AX.25 Ethernet Packet [ NOT AN OFFICIALLY REGISTERED ID ] */
+-#define ETH_P_IEEEPUP 0x0a00 /* Xerox IEEE802.3 PUP packet */
+-#define ETH_P_IEEEPUPAT 0x0a01 /* Xerox IEEE802.3 PUP Addr Trans packet */
+-#define ETH_P_DEC 0x6000 /* DEC Assigned proto */
+-#define ETH_P_DNA_DL 0x6001 /* DEC DNA Dump/Load */
+-#define ETH_P_DNA_RC 0x6002 /* DEC DNA Remote Console */
+-#define ETH_P_DNA_RT 0x6003 /* DEC DNA Routing */
+-#define ETH_P_LAT 0x6004 /* DEC LAT */
+-#define ETH_P_DIAG 0x6005 /* DEC Diagnostics */
+-#define ETH_P_CUST 0x6006 /* DEC Customer use */
+-#define ETH_P_SCA 0x6007 /* DEC Systems Comms Arch */
+-#define ETH_P_TEB 0x6558 /* Trans Ether Bridging */
+-#define ETH_P_RARP 0x8035 /* Reverse Addr Res packet */
+-#define ETH_P_ATALK 0x809B /* Appletalk DDP */
+-#define ETH_P_AARP 0x80F3 /* Appletalk AARP */
+-#define ETH_P_8021Q 0x8100 /* 802.1Q VLAN Extended Header */
+-#define ETH_P_IPX 0x8137 /* IPX over DIX */
+-#define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */
+-#define ETH_P_PAUSE 0x8808 /* IEEE Pause frames. See 802.3 31B */
+-#define ETH_P_SLOW 0x8809 /* Slow Protocol. See 802.3ad 43B */
+-#define ETH_P_WCCP 0x883E /* Web-cache coordination protocol
+- * defined in draft-wilson-wrec-wccp-v2-00.txt */
+-#define ETH_P_PPP_DISC 0x8863 /* PPPoE discovery messages */
+-#define ETH_P_PPP_SES 0x8864 /* PPPoE session messages */
+-#define ETH_P_MPLS_UC 0x8847 /* MPLS Unicast traffic */
+-#define ETH_P_MPLS_MC 0x8848 /* MPLS Multicast traffic */
+-#define ETH_P_ATMMPOA 0x884c /* MultiProtocol Over ATM */
+-#define ETH_P_LINK_CTL 0x886c /* HPNA, wlan link local tunnel */
+-#define ETH_P_ATMFATE 0x8884 /* Frame-based ATM Transport
+- * over Ethernet
+- */
+-#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */
+-#define ETH_P_AOE 0x88A2 /* ATA over Ethernet */
+-#define ETH_P_TIPC 0x88CA /* TIPC */
+-#define ETH_P_1588 0x88F7 /* IEEE 1588 Timesync */
+-#define ETH_P_FCOE 0x8906 /* Fibre Channel over Ethernet */
+-#define ETH_P_FIP 0x8914 /* FCoE Initialization Protocol */
+-#define ETH_P_EDSA 0xDADA /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
+-
+-/*
+- * Non DIX types. Won't clash for 1500 types.
+- */
+-
+-#define ETH_P_802_3 0x0001 /* Dummy type for 802.3 frames */
+-#define ETH_P_AX25 0x0002 /* Dummy protocol id for AX.25 */
+-#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */
+-#define ETH_P_802_2 0x0004 /* 802.2 frames */
+-#define ETH_P_SNAP 0x0005 /* Internal only */
+-#define ETH_P_DDCMP 0x0006 /* DEC DDCMP: Internal only */
+-#define ETH_P_WAN_PPP 0x0007 /* Dummy type for WAN PPP frames*/
+-#define ETH_P_PPP_MP 0x0008 /* Dummy type for PPP MP frames */
+-#define ETH_P_LOCALTALK 0x0009 /* Localtalk pseudo type */
+-#define ETH_P_CAN 0x000C /* Controller Area Network */
+-#define ETH_P_PPPTALK 0x0010 /* Dummy type for Atalk over PPP*/
+-#define ETH_P_TR_802_2 0x0011 /* 802.2 frames */
+-#define ETH_P_MOBITEX 0x0015 /* Mobitex (kaz@cafe.net) */
+-#define ETH_P_CONTROL 0x0016 /* Card specific control frames */
+-#define ETH_P_IRDA 0x0017 /* Linux-IrDA */
+-#define ETH_P_ECONET 0x0018 /* Acorn Econet */
+-#define ETH_P_HDLC 0x0019 /* HDLC frames */
+-#define ETH_P_ARCNET 0x001A /* 1A for ArcNet :-) */
+-#define ETH_P_DSA 0x001B /* Distributed Switch Arch. */
+-#define ETH_P_TRAILER 0x001C /* Trailer switch tagging */
+-#define ETH_P_PHONET 0x00F5 /* Nokia Phonet frames */
+-#define ETH_P_IEEE802154 0x00F6 /* IEEE802.15.4 frame */
+-#define ETH_P_CAIF 0x00F7 /* ST-Ericsson CAIF protocol */
+-
+-/*
+- * This is an Ethernet frame header.
+- */
+-
+-struct ethhdr {
+- unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
+- unsigned char h_source[ETH_ALEN]; /* source ether addr */
+- __be16 h_proto; /* packet type ID field */
+-} __attribute__((packed));
+-
+-
+-#endif /* _LINUX_IF_ETHER_H */
+diff --git a/useful_functions.c b/useful_functions.c
+index d14cbe9..c304f4d 100644
+--- a/useful_functions.c
++++ b/useful_functions.c
+@@ -22,8 +22,6 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+-#include "include/ebtables_u.h"
+-#include "include/ethernetdb.h"
+ #include <stdio.h>
+ #include <netinet/ether.h>
+ #include <string.h>
+@@ -33,6 +31,8 @@
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <arpa/inet.h>
++#include "include/ebtables_u.h"
++#include "include/ethernetdb.h"
+
+ const unsigned char mac_type_unicast[ETH_ALEN] = {0,0,0,0,0,0};
+ const unsigned char msk_type_unicast[ETH_ALEN] = {1,0,0,0,0,0};
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/01debian_defaultconfig.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/01debian_defaultconfig.patch
new file mode 100644
index 000000000..c260403ea
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/01debian_defaultconfig.patch
@@ -0,0 +1,50 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## debian_defaultconfig.dpatch by <hesso@pool.math.tu-berlin.de>
+##
+## DP: Debian enhancements to the ebtables "sysconfig" default settings.
+
+@DPATCH@
+
+--- ebtables-2.0.8.1.orig/ebtables-config
++++ ebtables-2.0.8.1/ebtables-config
+@@ -1,17 +1,3 @@
+-# Save (and possibly restore) in text format.
+-# Value: yes|no, default: yes
+-# Save the firewall rules in text format to __SYSCONFIG__/ebtables
+-# If EBTABLES_BINARY_FORMAT="no" then restoring the firewall rules
+-# is done using this text format.
+-EBTABLES_TEXT_FORMAT="yes"
+-
+-# Save (and restore) in binary format.
+-# Value: yes|no, default: yes
+-# Save (and restore) the firewall rules in binary format to (and from)
+-# __SYSCONFIG__/ebtables.<chain>. Enabling this option will make
+-# firewall initialisation a lot faster.
+-EBTABLES_BINARY_FORMAT="yes"
+-
+ # Unload modules on restart and stop
+ # Value: yes|no, default: yes
+ # This option has to be 'yes' to get to a sane state for a firewall
+@@ -19,6 +5,12 @@
+ # modules.
+ EBTABLES_MODULES_UNLOAD="yes"
+
++# Load firewall rules on system startup.
++# Value: yes|no, default: no
++# Restores the ebtables rulesets from the last saved state when the
++# system boots up.
++EBTABLES_LOAD_ON_START="no"
++
+ # Save current firewall rules on stop.
+ # Value: yes|no, default: no
+ # Saves all firewall rules if firewall gets stopped
+@@ -35,3 +27,9 @@
+ # Save rule counters when saving a kernel table to a file. If the
+ # rule counters were saved, they will be restored when restoring the table.
+ EBTABLES_SAVE_COUNTER="no"
++
++# Backup suffix for ruleset save files.
++# Value: <string>, default: "~"
++# Keep one backup level of saved rules.
++# Set this variable to the empty string to disable backups.
++EBTABLES_BACKUP_SUFFIX="~"
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables-save b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables-save
new file mode 100755
index 000000000..2d7fc4ed7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables-save
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+EBTABLES="/sbin/ebtables"
+
+[ -x "$EBTABLES" ] || exit 1
+
+echo "# Generated by ebtables-save v1.0 on $(date)"
+
+cnt=""
+[ "x$EBTABLES_SAVE_COUNTER" = "xyes" ] && cnt="--Lc"
+
+for table_name in $(grep -E '^ebtable_' /proc/modules | cut -f1 -d' ' | sed s/ebtable_//); do
+ table=$($EBTABLES -t $table_name -L $cnt)
+ [ $? -eq 0 ] || { echo "$table"; exit -1; }
+
+ chain=""
+ rules=""
+ while read line; do
+ [ -z "$line" ] && continue
+
+ case "$line" in
+ Bridge\ table:\ *)
+ echo "*${line:14}"
+ ;;
+ Bridge\ chain:\ *)
+ chain="${line:14}"
+ chain="${chain%%,*}"
+ policy="${line##*policy: }"
+ echo ":$chain $policy"
+ ;;
+ *)
+ if [ "$cnt" = "--Lc" ]; then
+ line=${line/, pcnt \=/ -c}
+ line=${line/-- bcnt \=/}
+ fi
+ rules="$rules-A $chain $line\n"
+ ;;
+ esac
+ done <<EOF
+$table
+EOF
+ echo -e $rules
+done
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.common b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.common
new file mode 100644
index 000000000..1ae18fed3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.common
@@ -0,0 +1,163 @@
+#!/bin/sh
+
+[ -x /sbin/ebtables ] || exit 1
+
+EBTABLES_DUMPFILE_STEM=/etc/ebtables/dump
+
+RETVAL=0
+prog="ebtables"
+desc="Ethernet bridge filtering"
+umask 0077
+
+#default configuration
+EBTABLES_MODULES_UNLOAD="yes"
+EBTABLES_LOAD_ON_START="no"
+EBTABLES_SAVE_ON_STOP="no"
+EBTABLES_SAVE_ON_RESTART="no"
+EBTABLES_SAVE_COUNTER="no"
+EBTABLES_BACKUP_SUFFIX="~"
+
+config=/etc/default/$prog
+[ -f "$config" ] && . "$config"
+
+get_supported_tables() {
+ EBTABLES_SUPPORTED_TABLES=
+ /sbin/ebtables -t filter -L 2>&1 1>/dev/null | grep -q permission
+ if [ $? -eq 0 ]; then
+ echo "Error: insufficient privileges to access the ebtables rulesets."
+ exit 1
+ fi
+ for table in filter nat broute; do
+ /sbin/ebtables -t $table -L &> /dev/null
+ if [ $? -eq 0 ]; then
+ EBTABLES_SUPPORTED_TABLES="${EBTABLES_SUPPORTED_TABLES} $table"
+ fi
+ done
+}
+
+load() {
+ RETVAL=0
+ get_supported_tables
+ echo -n "Restoring ebtables rulesets: "
+ for table in $EBTABLES_SUPPORTED_TABLES; do
+ echo -n "$table "
+ if [ -s ${EBTABLES_DUMPFILE_STEM}.$table ]; then
+ /sbin/ebtables -t $table --atomic-file ${EBTABLES_DUMPFILE_STEM}.$table --atomic-commit
+ RET=$?
+ if [ $RET -ne 0 ]; then
+ echo -n "(failed) "
+ RETVAL=$RET
+ fi
+ else
+ echo -n "(no saved state) "
+ fi
+ done
+ if [ -z "$EBTABLES_SUPPORTED_TABLES" ]; then
+ echo -n "no kernel support. "
+ else
+ echo -n "done. "
+ fi
+ if [ $RETVAL -eq 0 ]; then
+ echo "ok"
+ else
+ echo "fail"
+ fi
+}
+
+clear_rules() {
+ RETVAL=0
+ get_supported_tables
+ echo -n "Clearing ebtables rulesets: "
+ for table in $EBTABLES_SUPPORTED_TABLES; do
+ echo -n "$table "
+ /sbin/ebtables -t $table --init-table
+ done
+
+ if [ "$EBTABLES_MODULES_UNLOAD" = "yes" ]; then
+ for mod in $(grep -E '^(ebt|ebtable)_' /proc/modules | cut -d' ' -f1) ebtables; do
+ rmmod $mod 2> /dev/null
+ done
+ fi
+ if [ -z "$EBTABLES_SUPPORTED_TABLES" ]; then
+ echo -n "no kernel support. "
+ else
+ echo -n "done. "
+ fi
+ if [ $RETVAL -eq 0 ]; then
+ echo "ok"
+ else
+ echo "fail"
+ fi
+}
+
+save() {
+ RETVAL=0
+ get_supported_tables
+ echo -n "Saving ebtables rulesets: "
+ for table in $EBTABLES_SUPPORTED_TABLES; do
+ echo -n "$table "
+ [ -n "$EBTABLES_BACKUP_SUFFIX" ] && [ -s ${EBTABLES_DUMPFILE_STEM}.$table ] && \
+ mv ${EBTABLES_DUMPFILE_STEM}.$table ${EBTABLES_DUMPFILE_STEM}.$table$EBTABLES_BACKUP_SUFFIX
+ /sbin/ebtables -t $table --atomic-file ${EBTABLES_DUMPFILE_STEM}.$table --atomic-save
+ RET=$?
+ if [ $RET -ne 0 ]; then
+ echo -n "(failed) "
+ RETVAL=$RET
+ else
+ if [ "$EBTABLES_SAVE_COUNTER" = "no" ]; then
+ /sbin/ebtables -t $table --atomic-file ${EBTABLES_DUMPFILE_STEM}.$table -Z
+ fi
+ fi
+ done
+ if [ -z "$EBTABLES_SUPPORTED_TABLES" ]; then
+ echo -n "no kernel support. "
+ else
+ echo -n "done. "
+ fi
+ if [ $RETVAL -eq 0 ]; then
+ echo "ok"
+ else
+ echo "fail"
+ fi
+}
+
+case "$1" in
+ start)
+ [ "$EBTABLES_LOAD_ON_START" = "yes" ] && load
+ ;;
+ stop)
+ [ "$EBTABLES_SAVE_ON_STOP" = "yes" ] && save
+ clear_rules
+ ;;
+ restart|reload|force-reload)
+ [ "$EBTABLES_SAVE_ON_RESTART" = "yes" ] && save
+ clear_rules
+ [ "$EBTABLES_LOAD_ON_START" = "yes" ] && load
+ ;;
+ load)
+ load
+ ;;
+ save)
+ save
+ ;;
+ status)
+ get_supported_tables
+ if [ -z "$EBTABLES_SUPPORTED_TABLES" ]; then
+ echo "No kernel support for ebtables."
+ RETVAL=1
+ else
+ echo -n "Ebtables support available, number of installed rules: "
+ for table in $EBTABLES_SUPPORTED_TABLES; do
+ COUNT=$(( $(/sbin/ebtables -t $table -L | sed -e "/^Bridge chain/! d" -e "s/^.*entries: //" -e "s/,.*$/ +/") 0 ))
+ echo -n "$table($COUNT) "
+ done
+ echo ok
+ RETVAL=0
+ fi
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|reload|force-reload|load|save|status}" >&2
+ RETVAL=1
+esac
+
+exit $RETVAL
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.init b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.init
new file mode 100755
index 000000000..c9a77a29e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.init
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# init script for the Ethernet Bridge filter tables
+#
+# Written by Dag Wieers <dag@wieers.com>
+# Modified by Rok Papez <rok.papez@arnes.si>
+# Bart De Schuymer <bdschuym@pandora.be>
+# Adapted to Debian by Jan Christoph Nordholz <hesso@pool.math.tu-berlin.de>
+# Adapted to OpenEmbedded by Roman I Khimov <khimov@altell.ru>
+#
+# chkconfig: - 15 85
+# description: Ethernet Bridge filtering tables
+#
+### BEGIN INIT INFO
+# Provides: ebtables
+# Required-Start:
+# Required-Stop:
+# Should-Start: $local_fs
+# Should-Stop: $local_fs
+# Default-Start: S
+# Default-Stop: 0 6
+# Short-Description: ebtables ruleset management
+# Description: Saves and restores the state of the ebtables rulesets.
+### END INIT INFO
+
+/usr/sbin/ebtables.common $1
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.service b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.service
new file mode 100644
index 000000000..3abd1fe3e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/ebtables.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Ethernet Bridge Filtering Tables
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=@SBINDIR@/ebtables.common start
+ExecStop=@SBINDIR@/ebtables.common stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/installnonroot.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/installnonroot.patch
new file mode 100644
index 000000000..bcd9bed23
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/installnonroot.patch
@@ -0,0 +1,43 @@
+diff --git a/Makefile b/Makefile
+index c1106a4..7ea6b7a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -157,31 +157,31 @@ tmp3:=$(shell printf $(PIPE) | sed 's/\//\\\//g')
+ scripts: ebtables-save ebtables.sysv ebtables-config
+ cat ebtables-save | sed 's/__EXEC_PATH__/$(tmp1)/g' > ebtables-save_
+ mkdir -p $(DESTDIR)$(BINDIR)
+- install -m 0755 -o root -g root ebtables-save_ $(DESTDIR)$(BINDIR)/ebtables-save
++ install -m 0755 ebtables-save_ $(DESTDIR)$(BINDIR)/ebtables-save
+ cat ebtables.sysv | sed 's/__EXEC_PATH__/$(tmp1)/g' | sed 's/__SYSCONFIG__/$(tmp2)/g' > ebtables.sysv_
+ if [ "$(DESTDIR)" != "" ]; then mkdir -p $(DESTDIR)$(INITDIR); fi
+- if test -d $(DESTDIR)$(INITDIR); then install -m 0755 -o root -g root ebtables.sysv_ $(DESTDIR)$(INITDIR)/ebtables; fi
++ if test -d $(DESTDIR)$(INITDIR); then install -m 0755 ebtables.sysv_ $(DESTDIR)$(INITDIR)/ebtables; fi
+ cat ebtables-config | sed 's/__SYSCONFIG__/$(tmp2)/g' > ebtables-config_
+ if [ "$(DESTDIR)" != "" ]; then mkdir -p $(DESTDIR)$(SYSCONFIGDIR); fi
+- if test -d $(DESTDIR)$(SYSCONFIGDIR); then install -m 0600 -o root -g root ebtables-config_ $(DESTDIR)$(SYSCONFIGDIR)/ebtables-config; fi
++ if test -d $(DESTDIR)$(SYSCONFIGDIR); then install -m 0600 ebtables-config_ $(DESTDIR)$(SYSCONFIGDIR)/ebtables-config; fi
+ rm -f ebtables-save_ ebtables.sysv_ ebtables-config_
+
+ tmp4:=$(shell printf $(LOCKFILE) | sed 's/\//\\\//g')
+ $(MANDIR)/man8/ebtables.8: ebtables.8
+ mkdir -p $(DESTDIR)$(@D)
+ sed -e 's/$$(VERSION)/$(PROGVERSION)/' -e 's/$$(DATE)/$(PROGDATE)/' -e 's/$$(LOCKFILE)/$(tmp4)/' ebtables.8 > ebtables.8_
+- install -m 0644 -o root -g root ebtables.8_ $(DESTDIR)$@
++ install -m 0644 ebtables.8_ $(DESTDIR)$@
+ rm -f ebtables.8_
+
+ $(DESTDIR)$(ETHERTYPESFILE): ethertypes
+ mkdir -p $(@D)
+- install -m 0644 -o root -g root $< $@
++ install -m 0644 $< $@
+
+ .PHONY: exec
+ exec: ebtables ebtables-restore
+ mkdir -p $(DESTDIR)$(BINDIR)
+- install -m 0755 -o root -g root $(PROGNAME) $(DESTDIR)$(BINDIR)/$(PROGNAME)
+- install -m 0755 -o root -g root ebtables-restore $(DESTDIR)$(BINDIR)/ebtables-restore
++ install -m 0755 $(PROGNAME) $(DESTDIR)$(BINDIR)/$(PROGNAME)
++ install -m 0755 ebtables-restore $(DESTDIR)$(BINDIR)/ebtables-restore
+
+ .PHONY: install
+ install: $(MANDIR)/man8/ebtables.8 $(DESTDIR)$(ETHERTYPESFILE) exec scripts
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/no-as-needed.patch b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/no-as-needed.patch
new file mode 100644
index 000000000..336119d6b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables-2.0.10-4/no-as-needed.patch
@@ -0,0 +1,25 @@
+link ebtables with --no-as-needed and adjust the link order to fix runtime crash
+
+Program terminated with signal 11, Segmentation fault.
+#0 0x00007ffaa837fb53 in ebt_initialize_entry () from /lib64/ebtables/libebtc.so
+(gdb) bt
+#0 0x00007ffaa837fb53 in ebt_initialize_entry () from /lib64/ebtables/libebtc.so
+#1 0x00007ffaa83824dc in do_command () from /lib64/ebtables/libebtc.so
+#2 0x000000000040065c in ?? ()
+#3 0x00007ffaa7fed755 in __libc_start_main () from /lib64/libc.so.6
+#4 0x0000000000400691 in ?? ()
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: ebtables-v2.0.10-4/Makefile
+===================================================================
+--- ebtables-v2.0.10-4.orig/Makefile 2011-12-15 12:02:47.000000000 -0800
++++ ebtables-v2.0.10-4/Makefile 2012-12-17 22:09:45.065973753 -0800
+@@ -90,7 +90,7 @@
+ $(CC) -shared $(LDFLAGS) -Wl,-soname,libebtc.so -o libebtc.so -lc $(OBJECTS2)
+
+ ebtables: $(OBJECTS) ebtables-standalone.o libebtc.so
+- $(CC) $(CFLAGS) $(CFLAGS_SH_LIB) $(LDFLAGS) -o $@ ebtables-standalone.o -I$(KERNEL_INCLUDES) -L. -Lextensions -lebtc $(EXT_LIBSI) \
++ $(CC) $(CFLAGS) $(CFLAGS_SH_LIB) $(LDFLAGS) -o $@ ebtables-standalone.o -I$(KERNEL_INCLUDES) -L. -Lextensions -Wl,--no-as-needed $(EXT_LIBSI) -lebtc \
+ -Wl,-rpath,$(LIBDIR)
+
+ ebtablesu: ebtablesu.c
diff --git a/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
new file mode 100644
index 000000000..b9dce69ba
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/ebtables/ebtables_2.0.10-4.bb
@@ -0,0 +1,103 @@
+SUMMARY = "Filtering tool for a Linux-based bridging firewall"
+HOMEPAGE = "http://sourceforge.net/projects/ebtables/"
+DESCRIPTION = "Utility for basic Ethernet frame filtering on a Linux bridge, \
+ advanced logging, MAC DNAT/SNAT and brouting."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=53b4a999993871a28ab1488fdbd2e73e"
+SECTION = "net"
+PR = "r4"
+
+RDEPENDS_${PN} += "bash"
+
+RRECOMMENDS_${PN} += "kernel-module-ebtables \
+ "
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ebtables/ebtables-v${PV}.tar.gz \
+ file://ebtables-save \
+ file://installnonroot.patch \
+ file://01debian_defaultconfig.patch \
+ file://ebtables.init \
+ file://ebtables.common \
+ file://ebtables.service \
+ file://no-as-needed.patch \
+ file://0001-add-RARP-and-update-iana-url.patch \
+ file://0002-fix-compilation-warning.patch \
+ file://0003-add-info-about-Wl-no-as-needed.patch \
+ file://0004-workaround-for-kernel-regression-bug-IPv6-source-des.patch \
+ file://0005-Add-noflush-command-line-support-for-ebtables-restor.patch \
+ file://0006-don-t-print-IPv6-mask-if-it-s-all-ones-based-on-patc.patch \
+ file://0007-extensions-Use-stdint-types.patch \
+ file://0008-ethernetdb.h-Remove-C-specific-compiler-hint-macro-_.patch \
+ file://0009-ebtables-Allow-RETURN-target-rules-in-user-defined-c.patch \
+ "
+
+SRC_URI_append_libc-musl = " file://0010-Adjust-header-include-sequence.patch"
+
+SRC_URI[md5sum] = "506742a3d44b9925955425a659c1a8d0"
+SRC_URI[sha256sum] = "dc6f7b484f207dc712bfca81645f45120cb6aee3380e77a1771e9c34a9a4455d"
+
+S = "${WORKDIR}/ebtables-v${PV}"
+
+inherit update-rc.d systemd
+
+python __anonymous () {
+ import re
+
+ karch = d.getVar('TARGET_ARCH')
+ multilib = d.getVar('MLPREFIX')
+
+ if multilib and ( karch == 'powerpc64' or karch == 'arm' ):
+ searchstr = "lib.?32"
+ reg = re.compile(searchstr)
+ if reg.search(multilib):
+ d.appendVar('CFLAGS' ,' -DKERNEL_64_USERSPACE_32 -DEBT_MIN_ALIGN=8')
+}
+
+EXTRA_OEMAKE = " \
+ BINDIR=${base_sbindir} \
+ MANDIR=${mandir} \
+ ETHERTYPESPATH=${sysconfdir} \
+ INITDIR=${sysconfdir}/init.d \
+ SYSCONFIGDIR=${sysconfdir}/default \
+ LIBDIR=${base_libdir}/ebtables \
+ 'CC=${CC}' \
+ 'CFLAGS=${CFLAGS}' \
+ 'LDFLAGS=${LDFLAGS} -Wl,--no-as-needed' \
+ 'LD=${LD}' \
+"
+
+do_install () {
+ install -d ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/ebtables.common ${D}${sbindir}/ebtables.common
+ # Fix hardcoded paths in scripts
+ sed -i 's!/sbin/!${base_sbindir}/!g' ${D}${sbindir}/ebtables.common
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sbindir}/ebtables.common
+
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/default
+ install -d ${D}${sysconfdir}/ebtables
+ oe_runmake DESTDIR='${D}' install
+ install -m 0755 ${WORKDIR}/ebtables.init ${D}/${sysconfdir}/init.d/ebtables
+ mv ${D}${sysconfdir}/default/ebtables-config ${D}${sysconfdir}/default/ebtables
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/ebtables
+
+ # Replace upstream ebtables-save perl script with Fedora bash based rewrite
+ # http://pkgs.fedoraproject.org/cgit/rpms/ebtables.git/tree/ebtables-save
+ install -m 0755 ${WORKDIR}/ebtables-save ${D}${base_sbindir}/ebtables-save
+ sed -i 's!/sbin/!${base_sbindir}/!g' ${D}${base_sbindir}/ebtables-save
+
+ # Install systemd service files
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/ebtables.service ${D}${systemd_unitdir}/system
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/ebtables.service
+}
+
+CONFFILES_${PN} += "${sysconfdir}/default/ebtables"
+
+INITSCRIPT_NAME = "ebtables"
+INITSCRIPT_PARAMS = "start 41 S . stop 41 6 ."
+
+SYSTEMD_SERVICE_${PN} = "ebtables.service"
+
+FILES_${PN}-dbg += "${base_libdir}/ebtables/.debug"
+FILES_${PN} += "${base_libdir}/ebtables/*.so"
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-Correct-typo-in-the-location-of-internal.h-in-includ.patch b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-Correct-typo-in-the-location-of-internal.h-in-includ.patch
new file mode 100644
index 000000000..76d2d5d28
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-Correct-typo-in-the-location-of-internal.h-in-includ.patch
@@ -0,0 +1,26 @@
+From 32af64e1811c74292891dc4dc8455736f7d33ccf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 30 Mar 2017 13:26:56 -0700
+Subject: [PATCH] Correct typo in the location of internal.h in #include
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/libnetfilter_queue.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/libnetfilter_queue.c b/src/libnetfilter_queue.c
+index 211a8ba..065d618 100644
+--- a/src/libnetfilter_queue.c
++++ b/src/libnetfilter_queue.c
+@@ -32,7 +32,7 @@
+
+ #include <libnfnetlink/libnfnetlink.h>
+ #include <libnetfilter_queue/libnetfilter_queue.h>
+-#include "src/internal.h"
++#include "internal.h"
+
+ /**
+ * \mainpage
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-acct-Declare-the-define-visivility-attribute-together.patch b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-acct-Declare-the-define-visivility-attribute-together.patch
new file mode 100644
index 000000000..9e0b420e0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-acct-Declare-the-define-visivility-attribute-together.patch
@@ -0,0 +1,255 @@
+From f3e3e8fa703e88b76b22c5486277dfca3c85a24b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 10 Apr 2017 14:56:18 -0700
+Subject: [PATCH] Declare the define visivility attribute together
+
+clang ignores the visibility attribute if its not
+defined before the definition. As a result these
+symbols become hidden and consumers of this library
+fail to link due to these missing symbols
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ doxygen.cfg.in | 2 +-
+ src/internal.h | 5 ++---
+ src/libnetfilter_acct.c | 41 ++++++++++++++---------------------------
+ 3 files changed, 17 insertions(+), 31 deletions(-)
+
+diff --git a/doxygen.cfg.in b/doxygen.cfg.in
+index 7f4bd04..fe64d48 100644
+--- a/doxygen.cfg.in
++++ b/doxygen.cfg.in
+@@ -72,7 +72,7 @@ RECURSIVE = YES
+ EXCLUDE =
+ EXCLUDE_SYMLINKS = NO
+ EXCLUDE_PATTERNS = */.git/* .*.d
+-EXCLUDE_SYMBOLS = EXPORT_SYMBOL nfacct
++EXCLUDE_SYMBOLS = nfacct
+ EXAMPLE_PATH =
+ EXAMPLE_PATTERNS =
+ EXAMPLE_RECURSIVE = NO
+diff --git a/src/internal.h b/src/internal.h
+index f0cc2e1..e5c5ffd 100644
+--- a/src/internal.h
++++ b/src/internal.h
+@@ -3,10 +3,9 @@
+
+ #include "config.h"
+ #ifdef HAVE_VISIBILITY_HIDDEN
+-# define __visible __attribute__((visibility("default")))
+-# define EXPORT_SYMBOL(x) typeof(x) (x) __visible
++# define __EXPORT __attribute__((visibility("default")))
+ #else
+-# define EXPORT_SYMBOL
++# define __EXPORT
+ #endif
+
+ #include <endian.h>
+diff --git a/src/libnetfilter_acct.c b/src/libnetfilter_acct.c
+index b0bcf67..0220d14 100644
+--- a/src/libnetfilter_acct.c
++++ b/src/libnetfilter_acct.c
+@@ -76,21 +76,19 @@ struct nfacct {
+ * In case of success, this function returns a valid pointer, otherwise NULL
+ * s returned and errno is appropriately set.
+ */
+-struct nfacct *nfacct_alloc(void)
++struct nfacct __EXPORT *nfacct_alloc(void)
+ {
+ return calloc(1, sizeof(struct nfacct));
+ }
+-EXPORT_SYMBOL(nfacct_alloc);
+
+ /**
+ * nfacct_free - release one accounting object
+ * \param nfacct pointer to the accounting object
+ */
+-void nfacct_free(struct nfacct *nfacct)
++void __EXPORT nfacct_free(struct nfacct *nfacct)
+ {
+ free(nfacct);
+ }
+-EXPORT_SYMBOL(nfacct_free);
+
+ /**
+ * nfacct_attr_set - set one attribute of the accounting object
+@@ -98,7 +96,7 @@ EXPORT_SYMBOL(nfacct_free);
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-void
++void __EXPORT
+ nfacct_attr_set(struct nfacct *nfacct, enum nfacct_attr_type type,
+ const void *data)
+ {
+@@ -126,7 +124,6 @@ nfacct_attr_set(struct nfacct *nfacct, enum nfacct_attr_type type,
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfacct_attr_set);
+
+ /**
+ * nfacct_attr_set_str - set one attribute the accounting object
+@@ -134,13 +131,12 @@ EXPORT_SYMBOL(nfacct_attr_set);
+ * \param type attribute type you want to set
+ * \param name string that will be used to set this attribute
+ */
+-void
++void __EXPORT
+ nfacct_attr_set_str(struct nfacct *nfacct, enum nfacct_attr_type type,
+ const char *name)
+ {
+ nfacct_attr_set(nfacct, type, name);
+ }
+-EXPORT_SYMBOL(nfacct_attr_set_str);
+
+ /**
+ * nfacct_attr_set_u64 - set one attribute the accounting object
+@@ -148,20 +144,19 @@ EXPORT_SYMBOL(nfacct_attr_set_str);
+ * \param type attribute type you want to set
+ * \param value unsigned 64-bits integer
+ */
+-void
++void __EXPORT
+ nfacct_attr_set_u64(struct nfacct *nfacct, enum nfacct_attr_type type,
+ uint64_t value)
+ {
+ nfacct_attr_set(nfacct, type, &value);
+ }
+-EXPORT_SYMBOL(nfacct_attr_set_u64);
+
+ /**
+ * nfacct_attr_unset - unset one attribute the accounting object
+ * \param nfacct pointer to the accounting object
+ * \param type attribute type you want to set
+ */
+-void
++void __EXPORT
+ nfacct_attr_unset(struct nfacct *nfacct, enum nfacct_attr_type type)
+ {
+ switch(type) {
+@@ -182,7 +177,6 @@ nfacct_attr_unset(struct nfacct *nfacct, enum nfacct_attr_type type)
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfacct_attr_unset);
+
+ /**
+ * nfacct_attr_get - get one attribute the accounting object
+@@ -192,7 +186,7 @@ EXPORT_SYMBOL(nfacct_attr_unset);
+ * This function returns a valid pointer to the attribute data. If a
+ * unsupported attribute is used, this returns NULL.
+ */
+-const void *nfacct_attr_get(struct nfacct *nfacct, enum nfacct_attr_type type)
++const void __EXPORT *nfacct_attr_get(struct nfacct *nfacct, enum nfacct_attr_type type)
+ {
+ const void *ret = NULL;
+
+@@ -220,7 +214,6 @@ const void *nfacct_attr_get(struct nfacct *nfacct, enum nfacct_attr_type type)
+ }
+ return ret;
+ }
+-EXPORT_SYMBOL(nfacct_attr_get);
+
+ /**
+ * nfacct_attr_get_str - get one attribute the accounting object
+@@ -230,12 +223,11 @@ EXPORT_SYMBOL(nfacct_attr_get);
+ * This function returns a valid pointer to the beginning of the string.
+ * If the attribute is unsupported, this returns NULL.
+ */
+-const char *
++const char __EXPORT *
+ nfacct_attr_get_str(struct nfacct *nfacct, enum nfacct_attr_type type)
+ {
+ return nfacct_attr_get(nfacct, type);
+ }
+-EXPORT_SYMBOL(nfacct_attr_get_str);
+
+ /**
+ * nfacct_attr_get_u64 - get one attribute the accounting object
+@@ -245,12 +237,11 @@ EXPORT_SYMBOL(nfacct_attr_get_str);
+ * This function returns a unsigned 64-bits integer. If the attribute is
+ * unsupported, this returns NULL.
+ */
+-uint64_t nfacct_attr_get_u64(struct nfacct *nfacct, enum nfacct_attr_type type)
++uint64_t __EXPORT nfacct_attr_get_u64(struct nfacct *nfacct, enum nfacct_attr_type type)
+ {
+ const void *ret = nfacct_attr_get(nfacct, type);
+ return ret ? *((uint64_t *)ret) : 0;
+ }
+-EXPORT_SYMBOL(nfacct_attr_get_u64);
+
+ static int
+ nfacct_snprintf_plain(char *buf, size_t rem, struct nfacct *nfacct,
+@@ -424,8 +415,8 @@ err:
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int nfacct_snprintf(char *buf, size_t size, struct nfacct *nfacct,
+- uint16_t type, uint16_t flags)
++int __EXPORT nfacct_snprintf(char *buf, size_t size, struct nfacct *nfacct,
++ uint16_t type, uint16_t flags)
+ {
+ int ret = 0;
+
+@@ -445,7 +436,6 @@ int nfacct_snprintf(char *buf, size_t size, struct nfacct *nfacct,
+ }
+ return ret;
+ }
+-EXPORT_SYMBOL(nfacct_snprintf);
+
+ /**
+ * @}
+@@ -484,7 +474,7 @@ EXPORT_SYMBOL(nfacct_snprintf);
+ * - Command NFNL_MSG_ACCT_DEL, to delete one specific nfacct object (if
+ * unused, otherwise you hit EBUSY).
+ */
+-struct nlmsghdr *
++struct nlmsghdr __EXPORT *
+ nfacct_nlmsg_build_hdr(char *buf, uint8_t cmd, uint16_t flags, uint32_t seq)
+ {
+ struct nlmsghdr *nlh;
+@@ -502,14 +492,13 @@ nfacct_nlmsg_build_hdr(char *buf, uint8_t cmd, uint16_t flags, uint32_t seq)
+
+ return nlh;
+ }
+-EXPORT_SYMBOL(nfacct_nlmsg_build_hdr);
+
+ /**
+ * nfacct_nlmsg_build_payload - build payload from accounting object
+ * \param nlh: netlink message that you want to use to add the payload.
+ * \param nfacct: pointer to a accounting object
+ */
+-void nfacct_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfacct *nfacct)
++void __EXPORT nfacct_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfacct *nfacct)
+ {
+ if (nfacct->bitset & (1 << NFACCT_ATTR_NAME))
+ mnl_attr_put_strz(nlh, NFACCT_NAME, nfacct->name);
+@@ -526,7 +515,6 @@ void nfacct_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfacct *nfacct)
+ if (nfacct->bitset & (1 << NFACCT_ATTR_QUOTA))
+ mnl_attr_put_u64(nlh, NFACCT_QUOTA, htobe64(nfacct->quota));
+ }
+-EXPORT_SYMBOL(nfacct_nlmsg_build_payload);
+
+ static int nfacct_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -563,7 +551,7 @@ static int nfacct_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data)
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int
++int __EXPORT
+ nfacct_nlmsg_parse_payload(const struct nlmsghdr *nlh, struct nfacct *nfacct)
+ {
+ struct nlattr *tb[NFACCT_MAX+1] = {};
+@@ -589,7 +577,6 @@ nfacct_nlmsg_parse_payload(const struct nlmsghdr *nlh, struct nfacct *nfacct)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nfacct_nlmsg_parse_payload);
+
+ /**
+ * @}
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-queue-Declare-the-define-visivility-attribute-together.patch b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-queue-Declare-the-define-visivility-attribute-together.patch
new file mode 100644
index 000000000..946f1b71d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/0001-libnetfilter-queue-Declare-the-define-visivility-attribute-together.patch
@@ -0,0 +1,1229 @@
+From 06562244ac4a1a61e1a2c6b219a517658f7349bf Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 10 Apr 2017 12:09:41 -0700
+Subject: [PATCH] Declare the define visivility attribute together
+
+clang ignores the visibility attribute if its not
+defined before the definition. As a result these
+symbols become hidden and consumers of this library
+fail to link due to these missing symbols
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ doxygen.cfg.in | 2 +-
+ src/extra/ipv4.c | 15 +++----
+ src/extra/ipv6.c | 9 ++--
+ src/extra/pktbuff.c | 42 ++++++------------
+ src/extra/tcp.c | 21 +++------
+ src/extra/udp.c | 21 +++------
+ src/internal.h | 5 +--
+ src/libnetfilter_queue.c | 108 ++++++++++++++++-------------------------------
+ src/nlmsg.c | 21 +++------
+ 9 files changed, 82 insertions(+), 162 deletions(-)
+
+diff --git a/doxygen.cfg.in b/doxygen.cfg.in
+index a7378ca..659abee 100644
+--- a/doxygen.cfg.in
++++ b/doxygen.cfg.in
+@@ -72,7 +72,7 @@ RECURSIVE = YES
+ EXCLUDE =
+ EXCLUDE_SYMLINKS = NO
+ EXCLUDE_PATTERNS =
+-EXCLUDE_SYMBOLS = EXPORT_SYMBOL
++EXCLUDE_SYMBOLS =
+ EXAMPLE_PATH =
+ EXAMPLE_PATTERNS =
+ EXAMPLE_RECURSIVE = NO
+diff --git a/src/extra/ipv4.c b/src/extra/ipv4.c
+index a93d113..56d5dc7 100644
+--- a/src/extra/ipv4.c
++++ b/src/extra/ipv4.c
+@@ -32,7 +32,7 @@
+ * This funcion returns NULL if the IPv4 is malformed or the protocol version
+ * is not 4. On success, it returns a valid pointer to the IPv4 header.
+ */
+-struct iphdr *nfq_ip_get_hdr(struct pkt_buff *pktb)
++struct iphdr __EXPORTED *nfq_ip_get_hdr(struct pkt_buff *pktb)
+ {
+ struct iphdr *iph;
+ unsigned int pktlen = pktb->tail - pktb->network_header;
+@@ -53,14 +53,13 @@ struct iphdr *nfq_ip_get_hdr(struct pkt_buff *pktb)
+
+ return iph;
+ }
+-EXPORT_SYMBOL(nfq_ip_get_hdr);
+
+ /**
+ * nfq_ip_set_transport_header - set transport header
+ * \param pktb: pointer to network packet buffer
+ * \param iph: pointer to the IPv4 header
+ */
+-int nfq_ip_set_transport_header(struct pkt_buff *pktb, struct iphdr *iph)
++int __EXPORTED nfq_ip_set_transport_header(struct pkt_buff *pktb, struct iphdr *iph)
+ {
+ int doff = iph->ihl * 4;
+
+@@ -71,7 +70,6 @@ int nfq_ip_set_transport_header(struct pkt_buff *pktb, struct iphdr *iph)
+ pktb->transport_header = pktb->network_header + doff;
+ return 0;
+ }
+-EXPORT_SYMBOL(nfq_ip_set_transport_header);
+
+ /**
+ * nfq_ip_set_checksum - set IPv4 checksum
+@@ -80,14 +78,13 @@ EXPORT_SYMBOL(nfq_ip_set_transport_header);
+ * \note Call to this function if you modified the IPv4 header to update the
+ * checksum.
+ */
+-void nfq_ip_set_checksum(struct iphdr *iph)
++void __EXPORTED nfq_ip_set_checksum(struct iphdr *iph)
+ {
+ uint32_t iph_len = iph->ihl * 4;
+
+ iph->check = 0;
+ iph->check = nfq_checksum(0, (uint16_t *)iph, iph_len);
+ }
+-EXPORT_SYMBOL(nfq_ip_set_checksum);
+
+ /**
+ * nfq_ip_mangle - mangle IPv4 packet buffer
+@@ -100,7 +97,7 @@ EXPORT_SYMBOL(nfq_ip_set_checksum);
+ *
+ * \note This function recalculates the IPv4 checksum (if needed).
+ */
+-int nfq_ip_mangle(struct pkt_buff *pkt, unsigned int dataoff,
++int __EXPORTED nfq_ip_mangle(struct pkt_buff *pkt, unsigned int dataoff,
+ unsigned int match_offset, unsigned int match_len,
+ const char *rep_buffer, unsigned int rep_len)
+ {
+@@ -116,7 +113,6 @@ int nfq_ip_mangle(struct pkt_buff *pkt, unsigned int dataoff,
+
+ return 1;
+ }
+-EXPORT_SYMBOL(nfq_ip_mangle);
+
+ /**
+ * nfq_pkt_snprintf_ip - print IPv4 header into buffer in iptables LOG format
+@@ -128,7 +124,7 @@ EXPORT_SYMBOL(nfq_ip_mangle);
+ * case that there is enough room in the buffer. Read snprintf manpage for more
+ * information to know more about this strange behaviour.
+ */
+-int nfq_ip_snprintf(char *buf, size_t size, const struct iphdr *iph)
++int __EXPORTED nfq_ip_snprintf(char *buf, size_t size, const struct iphdr *iph)
+ {
+ int ret;
+ struct in_addr src = { iph->saddr };
+@@ -147,7 +143,6 @@ int nfq_ip_snprintf(char *buf, size_t size, const struct iphdr *iph)
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nfq_ip_snprintf);
+
+ /**
+ * @}
+diff --git a/src/extra/ipv6.c b/src/extra/ipv6.c
+index 7c5dc9b..6641c6b 100644
+--- a/src/extra/ipv6.c
++++ b/src/extra/ipv6.c
+@@ -33,7 +33,7 @@
+ * This funcion returns NULL if an invalid header is found. On sucess, it
+ * returns a valid pointer to the header.
+ */
+-struct ip6_hdr *nfq_ip6_get_hdr(struct pkt_buff *pktb)
++struct ip6_hdr __EXPORTED *nfq_ip6_get_hdr(struct pkt_buff *pktb)
+ {
+ struct ip6_hdr *ip6h;
+ unsigned int pktlen = pktb->tail - pktb->network_header;
+@@ -50,7 +50,6 @@ struct ip6_hdr *nfq_ip6_get_hdr(struct pkt_buff *pktb)
+
+ return ip6h;
+ }
+-EXPORT_SYMBOL(nfq_ip6_get_hdr);
+
+ /**
+ * nfq_ip6_set_transport_header - set transport header pointer for IPv6 packet
+@@ -61,7 +60,7 @@ EXPORT_SYMBOL(nfq_ip6_get_hdr);
+ * This function returns 1 if the protocol has been found and the transport
+ * header has been set. Otherwise, it returns 0.
+ */
+-int nfq_ip6_set_transport_header(struct pkt_buff *pktb, struct ip6_hdr *ip6h,
++int __EXPORTED nfq_ip6_set_transport_header(struct pkt_buff *pktb, struct ip6_hdr *ip6h,
+ uint8_t target)
+ {
+ uint8_t nexthdr = ip6h->ip6_nxt;
+@@ -115,7 +114,6 @@ int nfq_ip6_set_transport_header(struct pkt_buff *pktb, struct ip6_hdr *ip6h,
+ pktb->transport_header = cur;
+ return cur ? 1 : 0;
+ }
+-EXPORT_SYMBOL(nfq_ip6_set_transport_header);
+
+ /**
+ * nfq_ip6_snprintf - print IPv6 header into one buffer in iptables LOG format
+@@ -124,7 +122,7 @@ EXPORT_SYMBOL(nfq_ip6_set_transport_header);
+ * \param ip6_hdr: pointer to a valid IPv6 header.
+ *
+ */
+-int nfq_ip6_snprintf(char *buf, size_t size, const struct ip6_hdr *ip6h)
++int __EXPORTED nfq_ip6_snprintf(char *buf, size_t size, const struct ip6_hdr *ip6h)
+ {
+ int ret;
+ char src[INET6_ADDRSTRLEN];
+@@ -143,7 +141,6 @@ int nfq_ip6_snprintf(char *buf, size_t size, const struct ip6_hdr *ip6h)
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nfq_ip6_snprintf);
+
+ /**
+ * @}
+diff --git a/src/extra/pktbuff.c b/src/extra/pktbuff.c
+index 1c15a00..54d8244 100644
+--- a/src/extra/pktbuff.c
++++ b/src/extra/pktbuff.c
+@@ -40,7 +40,7 @@
+ *
+ * \return a pointer to a new queue handle or NULL on failure.
+ */
+-struct pkt_buff *
++struct pkt_buff __EXPORTED *
+ pktb_alloc(int family, void *data, size_t len, size_t extra)
+ {
+ struct pkt_buff *pktb;
+@@ -84,120 +84,108 @@ pktb_alloc(int family, void *data, size_t len, size_t extra)
+ }
+ return pktb;
+ }
+-EXPORT_SYMBOL(pktb_alloc);
+
+ /**
+ * pktb_data - return pointer to the beginning of the packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-uint8_t *pktb_data(struct pkt_buff *pktb)
++uint8_t __EXPORTED *pktb_data(struct pkt_buff *pktb)
+ {
+ return pktb->data;
+ }
+-EXPORT_SYMBOL(pktb_data);
+
+ /**
+ * pktb_len - return length of the packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-uint32_t pktb_len(struct pkt_buff *pktb)
++uint32_t __EXPORTED pktb_len(struct pkt_buff *pktb)
+ {
+ return pktb->len;
+ }
+-EXPORT_SYMBOL(pktb_len);
+
+ /**
+ * pktb_free - release packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-void pktb_free(struct pkt_buff *pktb)
++void __EXPORTED pktb_free(struct pkt_buff *pktb)
+ {
+ free(pktb);
+ }
+-EXPORT_SYMBOL(pktb_free);
+
+ /**
+ * pktb_push - update pointer to the beginning of the packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-void pktb_push(struct pkt_buff *pktb, unsigned int len)
++void __EXPORTED pktb_push(struct pkt_buff *pktb, unsigned int len)
+ {
+ pktb->data -= len;
+ pktb->len += len;
+ }
+-EXPORT_SYMBOL(pktb_push);
+
+ /**
+ * pktb_pull - update pointer to the beginning of the packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-void pktb_pull(struct pkt_buff *pktb, unsigned int len)
++void __EXPORTED pktb_pull(struct pkt_buff *pktb, unsigned int len)
+ {
+ pktb->data += len;
+ pktb->len -= len;
+ }
+-EXPORT_SYMBOL(pktb_pull);
+
+ /**
+ * pktb_put - add extra bytes to the tail of the packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-void pktb_put(struct pkt_buff *pktb, unsigned int len)
++void __EXPORTED pktb_put(struct pkt_buff *pktb, unsigned int len)
+ {
+ pktb->tail += len;
+ pktb->len += len;
+ }
+-EXPORT_SYMBOL(pktb_put);
+
+ /**
+ * pktb_trim - set new length for this packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-void pktb_trim(struct pkt_buff *pktb, unsigned int len)
++void __EXPORTED pktb_trim(struct pkt_buff *pktb, unsigned int len)
+ {
+ pktb->len = len;
+ }
+-EXPORT_SYMBOL(pktb_trim);
+
+ /**
+ * pktb_tailroom - get room in bytes in the tail of the packet buffer
+ * \param pktb Pointer to packet buffer
+ */
+-unsigned int pktb_tailroom(struct pkt_buff *pktb)
++unsigned int __EXPORTED pktb_tailroom(struct pkt_buff *pktb)
+ {
+ return pktb->data_len - pktb->len;
+ }
+-EXPORT_SYMBOL(pktb_tailroom);
+
+ /**
+ * pktb_mac_header - return pointer to layer 2 header (if any)
+ * \param pktb Pointer to packet buffer
+ */
+-uint8_t *pktb_mac_header(struct pkt_buff *pktb)
++uint8_t __EXPORTED *pktb_mac_header(struct pkt_buff *pktb)
+ {
+ return pktb->mac_header;
+ }
+-EXPORT_SYMBOL(pktb_mac_header);
+
+ /**
+ * pktb_network_header - return pointer to layer 3 header
+ * \param pktb Pointer to packet buffer
+ */
+-uint8_t *pktb_network_header(struct pkt_buff *pktb)
++uint8_t __EXPORTED *pktb_network_header(struct pkt_buff *pktb)
+ {
+ return pktb->network_header;
+ }
+-EXPORT_SYMBOL(pktb_network_header);
+
+ /**
+ * pktb_transport_header - return pointer to layer 4 header (if any)
+ * \param pktb Pointer to packet buffer
+ */
+-uint8_t *pktb_transport_header(struct pkt_buff *pktb)
++uint8_t __EXPORTED *pktb_transport_header(struct pkt_buff *pktb)
+ {
+ return pktb->transport_header;
+ }
+-EXPORT_SYMBOL(pktb_transport_header);
+
+ static int pktb_expand_tail(struct pkt_buff *pkt, int extra)
+ {
+@@ -224,7 +212,7 @@ static int enlarge_pkt(struct pkt_buff *pkt, unsigned int extra)
+ return 1;
+ }
+
+-int pktb_mangle(struct pkt_buff *pkt,
++int __EXPORTED pktb_mangle(struct pkt_buff *pkt,
+ unsigned int dataoff,
+ unsigned int match_offset,
+ unsigned int match_len,
+@@ -258,17 +246,15 @@ int pktb_mangle(struct pkt_buff *pkt,
+ pkt->mangled = true;
+ return 1;
+ }
+-EXPORT_SYMBOL(pktb_mangle);
+
+ /**
+ * pktb_mangled - return true if packet has been mangled
+ * \param pktb Pointer to packet buffer
+ */
+-bool pktb_mangled(const struct pkt_buff *pkt)
++bool __EXPORTED pktb_mangled(const struct pkt_buff *pkt)
+ {
+ return pkt->mangled;
+ }
+-EXPORT_SYMBOL(pktb_mangled);
+
+ /**
+ * @}
+diff --git a/src/extra/tcp.c b/src/extra/tcp.c
+index d1cd79d..8038ce5 100644
+--- a/src/extra/tcp.c
++++ b/src/extra/tcp.c
+@@ -40,7 +40,7 @@
+ * \note You have to call nfq_ip_set_transport_header or
+ * nfq_ip6_set_transport_header first to access the TCP header.
+ */
+-struct tcphdr *nfq_tcp_get_hdr(struct pkt_buff *pktb)
++struct tcphdr __EXPORTED *nfq_tcp_get_hdr(struct pkt_buff *pktb)
+ {
+ if (pktb->transport_header == NULL)
+ return NULL;
+@@ -51,14 +51,13 @@ struct tcphdr *nfq_tcp_get_hdr(struct pkt_buff *pktb)
+
+ return (struct tcphdr *)pktb->transport_header;
+ }
+-EXPORT_SYMBOL(nfq_tcp_get_hdr);
+
+ /**
+ * nfq_tcp_get_payload - get the TCP packet payload
+ * \param tcph: pointer to the TCP header
+ * \param pktb: pointer to user-space network packet buffer
+ */
+-void *nfq_tcp_get_payload(struct tcphdr *tcph, struct pkt_buff *pktb)
++void __EXPORTED *nfq_tcp_get_payload(struct tcphdr *tcph, struct pkt_buff *pktb)
+ {
+ unsigned int len = tcph->doff * 4;
+
+@@ -72,47 +71,43 @@ void *nfq_tcp_get_payload(struct tcphdr *tcph, struct pkt_buff *pktb)
+
+ return pktb->transport_header + len;
+ }
+-EXPORT_SYMBOL(nfq_tcp_get_payload);
+
+ /**
+ * nfq_tcp_get_payload_len - get the tcp packet payload
+ * \param tcph: pointer to the TCP header
+ * \param pktb: pointer to user-space network packet buffer
+ */
+-unsigned int
++unsigned int __EXPORTED
+ nfq_tcp_get_payload_len(struct tcphdr *tcph, struct pkt_buff *pktb)
+ {
+ return pktb->tail - pktb->transport_header;
+ }
+-EXPORT_SYMBOL(nfq_tcp_get_payload_len);
+
+ /**
+ * nfq_tcp_set_checksum_ipv4 - computes IPv4/TCP packet checksum
+ * \param tcph: pointer to the TCP header
+ * \param iph: pointer to the IPv4 header
+ */
+-void
++void __EXPORTED
+ nfq_tcp_compute_checksum_ipv4(struct tcphdr *tcph, struct iphdr *iph)
+ {
+ /* checksum field in header needs to be zero for calculation. */
+ tcph->check = 0;
+ tcph->check = nfq_checksum_tcpudp_ipv4(iph);
+ }
+-EXPORT_SYMBOL(nfq_tcp_compute_checksum_ipv4);
+
+ /**
+ * nfq_tcp_set_checksum_ipv6 - computes IPv6/TCP packet checksum
+ * \param tcph: pointer to the TCP header
+ * \param iph: pointer to the IPv6 header
+ */
+-void
++void __EXPORTED
+ nfq_tcp_compute_checksum_ipv6(struct tcphdr *tcph, struct ip6_hdr *ip6h)
+ {
+ /* checksum field in header needs to be zero for calculation. */
+ tcph->check = 0;
+ tcph->check = nfq_checksum_tcpudp_ipv6(ip6h, tcph);
+ }
+-EXPORT_SYMBOL(nfq_tcp_compute_checksum_ipv6);
+
+ /*
+ * The union cast uses a gcc extension to avoid aliasing problems
+@@ -134,7 +129,7 @@ union tcp_word_hdr {
+ * \param tcp: pointer to a valid tcp header.
+ *
+ */
+-int nfq_tcp_snprintf(char *buf, size_t size, const struct tcphdr *tcph)
++int __EXPORTED nfq_tcp_snprintf(char *buf, size_t size, const struct tcphdr *tcph)
+ {
+ int ret, len = 0;
+
+@@ -177,7 +172,6 @@ int nfq_tcp_snprintf(char *buf, size_t size, const struct tcphdr *tcph)
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nfq_tcp_snprintf);
+
+ /**
+ * nfq_tcp_mangle_ipv4 - mangle TCP/IPv4 packet buffer
+@@ -189,7 +183,7 @@ EXPORT_SYMBOL(nfq_tcp_snprintf);
+ *
+ * \note This function recalculates the IPv4 and TCP checksums for you.
+ */
+-int
++int __EXPORTED
+ nfq_tcp_mangle_ipv4(struct pkt_buff *pkt,
+ unsigned int match_offset, unsigned int match_len,
+ const char *rep_buffer, unsigned int rep_len)
+@@ -208,7 +202,6 @@ nfq_tcp_mangle_ipv4(struct pkt_buff *pkt,
+
+ return 1;
+ }
+-EXPORT_SYMBOL(nfq_tcp_mangle_ipv4);
+
+ /**
+ * @}
+diff --git a/src/extra/udp.c b/src/extra/udp.c
+index 8c44a66..99c8faa 100644
+--- a/src/extra/udp.c
++++ b/src/extra/udp.c
+@@ -37,7 +37,7 @@
+ * This function returns NULL if invalid UDP header is found. On success,
+ * it returns the UDP header.
+ */
+-struct udphdr *nfq_udp_get_hdr(struct pkt_buff *pktb)
++struct udphdr __EXPORTED *nfq_udp_get_hdr(struct pkt_buff *pktb)
+ {
+ if (pktb->transport_header == NULL)
+ return NULL;
+@@ -48,14 +48,13 @@ struct udphdr *nfq_udp_get_hdr(struct pkt_buff *pktb)
+
+ return (struct udphdr *)pktb->transport_header;
+ }
+-EXPORT_SYMBOL(nfq_udp_get_hdr);
+
+ /**
+ * nfq_udp_get_payload - get the UDP packet payload.
+ * \param udph: the pointer to the UDP header.
+ * \param tail: pointer to the tail of the packet
+ */
+-void *nfq_udp_get_payload(struct udphdr *udph, struct pkt_buff *pktb)
++void __EXPORTED *nfq_udp_get_payload(struct udphdr *udph, struct pkt_buff *pktb)
+ {
+ uint16_t len = ntohs(udph->len);
+
+@@ -69,17 +68,15 @@ void *nfq_udp_get_payload(struct udphdr *udph, struct pkt_buff *pktb)
+
+ return pktb->transport_header + sizeof(struct udphdr);
+ }
+-EXPORT_SYMBOL(nfq_udp_get_payload);
+
+ /**
+ * nfq_udp_get_payload_len - get the udp packet payload.
+ * \param udp: the pointer to the udp header.
+ */
+-unsigned int nfq_udp_get_payload_len(struct udphdr *udph, struct pkt_buff *pktb)
++unsigned int __EXPORTED nfq_udp_get_payload_len(struct udphdr *udph, struct pkt_buff *pktb)
+ {
+ return pktb->tail - pktb->transport_header;
+ }
+-EXPORT_SYMBOL(nfq_udp_get_payload_len);
+
+ /**
+ * nfq_udp_set_checksum_ipv4 - computes a IPv4/TCP packet's segment
+@@ -91,14 +88,13 @@ EXPORT_SYMBOL(nfq_udp_get_payload_len);
+ * \see nfq_pkt_compute_ip_checksum
+ * \see nfq_pkt_compute_udp_checksum
+ */
+-void
++void __EXPORTED
+ nfq_udp_compute_checksum_ipv4(struct udphdr *udph, struct iphdr *iph)
+ {
+ /* checksum field in header needs to be zero for calculation. */
+ udph->check = 0;
+ udph->check = nfq_checksum_tcpudp_ipv4(iph);
+ }
+-EXPORT_SYMBOL(nfq_udp_compute_checksum_ipv4);
+
+ /**
+ * nfq_udp_set_checksum_ipv6 - computes a IPv6/TCP packet's segment
+@@ -110,14 +106,13 @@ EXPORT_SYMBOL(nfq_udp_compute_checksum_ipv4);
+ * \see nfq_pkt_compute_ip_checksum
+ * \see nfq_pkt_compute_udp_checksum
+ */
+-void
++void __EXPORTED
+ nfq_udp_compute_checksum_ipv6(struct udphdr *udph, struct ip6_hdr *ip6h)
+ {
+ /* checksum field in header needs to be zero for calculation. */
+ udph->check = 0;
+ udph->check = nfq_checksum_tcpudp_ipv6(ip6h, udph);
+ }
+-EXPORT_SYMBOL(nfq_udp_compute_checksum_ipv6);
+
+ /**
+ * nfq_tcp_mangle_ipv4 - mangle TCP/IPv4 packet buffer
+@@ -129,7 +124,7 @@ EXPORT_SYMBOL(nfq_udp_compute_checksum_ipv6);
+ *
+ * \note This function recalculates the IPv4 and TCP checksums for you.
+ */
+-int
++int __EXPORTED
+ nfq_udp_mangle_ipv4(struct pkt_buff *pkt,
+ unsigned int match_offset, unsigned int match_len,
+ const char *rep_buffer, unsigned int rep_len)
+@@ -148,7 +143,6 @@ nfq_udp_mangle_ipv4(struct pkt_buff *pkt,
+
+ return 1;
+ }
+-EXPORT_SYMBOL(nfq_udp_mangle_ipv4);
+
+ /**
+ * nfq_pkt_snprintf_udp_hdr - print udp header into one buffer in a humnan
+@@ -158,12 +152,11 @@ EXPORT_SYMBOL(nfq_udp_mangle_ipv4);
+ * \param udp: pointer to a valid udp header.
+ *
+ */
+-int nfq_udp_snprintf(char *buf, size_t size, const struct udphdr *udph)
++int __EXPORTED nfq_udp_snprintf(char *buf, size_t size, const struct udphdr *udph)
+ {
+ return snprintf(buf, size, "SPT=%u DPT=%u ",
+ htons(udph->source), htons(udph->dest));
+ }
+-EXPORT_SYMBOL(nfq_udp_snprintf);
+
+ /**
+ * @}
+diff --git a/src/internal.h b/src/internal.h
+index 558d267..79b0752 100644
+--- a/src/internal.h
++++ b/src/internal.h
+@@ -5,10 +5,9 @@
+ #include <stdint.h>
+ #include <stdbool.h>
+ #ifdef HAVE_VISIBILITY_HIDDEN
+-# define __visible __attribute__((visibility("default")))
+-# define EXPORT_SYMBOL(x) typeof(x) (x) __visible
++# define __EXPORTED __attribute__((visibility("default")))
+ #else
+-# define EXPORT_SYMBOL
++# define __EXPORTED
+ #endif
+
+ struct iphdr;
+diff --git a/src/libnetfilter_queue.c b/src/libnetfilter_queue.c
+index 065d618..ab0b66b 100644
+--- a/src/libnetfilter_queue.c
++++ b/src/libnetfilter_queue.c
+@@ -133,8 +133,7 @@ struct nfq_data {
+ struct nfattr **data;
+ };
+
+-int nfq_errno;
+-EXPORT_SYMBOL(nfq_errno);
++int __EXPORTED nfq_errno;
+
+ /***********************************************************************
+ * low level stuff
+@@ -218,11 +217,10 @@ static int __nfq_rcv_pkt(struct nlmsghdr *nlh, struct nfattr *nfa[],
+
+ /* public interface */
+
+-struct nfnl_handle *nfq_nfnlh(struct nfq_handle *h)
++struct nfnl_handle __EXPORTED *nfq_nfnlh(struct nfq_handle *h)
+ {
+ return h->nfnlh;
+ }
+-EXPORT_SYMBOL(nfq_nfnlh);
+
+ /**
+ *
+@@ -294,11 +292,10 @@ EXPORT_SYMBOL(nfq_nfnlh);
+ * over the netlink connection associated with the given queue connection
+ * handle.
+ */
+-int nfq_fd(struct nfq_handle *h)
++int __EXPORTED nfq_fd(struct nfq_handle *h)
+ {
+ return nfnl_fd(nfq_nfnlh(h));
+ }
+-EXPORT_SYMBOL(nfq_fd);
+ /**
+ * @}
+ */
+@@ -349,7 +346,7 @@ EXPORT_SYMBOL(nfq_fd);
+ *
+ * \return a pointer to a new queue handle or NULL on failure.
+ */
+-struct nfq_handle *nfq_open(void)
++struct nfq_handle __EXPORTED *nfq_open(void)
+ {
+ struct nfnl_handle *nfnlh = nfnl_open();
+ struct nfq_handle *qh;
+@@ -366,7 +363,6 @@ struct nfq_handle *nfq_open(void)
+
+ return qh;
+ }
+-EXPORT_SYMBOL(nfq_open);
+
+ /**
+ * @}
+@@ -382,7 +378,7 @@ EXPORT_SYMBOL(nfq_open);
+ *
+ * \return a pointer to a new queue handle or NULL on failure.
+ */
+-struct nfq_handle *nfq_open_nfnl(struct nfnl_handle *nfnlh)
++struct nfq_handle __EXPORTED *nfq_open_nfnl(struct nfnl_handle *nfnlh)
+ {
+ struct nfnl_callback pkt_cb = {
+ .call = __nfq_rcv_pkt,
+@@ -419,7 +415,6 @@ out_free:
+ free(h);
+ return NULL;
+ }
+-EXPORT_SYMBOL(nfq_open_nfnl);
+
+ /**
+ * \addtogroup LibrarySetup
+@@ -438,7 +433,7 @@ EXPORT_SYMBOL(nfq_open_nfnl);
+ *
+ * \return 0 on success, non-zero on failure.
+ */
+-int nfq_close(struct nfq_handle *h)
++int __EXPORTED nfq_close(struct nfq_handle *h)
+ {
+ int ret;
+
+@@ -447,7 +442,6 @@ int nfq_close(struct nfq_handle *h)
+ free(h);
+ return ret;
+ }
+-EXPORT_SYMBOL(nfq_close);
+
+ /**
+ * nfq_bind_pf - bind a nfqueue handler to a given protocol family
+@@ -460,11 +454,10 @@ EXPORT_SYMBOL(nfq_close);
+ *
+ * \return integer inferior to 0 in case of failure
+ */
+-int nfq_bind_pf(struct nfq_handle *h, uint16_t pf)
++int __EXPORTED nfq_bind_pf(struct nfq_handle *h, uint16_t pf)
+ {
+ return __build_send_cfg_msg(h, NFQNL_CFG_CMD_PF_BIND, 0, pf);
+ }
+-EXPORT_SYMBOL(nfq_bind_pf);
+
+ /**
+ * nfq_unbind_pf - unbind nfqueue handler from a protocol family
+@@ -476,11 +469,10 @@ EXPORT_SYMBOL(nfq_bind_pf);
+ *
+ * This call is obsolete, Linux kernels from 3.8 onwards ignore it.
+ */
+-int nfq_unbind_pf(struct nfq_handle *h, uint16_t pf)
++int __EXPORTED nfq_unbind_pf(struct nfq_handle *h, uint16_t pf)
+ {
+ return __build_send_cfg_msg(h, NFQNL_CFG_CMD_PF_UNBIND, 0, pf);
+ }
+-EXPORT_SYMBOL(nfq_unbind_pf);
+
+
+ /**
+@@ -524,7 +516,7 @@ typedef int nfq_callback(struct nfq_q_handle *qh,
+ * The callback should return < 0 to stop processing.
+ */
+
+-struct nfq_q_handle *nfq_create_queue(struct nfq_handle *h,
++struct nfq_q_handle __EXPORTED *nfq_create_queue(struct nfq_handle *h,
+ uint16_t num,
+ nfq_callback *cb,
+ void *data)
+@@ -555,7 +547,6 @@ struct nfq_q_handle *nfq_create_queue(struct nfq_handle *h,
+ add_qh(qh);
+ return qh;
+ }
+-EXPORT_SYMBOL(nfq_create_queue);
+
+ /**
+ * @}
+@@ -573,7 +564,7 @@ EXPORT_SYMBOL(nfq_create_queue);
+ * Removes the binding for the specified queue handle. This call also unbind
+ * from the nfqueue handler, so you don't have to call nfq_unbind_pf.
+ */
+-int nfq_destroy_queue(struct nfq_q_handle *qh)
++int __EXPORTED nfq_destroy_queue(struct nfq_q_handle *qh)
+ {
+ int ret = __build_send_cfg_msg(qh->h, NFQNL_CFG_CMD_UNBIND, qh->id, 0);
+ if (ret == 0) {
+@@ -583,7 +574,6 @@ int nfq_destroy_queue(struct nfq_q_handle *qh)
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nfq_destroy_queue);
+
+ /**
+ * nfq_handle_packet - handle a packet received from the nfqueue subsystem
+@@ -597,11 +587,10 @@ EXPORT_SYMBOL(nfq_destroy_queue);
+ *
+ * \return 0 on success, non-zero on failure.
+ */
+-int nfq_handle_packet(struct nfq_handle *h, char *buf, int len)
++int __EXPORTED nfq_handle_packet(struct nfq_handle *h, char *buf, int len)
+ {
+ return nfnl_handle_packet(h->nfnlh, buf, len);
+ }
+-EXPORT_SYMBOL(nfq_handle_packet);
+
+ /**
+ * nfq_set_mode - set the amount of packet data that nfqueue copies to userspace
+@@ -618,7 +607,7 @@ EXPORT_SYMBOL(nfq_handle_packet);
+ *
+ * \return -1 on error; >=0 otherwise.
+ */
+-int nfq_set_mode(struct nfq_q_handle *qh,
++int __EXPORTED nfq_set_mode(struct nfq_q_handle *qh,
+ uint8_t mode, uint32_t range)
+ {
+ union {
+@@ -638,7 +627,6 @@ int nfq_set_mode(struct nfq_q_handle *qh,
+
+ return nfnl_query(qh->h->nfnlh, &u.nmh);
+ }
+-EXPORT_SYMBOL(nfq_set_mode);
+
+ /**
+ * nfq_set_queue_flags - set flags (options) for the kernel queue
+@@ -690,7 +678,7 @@ EXPORT_SYMBOL(nfq_set_mode);
+ *
+ * \return -1 on error with errno set appropriately; =0 otherwise.
+ */
+-int nfq_set_queue_flags(struct nfq_q_handle *qh,
++int __EXPORTED nfq_set_queue_flags(struct nfq_q_handle *qh,
+ uint32_t mask, uint32_t flags)
+ {
+ union {
+@@ -711,7 +699,6 @@ int nfq_set_queue_flags(struct nfq_q_handle *qh,
+
+ return nfnl_query(qh->h->nfnlh, &u.nmh);
+ }
+-EXPORT_SYMBOL(nfq_set_queue_flags);
+
+ /**
+ * nfq_set_queue_maxlen - Set kernel queue maximum length parameter
+@@ -724,7 +711,7 @@ EXPORT_SYMBOL(nfq_set_queue_flags);
+ *
+ * \return -1 on error; >=0 otherwise.
+ */
+-int nfq_set_queue_maxlen(struct nfq_q_handle *qh,
++int __EXPORTED nfq_set_queue_maxlen(struct nfq_q_handle *qh,
+ uint32_t queuelen)
+ {
+ union {
+@@ -742,7 +729,6 @@ int nfq_set_queue_maxlen(struct nfq_q_handle *qh,
+
+ return nfnl_query(qh->h->nfnlh, &u.nmh);
+ }
+-EXPORT_SYMBOL(nfq_set_queue_maxlen);
+
+ /**
+ * @}
+@@ -829,14 +815,13 @@ static int __set_verdict(struct nfq_q_handle *qh, uint32_t id,
+ *
+ * \return -1 on error; >= 0 otherwise.
+ */
+-int nfq_set_verdict(struct nfq_q_handle *qh, uint32_t id,
++int __EXPORTED nfq_set_verdict(struct nfq_q_handle *qh, uint32_t id,
+ uint32_t verdict, uint32_t data_len,
+ const unsigned char *buf)
+ {
+ return __set_verdict(qh, id, verdict, 0, 0, data_len, buf,
+ NFQNL_MSG_VERDICT);
+ }
+-EXPORT_SYMBOL(nfq_set_verdict);
+
+ /**
+ * nfq_set_verdict2 - like nfq_set_verdict, but you can set the mark.
+@@ -847,14 +832,13 @@ EXPORT_SYMBOL(nfq_set_verdict);
+ * \param data_len number of bytes of data pointed to by #buf
+ * \param buf the buffer that contains the packet data
+ */
+-int nfq_set_verdict2(struct nfq_q_handle *qh, uint32_t id,
++int __EXPORTED nfq_set_verdict2(struct nfq_q_handle *qh, uint32_t id,
+ uint32_t verdict, uint32_t mark,
+ uint32_t data_len, const unsigned char *buf)
+ {
+ return __set_verdict(qh, id, verdict, htonl(mark), 1, data_len,
+ buf, NFQNL_MSG_VERDICT);
+ }
+-EXPORT_SYMBOL(nfq_set_verdict2);
+
+ /**
+ * nfq_set_verdict_batch - issue verdicts on several packets at once
+@@ -868,13 +852,12 @@ EXPORT_SYMBOL(nfq_set_verdict2);
+ * batch support was added in Linux 3.1.
+ * These functions will fail silently on older kernels.
+ */
+-int nfq_set_verdict_batch(struct nfq_q_handle *qh, uint32_t id,
++int __EXPORTED nfq_set_verdict_batch(struct nfq_q_handle *qh, uint32_t id,
+ uint32_t verdict)
+ {
+ return __set_verdict(qh, id, verdict, 0, 0, 0, NULL,
+ NFQNL_MSG_VERDICT_BATCH);
+ }
+-EXPORT_SYMBOL(nfq_set_verdict_batch);
+
+ /**
+ * nfq_set_verdict_batch2 - like nfq_set_verdict_batch, but you can set a mark.
+@@ -883,13 +866,12 @@ EXPORT_SYMBOL(nfq_set_verdict_batch);
+ * \param verdict verdict to return to netfilter (NF_ACCEPT, NF_DROP)
+ * \param mark mark to put on packet
+ */
+-int nfq_set_verdict_batch2(struct nfq_q_handle *qh, uint32_t id,
++int __EXPORTED nfq_set_verdict_batch2(struct nfq_q_handle *qh, uint32_t id,
+ uint32_t verdict, uint32_t mark)
+ {
+ return __set_verdict(qh, id, verdict, htonl(mark), 1, 0,
+ NULL, NFQNL_MSG_VERDICT_BATCH);
+ }
+-EXPORT_SYMBOL(nfq_set_verdict_batch2);
+
+ /**
+ * nfq_set_verdict_mark - like nfq_set_verdict, but you can set the mark.
+@@ -905,14 +887,13 @@ EXPORT_SYMBOL(nfq_set_verdict_batch2);
+ * This function is deprecated since it is broken, its use is highly
+ * discouraged. Please, use nfq_set_verdict2 instead.
+ */
+-int nfq_set_verdict_mark(struct nfq_q_handle *qh, uint32_t id,
++int __EXPORTED nfq_set_verdict_mark(struct nfq_q_handle *qh, uint32_t id,
+ uint32_t verdict, uint32_t mark,
+ uint32_t data_len, const unsigned char *buf)
+ {
+ return __set_verdict(qh, id, verdict, mark, 1, data_len, buf,
+ NFQNL_MSG_VERDICT);
+ }
+-EXPORT_SYMBOL(nfq_set_verdict_mark);
+
+ /**
+ * @}
+@@ -947,12 +928,11 @@ EXPORT_SYMBOL(nfq_set_verdict_mark);
+ } __attribute__ ((packed));
+ \endverbatim
+ */
+-struct nfqnl_msg_packet_hdr *nfq_get_msg_packet_hdr(struct nfq_data *nfad)
++struct nfqnl_msg_packet_hdr __EXPORTED *nfq_get_msg_packet_hdr(struct nfq_data *nfad)
+ {
+ return nfnl_get_pointer_to_data(nfad->data, NFQA_PACKET_HDR,
+ struct nfqnl_msg_packet_hdr);
+ }
+-EXPORT_SYMBOL(nfq_get_msg_packet_hdr);
+
+ /**
+ * nfq_get_nfmark - get the packet mark
+@@ -960,11 +940,10 @@ EXPORT_SYMBOL(nfq_get_msg_packet_hdr);
+ *
+ * \return the netfilter mark currently assigned to the given queued packet.
+ */
+-uint32_t nfq_get_nfmark(struct nfq_data *nfad)
++uint32_t __EXPORTED nfq_get_nfmark(struct nfq_data *nfad)
+ {
+ return ntohl(nfnl_get_data(nfad->data, NFQA_MARK, uint32_t));
+ }
+-EXPORT_SYMBOL(nfq_get_nfmark);
+
+ /**
+ * nfq_get_timestamp - get the packet timestamp
+@@ -975,7 +954,7 @@ EXPORT_SYMBOL(nfq_get_nfmark);
+ *
+ * \return 0 on success, non-zero on failure.
+ */
+-int nfq_get_timestamp(struct nfq_data *nfad, struct timeval *tv)
++int __EXPORTED nfq_get_timestamp(struct nfq_data *nfad, struct timeval *tv)
+ {
+ struct nfqnl_msg_packet_timestamp *qpt;
+ qpt = nfnl_get_pointer_to_data(nfad->data, NFQA_TIMESTAMP,
+@@ -988,7 +967,6 @@ int nfq_get_timestamp(struct nfq_data *nfad, struct timeval *tv)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nfq_get_timestamp);
+
+ /**
+ * nfq_get_indev - get the interface that the packet was received through
+@@ -1001,11 +979,10 @@ EXPORT_SYMBOL(nfq_get_timestamp);
+ * \warning all nfq_get_dev() functions return 0 if not set, since linux
+ * only allows ifindex >= 1, see net/core/dev.c:2600 (in 2.6.13.1)
+ */
+-uint32_t nfq_get_indev(struct nfq_data *nfad)
++uint32_t __EXPORTED nfq_get_indev(struct nfq_data *nfad)
+ {
+ return ntohl(nfnl_get_data(nfad->data, NFQA_IFINDEX_INDEV, uint32_t));
+ }
+-EXPORT_SYMBOL(nfq_get_indev);
+
+ /**
+ * nfq_get_physindev - get the physical interface that the packet was received
+@@ -1015,11 +992,10 @@ EXPORT_SYMBOL(nfq_get_indev);
+ * If the returned index is 0, the packet was locally generated or the
+ * physical input interface is no longer known (ie. POSTROUTING?).
+ */
+-uint32_t nfq_get_physindev(struct nfq_data *nfad)
++uint32_t __EXPORTED nfq_get_physindev(struct nfq_data *nfad)
+ {
+ return ntohl(nfnl_get_data(nfad->data, NFQA_IFINDEX_PHYSINDEV, uint32_t));
+ }
+-EXPORT_SYMBOL(nfq_get_physindev);
+
+ /**
+ * nfq_get_outdev - gets the interface that the packet will be routed out
+@@ -1029,11 +1005,10 @@ EXPORT_SYMBOL(nfq_get_physindev);
+ * returned index is 0, the packet is destined for localhost or the output
+ * interface is not yet known (ie. PREROUTING?).
+ */
+-uint32_t nfq_get_outdev(struct nfq_data *nfad)
++uint32_t __EXPORTED nfq_get_outdev(struct nfq_data *nfad)
+ {
+ return ntohl(nfnl_get_data(nfad->data, NFQA_IFINDEX_OUTDEV, uint32_t));
+ }
+-EXPORT_SYMBOL(nfq_get_outdev);
+
+ /**
+ * nfq_get_physoutdev - get the physical interface that the packet output
+@@ -1045,11 +1020,10 @@ EXPORT_SYMBOL(nfq_get_outdev);
+ *
+ * \return The index of physical interface that the packet output will be routed out.
+ */
+-uint32_t nfq_get_physoutdev(struct nfq_data *nfad)
++uint32_t __EXPORTED nfq_get_physoutdev(struct nfq_data *nfad)
+ {
+ return ntohl(nfnl_get_data(nfad->data, NFQA_IFINDEX_PHYSOUTDEV, uint32_t));
+ }
+-EXPORT_SYMBOL(nfq_get_physoutdev);
+
+ /**
+ * nfq_get_indev_name - get the name of the interface the packet
+@@ -1089,13 +1063,12 @@ EXPORT_SYMBOL(nfq_get_physoutdev);
+ \endverbatim
+ *
+ */
+-int nfq_get_indev_name(struct nlif_handle *nlif_handle,
++int __EXPORTED nfq_get_indev_name(struct nlif_handle *nlif_handle,
+ struct nfq_data *nfad, char *name)
+ {
+ uint32_t ifindex = nfq_get_indev(nfad);
+ return nlif_index2name(nlif_handle, ifindex, name);
+ }
+-EXPORT_SYMBOL(nfq_get_indev_name);
+
+ /**
+ * nfq_get_physindev_name - get the name of the physical interface the
+@@ -1109,13 +1082,12 @@ EXPORT_SYMBOL(nfq_get_indev_name);
+ *
+ * \return -1 in case of error, > 0 if it succeed.
+ */
+-int nfq_get_physindev_name(struct nlif_handle *nlif_handle,
++int __EXPORTED nfq_get_physindev_name(struct nlif_handle *nlif_handle,
+ struct nfq_data *nfad, char *name)
+ {
+ uint32_t ifindex = nfq_get_physindev(nfad);
+ return nlif_index2name(nlif_handle, ifindex, name);
+ }
+-EXPORT_SYMBOL(nfq_get_physindev_name);
+
+ /**
+ * nfq_get_outdev_name - get the name of the physical interface the
+@@ -1129,13 +1101,12 @@ EXPORT_SYMBOL(nfq_get_physindev_name);
+ *
+ * \return -1 in case of error, > 0 if it succeed.
+ */
+-int nfq_get_outdev_name(struct nlif_handle *nlif_handle,
++int __EXPORTED nfq_get_outdev_name(struct nlif_handle *nlif_handle,
+ struct nfq_data *nfad, char *name)
+ {
+ uint32_t ifindex = nfq_get_outdev(nfad);
+ return nlif_index2name(nlif_handle, ifindex, name);
+ }
+-EXPORT_SYMBOL(nfq_get_outdev_name);
+
+ /**
+ * nfq_get_physoutdev_name - get the name of the interface the
+@@ -1150,13 +1121,12 @@ EXPORT_SYMBOL(nfq_get_outdev_name);
+ * \return -1 in case of error, > 0 if it succeed.
+ */
+
+-int nfq_get_physoutdev_name(struct nlif_handle *nlif_handle,
++int __EXPORTED nfq_get_physoutdev_name(struct nlif_handle *nlif_handle,
+ struct nfq_data *nfad, char *name)
+ {
+ uint32_t ifindex = nfq_get_physoutdev(nfad);
+ return nlif_index2name(nlif_handle, ifindex, name);
+ }
+-EXPORT_SYMBOL(nfq_get_physoutdev_name);
+
+ /**
+ * nfq_get_packet_hw
+@@ -1180,12 +1150,11 @@ EXPORT_SYMBOL(nfq_get_physoutdev_name);
+ } __attribute__ ((packed));
+ \endverbatim
+ */
+-struct nfqnl_msg_packet_hw *nfq_get_packet_hw(struct nfq_data *nfad)
++struct nfqnl_msg_packet_hw __EXPORTED *nfq_get_packet_hw(struct nfq_data *nfad)
+ {
+ return nfnl_get_pointer_to_data(nfad->data, NFQA_HWADDR,
+ struct nfqnl_msg_packet_hw);
+ }
+-EXPORT_SYMBOL(nfq_get_packet_hw);
+
+ /**
+ * nfq_get_uid - get the UID of the user the packet belongs to
+@@ -1193,7 +1162,7 @@ EXPORT_SYMBOL(nfq_get_packet_hw);
+ *
+ * \return 1 if there is a UID available, 0 otherwise.
+ */
+-int nfq_get_uid(struct nfq_data *nfad, uint32_t *uid)
++int __EXPORTED nfq_get_uid(struct nfq_data *nfad, uint32_t *uid)
+ {
+ if (!nfnl_attr_present(nfad->data, NFQA_UID))
+ return 0;
+@@ -1201,7 +1170,6 @@ int nfq_get_uid(struct nfq_data *nfad, uint32_t *uid)
+ *uid = ntohl(nfnl_get_data(nfad->data, NFQA_UID, uint32_t));
+ return 1;
+ }
+-EXPORT_SYMBOL(nfq_get_uid);
+
+ /**
+ * nfq_get_gid - get the GID of the user the packet belongs to
+@@ -1209,7 +1177,7 @@ EXPORT_SYMBOL(nfq_get_uid);
+ *
+ * \return 1 if there is a GID available, 0 otherwise.
+ */
+-int nfq_get_gid(struct nfq_data *nfad, uint32_t *gid)
++int __EXPORTED nfq_get_gid(struct nfq_data *nfad, uint32_t *gid)
+ {
+ if (!nfnl_attr_present(nfad->data, NFQA_GID))
+ return 0;
+@@ -1217,7 +1185,6 @@ int nfq_get_gid(struct nfq_data *nfad, uint32_t *gid)
+ *gid = ntohl(nfnl_get_data(nfad->data, NFQA_GID, uint32_t));
+ return 1;
+ }
+-EXPORT_SYMBOL(nfq_get_gid);
+
+
+ /**
+@@ -1227,7 +1194,7 @@ EXPORT_SYMBOL(nfq_get_gid);
+ *
+ * \return -1 on error, otherwise > 0
+ */
+-int nfq_get_secctx(struct nfq_data *nfad, unsigned char **secdata)
++int __EXPORTED nfq_get_secctx(struct nfq_data *nfad, unsigned char **secdata)
+ {
+ if (!nfnl_attr_present(nfad->data, NFQA_SECCTX))
+ return -1;
+@@ -1240,7 +1207,6 @@ int nfq_get_secctx(struct nfq_data *nfad, unsigned char **secdata)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nfq_get_secctx);
+
+ /**
+ * nfq_get_payload - get payload
+@@ -1253,7 +1219,7 @@ EXPORT_SYMBOL(nfq_get_secctx);
+ *
+ * \return -1 on error, otherwise > 0.
+ */
+-int nfq_get_payload(struct nfq_data *nfad, unsigned char **data)
++int __EXPORTED nfq_get_payload(struct nfq_data *nfad, unsigned char **data)
+ {
+ *data = (unsigned char *)
+ nfnl_get_pointer_to_data(nfad->data, NFQA_PAYLOAD, char);
+@@ -1262,7 +1228,6 @@ int nfq_get_payload(struct nfq_data *nfad, unsigned char **data)
+
+ return -1;
+ }
+-EXPORT_SYMBOL(nfq_get_payload);
+
+ /**
+ * @}
+@@ -1307,7 +1272,7 @@ do { \
+ * would have been printed into the buffer (in case that there is enough
+ * room in it). See snprintf() return value for more information.
+ */
+-int nfq_snprintf_xml(char *buf, size_t rem, struct nfq_data *tb, int flags)
++int __EXPORTED nfq_snprintf_xml(char *buf, size_t rem, struct nfq_data *tb, int flags)
+ {
+ struct nfqnl_msg_packet_hdr *ph;
+ struct nfqnl_msg_packet_hw *hwph;
+@@ -1460,7 +1425,6 @@ int nfq_snprintf_xml(char *buf, size_t rem, struct nfq_data *tb, int flags)
+
+ return len;
+ }
+-EXPORT_SYMBOL(nfq_snprintf_xml);
+
+ /**
+ * @}
+diff --git a/src/nlmsg.c b/src/nlmsg.c
+index ba28c77..5582407 100644
+--- a/src/nlmsg.c
++++ b/src/nlmsg.c
+@@ -30,7 +30,7 @@
+ * @{
+ */
+
+-void nfq_nlmsg_verdict_put(struct nlmsghdr *nlh, int id, int verdict)
++void __EXPORTED nfq_nlmsg_verdict_put(struct nlmsghdr *nlh, int id, int verdict)
+ {
+ struct nfqnl_msg_verdict_hdr vh = {
+ .verdict = htonl(verdict),
+@@ -38,20 +38,17 @@ void nfq_nlmsg_verdict_put(struct nlmsghdr *nlh, int id, int verdict)
+ };
+ mnl_attr_put(nlh, NFQA_VERDICT_HDR, sizeof(vh), &vh);
+ }
+-EXPORT_SYMBOL(nfq_nlmsg_verdict_put);
+
+-void nfq_nlmsg_verdict_put_mark(struct nlmsghdr *nlh, uint32_t mark)
++void __EXPORTED nfq_nlmsg_verdict_put_mark(struct nlmsghdr *nlh, uint32_t mark)
+ {
+ mnl_attr_put_u32(nlh, NFQA_MARK, htonl(mark));
+ }
+-EXPORT_SYMBOL(nfq_nlmsg_verdict_put_mark);
+
+-void
++void __EXPORTED
+ nfq_nlmsg_verdict_put_pkt(struct nlmsghdr *nlh, const void *pkt, uint32_t plen)
+ {
+ mnl_attr_put(nlh, NFQA_PAYLOAD, plen, pkt);
+ }
+-EXPORT_SYMBOL(nfq_nlmsg_verdict_put_pkt);
+
+ /**
+ * @}
+@@ -85,7 +82,7 @@ EXPORT_SYMBOL(nfq_nlmsg_verdict_put_pkt);
+ * given protocol family. Both commands are ignored by Linux kernel 3.8 and
+ * later versions.
+ */
+-void nfq_nlmsg_cfg_put_cmd(struct nlmsghdr *nlh, uint16_t pf, uint8_t cmd)
++void __EXPORTED nfq_nlmsg_cfg_put_cmd(struct nlmsghdr *nlh, uint16_t pf, uint8_t cmd)
+ {
+ struct nfqnl_msg_config_cmd command = {
+ .command = cmd,
+@@ -93,9 +90,8 @@ void nfq_nlmsg_cfg_put_cmd(struct nlmsghdr *nlh, uint16_t pf, uint8_t cmd)
+ };
+ mnl_attr_put(nlh, NFQA_CFG_CMD, sizeof(command), &command);
+ }
+-EXPORT_SYMBOL(nfq_nlmsg_cfg_put_cmd);
+
+-void nfq_nlmsg_cfg_put_params(struct nlmsghdr *nlh, uint8_t mode, int range)
++void __EXPORTED nfq_nlmsg_cfg_put_params(struct nlmsghdr *nlh, uint8_t mode, int range)
+ {
+ struct nfqnl_msg_config_params params = {
+ .copy_range = htonl(range),
+@@ -103,13 +99,11 @@ void nfq_nlmsg_cfg_put_params(struct nlmsghdr *nlh, uint8_t mode, int range)
+ };
+ mnl_attr_put(nlh, NFQA_CFG_PARAMS, sizeof(params), &params);
+ }
+-EXPORT_SYMBOL(nfq_nlmsg_cfg_put_params);
+
+-void nfq_nlmsg_cfg_put_qmaxlen(struct nlmsghdr *nlh, uint32_t queue_maxlen)
++void __EXPORTED nfq_nlmsg_cfg_put_qmaxlen(struct nlmsghdr *nlh, uint32_t queue_maxlen)
+ {
+ mnl_attr_put_u32(nlh, NFQA_CFG_QUEUE_MAXLEN, htonl(queue_maxlen));
+ }
+-EXPORT_SYMBOL(nfq_nlmsg_cfg_put_qmaxlen);
+
+ /**
+ * @}
+@@ -179,12 +173,11 @@ static int nfq_pkt_parse_attr_cb(const struct nlattr *attr, void *data)
+ * This function returns MNL_CB_ERROR if any error occurs, or MNL_CB_OK on
+ * success.
+ */
+-int nfq_nlmsg_parse(const struct nlmsghdr *nlh, struct nlattr **attr)
++int __EXPORTED nfq_nlmsg_parse(const struct nlmsghdr *nlh, struct nlattr **attr)
+ {
+ return mnl_attr_parse(nlh, sizeof(struct nfgenmsg),
+ nfq_pkt_parse_attr_cb, attr);
+ }
+-EXPORT_SYMBOL(nfq_nlmsg_parse);
+
+ /**
+ * @}
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cthelper-visibility-hidden.patch b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cthelper-visibility-hidden.patch
new file mode 100644
index 000000000..e717d5b0e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cthelper-visibility-hidden.patch
@@ -0,0 +1,382 @@
+From f58c5b09fb59baf07c942d373fc4d522b27e73c6 Mon Sep 17 00:00:00 2001
+From: Kevin Cernekee <cernekee@chromium.org>
+Date: Wed, 4 Jan 2017 14:30:26 -0800
+Subject: Use __EXPORTED rather than EXPORT_SYMBOL
+
+clang is sensitive to the ordering of
+__attribute__((visibility("default"))) relative to the function
+body. gcc is not. So if we try to re-declare an existing function
+with default visibility, clang prints a warning and generates
+a broken .so file in which nfct_helper_* are not exported to library
+callers.
+
+Move the attribute up into the function definition to make clang happy.
+
+Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ doxygen.cfg.in | 2 +-
+ src/internal.h | 5 ++-
+ src/libnetfilter_cthelper.c | 83 ++++++++++++++++++---------------------------
+ 3 files changed, 36 insertions(+), 54 deletions(-)
+
+Index: libnetfilter_cthelper-1.0.0/doxygen.cfg.in
+===================================================================
+--- libnetfilter_cthelper-1.0.0.orig/doxygen.cfg.in
++++ libnetfilter_cthelper-1.0.0/doxygen.cfg.in
+@@ -72,7 +72,7 @@ RECURSIVE = YES
+ EXCLUDE =
+ EXCLUDE_SYMLINKS = NO
+ EXCLUDE_PATTERNS = */.git/* .*.d
+-EXCLUDE_SYMBOLS = EXPORT_SYMBOL
++EXCLUDE_SYMBOLS =
+ EXAMPLE_PATH =
+ EXAMPLE_PATTERNS =
+ EXAMPLE_RECURSIVE = NO
+Index: libnetfilter_cthelper-1.0.0/src/internal.h
+===================================================================
+--- libnetfilter_cthelper-1.0.0.orig/src/internal.h
++++ libnetfilter_cthelper-1.0.0/src/internal.h
+@@ -3,10 +3,9 @@
+
+ #include "config.h"
+ #ifdef HAVE_VISIBILITY_HIDDEN
+-# define __visible __attribute__((visibility("default")))
+-# define EXPORT_SYMBOL(x) typeof(x) (x) __visible
++# define __EXPORTED __attribute__((visibility("default")))
+ #else
+-# define EXPORT_SYMBOL
++# define __EXPORTED
+ #endif
+
+ #endif
+Index: libnetfilter_cthelper-1.0.0/src/libnetfilter_cthelper.c
+===================================================================
+--- libnetfilter_cthelper-1.0.0.orig/src/libnetfilter_cthelper.c
++++ libnetfilter_cthelper-1.0.0/src/libnetfilter_cthelper.c
+@@ -99,17 +99,16 @@ struct nfct_helper {
+ * In case of success, this function returns a valid pointer, otherwise NULL
+ * s returned and errno is appropriately set.
+ */
+-struct nfct_helper *nfct_helper_alloc(void)
++struct nfct_helper __EXPORTED *nfct_helper_alloc(void)
+ {
+ return calloc(1, sizeof(struct nfct_helper));
+ }
+-EXPORT_SYMBOL(nfct_helper_alloc);
+
+ /**
+ * nfct_helper_free - release one helper object
+ * \param nfct_helper pointer to the helper object
+ */
+-void nfct_helper_free(struct nfct_helper *h)
++void __EXPORTED nfct_helper_free(struct nfct_helper *h)
+ {
+ int i;
+
+@@ -119,7 +118,6 @@ void nfct_helper_free(struct nfct_helper
+ free(h->expect_policy[i]);
+ }
+ }
+-EXPORT_SYMBOL(nfct_helper_free);
+
+ /**
+ * nfct_helper_policy_alloc - allocate a new helper policy object
+@@ -127,21 +125,19 @@ EXPORT_SYMBOL(nfct_helper_free);
+ * In case of success, this function returns a valid pointer, otherwise NULL
+ * s returned and errno is appropriately set.
+ */
+-struct nfct_helper_policy *nfct_helper_policy_alloc(void)
++struct nfct_helper_policy __EXPORTED *nfct_helper_policy_alloc(void)
+ {
+ return calloc(1, sizeof(struct nfct_helper_policy));
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_alloc);
+
+ /**
+ * nfct_helper_free - release one helper policy object
+ * \param nfct_helper pointer to the helper object
+ */
+-void nfct_helper_policy_free(struct nfct_helper_policy *p)
++void __EXPORTED nfct_helper_policy_free(struct nfct_helper_policy *p)
+ {
+ free(p);
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_free);
+
+ /**
+ * nfct_helper_policy_attr_set - set one attribute of the helper object
+@@ -149,7 +145,7 @@ EXPORT_SYMBOL(nfct_helper_policy_free);
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_policy_attr_set(struct nfct_helper_policy *p,
+ enum nfct_helper_policy_attr_type type,
+ const void *data)
+@@ -170,7 +166,6 @@ nfct_helper_policy_attr_set(struct nfct_
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_attr_set);
+
+ /**
+ * nfct_helper_attr_set_str - set one attribute the helper object
+@@ -178,23 +173,21 @@ EXPORT_SYMBOL(nfct_helper_policy_attr_se
+ * \param type attribute type you want to set
+ * \param name string that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_policy_attr_set_str(struct nfct_helper_policy *p,
+ enum nfct_helper_policy_attr_type type,
+ const char *name)
+ {
+ nfct_helper_policy_attr_set(p, type, name);
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_attr_set_str);
+
+-void
++void __EXPORTED
+ nfct_helper_policy_attr_set_u32(struct nfct_helper_policy *p,
+ enum nfct_helper_policy_attr_type type,
+ uint32_t value)
+ {
+ nfct_helper_policy_attr_set(p, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_policy_attr_set_u32);
+
+ /**
+ * nfct_helper_attr_set - set one attribute of the helper object
+@@ -202,7 +195,7 @@ EXPORT_SYMBOL(nfct_helper_policy_attr_se
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_attr_set(struct nfct_helper *h,
+ enum nfct_helper_attr_type type, const void *data)
+ {
+@@ -250,7 +243,6 @@ nfct_helper_attr_set(struct nfct_helper
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set);
+
+ /**
+ * nfct_helper_attr_set_str - set one attribute the helper object
+@@ -258,44 +250,40 @@ EXPORT_SYMBOL(nfct_helper_attr_set);
+ * \param type attribute type you want to set
+ * \param name string that will be used to set this attribute
+ */
+-void
++void __EXPORTED
+ nfct_helper_attr_set_str(struct nfct_helper *nfct_helper, enum nfct_helper_attr_type type,
+ const char *name)
+ {
+ nfct_helper_attr_set(nfct_helper, type, name);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_str);
+
+-void
++void __EXPORTED
+ nfct_helper_attr_set_u8(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type, uint8_t value)
+ {
+ nfct_helper_attr_set(nfct_helper, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_u8);
+
+-void
++void __EXPORTED
+ nfct_helper_attr_set_u16(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type, uint16_t value)
+ {
+ nfct_helper_attr_set(nfct_helper, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_u16);
+
+-void
++void __EXPORTED
+ nfct_helper_attr_set_u32(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type, uint32_t value)
+ {
+ nfct_helper_attr_set(nfct_helper, type, &value);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_set_u32);
+
+ /**
+ * nfct_helper_attr_unset - unset one attribute the helper object
+ * \param nfct_helper pointer to the helper object
+ * \param type attribute type you want to set
+ */
+-void
++void __EXPORTED
+ nfct_helper_attr_unset(struct nfct_helper *nfct_helper, enum nfct_helper_attr_type type)
+ {
+ switch(type) {
+@@ -307,7 +295,6 @@ nfct_helper_attr_unset(struct nfct_helpe
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_unset);
+
+ /**
+ * nfct_helper_attr_get - get one attribute the helper object
+@@ -317,8 +304,9 @@ EXPORT_SYMBOL(nfct_helper_attr_unset);
+ * This function returns a valid pointer to the attribute data. If a
+ * unsupported attribute is used, this returns NULL.
+ */
+-const void *nfct_helper_attr_get(struct nfct_helper *helper,
+- enum nfct_helper_attr_type type)
++const void __EXPORTED *
++nfct_helper_attr_get(struct nfct_helper *helper,
++ enum nfct_helper_attr_type type)
+ {
+ const void *ret = NULL;
+
+@@ -358,7 +346,6 @@ const void *nfct_helper_attr_get(struct
+ }
+ return ret;
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get);
+
+ /**
+ * nfct_helper_attr_get_str - get one attribute the helper object
+@@ -368,13 +355,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get);
+ * This function returns a valid pointer to the beginning of the string.
+ * If the attribute is unsupported, this returns NULL.
+ */
+-const char *
++const char __EXPORTED *
+ nfct_helper_attr_get_str(struct nfct_helper *nfct_helper,
+ enum nfct_helper_attr_type type)
+ {
+ return (const char *)nfct_helper_attr_get(nfct_helper, type);
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_str);
+
+ /**
+ * nfct_helper_attr_get_u8 - get one attribute the helper object
+@@ -384,12 +370,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_str);
+ * This function returns a unsigned 8-bits integer. If the attribute is
+ * unsupported, this returns NULL.
+ */
+-uint8_t nfct_helper_attr_get_u8(struct nfct_helper *nfct_helper,
+- enum nfct_helper_attr_type type)
++uint8_t __EXPORTED
++nfct_helper_attr_get_u8(struct nfct_helper *nfct_helper,
++ enum nfct_helper_attr_type type)
+ {
+ return *((uint8_t *)nfct_helper_attr_get(nfct_helper, type));
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_u8);
+
+ /**
+ * nfct_helper_attr_get_u16 - get one attribute the helper object
+@@ -399,12 +385,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u8);
+ * This function returns a unsigned 16-bits integer. If the attribute is
+ * unsupported, this returns NULL.
+ */
+-uint16_t nfct_helper_attr_get_u16(struct nfct_helper *nfct_helper,
+- enum nfct_helper_attr_type type)
++uint16_t __EXPORTED
++nfct_helper_attr_get_u16(struct nfct_helper *nfct_helper,
++ enum nfct_helper_attr_type type)
+ {
+ return *((uint16_t *)nfct_helper_attr_get(nfct_helper, type));
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_u16);
+
+ /**
+ * nfct_helper_attr_get_u32 - get one attribute the helper object
+@@ -414,12 +400,12 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u16);
+ * This function returns a unsigned 32-bits integer. If the attribute is
+ * unsupported, this returns NULL.
+ */
+-uint32_t nfct_helper_attr_get_u32(struct nfct_helper *nfct_helper,
+- enum nfct_helper_attr_type type)
++uint32_t __EXPORTED
++nfct_helper_attr_get_u32(struct nfct_helper *nfct_helper,
++ enum nfct_helper_attr_type type)
+ {
+ return *((uint32_t *)nfct_helper_attr_get(nfct_helper, type));
+ }
+-EXPORT_SYMBOL(nfct_helper_attr_get_u32);
+
+ /**
+ * nfct_helper_snprintf - print helper object into one buffer
+@@ -431,9 +417,10 @@ EXPORT_SYMBOL(nfct_helper_attr_get_u32);
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int nfct_helper_snprintf(char *buf, size_t size,
+- struct nfct_helper *helper,
+- unsigned int type, unsigned int flags)
++int __EXPORTED
++nfct_helper_snprintf(char *buf, size_t size,
++ struct nfct_helper *helper,
++ unsigned int type, unsigned int flags)
+ {
+ int ret;
+
+@@ -454,7 +441,6 @@ int nfct_helper_snprintf(char *buf, size
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nfct_helper_snprintf);
+
+ /**
+ * @}
+@@ -490,7 +476,7 @@ EXPORT_SYMBOL(nfct_helper_snprintf);
+ * - Command NFNL_MSG_ACCT_DEL, to delete one specific nfct_helper object (if
+ * unused, otherwise you hit EBUSY).
+ */
+-struct nlmsghdr *
++struct nlmsghdr __EXPORTED *
+ nfct_helper_nlmsg_build_hdr(char *buf, uint8_t cmd,
+ uint16_t flags, uint32_t seq)
+ {
+@@ -509,7 +495,6 @@ nfct_helper_nlmsg_build_hdr(char *buf, u
+
+ return nlh;
+ }
+-EXPORT_SYMBOL(nfct_helper_nlmsg_build_hdr);
+
+ static void
+ nfct_helper_nlmsg_build_policy(struct nlmsghdr *nlh,
+@@ -530,7 +515,7 @@ nfct_helper_nlmsg_build_policy(struct nl
+ * \param nlh: netlink message that you want to use to add the payload.
+ * \param nfct_helper: pointer to a helper object
+ */
+-void
++void __EXPORTED
+ nfct_helper_nlmsg_build_payload(struct nlmsghdr *nlh, struct nfct_helper *h)
+ {
+ struct nlattr *nest;
+@@ -593,7 +578,6 @@ nfct_helper_nlmsg_build_payload(struct n
+ if (h->bitset & (1 << NFCTH_ATTR_STATUS))
+ mnl_attr_put_u32(nlh, NFCTH_STATUS, ntohl(h->status));
+ }
+-EXPORT_SYMBOL(nfct_helper_nlmsg_build_payload);
+
+ static int
+ nfct_helper_nlmsg_parse_tuple_cb(const struct nlattr *attr, void *data)
+@@ -795,7 +779,7 @@ nfct_helper_nlmsg_parse_attr_cb(const st
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int
++int __EXPORTED
+ nfct_helper_nlmsg_parse_payload(const struct nlmsghdr *nlh,
+ struct nfct_helper *h)
+ {
+@@ -832,7 +816,6 @@ nfct_helper_nlmsg_parse_payload(const st
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nfct_helper_nlmsg_parse_payload);
+
+ /**
+ * @}
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cttimeout-visibility-hidden.patch b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cttimeout-visibility-hidden.patch
new file mode 100644
index 000000000..2c606c832
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/files/libnetfilter-cttimeout-visibility-hidden.patch
@@ -0,0 +1,264 @@
+From d0c4e39d12f903e06db262656cff2e24d267bed7 Mon Sep 17 00:00:00 2001
+From: Kevin Cernekee <cernekee@chromium.org>
+Date: Wed, 4 Jan 2017 14:30:25 -0800
+Subject: Use __EXPORTED rather than EXPORT_SYMBOL
+
+clang is sensitive to the ordering of
+__attribute__((visibility("default"))) relative to the function
+body. gcc is not. So if we try to re-declare an existing function
+with default visibility, clang prints a warning and generates
+a broken .so file in which nfct_timeout_* are not exported to library
+callers.
+
+Move the attribute up into the function definition to make clang happy.
+
+Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ doxygen.cfg.in | 2 +-
+ src/internal.h | 5 ++---
+ src/libnetfilter_cttimeout.c | 44 +++++++++++++++++---------------------------
+ 3 files changed, 20 insertions(+), 31 deletions(-)
+
+diff --git a/doxygen.cfg.in b/doxygen.cfg.in
+index 8e5d449..09c3ce0 100644
+--- a/doxygen.cfg.in
++++ b/doxygen.cfg.in
+@@ -72,7 +72,7 @@ RECURSIVE = YES
+ EXCLUDE =
+ EXCLUDE_SYMLINKS = NO
+ EXCLUDE_PATTERNS = */.git/* .*.d
+-EXCLUDE_SYMBOLS = EXPORT_SYMBOL nfct_timeout _container_policy_cb
++EXCLUDE_SYMBOLS = nfct_timeout _container_policy_cb
+ EXAMPLE_PATH =
+ EXAMPLE_PATTERNS =
+ EXAMPLE_RECURSIVE = NO
+diff --git a/src/internal.h b/src/internal.h
+index 3a88d1a..5d78171 100644
+--- a/src/internal.h
++++ b/src/internal.h
+@@ -3,10 +3,9 @@
+
+ #include "config.h"
+ #ifdef HAVE_VISIBILITY_HIDDEN
+-# define __visible __attribute__((visibility("default")))
+-# define EXPORT_SYMBOL(x) typeof(x) (x) __visible
++# define __EXPORTED __attribute__((visibility("default")))
+ #else
+-# define EXPORT_SYMBOL
++# define __EXPORTED
+ #endif
+
+ #endif
+diff --git a/src/libnetfilter_cttimeout.c b/src/libnetfilter_cttimeout.c
+index 7844a1f..a0a7185 100644
+--- a/src/libnetfilter_cttimeout.c
++++ b/src/libnetfilter_cttimeout.c
+@@ -187,7 +187,7 @@ struct nfct_timeout {
+ * In case of success, this function returns a valid pointer, otherwise NULL
+ * s returned and errno is appropriately set.
+ */
+-struct nfct_timeout *nfct_timeout_alloc(void)
++struct nfct_timeout __EXPORTED *nfct_timeout_alloc(void)
+ {
+ struct nfct_timeout *t;
+
+@@ -197,19 +197,17 @@ struct nfct_timeout *nfct_timeout_alloc(void)
+
+ return t;
+ }
+-EXPORT_SYMBOL(nfct_timeout_alloc);
+
+ /**
+ * nfct_timeout_free - release one conntrack timeout object
+ * \param t pointer to the conntrack timeout object
+ */
+-void nfct_timeout_free(struct nfct_timeout *t)
++void __EXPORTED nfct_timeout_free(struct nfct_timeout *t)
+ {
+ if (t->timeout)
+ free(t->timeout);
+ free(t);
+ }
+-EXPORT_SYMBOL(nfct_timeout_free);
+
+ /**
+ * nfct_timeout_attr_set - set one attribute of the conntrack timeout object
+@@ -217,7 +215,7 @@ EXPORT_SYMBOL(nfct_timeout_free);
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-int
++int __EXPORTED
+ nfct_timeout_attr_set(struct nfct_timeout *t, uint32_t type, const void *data)
+ {
+ switch(type) {
+@@ -236,7 +234,6 @@ nfct_timeout_attr_set(struct nfct_timeout *t, uint32_t type, const void *data)
+ t->attrset |= (1 << type);
+ return 0;
+ }
+-EXPORT_SYMBOL(nfct_timeout_attr_set);
+
+ /**
+ * nfct_timeout_attr_set_u8 - set one attribute of the conntrack timeout object
+@@ -244,12 +241,11 @@ EXPORT_SYMBOL(nfct_timeout_attr_set);
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-int
++int __EXPORTED
+ nfct_timeout_attr_set_u8(struct nfct_timeout *t, uint32_t type, uint8_t data)
+ {
+ return nfct_timeout_attr_set(t, type, &data);
+ }
+-EXPORT_SYMBOL(nfct_timeout_attr_set_u8);
+
+ /**
+ * nfct_timeout_attr_set_u16 - set one attribute of the conntrack timeout object
+@@ -257,23 +253,21 @@ EXPORT_SYMBOL(nfct_timeout_attr_set_u8);
+ * \param type attribute type you want to set
+ * \param data pointer to data that will be used to set this attribute
+ */
+-int
++int __EXPORTED
+ nfct_timeout_attr_set_u16(struct nfct_timeout *t, uint32_t type, uint16_t data)
+ {
+ return nfct_timeout_attr_set(t, type, &data);
+ }
+-EXPORT_SYMBOL(nfct_timeout_attr_set_u16);
+
+ /**
+ * nfct_timeout_attr_unset - unset one attribute of the conntrack timeout object
+ * \param t pointer to the conntrack timeout object
+ * \param type attribute type you want to set
+ */
+-void nfct_timeout_attr_unset(struct nfct_timeout *t, uint32_t type)
++void __EXPORTED nfct_timeout_attr_unset(struct nfct_timeout *t, uint32_t type)
+ {
+ t->attrset &= ~(1 << type);
+ }
+-EXPORT_SYMBOL(nfct_timeout_attr_unset);
+
+ /**
+ * nfct_timeout_policy_attr_set_u32 - set one attribute of the policy
+@@ -281,7 +275,7 @@ EXPORT_SYMBOL(nfct_timeout_attr_unset);
+ * \param type attribute type you want to set
+ * \param data data that will be used to set this attribute
+ */
+-int
++int __EXPORTED
+ nfct_timeout_policy_attr_set_u32(struct nfct_timeout *t,
+ uint32_t type, uint32_t data)
+ {
+@@ -319,18 +313,17 @@ nfct_timeout_policy_attr_set_u32(struct nfct_timeout *t,
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nfct_timeout_policy_attr_set_u32);
+
+ /**
+ * nfct_timeout_policy_attr_unset - unset one attribute of the policy
+ * \param t pointer to the conntrack timeout object
+ * \param type attribute type you want to set
+ */
+-void nfct_timeout_policy_attr_unset(struct nfct_timeout *t, uint32_t type)
++void __EXPORTED
++nfct_timeout_policy_attr_unset(struct nfct_timeout *t, uint32_t type)
+ {
+ t->attrset &= ~(1 << type);
+ }
+-EXPORT_SYMBOL(nfct_timeout_policy_attr_unset);
+
+ /**
+ * nfct_timeout_policy_attr_to_name - get state name from protocol state number
+@@ -340,7 +333,8 @@ EXPORT_SYMBOL(nfct_timeout_policy_attr_unset);
+ * This function returns NULL if unsupported protocol or state number is passed.
+ * Otherwise, a pointer to valid string is returned.
+ */
+-const char *nfct_timeout_policy_attr_to_name(uint8_t l4proto, uint32_t state)
++const char __EXPORTED *
++nfct_timeout_policy_attr_to_name(uint8_t l4proto, uint32_t state)
+ {
+ if (timeout_protocol[l4proto].state_to_name == NULL) {
+ printf("no array state name\n");
+@@ -354,7 +348,6 @@ const char *nfct_timeout_policy_attr_to_name(uint8_t l4proto, uint32_t state)
+
+ return timeout_protocol[l4proto].state_to_name[state];
+ }
+-EXPORT_SYMBOL(nfct_timeout_policy_attr_to_name);
+
+ /**
+ * @}
+@@ -438,8 +431,9 @@ nfct_timeout_snprintf_default(char *buf, size_t size,
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int nfct_timeout_snprintf(char *buf, size_t size, const struct nfct_timeout *t,
+- unsigned int type, unsigned int flags)
++int __EXPORTED
++nfct_timeout_snprintf(char *buf, size_t size, const struct nfct_timeout *t,
++ unsigned int type, unsigned int flags)
+ {
+ int ret = 0;
+
+@@ -454,7 +448,6 @@ int nfct_timeout_snprintf(char *buf, size_t size, const struct nfct_timeout *t,
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nfct_timeout_snprintf);
+
+ /**
+ * @}
+@@ -477,7 +470,7 @@ EXPORT_SYMBOL(nfct_timeout_snprintf);
+ * - CTNL_MSG_TIMEOUT_GET: get conntrack timeout object.
+ * - CTNL_MSG_TIMEOUT_DEL: delete conntrack timeout object.
+ */
+-struct nlmsghdr *
++struct nlmsghdr __EXPORTED *
+ nfct_timeout_nlmsg_build_hdr(char *buf, uint8_t cmd,
+ uint16_t flags, uint32_t seq)
+ {
+@@ -496,14 +489,13 @@ nfct_timeout_nlmsg_build_hdr(char *buf, uint8_t cmd,
+
+ return nlh;
+ }
+-EXPORT_SYMBOL(nfct_timeout_nlmsg_build_hdr);
+
+ /**
+ * nfct_timeout_nlmsg_build_payload - build payload from ct timeout object
+ * \param nlh: netlink message that you want to use to add the payload.
+ * \param t: pointer to a conntrack timeout object
+ */
+-void
++void __EXPORTED
+ nfct_timeout_nlmsg_build_payload(struct nlmsghdr *nlh,
+ const struct nfct_timeout *t)
+ {
+@@ -532,7 +524,6 @@ nfct_timeout_nlmsg_build_payload(struct nlmsghdr *nlh,
+ }
+
+ }
+-EXPORT_SYMBOL(nfct_timeout_nlmsg_build_payload);
+
+ static int
+ timeout_nlmsg_parse_attr_cb(const struct nlattr *attr, void *data)
+@@ -629,7 +620,7 @@ timeout_parse_attr_data(struct nfct_timeout *t, const struct nlattr *nest)
+ * This function returns -1 in case that some mandatory attributes are
+ * missing. On sucess, it returns 0.
+ */
+-int
++int __EXPORTED
+ nfct_timeout_nlmsg_parse_payload(const struct nlmsghdr *nlh,
+ struct nfct_timeout *t)
+ {
+@@ -654,7 +645,6 @@ nfct_timeout_nlmsg_parse_payload(const struct nlmsghdr *nlh,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nfct_timeout_nlmsg_parse_payload);
+
+ /**
+ * @}
+--
+cgit v1.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-acct_1.0.3.bb b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-acct_1.0.3.bb
new file mode 100644
index 000000000..974035ccc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-acct_1.0.3.bb
@@ -0,0 +1,17 @@
+SUMMARY = "libnetfilter_acct accounting infrastructure."
+DESCRIPTION = "libnetfilter_acct is the userspace library providing interface to extended accounting infrastructure."
+HOMEPAGE = "http://netfilter.org/projects/libnetfilter_acct/index.html"
+SECTION = "libs"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+DEPENDS = "libnfnetlink libmnl"
+
+SRC_URI = "http://ftp.netfilter.org/pub/libnetfilter_acct/libnetfilter_acct-1.0.3.tar.bz2 \
+ file://0001-libnetfilter-acct-Declare-the-define-visivility-attribute-together.patch \
+"
+SRC_URI[md5sum] = "814b2972b2f5c740ff87510bc109168b"
+SRC_URI[sha256sum] = "4250ceef3efe2034f4ac05906c3ee427db31b9b0a2df41b2744f4bf79a959a1a"
+
+S = "${WORKDIR}/libnetfilter_acct-${PV}"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-conntrack_1.0.6.bb b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-conntrack_1.0.6.bb
new file mode 100644
index 000000000..e4e186bdb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-conntrack_1.0.6.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Netfilter connection tracking library"
+DESCRIPTION = "Userspace library providing a programming interface (API) to the Linux kernel netfilter connection tracking state table"
+HOMEPAGE = "http://www.netfilter.org/projects/libnetfilter_conntrack/index.html"
+SECTION = "libs"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+DEPENDS = "libnfnetlink libmnl"
+
+SRC_URI = "http://www.netfilter.org/projects/libnetfilter_conntrack/files/libnetfilter_conntrack-${PV}.tar.bz2;name=tar \
+"
+SRC_URI[tar.md5sum] = "7139c5f408dd9606ffecfd5dcda8175b"
+SRC_URI[tar.sha256sum] = "efcc08021284e75f4d96d3581c5155a11f08fd63316b1938cbcb269c87f37feb"
+
+S = "${WORKDIR}/libnetfilter_conntrack-${PV}"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cthelper_1.0.0.bb b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cthelper_1.0.0.bb
new file mode 100644
index 000000000..92cb23d6e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cthelper_1.0.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Netfilter connection tracking helper library"
+DESCRIPTION = "Userspace library providing a programming interface (API) to the Linux kernel netfilter user-space helper infrastructure"
+HOMEPAGE = "http://www.netfilter.org/projects/libnetfilter_cthelper/index.html"
+SECTION = "libs"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+DEPENDS = "libmnl"
+
+SRC_URI = "http://www.netfilter.org/projects/libnetfilter_cthelper/files/libnetfilter_cthelper-${PV}.tar.bz2;name=tar \
+ file://libnetfilter-cthelper-visibility-hidden.patch \
+"
+SRC_URI[tar.md5sum] = "b2efab1a3a198a5add448960ba011acd"
+SRC_URI[tar.sha256sum] = "07618e71c4d9a6b6b3dc1986540486ee310a9838ba754926c7d14a17d8fccf3d"
+
+S = "${WORKDIR}/libnetfilter_cthelper-${PV}"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cttimeout_1.0.0.bb b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cttimeout_1.0.0.bb
new file mode 100644
index 000000000..ff32f3409
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-cttimeout_1.0.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Netfilter connection tracking timeout library"
+DESCRIPTION = "Userspace library providing a programming interface (API) to the Linux kernel netfilter fine-grain connection tracking timeout infrastructure"
+SECTION = "libs"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+DEPENDS = "libmnl"
+
+SRC_URI = "http://www.netfilter.org/projects/libnetfilter_cttimeout/files/libnetfilter_cttimeout-${PV}.tar.bz2;name=tar \
+ file://libnetfilter-cttimeout-visibility-hidden.patch \
+"
+SRC_URI[tar.md5sum] = "7697437fc9ebb6f6b83df56a633db7f9"
+SRC_URI[tar.sha256sum] = "aeab12754f557cba3ce2950a2029963d817490df7edb49880008b34d7ff8feba"
+
+S = "${WORKDIR}/libnetfilter_cttimeout-${PV}"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-log_1.0.1.bb b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-log_1.0.1.bb
new file mode 100644
index 000000000..2f627d458
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-log_1.0.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Netfilter logging library"
+DESCRIPTION = "Userspace library providing a programming interface (API) to the Linux kernel netfilter log message (NFLOG)"
+HOMEPAGE = "http://www.netfilter.org/projects/libnetfilter_log/index.html"
+SECTION = "libs"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+DEPENDS = "libnfnetlink libmnl"
+SRCREV = "ba196a97e810746e5660fe3f57c87c0ed0f2b324"
+PV .= "+git${SRCPV}"
+
+SRC_URI = "git://git.netfilter.org/libnetfilter_log"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-queue_1.0.2.bb b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-queue_1.0.2.bb
new file mode 100644
index 000000000..754e11d99
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnetfilter/libnetfilter-queue_1.0.2.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Netfilter packet queue access library"
+DESCRIPTION = "Userspace library providing a programming interface (API) to access the Linux kernel netfilter packet queue"
+HOMEPAGE = "http://www.netfilter.org/projects/libnetfilter_queue/index.html"
+SECTION = "libs"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+DEPENDS = "libnfnetlink libmnl"
+
+PV .= "+git${SRCREV}"
+SRCREV = "981025e103d887fb6a9c9bb49c74ec323108d098"
+
+SRC_URI = "git://git.netfilter.org/libnetfilter_queue \
+ file://0001-Correct-typo-in-the-location-of-internal.h-in-includ.patch \
+ file://0001-libnetfilter-queue-Declare-the-define-visivility-attribute-together.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0001-build-resolve-automake-1.12-warnings.patch b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0001-build-resolve-automake-1.12-warnings.patch
new file mode 100644
index 000000000..00d95cd79
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0001-build-resolve-automake-1.12-warnings.patch
@@ -0,0 +1,28 @@
+From 2e5f2b81fb8cbe0d1cd33e58caa19ac308e1f847 Mon Sep 17 00:00:00 2001
+From: Jan Engelhardt <jengelh@inai.de>
+Date: Tue, 9 Oct 2012 15:59:48 +0200
+Subject: [PATCH 1/6] build: resolve automake-1.12 warnings
+
+am/ltlibrary.am: warning: 'libnfnetlink.la': linking libtool libraries
+using a non-POSIX archiver requires 'AM_PROG_AR' in 'configure.ac'
+
+Signed-off-by: Jan Engelhardt <jengelh@inai.de>
+---
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/configure.ac b/configure.ac
+index ed549df..0926a1c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -7,6 +7,7 @@ AC_CANONICAL_HOST
+
+ AM_INIT_AUTOMAKE([-Wall foreign subdir-objects
+ tar-pax no-dist-gzip dist-bzip2 1.6])
++m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
+
+ dnl kernel style compile messages
+ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0002-src-get-source-code-license-header-in-sync-with-curr.patch b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0002-src-get-source-code-license-header-in-sync-with-curr.patch
new file mode 100644
index 000000000..c2fb5e05a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0002-src-get-source-code-license-header-in-sync-with-curr.patch
@@ -0,0 +1,49 @@
+From 5e6b6e23a8b04475c5a9de7eddb4c18103932fe5 Mon Sep 17 00:00:00 2001
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+Date: Wed, 7 Aug 2013 20:53:57 +0200
+Subject: [PATCH 2/6] src: get source code license header in sync with current
+ licensing terms
+
+Since (3956761 license: upgrade to GPLv2+), we upgraded to GPLv2+,
+propagate that changes to src/iftable.c and src/rtnl.c
+
+Reported-by: Thomas Woerner <twoerner@redhat.com>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ src/iftable.c | 2 +-
+ src/rtnl.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/iftable.c b/src/iftable.c
+index 0325335..5976ed8 100644
+--- a/src/iftable.c
++++ b/src/iftable.c
+@@ -3,7 +3,7 @@
+ * (C) 2004 by Astaro AG, written by Harald Welte <hwelte@astaro.com>
+ * (C) 2008 by Pablo Neira Ayuso <pablo@netfilter.org>
+ *
+- * This software is Free Software and licensed under GNU GPLv2.
++ * This software is Free Software and licensed under GNU GPLv2+.
+ */
+
+ /* IFINDEX handling */
+diff --git a/src/rtnl.c b/src/rtnl.c
+index 5ccb272..7b4ac7d 100644
+--- a/src/rtnl.c
++++ b/src/rtnl.c
+@@ -1,10 +1,10 @@
+ /* rtnl - rtnetlink utility functions
+ *
+ * (C) 2004 by Astaro AG, written by Harald Welte <hwelte@astaro.com>
+- *
++ *
+ * Adapted to nfnetlink by Eric Leblond <eric@inl.fr>
+ *
+- * This software is free software and licensed under GNU GPLv2.
++ * This software is free software and licensed under GNU GPLv2+.
+ *
+ */
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0003-configure-uclinux-is-also-linux.patch b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0003-configure-uclinux-is-also-linux.patch
new file mode 100644
index 000000000..6cb7ed6fa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0003-configure-uclinux-is-also-linux.patch
@@ -0,0 +1,27 @@
+From b259fe13826414c1bd5328a25c8d6d60e20e65f2 Mon Sep 17 00:00:00 2001
+From: Gustavo Zacarias <gustavo@zacarias.com.ar>
+Date: Tue, 10 Sep 2013 16:23:29 -0300
+Subject: [PATCH 3/6] configure: uclinux is also linux
+
+Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0926a1c..b979772 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -18,7 +18,7 @@ AC_DISABLE_STATIC
+ AM_PROG_LIBTOOL
+
+ case "$host" in
+-*-*-linux*) ;;
++*-*-linux* | *-*-uclinux*) ;;
+ *) AC_MSG_ERROR([Linux only, dude!]);;
+ esac
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0004-libnfnetlink-initialize-attribute-padding-to-resolve.patch b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0004-libnfnetlink-initialize-attribute-padding-to-resolve.patch
new file mode 100644
index 000000000..cf3a84135
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0004-libnfnetlink-initialize-attribute-padding-to-resolve.patch
@@ -0,0 +1,39 @@
+From b142da8d2c9e2e2dfbe4e89e680dd124f6064ac8 Mon Sep 17 00:00:00 2001
+From: Pablo Neira Ayuso <pablo@netfilter.org>
+Date: Mon, 3 Feb 2014 12:09:29 +0100
+Subject: [PATCH 4/6] libnfnetlink: initialize attribute padding to resolve
+ valgrind warnings
+
+==12195== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
+==12195== at 0x51209C3: __sendto_nocancel (syscall-template.S:81)
+==12195== by 0x53E4D12: nfnl_send (libnfnetlink.c:391)
+==12195== by 0x53E6952: nfnl_query (libnfnetlink.c:1569)
+==12195== by 0x4E344AF: __build_send_cfg_msg.isra.1 (libnetfilter_log.c:143)
+==12195== by 0x4E34710: nflog_bind_group (libnetfilter_log.c:413)
+==12195== by 0x400CB1: main (nfulnl_test.c:77)
+==12195== Address 0x7fefff3e9 is on thread 1's stack
+
+This patch sets to zero the padding that is included to align the
+attribute payload.
+
+Reported-by: Ivan Homoliak <xhomol11@gmail.com>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ src/libnfnetlink.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/libnfnetlink.c b/src/libnfnetlink.c
+index 4b2bcd0..398b7d7 100644
+--- a/src/libnfnetlink.c
++++ b/src/libnfnetlink.c
+@@ -809,6 +809,7 @@ int nfnl_addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data,
+ nfa->nfa_type = type;
+ nfa->nfa_len = len;
+ memcpy(NFA_DATA(nfa), data, alen);
++ memset((uint8_t *)nfa + nfa->nfa_len, 0, NFA_ALIGN(alen) - alen);
+ n->nlmsg_len = (NLMSG_ALIGN(n->nlmsg_len) + NFA_ALIGN(len));
+ return 0;
+ }
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0005-include-Sync-with-kernel-headers.patch b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0005-include-Sync-with-kernel-headers.patch
new file mode 100644
index 000000000..383f0e8b3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0005-include-Sync-with-kernel-headers.patch
@@ -0,0 +1,110 @@
+From b10c90a61a5fc46f2be5aeecb9c96e84178f7717 Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sat, 16 May 2015 14:49:07 +0200
+Subject: [PATCH 5/6] include: Sync with kernel headers
+
+Signed-off-by: Felix Janda <felix.janda@posteo.de>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ include/libnfnetlink/linux_nfnetlink.h | 44 ++++-----------------------
+ include/libnfnetlink/linux_nfnetlink_compat.h | 12 ++++----
+ 2 files changed, 12 insertions(+), 44 deletions(-)
+
+diff --git a/include/libnfnetlink/linux_nfnetlink.h b/include/libnfnetlink/linux_nfnetlink.h
+index 76a8550..44a38d6 100644
+--- a/include/libnfnetlink/linux_nfnetlink.h
++++ b/include/libnfnetlink/linux_nfnetlink.h
+@@ -25,9 +25,9 @@ enum nfnetlink_groups {
+ /* General form of address family dependent message.
+ */
+ struct nfgenmsg {
+- u_int8_t nfgen_family; /* AF_xxx */
+- u_int8_t version; /* nfnetlink version */
+- u_int16_t res_id; /* resource id */
++ __u8 nfgen_family; /* AF_xxx */
++ __u8 version; /* nfnetlink version */
++ __be16 res_id; /* resource id */
+ };
+
+ #define NFNETLINK_V0 0
+@@ -46,40 +46,8 @@ struct nfgenmsg {
+ #define NFNL_SUBSYS_CTNETLINK_EXP 2
+ #define NFNL_SUBSYS_QUEUE 3
+ #define NFNL_SUBSYS_ULOG 4
+-#define NFNL_SUBSYS_COUNT 5
++#define NFNL_SUBSYS_OSF 5
++#define NFNL_SUBSYS_IPSET 6
++#define NFNL_SUBSYS_COUNT 7
+
+-#ifdef __KERNEL__
+-
+-#include <linux/netlink.h>
+-#include <linux/capability.h>
+-#include <net/netlink.h>
+-
+-struct nfnl_callback
+-{
+- int (*call)(struct sock *nl, struct sk_buff *skb,
+- struct nlmsghdr *nlh, struct nlattr *cda[]);
+- const struct nla_policy *policy; /* netlink attribute policy */
+- const u_int16_t attr_count; /* number of nlattr's */
+-};
+-
+-struct nfnetlink_subsystem
+-{
+- const char *name;
+- __u8 subsys_id; /* nfnetlink subsystem ID */
+- __u8 cb_count; /* number of callbacks */
+- const struct nfnl_callback *cb; /* callback for individual types */
+-};
+-
+-extern int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n);
+-extern int nfnetlink_subsys_unregister(const struct nfnetlink_subsystem *n);
+-
+-extern int nfnetlink_has_listeners(unsigned int group);
+-extern int nfnetlink_send(struct sk_buff *skb, u32 pid, unsigned group,
+- int echo);
+-extern int nfnetlink_unicast(struct sk_buff *skb, u_int32_t pid, int flags);
+-
+-#define MODULE_ALIAS_NFNL_SUBSYS(subsys) \
+- MODULE_ALIAS("nfnetlink-subsys-" __stringify(subsys))
+-
+-#endif /* __KERNEL__ */
+ #endif /* _NFNETLINK_H */
+diff --git a/include/libnfnetlink/linux_nfnetlink_compat.h b/include/libnfnetlink/linux_nfnetlink_compat.h
+index e145176..74b9e55 100644
+--- a/include/libnfnetlink/linux_nfnetlink_compat.h
++++ b/include/libnfnetlink/linux_nfnetlink_compat.h
+@@ -1,6 +1,8 @@
+ #ifndef _NFNETLINK_COMPAT_H
+ #define _NFNETLINK_COMPAT_H
+-#ifndef __KERNEL__
++
++#include <linux/types.h>
++
+ /* Old nfnetlink macros for userspace */
+
+ /* nfnetlink groups: Up to 32 maximum */
+@@ -18,10 +20,9 @@
+ * ! nfnetlink use the same attributes methods. - J. Schulist.
+ */
+
+-struct nfattr
+-{
+- u_int16_t nfa_len;
+- u_int16_t nfa_type; /* we use 15 bits for the type, and the highest
++struct nfattr {
++ __u16 nfa_len;
++ __u16 nfa_type; /* we use 15 bits for the type, and the highest
+ * bit to indicate whether the payload is nested */
+ };
+
+@@ -57,5 +58,4 @@ struct nfattr
+ + NLMSG_ALIGN(sizeof(struct nfgenmsg))))
+ #define NFM_PAYLOAD(n) NLMSG_PAYLOAD(n, sizeof(struct nfgenmsg))
+
+-#endif /* ! __KERNEL__ */
+ #endif /* _NFNETLINK_COMPAT_H */
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0006-src-Use-stdint-types-everywhere.patch b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0006-src-Use-stdint-types-everywhere.patch
new file mode 100644
index 000000000..72c9987d1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink/0006-src-Use-stdint-types-everywhere.patch
@@ -0,0 +1,403 @@
+From 5cb589e246c91331ee6b3926b15f5e6cfc8ad95e Mon Sep 17 00:00:00 2001
+From: Felix Janda <felix.janda@posteo.de>
+Date: Sat, 16 May 2015 14:59:57 +0200
+Subject: [PATCH 6/6] src: Use stdint types everywhere
+
+Signed-off-by: Felix Janda <felix.janda@posteo.de>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ include/libnfnetlink/libnfnetlink.h | 25 ++++++-------
+ src/iftable.c | 8 ++---
+ src/iftable.h | 4 +--
+ src/libnfnetlink.c | 72 ++++++++++++++++++-------------------
+ src/rtnl.c | 4 +--
+ src/rtnl.h | 2 +-
+ 6 files changed, 58 insertions(+), 57 deletions(-)
+
+diff --git a/include/libnfnetlink/libnfnetlink.h b/include/libnfnetlink/libnfnetlink.h
+index 1d8c49d..cd0be3d 100644
+--- a/include/libnfnetlink/libnfnetlink.h
++++ b/include/libnfnetlink/libnfnetlink.h
+@@ -15,6 +15,7 @@
+ #define aligned_u64 unsigned long long __attribute__((aligned(8)))
+ #endif
+
++#include <stdint.h>
+ #include <sys/socket.h> /* for sa_family_t */
+ #include <linux/netlink.h>
+ #include <libnfnetlink/linux_nfnetlink.h>
+@@ -55,7 +56,7 @@ struct nfnlhdr {
+ struct nfnl_callback {
+ int (*call)(struct nlmsghdr *nlh, struct nfattr *nfa[], void *data);
+ void *data;
+- u_int16_t attr_count;
++ uint16_t attr_count;
+ };
+
+ struct nfnl_handle;
+@@ -69,7 +70,7 @@ extern struct nfnl_handle *nfnl_open(void);
+ extern int nfnl_close(struct nfnl_handle *);
+
+ extern struct nfnl_subsys_handle *nfnl_subsys_open(struct nfnl_handle *,
+- u_int8_t, u_int8_t,
++ uint8_t, uint8_t,
+ unsigned int);
+ extern void nfnl_subsys_close(struct nfnl_subsys_handle *);
+
+@@ -88,8 +89,8 @@ extern int nfnl_sendiov(const struct nfnl_handle *nfnlh,
+ const struct iovec *iov, unsigned int num,
+ unsigned int flags);
+ extern void nfnl_fill_hdr(struct nfnl_subsys_handle *, struct nlmsghdr *,
+- unsigned int, u_int8_t, u_int16_t, u_int16_t,
+- u_int16_t);
++ unsigned int, uint8_t, uint16_t, uint16_t,
++ uint16_t);
+ extern __attribute__((deprecated)) int
+ nfnl_talk(struct nfnl_handle *, struct nlmsghdr *, pid_t,
+ unsigned, struct nlmsghdr *,
+@@ -103,8 +104,8 @@ nfnl_listen(struct nfnl_handle *,
+ /* receiving */
+ extern ssize_t nfnl_recv(const struct nfnl_handle *h, unsigned char *buf, size_t len);
+ extern int nfnl_callback_register(struct nfnl_subsys_handle *,
+- u_int8_t type, struct nfnl_callback *cb);
+-extern int nfnl_callback_unregister(struct nfnl_subsys_handle *, u_int8_t type);
++ uint8_t type, struct nfnl_callback *cb);
++extern int nfnl_callback_unregister(struct nfnl_subsys_handle *, uint8_t type);
+ extern int nfnl_handle_packet(struct nfnl_handle *, char *buf, int len);
+
+ /* parsing */
+@@ -180,12 +181,12 @@ extern int nfnl_query(struct nfnl_handle *h, struct nlmsghdr *nlh);
+
+ /* nfnl attribute handling functions */
+ extern int nfnl_addattr_l(struct nlmsghdr *, int, int, const void *, int);
+-extern int nfnl_addattr8(struct nlmsghdr *, int, int, u_int8_t);
+-extern int nfnl_addattr16(struct nlmsghdr *, int, int, u_int16_t);
+-extern int nfnl_addattr32(struct nlmsghdr *, int, int, u_int32_t);
++extern int nfnl_addattr8(struct nlmsghdr *, int, int, uint8_t);
++extern int nfnl_addattr16(struct nlmsghdr *, int, int, uint16_t);
++extern int nfnl_addattr32(struct nlmsghdr *, int, int, uint32_t);
+ extern int nfnl_nfa_addattr_l(struct nfattr *, int, int, const void *, int);
+-extern int nfnl_nfa_addattr16(struct nfattr *, int, int, u_int16_t);
+-extern int nfnl_nfa_addattr32(struct nfattr *, int, int, u_int32_t);
++extern int nfnl_nfa_addattr16(struct nfattr *, int, int, uint16_t);
++extern int nfnl_nfa_addattr32(struct nfattr *, int, int, uint32_t);
+ extern int nfnl_parse_attr(struct nfattr **, int, struct nfattr *, int);
+ #define nfnl_parse_nested(tb, max, nfa) \
+ nfnl_parse_attr((tb), (max), NFA_DATA((nfa)), NFA_PAYLOAD((nfa)))
+@@ -197,7 +198,7 @@ extern int nfnl_parse_attr(struct nfattr **, int, struct nfattr *, int);
+ ({ (tail)->nfa_len = (void *) NLMSG_TAIL(nlh) - (void *) tail; })
+
+ extern void nfnl_build_nfa_iovec(struct iovec *iov, struct nfattr *nfa,
+- u_int16_t type, u_int32_t len,
++ uint16_t type, uint32_t len,
+ unsigned char *val);
+ extern unsigned int nfnl_rcvbufsiz(const struct nfnl_handle *h,
+ unsigned int size);
+diff --git a/src/iftable.c b/src/iftable.c
+index 5976ed8..157f97b 100644
+--- a/src/iftable.c
++++ b/src/iftable.c
+@@ -27,10 +27,10 @@
+ struct ifindex_node {
+ struct list_head head;
+
+- u_int32_t index;
+- u_int32_t type;
+- u_int32_t alen;
+- u_int32_t flags;
++ uint32_t index;
++ uint32_t type;
++ uint32_t alen;
++ uint32_t flags;
+ char addr[8];
+ char name[16];
+ };
+diff --git a/src/iftable.h b/src/iftable.h
+index 8df7f24..655df6b 100644
+--- a/src/iftable.h
++++ b/src/iftable.h
+@@ -1,8 +1,8 @@
+ #ifndef _IFTABLE_H
+ #define _IFTABLE_H
+
+-int iftable_delete(u_int32_t dst, u_int32_t mask, u_int32_t gw, u_int32_t oif);
+-int iftable_insert(u_int32_t dst, u_int32_t mask, u_int32_t gw, u_int32_t oif);
++int iftable_delete(uint32_t dst, uint32_t mask, uint32_t gw, uint32_t oif);
++int iftable_insert(uint32_t dst, uint32_t mask, uint32_t gw, uint32_t oif);
+
+ int iftable_init(void);
+ void iftable_fini(void);
+diff --git a/src/libnfnetlink.c b/src/libnfnetlink.c
+index 398b7d7..df57533 100644
+--- a/src/libnfnetlink.c
++++ b/src/libnfnetlink.c
+@@ -72,9 +72,9 @@
+
+ struct nfnl_subsys_handle {
+ struct nfnl_handle *nfnlh;
+- u_int32_t subscriptions;
+- u_int8_t subsys_id;
+- u_int8_t cb_count;
++ uint32_t subscriptions;
++ uint8_t subsys_id;
++ uint8_t cb_count;
+ struct nfnl_callback *cb; /* array of callbacks */
+ };
+
+@@ -86,11 +86,11 @@ struct nfnl_handle {
+ int fd;
+ struct sockaddr_nl local;
+ struct sockaddr_nl peer;
+- u_int32_t subscriptions;
+- u_int32_t seq;
+- u_int32_t dump;
+- u_int32_t rcv_buffer_size; /* for nfnl_catch */
+- u_int32_t flags;
++ uint32_t subscriptions;
++ uint32_t seq;
++ uint32_t dump;
++ uint32_t rcv_buffer_size; /* for nfnl_catch */
++ uint32_t flags;
+ struct nlmsghdr *last_nlhdr;
+ struct nfnl_subsys_handle subsys[NFNL_MAX_SUBSYS+1];
+ };
+@@ -145,7 +145,7 @@ unsigned int nfnl_portid(const struct nfnl_handle *h)
+ static int recalc_rebind_subscriptions(struct nfnl_handle *nfnlh)
+ {
+ int i, err;
+- u_int32_t new_subscriptions = nfnlh->subscriptions;
++ uint32_t new_subscriptions = nfnlh->subscriptions;
+
+ for (i = 0; i < NFNL_MAX_SUBSYS; i++)
+ new_subscriptions |= nfnlh->subsys[i].subscriptions;
+@@ -273,8 +273,8 @@ void nfnl_set_rcv_buffer_size(struct nfnl_handle *h, unsigned int size)
+ * a valid address that points to a nfnl_subsys_handle structure is returned.
+ */
+ struct nfnl_subsys_handle *
+-nfnl_subsys_open(struct nfnl_handle *nfnlh, u_int8_t subsys_id,
+- u_int8_t cb_count, u_int32_t subscriptions)
++nfnl_subsys_open(struct nfnl_handle *nfnlh, uint8_t subsys_id,
++ uint8_t cb_count, uint32_t subscriptions)
+ {
+ struct nfnl_subsys_handle *ssh;
+
+@@ -435,10 +435,10 @@ int nfnl_sendiov(const struct nfnl_handle *nfnlh, const struct iovec *iov,
+ */
+ void nfnl_fill_hdr(struct nfnl_subsys_handle *ssh,
+ struct nlmsghdr *nlh, unsigned int len,
+- u_int8_t family,
+- u_int16_t res_id,
+- u_int16_t msg_type,
+- u_int16_t msg_flags)
++ uint8_t family,
++ uint16_t res_id,
++ uint16_t msg_type,
++ uint16_t msg_flags)
+ {
+ assert(ssh);
+ assert(nlh);
+@@ -815,7 +815,7 @@ int nfnl_addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data,
+ }
+
+ /**
+- * nfnl_nfa_addattr_l - Add variable length attribute to struct nfattr
++ * nfnl_nfa_addattr_l - Add variable length attribute to struct nfattr
+ *
+ * @nfa: struct nfattr
+ * @maxlen: maximal length of nfattr buffer
+@@ -849,14 +849,14 @@ int nfnl_nfa_addattr_l(struct nfattr *nfa, int maxlen, int type,
+ }
+
+ /**
+- * nfnl_addattr8 - Add u_int8_t attribute to nlmsghdr
++ * nfnl_addattr8 - Add uint8_t attribute to nlmsghdr
+ *
+ * @n: netlink message header to which attribute is to be added
+ * @maxlen: maximum length of netlink message header
+ * @type: type of new attribute
+ * @data: content of new attribute
+ */
+-int nfnl_addattr8(struct nlmsghdr *n, int maxlen, int type, u_int8_t data)
++int nfnl_addattr8(struct nlmsghdr *n, int maxlen, int type, uint8_t data)
+ {
+ assert(n);
+ assert(maxlen > 0);
+@@ -866,7 +866,7 @@ int nfnl_addattr8(struct nlmsghdr *n, int maxlen, int type, u_int8_t data)
+ }
+
+ /**
+- * nfnl_nfa_addattr16 - Add u_int16_t attribute to struct nfattr
++ * nfnl_nfa_addattr16 - Add uint16_t attribute to struct nfattr
+ *
+ * @nfa: struct nfattr
+ * @maxlen: maximal length of nfattr buffer
+@@ -875,7 +875,7 @@ int nfnl_addattr8(struct nlmsghdr *n, int maxlen, int type, u_int8_t data)
+ *
+ */
+ int nfnl_nfa_addattr16(struct nfattr *nfa, int maxlen, int type,
+- u_int16_t data)
++ uint16_t data)
+ {
+ assert(nfa);
+ assert(maxlen > 0);
+@@ -885,7 +885,7 @@ int nfnl_nfa_addattr16(struct nfattr *nfa, int maxlen, int type,
+ }
+
+ /**
+- * nfnl_addattr16 - Add u_int16_t attribute to nlmsghdr
++ * nfnl_addattr16 - Add uint16_t attribute to nlmsghdr
+ *
+ * @n: netlink message header to which attribute is to be added
+ * @maxlen: maximum length of netlink message header
+@@ -894,7 +894,7 @@ int nfnl_nfa_addattr16(struct nfattr *nfa, int maxlen, int type,
+ *
+ */
+ int nfnl_addattr16(struct nlmsghdr *n, int maxlen, int type,
+- u_int16_t data)
++ uint16_t data)
+ {
+ assert(n);
+ assert(maxlen > 0);
+@@ -904,7 +904,7 @@ int nfnl_addattr16(struct nlmsghdr *n, int maxlen, int type,
+ }
+
+ /**
+- * nfnl_nfa_addattr32 - Add u_int32_t attribute to struct nfattr
++ * nfnl_nfa_addattr32 - Add uint32_t attribute to struct nfattr
+ *
+ * @nfa: struct nfattr
+ * @maxlen: maximal length of nfattr buffer
+@@ -913,7 +913,7 @@ int nfnl_addattr16(struct nlmsghdr *n, int maxlen, int type,
+ *
+ */
+ int nfnl_nfa_addattr32(struct nfattr *nfa, int maxlen, int type,
+- u_int32_t data)
++ uint32_t data)
+ {
+ assert(nfa);
+ assert(maxlen > 0);
+@@ -923,7 +923,7 @@ int nfnl_nfa_addattr32(struct nfattr *nfa, int maxlen, int type,
+ }
+
+ /**
+- * nfnl_addattr32 - Add u_int32_t attribute to nlmsghdr
++ * nfnl_addattr32 - Add uint32_t attribute to nlmsghdr
+ *
+ * @n: netlink message header to which attribute is to be added
+ * @maxlen: maximum length of netlink message header
+@@ -932,7 +932,7 @@ int nfnl_nfa_addattr32(struct nfattr *nfa, int maxlen, int type,
+ *
+ */
+ int nfnl_addattr32(struct nlmsghdr *n, int maxlen, int type,
+- u_int32_t data)
++ uint32_t data)
+ {
+ assert(n);
+ assert(maxlen > 0);
+@@ -980,7 +980,7 @@ int nfnl_parse_attr(struct nfattr *tb[], int max, struct nfattr *nfa, int len)
+ *
+ */
+ void nfnl_build_nfa_iovec(struct iovec *iov, struct nfattr *nfa,
+- u_int16_t type, u_int32_t len, unsigned char *val)
++ uint16_t type, uint32_t len, unsigned char *val)
+ {
+ assert(iov);
+ assert(nfa);
+@@ -1115,7 +1115,7 @@ struct nlmsghdr *nfnl_get_msg_next(struct nfnl_handle *h,
+ * appropiately.
+ */
+ int nfnl_callback_register(struct nfnl_subsys_handle *ssh,
+- u_int8_t type, struct nfnl_callback *cb)
++ uint8_t type, struct nfnl_callback *cb)
+ {
+ assert(ssh);
+ assert(cb);
+@@ -1138,7 +1138,7 @@ int nfnl_callback_register(struct nfnl_subsys_handle *ssh,
+ * On sucess, 0 is returned. On error, -1 is returned and errno is
+ * set appropiately.
+ */
+-int nfnl_callback_unregister(struct nfnl_subsys_handle *ssh, u_int8_t type)
++int nfnl_callback_unregister(struct nfnl_subsys_handle *ssh, uint8_t type)
+ {
+ assert(ssh);
+
+@@ -1161,8 +1161,8 @@ int nfnl_check_attributes(const struct nfnl_handle *h,
+ assert(nfa);
+
+ int min_len;
+- u_int8_t type = NFNL_MSG_TYPE(nlh->nlmsg_type);
+- u_int8_t subsys_id = NFNL_SUBSYS_ID(nlh->nlmsg_type);
++ uint8_t type = NFNL_MSG_TYPE(nlh->nlmsg_type);
++ uint8_t subsys_id = NFNL_SUBSYS_ID(nlh->nlmsg_type);
+ const struct nfnl_subsys_handle *ssh;
+ struct nfnl_callback *cb;
+
+@@ -1212,8 +1212,8 @@ static int __nfnl_handle_msg(struct nfnl_handle *h, struct nlmsghdr *nlh,
+ int len)
+ {
+ struct nfnl_subsys_handle *ssh;
+- u_int8_t type = NFNL_MSG_TYPE(nlh->nlmsg_type);
+- u_int8_t subsys_id = NFNL_SUBSYS_ID(nlh->nlmsg_type);
++ uint8_t type = NFNL_MSG_TYPE(nlh->nlmsg_type);
++ uint8_t subsys_id = NFNL_SUBSYS_ID(nlh->nlmsg_type);
+ int err = 0;
+
+ if (subsys_id > NFNL_MAX_SUBSYS)
+@@ -1243,7 +1243,7 @@ int nfnl_handle_packet(struct nfnl_handle *h, char *buf, int len)
+ {
+
+ while (len >= NLMSG_SPACE(0)) {
+- u_int32_t rlen;
++ uint32_t rlen;
+ struct nlmsghdr *nlh = (struct nlmsghdr *)buf;
+
+ if (nlh->nlmsg_len < sizeof(struct nlmsghdr)
+@@ -1285,8 +1285,8 @@ static int nfnl_is_error(struct nfnl_handle *h, struct nlmsghdr *nlh)
+ static int nfnl_step(struct nfnl_handle *h, struct nlmsghdr *nlh)
+ {
+ struct nfnl_subsys_handle *ssh;
+- u_int8_t type = NFNL_MSG_TYPE(nlh->nlmsg_type);
+- u_int8_t subsys_id = NFNL_SUBSYS_ID(nlh->nlmsg_type);
++ uint8_t type = NFNL_MSG_TYPE(nlh->nlmsg_type);
++ uint8_t subsys_id = NFNL_SUBSYS_ID(nlh->nlmsg_type);
+
+ /* Is this an error message? */
+ if (nfnl_is_error(h, nlh)) {
+diff --git a/src/rtnl.c b/src/rtnl.c
+index 7b4ac7d..284eecd 100644
+--- a/src/rtnl.c
++++ b/src/rtnl.c
+@@ -30,7 +30,7 @@
+ #define rtnl_log(x, ...)
+
+ static inline struct rtnl_handler *
+-find_handler(struct rtnl_handle *rtnl_handle, u_int16_t type)
++find_handler(struct rtnl_handle *rtnl_handle, uint16_t type)
+ {
+ struct rtnl_handler *h;
+ for (h = rtnl_handle->handlers; h; h = h->next) {
+@@ -41,7 +41,7 @@ find_handler(struct rtnl_handle *rtnl_handle, u_int16_t type)
+ }
+
+ static int call_handler(struct rtnl_handle *rtnl_handle,
+- u_int16_t type,
++ uint16_t type,
+ struct nlmsghdr *hdr)
+ {
+ struct rtnl_handler *h = find_handler(rtnl_handle, type);
+diff --git a/src/rtnl.h b/src/rtnl.h
+index 0c403dc..2cb22a8 100644
+--- a/src/rtnl.h
++++ b/src/rtnl.h
+@@ -7,7 +7,7 @@
+ struct rtnl_handler {
+ struct rtnl_handler *next;
+
+- u_int16_t nlmsg_type;
++ uint16_t nlmsg_type;
+ int (*handlefn)(struct nlmsghdr *h, void *arg);
+ void *arg;
+ };
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink_1.0.1.bb b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink_1.0.1.bb
new file mode 100644
index 000000000..f7951ff8d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnfnetlink/libnfnetlink_1.0.1.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Low-level library for netfilter related kernel/userspace communication"
+DESCRIPTION = "libnfnetlink is the low-level library for netfilter related \
+kernel/userspace communication. It provides a generic messaging \
+infrastructure for in-kernel netfilter subsystems (such as nfnetlink_log, \
+nfnetlink_queue, nfnetlink_conntrack) and their respective users and/or \
+management tools in userspace."
+HOMEPAGE = "http://www.netfilter.org/projects/libnfnetlink/index.html"
+SECTION = "libs"
+LICENSE = "GPLv2+"
+
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+SRC_URI = "http://www.netfilter.org/projects/libnfnetlink/files/libnfnetlink-${PV}.tar.bz2;name=tar \
+ file://0001-build-resolve-automake-1.12-warnings.patch \
+ file://0002-src-get-source-code-license-header-in-sync-with-curr.patch \
+ file://0003-configure-uclinux-is-also-linux.patch \
+ file://0004-libnfnetlink-initialize-attribute-padding-to-resolve.patch \
+ file://0005-include-Sync-with-kernel-headers.patch \
+ file://0006-src-Use-stdint-types-everywhere.patch \
+ "
+SRC_URI[tar.md5sum] = "98927583d2016a9fb1936fed992e2c5e"
+SRC_URI[tar.sha256sum] = "f270e19de9127642d2a11589ef2ec97ef90a649a74f56cf9a96306b04817b51a"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-Declare-the-define-visivility-attribute-together.patch b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-Declare-the-define-visivility-attribute-together.patch
new file mode 100644
index 000000000..e82b23813
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-Declare-the-define-visivility-attribute-together.patch
@@ -0,0 +1,2949 @@
+From bd01f785da5222d0662be3182fe2650e1c12f43e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 10 Apr 2017 14:07:07 -0700
+Subject: [PATCH] Declare the define visivility attribute together
+
+clang ignores the visibility attribute if its not
+defined before the definition. As a result these
+symbols become hidden and consumers of this library
+fail to link due to these missing symbols
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ doxygen.cfg.in | 2 +-
+ include/utils.h | 5 +--
+ src/batch.c | 21 ++++-------
+ src/chain.c | 102 +++++++++++++++++---------------------------------
+ src/common.c | 21 ++++-------
+ src/expr.c | 51 +++++++++----------------
+ src/gen.c | 39 +++++++------------
+ src/object.c | 99 ++++++++++++++++--------------------------------
+ src/rule.c | 114 +++++++++++++++++++-------------------------------------
+ src/ruleset.c | 48 ++++++++----------------
+ src/set.c | 96 ++++++++++++++++-------------------------------
+ src/set_elem.c | 72 ++++++++++++-----------------------
+ src/table.c | 90 +++++++++++++++-----------------------------
+ src/trace.c | 27 +++++---------
+ src/udata.c | 48 ++++++++----------------
+ 15 files changed, 279 insertions(+), 556 deletions(-)
+
+diff --git a/doxygen.cfg.in b/doxygen.cfg.in
+index 23fcad4..e49f28d 100644
+--- a/doxygen.cfg.in
++++ b/doxygen.cfg.in
+@@ -72,7 +72,7 @@ RECURSIVE = YES
+ EXCLUDE =
+ EXCLUDE_SYMLINKS = NO
+ EXCLUDE_PATTERNS = */.git/* .*.d
+-EXCLUDE_SYMBOLS = EXPORT_SYMBOL
++EXCLUDE_SYMBOLS =
+ EXAMPLE_PATH =
+ EXAMPLE_PATTERNS =
+ EXAMPLE_RECURSIVE = NO
+diff --git a/include/utils.h b/include/utils.h
+index 2f5cf34..ff8207e 100644
+--- a/include/utils.h
++++ b/include/utils.h
+@@ -9,10 +9,9 @@
+
+ #include "config.h"
+ #ifdef HAVE_VISIBILITY_HIDDEN
+-# define __visible __attribute__((visibility("default")))
+-# define EXPORT_SYMBOL(x) typeof(x) (x) __visible;
++# define __EXPORTED __attribute__((visibility("default")))
+ #else
+-# define EXPORT_SYMBOL
++# define __EXPORT
+ #endif
+
+ #define __noreturn __attribute__((__noreturn__))
+diff --git a/src/batch.c b/src/batch.c
+index 5ee3fd7..3bedd26 100644
+--- a/src/batch.c
++++ b/src/batch.c
+@@ -57,7 +57,7 @@ static void nftnl_batch_add_page(struct nftnl_batch_page *page,
+ list_add_tail(&page->head, &batch->page_list);
+ }
+
+-struct nftnl_batch *nftnl_batch_alloc(uint32_t pg_size, uint32_t pg_overrun_size)
++struct nftnl_batch __EXPORTED *nftnl_batch_alloc(uint32_t pg_size, uint32_t pg_overrun_size)
+ {
+ struct nftnl_batch *batch;
+ struct nftnl_batch_page *page;
+@@ -80,9 +80,8 @@ err1:
+ free(batch);
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_batch_alloc);
+
+-void nftnl_batch_free(struct nftnl_batch *batch)
++void __EXPORTED nftnl_batch_free(struct nftnl_batch *batch)
+ {
+ struct nftnl_batch_page *page, *next;
+
+@@ -94,9 +93,8 @@ void nftnl_batch_free(struct nftnl_batch *batch)
+
+ free(batch);
+ }
+-EXPORT_SYMBOL(nftnl_batch_free);
+
+-int nftnl_batch_update(struct nftnl_batch *batch)
++int __EXPORTED nftnl_batch_update(struct nftnl_batch *batch)
+ {
+ struct nftnl_batch_page *page;
+ struct nlmsghdr *last_nlh;
+@@ -119,21 +117,18 @@ int nftnl_batch_update(struct nftnl_batch *batch)
+ err1:
+ return -1;
+ }
+-EXPORT_SYMBOL(nftnl_batch_update);
+
+-void *nftnl_batch_buffer(struct nftnl_batch *batch)
++void __EXPORTED *nftnl_batch_buffer(struct nftnl_batch *batch)
+ {
+ return mnl_nlmsg_batch_current(batch->current_page->batch);
+ }
+-EXPORT_SYMBOL(nftnl_batch_buffer);
+
+-uint32_t nftnl_batch_buffer_len(struct nftnl_batch *batch)
++uint32_t __EXPORTED nftnl_batch_buffer_len(struct nftnl_batch *batch)
+ {
+ return mnl_nlmsg_batch_size(batch->current_page->batch);
+ }
+-EXPORT_SYMBOL(nftnl_batch_buffer_len);
+
+-int nftnl_batch_iovec_len(struct nftnl_batch *batch)
++int __EXPORTED nftnl_batch_iovec_len(struct nftnl_batch *batch)
+ {
+ int num_pages = batch->num_pages;
+
+@@ -143,9 +138,8 @@ int nftnl_batch_iovec_len(struct nftnl_batch *batch)
+
+ return num_pages;
+ }
+-EXPORT_SYMBOL(nftnl_batch_iovec_len);
+
+-void nftnl_batch_iovec(struct nftnl_batch *batch, struct iovec *iov,
++void __EXPORTED nftnl_batch_iovec(struct nftnl_batch *batch, struct iovec *iov,
+ uint32_t iovlen)
+ {
+ struct nftnl_batch_page *page;
+@@ -160,4 +154,3 @@ void nftnl_batch_iovec(struct nftnl_batch *batch, struct iovec *iov,
+ i++;
+ }
+ }
+-EXPORT_SYMBOL(nftnl_batch_iovec);
+diff --git a/src/chain.c b/src/chain.c
+index 29860c5..362fa0d 100644
+--- a/src/chain.c
++++ b/src/chain.c
+@@ -87,13 +87,12 @@ static const char *nftnl_hooknum2str(int family, int hooknum)
+ return "unknown";
+ }
+
+-struct nftnl_chain *nftnl_chain_alloc(void)
++struct nftnl_chain __EXPORTED *nftnl_chain_alloc(void)
+ {
+ return calloc(1, sizeof(struct nftnl_chain));
+ }
+-EXPORT_SYMBOL(nftnl_chain_alloc);
+
+-void nftnl_chain_free(const struct nftnl_chain *c)
++void __EXPORTED nftnl_chain_free(const struct nftnl_chain *c)
+ {
+ if (c->flags & (1 << NFTNL_CHAIN_NAME))
+ xfree(c->name);
+@@ -105,15 +104,13 @@ void nftnl_chain_free(const struct nftnl_chain *c)
+ xfree(c->dev);
+ xfree(c);
+ }
+-EXPORT_SYMBOL(nftnl_chain_free);
+
+-bool nftnl_chain_is_set(const struct nftnl_chain *c, uint16_t attr)
++bool __EXPORTED nftnl_chain_is_set(const struct nftnl_chain *c, uint16_t attr)
+ {
+ return c->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_chain_is_set);
+
+-void nftnl_chain_unset(struct nftnl_chain *c, uint16_t attr)
++void __EXPORTED nftnl_chain_unset(struct nftnl_chain *c, uint16_t attr)
+ {
+ if (!(c->flags & (1 << attr)))
+ return;
+@@ -147,7 +144,6 @@ void nftnl_chain_unset(struct nftnl_chain *c, uint16_t attr)
+
+ c->flags &= ~(1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_chain_unset);
+
+ static uint32_t nftnl_chain_validate[NFTNL_CHAIN_MAX + 1] = {
+ [NFTNL_CHAIN_HOOKNUM] = sizeof(uint32_t),
+@@ -159,7 +155,7 @@ static uint32_t nftnl_chain_validate[NFTNL_CHAIN_MAX + 1] = {
+ [NFTNL_CHAIN_FAMILY] = sizeof(uint32_t),
+ };
+
+-int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
++int __EXPORTED nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
+ const void *data, uint32_t data_len)
+ {
+ nftnl_assert_attr_exists(attr, NFTNL_CHAIN_MAX);
+@@ -226,45 +222,38 @@ int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
+ c->flags |= (1 << attr);
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_chain_set_data);
+
+-void nftnl_chain_set(struct nftnl_chain *c, uint16_t attr, const void *data)
++void __EXPORTED nftnl_chain_set(struct nftnl_chain *c, uint16_t attr, const void *data)
+ {
+ nftnl_chain_set_data(c, attr, data, nftnl_chain_validate[attr]);
+ }
+-EXPORT_SYMBOL(nftnl_chain_set);
+
+-void nftnl_chain_set_u32(struct nftnl_chain *c, uint16_t attr, uint32_t data)
++void __EXPORTED nftnl_chain_set_u32(struct nftnl_chain *c, uint16_t attr, uint32_t data)
+ {
+ nftnl_chain_set_data(c, attr, &data, sizeof(uint32_t));
+ }
+-EXPORT_SYMBOL(nftnl_chain_set_u32);
+
+-void nftnl_chain_set_s32(struct nftnl_chain *c, uint16_t attr, int32_t data)
++void __EXPORTED nftnl_chain_set_s32(struct nftnl_chain *c, uint16_t attr, int32_t data)
+ {
+ nftnl_chain_set_data(c, attr, &data, sizeof(int32_t));
+ }
+-EXPORT_SYMBOL(nftnl_chain_set_s32);
+
+-void nftnl_chain_set_u64(struct nftnl_chain *c, uint16_t attr, uint64_t data)
++void __EXPORTED nftnl_chain_set_u64(struct nftnl_chain *c, uint16_t attr, uint64_t data)
+ {
+ nftnl_chain_set_data(c, attr, &data, sizeof(uint64_t));
+ }
+-EXPORT_SYMBOL(nftnl_chain_set_u64);
+
+-void nftnl_chain_set_u8(struct nftnl_chain *c, uint16_t attr, uint8_t data)
++void __EXPORTED nftnl_chain_set_u8(struct nftnl_chain *c, uint16_t attr, uint8_t data)
+ {
+ nftnl_chain_set_data(c, attr, &data, sizeof(uint8_t));
+ }
+-EXPORT_SYMBOL(nftnl_chain_set_u8);
+
+-int nftnl_chain_set_str(struct nftnl_chain *c, uint16_t attr, const char *str)
++int __EXPORTED nftnl_chain_set_str(struct nftnl_chain *c, uint16_t attr, const char *str)
+ {
+ return nftnl_chain_set_data(c, attr, str, strlen(str) + 1);
+ }
+-EXPORT_SYMBOL(nftnl_chain_set_str);
+
+-const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr,
++const void __EXPORTED *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr,
+ uint32_t *data_len)
+ {
+ if (!(c->flags & (1 << attr)))
+@@ -310,22 +299,19 @@ const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr,
+ }
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_chain_get_data);
+
+-const void *nftnl_chain_get(const struct nftnl_chain *c, uint16_t attr)
++const void __EXPORTED *nftnl_chain_get(const struct nftnl_chain *c, uint16_t attr)
+ {
+ uint32_t data_len;
+ return nftnl_chain_get_data(c, attr, &data_len);
+ }
+-EXPORT_SYMBOL(nftnl_chain_get);
+
+-const char *nftnl_chain_get_str(const struct nftnl_chain *c, uint16_t attr)
++const char __EXPORTED *nftnl_chain_get_str(const struct nftnl_chain *c, uint16_t attr)
+ {
+ return nftnl_chain_get(c, attr);
+ }
+-EXPORT_SYMBOL(nftnl_chain_get_str);
+
+-uint32_t nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr)
++uint32_t __EXPORTED nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint32_t *val = nftnl_chain_get_data(c, attr, &data_len);
+@@ -334,9 +320,8 @@ uint32_t nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_chain_get_u32);
+
+-int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr)
++int32_t __EXPORTED nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr)
+ {
+ uint32_t data_len;
+ const int32_t *val = nftnl_chain_get_data(c, attr, &data_len);
+@@ -345,9 +330,8 @@ int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_chain_get_s32);
+
+-uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr)
++uint64_t __EXPORTED nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint64_t *val = nftnl_chain_get_data(c, attr, &data_len);
+@@ -356,9 +340,8 @@ uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_chain_get_u64);
+
+-uint8_t nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr)
++uint8_t __EXPORTED nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint8_t *val = nftnl_chain_get_data(c, attr, &data_len);
+@@ -367,9 +350,8 @@ uint8_t nftnl_chain_get_u8(const struct nftnl_chain *c, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_chain_get_u8);
+
+-void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_chain *c)
++void __EXPORTED nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_chain *c)
+ {
+ if (c->flags & (1 << NFTNL_CHAIN_TABLE))
+ mnl_attr_put_strz(nlh, NFTA_CHAIN_TABLE, c->table);
+@@ -404,7 +386,6 @@ void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_ch
+ if (c->flags & (1 << NFTNL_CHAIN_TYPE))
+ mnl_attr_put_strz(nlh, NFTA_CHAIN_TYPE, c->type);
+ }
+-EXPORT_SYMBOL(nftnl_chain_nlmsg_build_payload);
+
+ static int nftnl_chain_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -529,7 +510,7 @@ static int nftnl_chain_parse_hook(struct nlattr *attr, struct nftnl_chain *c)
+ return 0;
+ }
+
+-int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c)
++int __EXPORTED nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c)
+ {
+ struct nlattr *tb[NFTA_CHAIN_MAX+1] = {};
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+@@ -590,7 +571,6 @@ int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c)
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nftnl_chain_nlmsg_parse);
+
+ static inline int nftnl_str2hooknum(int family, const char *hook)
+ {
+@@ -732,19 +712,17 @@ static int nftnl_chain_do_parse(struct nftnl_chain *c, enum nftnl_parse_type typ
+ return ret;
+ }
+
+-int nftnl_chain_parse(struct nftnl_chain *c, enum nftnl_parse_type type,
++int __EXPORTED nftnl_chain_parse(struct nftnl_chain *c, enum nftnl_parse_type type,
+ const char *data, struct nftnl_parse_err *err)
+ {
+ return nftnl_chain_do_parse(c, type, data, err, NFTNL_PARSE_BUFFER);
+ }
+-EXPORT_SYMBOL(nftnl_chain_parse);
+
+-int nftnl_chain_parse_file(struct nftnl_chain *c, enum nftnl_parse_type type,
++int __EXPORTED nftnl_chain_parse_file(struct nftnl_chain *c, enum nftnl_parse_type type,
+ FILE *fp, struct nftnl_parse_err *err)
+ {
+ return nftnl_chain_do_parse(c, type, fp, err, NFTNL_PARSE_FILE);
+ }
+-EXPORT_SYMBOL(nftnl_chain_parse_file);
+
+ static int nftnl_chain_export(char *buf, size_t size,
+ const struct nftnl_chain *c, int type)
+@@ -841,13 +819,12 @@ static int nftnl_chain_cmd_snprintf(char *buf, size_t size,
+ return offset;
+ }
+
+-int nftnl_chain_snprintf(char *buf, size_t size, const struct nftnl_chain *c,
++int __EXPORTED nftnl_chain_snprintf(char *buf, size_t size, const struct nftnl_chain *c,
+ uint32_t type, uint32_t flags)
+ {
+ return nftnl_chain_cmd_snprintf(buf, size, c, nftnl_flag2cmd(flags), type,
+ flags);
+ }
+-EXPORT_SYMBOL(nftnl_chain_snprintf);
+
+ static int nftnl_chain_do_snprintf(char *buf, size_t size, const void *c,
+ uint32_t cmd, uint32_t type, uint32_t flags)
+@@ -855,19 +832,18 @@ static int nftnl_chain_do_snprintf(char *buf, size_t size, const void *c,
+ return nftnl_chain_snprintf(buf, size, c, type, flags);
+ }
+
+-int nftnl_chain_fprintf(FILE *fp, const struct nftnl_chain *c, uint32_t type,
++int __EXPORTED nftnl_chain_fprintf(FILE *fp, const struct nftnl_chain *c, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_fprintf(fp, c, NFTNL_CMD_UNSPEC, type, flags,
+ nftnl_chain_do_snprintf);
+ }
+-EXPORT_SYMBOL(nftnl_chain_fprintf);
+
+ struct nftnl_chain_list {
+ struct list_head list;
+ };
+
+-struct nftnl_chain_list *nftnl_chain_list_alloc(void)
++struct nftnl_chain_list __EXPORTED *nftnl_chain_list_alloc(void)
+ {
+ struct nftnl_chain_list *list;
+
+@@ -879,9 +855,8 @@ struct nftnl_chain_list *nftnl_chain_list_alloc(void)
+
+ return list;
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_alloc);
+
+-void nftnl_chain_list_free(struct nftnl_chain_list *list)
++void __EXPORTED nftnl_chain_list_free(struct nftnl_chain_list *list)
+ {
+ struct nftnl_chain *r, *tmp;
+
+@@ -891,33 +866,28 @@ void nftnl_chain_list_free(struct nftnl_chain_list *list)
+ }
+ xfree(list);
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_free);
+
+-int nftnl_chain_list_is_empty(const struct nftnl_chain_list *list)
++int __EXPORTED nftnl_chain_list_is_empty(const struct nftnl_chain_list *list)
+ {
+ return list_empty(&list->list);
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_is_empty);
+
+-void nftnl_chain_list_add(struct nftnl_chain *r, struct nftnl_chain_list *list)
++void __EXPORTED nftnl_chain_list_add(struct nftnl_chain *r, struct nftnl_chain_list *list)
+ {
+ list_add(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_add);
+
+-void nftnl_chain_list_add_tail(struct nftnl_chain *r, struct nftnl_chain_list *list)
++void __EXPORTED nftnl_chain_list_add_tail(struct nftnl_chain *r, struct nftnl_chain_list *list)
+ {
+ list_add_tail(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_add_tail);
+
+-void nftnl_chain_list_del(struct nftnl_chain *r)
++void __EXPORTED nftnl_chain_list_del(struct nftnl_chain *r)
+ {
+ list_del(&r->head);
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_del);
+
+-int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list,
++int __EXPORTED nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list,
+ int (*cb)(struct nftnl_chain *r, void *data),
+ void *data)
+ {
+@@ -931,14 +901,13 @@ int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_foreach);
+
+ struct nftnl_chain_list_iter {
+ const struct nftnl_chain_list *list;
+ struct nftnl_chain *cur;
+ };
+
+-struct nftnl_chain_list_iter *
++struct nftnl_chain_list_iter __EXPORTED *
+ nftnl_chain_list_iter_create(const struct nftnl_chain_list *l)
+ {
+ struct nftnl_chain_list_iter *iter;
+@@ -955,9 +924,8 @@ nftnl_chain_list_iter_create(const struct nftnl_chain_list *l)
+
+ return iter;
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_iter_create);
+
+-struct nftnl_chain *nftnl_chain_list_iter_next(struct nftnl_chain_list_iter *iter)
++struct nftnl_chain __EXPORTED *nftnl_chain_list_iter_next(struct nftnl_chain_list_iter *iter)
+ {
+ struct nftnl_chain *r = iter->cur;
+
+@@ -971,10 +939,8 @@ struct nftnl_chain *nftnl_chain_list_iter_next(struct nftnl_chain_list_iter *ite
+
+ return r;
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_iter_next);
+
+-void nftnl_chain_list_iter_destroy(struct nftnl_chain_list_iter *iter)
++void __EXPORTED nftnl_chain_list_iter_destroy(struct nftnl_chain_list_iter *iter)
+ {
+ xfree(iter);
+ }
+-EXPORT_SYMBOL(nftnl_chain_list_iter_destroy);
+diff --git a/src/common.c b/src/common.c
+index a95883c..68bce2e 100644
+--- a/src/common.c
++++ b/src/common.c
+@@ -43,15 +43,14 @@ static struct nlmsghdr *__nftnl_nlmsg_build_hdr(char *buf, uint16_t type,
+ return nlh;
+ }
+
+-struct nlmsghdr *nftnl_nlmsg_build_hdr(char *buf, uint16_t type, uint16_t family,
++struct nlmsghdr __EXPORTED *nftnl_nlmsg_build_hdr(char *buf, uint16_t type, uint16_t family,
+ uint16_t flags, uint32_t seq)
+ {
+ return __nftnl_nlmsg_build_hdr(buf, (NFNL_SUBSYS_NFTABLES << 8) | type,
+ family, flags, seq, 0);
+ }
+-EXPORT_SYMBOL(nftnl_nlmsg_build_hdr);
+
+-struct nftnl_parse_err *nftnl_parse_err_alloc(void)
++struct nftnl_parse_err __EXPORTED *nftnl_parse_err_alloc(void)
+ {
+ struct nftnl_parse_err *err;
+
+@@ -63,15 +62,13 @@ struct nftnl_parse_err *nftnl_parse_err_alloc(void)
+
+ return err;
+ }
+-EXPORT_SYMBOL(nftnl_parse_err_alloc);
+
+-void nftnl_parse_err_free(struct nftnl_parse_err *err)
++void __EXPORTED nftnl_parse_err_free(struct nftnl_parse_err *err)
+ {
+ xfree(err);
+ }
+-EXPORT_SYMBOL(nftnl_parse_err_free);
+
+-int nftnl_parse_perror(const char *msg, struct nftnl_parse_err *err)
++int __EXPORTED nftnl_parse_perror(const char *msg, struct nftnl_parse_err *err)
+ {
+ switch (err->error) {
+ case NFTNL_PARSE_EBADINPUT:
+@@ -89,7 +86,6 @@ int nftnl_parse_perror(const char *msg, struct nftnl_parse_err *err)
+ return fprintf(stderr, "%s: Undefined error\n", msg);
+ }
+ }
+-EXPORT_SYMBOL(nftnl_parse_perror);
+
+ int nftnl_cmd_header_snprintf(char *buf, size_t size, uint32_t cmd, uint32_t type,
+ uint32_t flags)
+@@ -165,21 +161,19 @@ int nftnl_cmd_footer_fprintf(FILE *fp, uint32_t cmd, uint32_t type,
+ nftnl_cmd_footer_fprintf_cb);
+ }
+
+-struct nlmsghdr *nftnl_batch_begin(char *buf, uint32_t seq)
++struct nlmsghdr __EXPORTED *nftnl_batch_begin(char *buf, uint32_t seq)
+ {
+ return __nftnl_nlmsg_build_hdr(buf, NFNL_MSG_BATCH_BEGIN, AF_UNSPEC,
+ 0, seq, NFNL_SUBSYS_NFTABLES);
+ }
+-EXPORT_SYMBOL(nftnl_batch_begin);
+
+-struct nlmsghdr *nftnl_batch_end(char *buf, uint32_t seq)
++struct nlmsghdr __EXPORTED *nftnl_batch_end(char *buf, uint32_t seq)
+ {
+ return __nftnl_nlmsg_build_hdr(buf, NFNL_MSG_BATCH_END, AF_UNSPEC,
+ 0, seq, NFNL_SUBSYS_NFTABLES);
+ }
+-EXPORT_SYMBOL(nftnl_batch_end);
+
+-int nftnl_batch_is_supported(void)
++int __EXPORTED nftnl_batch_is_supported(void)
+ {
+ struct mnl_socket *nl;
+ struct mnl_nlmsg_batch *b;
+@@ -236,4 +230,3 @@ err:
+ mnl_nlmsg_batch_stop(b);
+ return -1;
+ }
+-EXPORT_SYMBOL(nftnl_batch_is_supported);
+diff --git a/src/expr.c b/src/expr.c
+index 10ba2c4..c7eb2b4 100644
+--- a/src/expr.c
++++ b/src/expr.c
+@@ -24,7 +24,7 @@
+
+ #include <libnftnl/expr.h>
+
+-struct nftnl_expr *nftnl_expr_alloc(const char *name)
++struct nftnl_expr __EXPORTED *nftnl_expr_alloc(const char *name)
+ {
+ struct nftnl_expr *expr;
+ struct expr_ops *ops;
+@@ -43,24 +43,21 @@ struct nftnl_expr *nftnl_expr_alloc(const char *name)
+
+ return expr;
+ }
+-EXPORT_SYMBOL(nftnl_expr_alloc);
+
+-void nftnl_expr_free(const struct nftnl_expr *expr)
++void __EXPORTED nftnl_expr_free(const struct nftnl_expr *expr)
+ {
+ if (expr->ops->free)
+ expr->ops->free(expr);
+
+ xfree(expr);
+ }
+-EXPORT_SYMBOL(nftnl_expr_free);
+
+-bool nftnl_expr_is_set(const struct nftnl_expr *expr, uint16_t type)
++bool __EXPORTED nftnl_expr_is_set(const struct nftnl_expr *expr, uint16_t type)
+ {
+ return expr->flags & (1 << type);
+ }
+-EXPORT_SYMBOL(nftnl_expr_is_set);
+
+-int nftnl_expr_set(struct nftnl_expr *expr, uint16_t type,
++int __EXPORTED nftnl_expr_set(struct nftnl_expr *expr, uint16_t type,
+ const void *data, uint32_t data_len)
+ {
+ switch(type) {
+@@ -73,43 +70,37 @@ int nftnl_expr_set(struct nftnl_expr *expr, uint16_t type,
+ expr->flags |= (1 << type);
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_expr_set);
+
+-void
++void __EXPORTED
+ nftnl_expr_set_u8(struct nftnl_expr *expr, uint16_t type, uint8_t data)
+ {
+ nftnl_expr_set(expr, type, &data, sizeof(uint8_t));
+ }
+-EXPORT_SYMBOL(nftnl_expr_set_u8);
+
+-void
++void __EXPORTED
+ nftnl_expr_set_u16(struct nftnl_expr *expr, uint16_t type, uint16_t data)
+ {
+ nftnl_expr_set(expr, type, &data, sizeof(uint16_t));
+ }
+-EXPORT_SYMBOL(nftnl_expr_set_u16);
+
+-void
++void __EXPORTED
+ nftnl_expr_set_u32(struct nftnl_expr *expr, uint16_t type, uint32_t data)
+ {
+ nftnl_expr_set(expr, type, &data, sizeof(uint32_t));
+ }
+-EXPORT_SYMBOL(nftnl_expr_set_u32);
+
+-void
++void __EXPORTED
+ nftnl_expr_set_u64(struct nftnl_expr *expr, uint16_t type, uint64_t data)
+ {
+ nftnl_expr_set(expr, type, &data, sizeof(uint64_t));
+ }
+-EXPORT_SYMBOL(nftnl_expr_set_u64);
+
+-int nftnl_expr_set_str(struct nftnl_expr *expr, uint16_t type, const char *str)
++int __EXPORTED nftnl_expr_set_str(struct nftnl_expr *expr, uint16_t type, const char *str)
+ {
+ return nftnl_expr_set(expr, type, str, strlen(str) + 1);
+ }
+-EXPORT_SYMBOL(nftnl_expr_set_str);
+
+-const void *nftnl_expr_get(const struct nftnl_expr *expr,
++const void __EXPORTED *nftnl_expr_get(const struct nftnl_expr *expr,
+ uint16_t type, uint32_t *data_len)
+ {
+ const void *ret;
+@@ -129,9 +120,8 @@ const void *nftnl_expr_get(const struct nftnl_expr *expr,
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nftnl_expr_get);
+
+-uint8_t nftnl_expr_get_u8(const struct nftnl_expr *expr, uint16_t type)
++uint8_t __EXPORTED nftnl_expr_get_u8(const struct nftnl_expr *expr, uint16_t type)
+ {
+ const void *data;
+ uint32_t data_len;
+@@ -145,9 +135,8 @@ uint8_t nftnl_expr_get_u8(const struct nftnl_expr *expr, uint16_t type)
+
+ return *((uint8_t *)data);
+ }
+-EXPORT_SYMBOL(nftnl_expr_get_u8);
+
+-uint16_t nftnl_expr_get_u16(const struct nftnl_expr *expr, uint16_t type)
++uint16_t __EXPORTED nftnl_expr_get_u16(const struct nftnl_expr *expr, uint16_t type)
+ {
+ const void *data;
+ uint32_t data_len;
+@@ -161,9 +150,8 @@ uint16_t nftnl_expr_get_u16(const struct nftnl_expr *expr, uint16_t type)
+
+ return *((uint16_t *)data);
+ }
+-EXPORT_SYMBOL(nftnl_expr_get_u16);
+
+-uint32_t nftnl_expr_get_u32(const struct nftnl_expr *expr, uint16_t type)
++uint32_t __EXPORTED nftnl_expr_get_u32(const struct nftnl_expr *expr, uint16_t type)
+ {
+ const void *data;
+ uint32_t data_len;
+@@ -177,9 +165,8 @@ uint32_t nftnl_expr_get_u32(const struct nftnl_expr *expr, uint16_t type)
+
+ return *((uint32_t *)data);
+ }
+-EXPORT_SYMBOL(nftnl_expr_get_u32);
+
+-uint64_t nftnl_expr_get_u64(const struct nftnl_expr *expr, uint16_t type)
++uint64_t __EXPORTED nftnl_expr_get_u64(const struct nftnl_expr *expr, uint16_t type)
+ {
+ const void *data;
+ uint32_t data_len;
+@@ -193,17 +180,15 @@ uint64_t nftnl_expr_get_u64(const struct nftnl_expr *expr, uint16_t type)
+
+ return *((uint64_t *)data);
+ }
+-EXPORT_SYMBOL(nftnl_expr_get_u64);
+
+-const char *nftnl_expr_get_str(const struct nftnl_expr *expr, uint16_t type)
++const char __EXPORTED *nftnl_expr_get_str(const struct nftnl_expr *expr, uint16_t type)
+ {
+ uint32_t data_len;
+
+ return (const char *)nftnl_expr_get(expr, type, &data_len);
+ }
+-EXPORT_SYMBOL(nftnl_expr_get_str);
+
+-bool nftnl_expr_cmp(const struct nftnl_expr *e1, const struct nftnl_expr *e2)
++bool __EXPORTED nftnl_expr_cmp(const struct nftnl_expr *e1, const struct nftnl_expr *e2)
+ {
+ if (e1->flags != e2->flags ||
+ strcmp(e1->ops->name, e2->ops->name) != 0)
+@@ -211,7 +196,6 @@ bool nftnl_expr_cmp(const struct nftnl_expr *e1, const struct nftnl_expr *e2)
+
+ return e1->ops->cmp(e1, e2);
+ }
+-EXPORT_SYMBOL(nftnl_expr_cmp);
+
+ void nftnl_expr_build_payload(struct nlmsghdr *nlh, struct nftnl_expr *expr)
+ {
+@@ -275,7 +259,7 @@ err1:
+ return NULL;
+ }
+
+-int nftnl_expr_snprintf(char *buf, size_t size, const struct nftnl_expr *expr,
++int __EXPORTED nftnl_expr_snprintf(char *buf, size_t size, const struct nftnl_expr *expr,
+ uint32_t type, uint32_t flags)
+ {
+ int ret;
+@@ -289,4 +273,3 @@ int nftnl_expr_snprintf(char *buf, size_t size, const struct nftnl_expr *expr,
+
+ return offset;
+ }
+-EXPORT_SYMBOL(nftnl_expr_snprintf);
+diff --git a/src/gen.c b/src/gen.c
+index 213562e..8b45caa 100644
+--- a/src/gen.c
++++ b/src/gen.c
+@@ -29,25 +29,22 @@ struct nftnl_gen {
+ uint32_t flags;
+ };
+
+-struct nftnl_gen *nftnl_gen_alloc(void)
++struct nftnl_gen __EXPORTED *nftnl_gen_alloc(void)
+ {
+ return calloc(1, sizeof(struct nftnl_gen));
+ }
+-EXPORT_SYMBOL(nftnl_gen_alloc);
+
+-void nftnl_gen_free(const struct nftnl_gen *gen)
++void __EXPORTED nftnl_gen_free(const struct nftnl_gen *gen)
+ {
+ xfree(gen);
+ }
+-EXPORT_SYMBOL(nftnl_gen_free);
+
+-bool nftnl_gen_is_set(const struct nftnl_gen *gen, uint16_t attr)
++bool __EXPORTED nftnl_gen_is_set(const struct nftnl_gen *gen, uint16_t attr)
+ {
+ return gen->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_gen_is_set);
+
+-void nftnl_gen_unset(struct nftnl_gen *gen, uint16_t attr)
++void __EXPORTED nftnl_gen_unset(struct nftnl_gen *gen, uint16_t attr)
+ {
+ if (!(gen->flags & (1 << attr)))
+ return;
+@@ -58,13 +55,12 @@ void nftnl_gen_unset(struct nftnl_gen *gen, uint16_t attr)
+ }
+ gen->flags &= ~(1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_gen_unset);
+
+ static uint32_t nftnl_gen_validate[NFTNL_GEN_MAX + 1] = {
+ [NFTNL_GEN_ID] = sizeof(uint32_t),
+ };
+
+-int nftnl_gen_set_data(struct nftnl_gen *gen, uint16_t attr,
++int __EXPORTED nftnl_gen_set_data(struct nftnl_gen *gen, uint16_t attr,
+ const void *data, uint32_t data_len)
+ {
+ nftnl_assert_attr_exists(attr, NFTNL_GEN_MAX);
+@@ -78,21 +74,18 @@ int nftnl_gen_set_data(struct nftnl_gen *gen, uint16_t attr,
+ gen->flags |= (1 << attr);
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_gen_set_data);
+
+-int nftnl_gen_set(struct nftnl_gen *gen, uint16_t attr, const void *data)
++int __EXPORTED nftnl_gen_set(struct nftnl_gen *gen, uint16_t attr, const void *data)
+ {
+ return nftnl_gen_set_data(gen, attr, data, nftnl_gen_validate[attr]);
+ }
+-EXPORT_SYMBOL(nftnl_gen_set);
+
+-void nftnl_gen_set_u32(struct nftnl_gen *gen, uint16_t attr, uint32_t val)
++void __EXPORTED nftnl_gen_set_u32(struct nftnl_gen *gen, uint16_t attr, uint32_t val)
+ {
+ nftnl_gen_set_data(gen, attr, &val, sizeof(uint32_t));
+ }
+-EXPORT_SYMBOL(nftnl_gen_set_u32);
+
+-const void *nftnl_gen_get_data(const struct nftnl_gen *gen, uint16_t attr,
++const void __EXPORTED *nftnl_gen_get_data(const struct nftnl_gen *gen, uint16_t attr,
+ uint32_t *data_len)
+ {
+ if (!(gen->flags & (1 << attr)))
+@@ -105,21 +98,18 @@ const void *nftnl_gen_get_data(const struct nftnl_gen *gen, uint16_t attr,
+ }
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_gen_get_data);
+
+-const void *nftnl_gen_get(const struct nftnl_gen *gen, uint16_t attr)
++const void __EXPORTED *nftnl_gen_get(const struct nftnl_gen *gen, uint16_t attr)
+ {
+ uint32_t data_len;
+ return nftnl_gen_get_data(gen, attr, &data_len);
+ }
+-EXPORT_SYMBOL(nftnl_gen_get);
+
+-uint32_t nftnl_gen_get_u32(const struct nftnl_gen *gen, uint16_t attr)
++uint32_t __EXPORTED nftnl_gen_get_u32(const struct nftnl_gen *gen, uint16_t attr)
+ {
+ const void *ret = nftnl_gen_get(gen, attr);
+ return ret == NULL ? 0 : *((uint32_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_gen_get_u32);
+
+ static int nftnl_gen_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -140,7 +130,7 @@ static int nftnl_gen_parse_attr_cb(const struct nlattr *attr, void *data)
+ return MNL_CB_OK;
+ }
+
+-int nftnl_gen_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_gen *gen)
++int __EXPORTED nftnl_gen_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_gen *gen)
+ {
+ struct nlattr *tb[NFTA_GEN_MAX + 1] = {};
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+@@ -154,7 +144,6 @@ int nftnl_gen_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_gen *gen)
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_gen_nlmsg_parse);
+
+ static int nftnl_gen_snprintf_default(char *buf, size_t size,
+ const struct nftnl_gen *gen)
+@@ -186,13 +175,12 @@ static int nftnl_gen_cmd_snprintf(char *buf, size_t size,
+ return offset;
+ }
+
+-int nftnl_gen_snprintf(char *buf, size_t size, const struct nftnl_gen *gen,
++int __EXPORTED nftnl_gen_snprintf(char *buf, size_t size, const struct nftnl_gen *gen,
+ uint32_t type, uint32_t flags)
+ {;
+ return nftnl_gen_cmd_snprintf(buf, size, gen, nftnl_flag2cmd(flags), type,
+ flags);
+ }
+-EXPORT_SYMBOL(nftnl_gen_snprintf);
+
+ static int nftnl_gen_do_snprintf(char *buf, size_t size, const void *gen,
+ uint32_t cmd, uint32_t type, uint32_t flags)
+@@ -200,10 +188,9 @@ static int nftnl_gen_do_snprintf(char *buf, size_t size, const void *gen,
+ return nftnl_gen_snprintf(buf, size, gen, type, flags);
+ }
+
+-int nftnl_gen_fprintf(FILE *fp, const struct nftnl_gen *gen, uint32_t type,
++int __EXPORTED nftnl_gen_fprintf(FILE *fp, const struct nftnl_gen *gen, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_fprintf(fp, gen, NFTNL_CMD_UNSPEC, type, flags,
+ nftnl_gen_do_snprintf);
+ }
+-EXPORT_SYMBOL(nftnl_gen_fprintf);
+diff --git a/src/object.c b/src/object.c
+index e1a5ac4..d409c6d 100644
+--- a/src/object.c
++++ b/src/object.c
+@@ -39,13 +39,12 @@ static struct obj_ops *nftnl_obj_ops_lookup(uint32_t type)
+ return obj_ops[type];
+ }
+
+-struct nftnl_obj *nftnl_obj_alloc(void)
++struct nftnl_obj __EXPORTED *nftnl_obj_alloc(void)
+ {
+ return calloc(1, sizeof(struct nftnl_obj));
+ }
+-EXPORT_SYMBOL(nftnl_obj_alloc);
+
+-void nftnl_obj_free(const struct nftnl_obj *obj)
++void __EXPORTED nftnl_obj_free(const struct nftnl_obj *obj)
+ {
+ if (obj->flags & (1 << NFTNL_OBJ_TABLE))
+ xfree(obj->table);
+@@ -54,20 +53,18 @@ void nftnl_obj_free(const struct nftnl_obj *obj)
+
+ xfree(obj);
+ }
+-EXPORT_SYMBOL(nftnl_obj_free);
+
+-bool nftnl_obj_is_set(const struct nftnl_obj *obj, uint16_t attr)
++bool __EXPORTED nftnl_obj_is_set(const struct nftnl_obj *obj, uint16_t attr)
+ {
+ return obj->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_obj_is_set);
+
+ static uint32_t nftnl_obj_validate[NFTNL_OBJ_MAX + 1] = {
+ [NFTNL_OBJ_FAMILY] = sizeof(uint32_t),
+ [NFTNL_OBJ_USE] = sizeof(uint32_t),
+ };
+
+-void nftnl_obj_set_data(struct nftnl_obj *obj, uint16_t attr,
++void __EXPORTED nftnl_obj_set_data(struct nftnl_obj *obj, uint16_t attr,
+ const void *data, uint32_t data_len)
+ {
+ if (attr < NFTNL_OBJ_MAX)
+@@ -100,45 +97,38 @@ void nftnl_obj_set_data(struct nftnl_obj *obj, uint16_t attr,
+ }
+ obj->flags |= (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_obj_set_data);
+
+-void nftnl_obj_set(struct nftnl_obj *obj, uint16_t attr, const void *data)
++void __EXPORTED nftnl_obj_set(struct nftnl_obj *obj, uint16_t attr, const void *data)
+ {
+ nftnl_obj_set_data(obj, attr, data, nftnl_obj_validate[attr]);
+ }
+-EXPORT_SYMBOL(nftnl_obj_set);
+
+-void nftnl_obj_set_u8(struct nftnl_obj *obj, uint16_t attr, uint8_t val)
++void __EXPORTED nftnl_obj_set_u8(struct nftnl_obj *obj, uint16_t attr, uint8_t val)
+ {
+ nftnl_obj_set_data(obj, attr, &val, sizeof(uint8_t));
+ }
+-EXPORT_SYMBOL(nftnl_obj_set_u8);
+
+-void nftnl_obj_set_u16(struct nftnl_obj *obj, uint16_t attr, uint16_t val)
++void __EXPORTED nftnl_obj_set_u16(struct nftnl_obj *obj, uint16_t attr, uint16_t val)
+ {
+ nftnl_obj_set_data(obj, attr, &val, sizeof(uint16_t));
+ }
+-EXPORT_SYMBOL(nftnl_obj_set_u16);
+
+-void nftnl_obj_set_u32(struct nftnl_obj *obj, uint16_t attr, uint32_t val)
++void __EXPORTED nftnl_obj_set_u32(struct nftnl_obj *obj, uint16_t attr, uint32_t val)
+ {
+ nftnl_obj_set_data(obj, attr, &val, sizeof(uint32_t));
+ }
+-EXPORT_SYMBOL(nftnl_obj_set_u32);
+
+-void nftnl_obj_set_u64(struct nftnl_obj *obj, uint16_t attr, uint64_t val)
++void __EXPORTED nftnl_obj_set_u64(struct nftnl_obj *obj, uint16_t attr, uint64_t val)
+ {
+ nftnl_obj_set_data(obj, attr, &val, sizeof(uint64_t));
+ }
+-EXPORT_SYMBOL(nftnl_obj_set_u64);
+
+-void nftnl_obj_set_str(struct nftnl_obj *obj, uint16_t attr, const char *str)
++void __EXPORTED nftnl_obj_set_str(struct nftnl_obj *obj, uint16_t attr, const char *str)
+ {
+ nftnl_obj_set_data(obj, attr, str, 0);
+ }
+-EXPORT_SYMBOL(nftnl_obj_set_str);
+
+-const void *nftnl_obj_get_data(struct nftnl_obj *obj, uint16_t attr,
++const void __EXPORTED *nftnl_obj_get_data(struct nftnl_obj *obj, uint16_t attr,
+ uint32_t *data_len)
+ {
+ if (!(obj->flags & (1 << attr)))
+@@ -168,50 +158,43 @@ const void *nftnl_obj_get_data(struct nftnl_obj *obj, uint16_t attr,
+ }
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_obj_get_data);
+
+-const void *nftnl_obj_get(struct nftnl_obj *obj, uint16_t attr)
++const void __EXPORTED *nftnl_obj_get(struct nftnl_obj *obj, uint16_t attr)
+ {
+ uint32_t data_len;
+ return nftnl_obj_get_data(obj, attr, &data_len);
+ }
+-EXPORT_SYMBOL(nftnl_obj_get);
+
+-uint8_t nftnl_obj_get_u8(struct nftnl_obj *obj, uint16_t attr)
++uint8_t __EXPORTED nftnl_obj_get_u8(struct nftnl_obj *obj, uint16_t attr)
+ {
+ const void *ret = nftnl_obj_get(obj, attr);
+ return ret == NULL ? 0 : *((uint8_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_obj_get_u8);
+
+-uint16_t nftnl_obj_get_u16(struct nftnl_obj *obj, uint16_t attr)
++uint16_t __EXPORTED nftnl_obj_get_u16(struct nftnl_obj *obj, uint16_t attr)
+ {
+ const void *ret = nftnl_obj_get(obj, attr);
+ return ret == NULL ? 0 : *((uint16_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_obj_get_u16);
+
+-uint32_t nftnl_obj_get_u32(struct nftnl_obj *obj, uint16_t attr)
++uint32_t __EXPORTED nftnl_obj_get_u32(struct nftnl_obj *obj, uint16_t attr)
+ {
+ const void *ret = nftnl_obj_get(obj, attr);
+ return ret == NULL ? 0 : *((uint32_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_obj_get_u32);
+
+-uint64_t nftnl_obj_get_u64(struct nftnl_obj *obj, uint16_t attr)
++uint64_t __EXPORTED nftnl_obj_get_u64(struct nftnl_obj *obj, uint16_t attr)
+ {
+ const void *ret = nftnl_obj_get(obj, attr);
+ return ret == NULL ? 0 : *((uint64_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_obj_get_u64);
+
+-const char *nftnl_obj_get_str(struct nftnl_obj *obj, uint16_t attr)
++const char __EXPORTED *nftnl_obj_get_str(struct nftnl_obj *obj, uint16_t attr)
+ {
+ return nftnl_obj_get(obj, attr);
+ }
+-EXPORT_SYMBOL(nftnl_obj_get_str);
+
+-void nftnl_obj_nlmsg_build_payload(struct nlmsghdr *nlh,
++void __EXPORTED nftnl_obj_nlmsg_build_payload(struct nlmsghdr *nlh,
+ const struct nftnl_obj *obj)
+ {
+ if (obj->flags & (1 << NFTNL_OBJ_TABLE))
+@@ -228,7 +211,6 @@ void nftnl_obj_nlmsg_build_payload(struct nlmsghdr *nlh,
+ mnl_attr_nest_end(nlh, nest);
+ }
+ }
+-EXPORT_SYMBOL(nftnl_obj_nlmsg_build_payload);
+
+ static int nftnl_obj_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -258,7 +240,7 @@ static int nftnl_obj_parse_attr_cb(const struct nlattr *attr, void *data)
+ return MNL_CB_OK;
+ }
+
+-int nftnl_obj_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_obj *obj)
++int __EXPORTED nftnl_obj_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_obj *obj)
+ {
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+ struct nlattr *tb[NFTA_OBJ_MAX + 1] = {};
+@@ -299,7 +281,6 @@ int nftnl_obj_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_obj *obj)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_obj_nlmsg_parse);
+
+ #ifdef JSON_PARSING
+ static int nftnl_jansson_parse_obj(struct nftnl_obj *t, json_t *tree,
+@@ -377,19 +358,17 @@ static int nftnl_obj_do_parse(struct nftnl_obj *obj, enum nftnl_parse_type type,
+ return ret;
+ }
+
+-int nftnl_obj_parse(struct nftnl_obj *obj, enum nftnl_parse_type type,
++int __EXPORTED nftnl_obj_parse(struct nftnl_obj *obj, enum nftnl_parse_type type,
+ const char *data, struct nftnl_parse_err *err)
+ {
+ return nftnl_obj_do_parse(obj, type, data, err, NFTNL_PARSE_BUFFER);
+ }
+-EXPORT_SYMBOL(nftnl_obj_parse);
+
+-int nftnl_obj_parse_file(struct nftnl_obj *obj, enum nftnl_parse_type type,
++int __EXPORTED nftnl_obj_parse_file(struct nftnl_obj *obj, enum nftnl_parse_type type,
+ FILE *fp, struct nftnl_parse_err *err)
+ {
+ return nftnl_obj_do_parse(obj, type, fp, err, NFTNL_PARSE_FILE);
+ }
+-EXPORT_SYMBOL(nftnl_obj_parse_file);
+
+ static int nftnl_obj_export(char *buf, size_t size,
+ const struct nftnl_obj *obj,
+@@ -469,13 +448,12 @@ static int nftnl_obj_cmd_snprintf(char *buf, size_t size,
+ return offset;
+ }
+
+-int nftnl_obj_snprintf(char *buf, size_t size, const struct nftnl_obj *obj,
++int __EXPORTED nftnl_obj_snprintf(char *buf, size_t size, const struct nftnl_obj *obj,
+ uint32_t type, uint32_t flags)
+ {
+ return nftnl_obj_cmd_snprintf(buf, size, obj, nftnl_flag2cmd(flags),
+ type, flags);
+ }
+-EXPORT_SYMBOL(nftnl_obj_snprintf);
+
+ static int nftnl_obj_do_snprintf(char *buf, size_t size, const void *obj,
+ uint32_t cmd, uint32_t type, uint32_t flags)
+@@ -483,19 +461,18 @@ static int nftnl_obj_do_snprintf(char *buf, size_t size, const void *obj,
+ return nftnl_obj_snprintf(buf, size, obj, type, flags);
+ }
+
+-int nftnl_obj_fprintf(FILE *fp, const struct nftnl_obj *obj, uint32_t type,
++int __EXPORTED nftnl_obj_fprintf(FILE *fp, const struct nftnl_obj *obj, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_fprintf(fp, obj, NFTNL_CMD_UNSPEC, type, flags,
+ nftnl_obj_do_snprintf);
+ }
+-EXPORT_SYMBOL(nftnl_obj_fprintf);
+
+ struct nftnl_obj_list {
+ struct list_head list;
+ };
+
+-struct nftnl_obj_list *nftnl_obj_list_alloc(void)
++struct nftnl_obj_list __EXPORTED *nftnl_obj_list_alloc(void)
+ {
+ struct nftnl_obj_list *list;
+
+@@ -507,9 +484,8 @@ struct nftnl_obj_list *nftnl_obj_list_alloc(void)
+
+ return list;
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_alloc);
+
+-void nftnl_obj_list_free(struct nftnl_obj_list *list)
++void __EXPORTED nftnl_obj_list_free(struct nftnl_obj_list *list)
+ {
+ struct nftnl_obj *r, *tmp;
+
+@@ -519,34 +495,29 @@ void nftnl_obj_list_free(struct nftnl_obj_list *list)
+ }
+ xfree(list);
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_free);
+
+-int nftnl_obj_list_is_empty(struct nftnl_obj_list *list)
++int __EXPORTED nftnl_obj_list_is_empty(struct nftnl_obj_list *list)
+ {
+ return list_empty(&list->list);
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_is_empty);
+
+-void nftnl_obj_list_add(struct nftnl_obj *r, struct nftnl_obj_list *list)
++void __EXPORTED nftnl_obj_list_add(struct nftnl_obj *r, struct nftnl_obj_list *list)
+ {
+ list_add(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_add);
+
+-void nftnl_obj_list_add_tail(struct nftnl_obj *r,
++void __EXPORTED nftnl_obj_list_add_tail(struct nftnl_obj *r,
+ struct nftnl_obj_list *list)
+ {
+ list_add_tail(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_add_tail);
+
+-void nftnl_obj_list_del(struct nftnl_obj *t)
++void __EXPORTED nftnl_obj_list_del(struct nftnl_obj *t)
+ {
+ list_del(&t->head);
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_del);
+
+-int nftnl_obj_list_foreach(struct nftnl_obj_list *table_list,
++int __EXPORTED nftnl_obj_list_foreach(struct nftnl_obj_list *table_list,
+ int (*cb)(struct nftnl_obj *t, void *data),
+ void *data)
+ {
+@@ -560,14 +531,13 @@ int nftnl_obj_list_foreach(struct nftnl_obj_list *table_list,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_foreach);
+
+ struct nftnl_obj_list_iter {
+ struct nftnl_obj_list *list;
+ struct nftnl_obj *cur;
+ };
+
+-struct nftnl_obj_list_iter *
++struct nftnl_obj_list_iter __EXPORTED *
+ nftnl_obj_list_iter_create(struct nftnl_obj_list *l)
+ {
+ struct nftnl_obj_list_iter *iter;
+@@ -584,9 +554,8 @@ nftnl_obj_list_iter_create(struct nftnl_obj_list *l)
+
+ return iter;
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_iter_create);
+
+-struct nftnl_obj *nftnl_obj_list_iter_next(struct nftnl_obj_list_iter *iter)
++struct nftnl_obj __EXPORTED *nftnl_obj_list_iter_next(struct nftnl_obj_list_iter *iter)
+ {
+ struct nftnl_obj *r = iter->cur;
+
+@@ -600,10 +569,8 @@ struct nftnl_obj *nftnl_obj_list_iter_next(struct nftnl_obj_list_iter *iter)
+
+ return r;
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_iter_next);
+
+-void nftnl_obj_list_iter_destroy(struct nftnl_obj_list_iter *iter)
++void __EXPORTED nftnl_obj_list_iter_destroy(struct nftnl_obj_list_iter *iter)
+ {
+ xfree(iter);
+ }
+-EXPORT_SYMBOL(nftnl_obj_list_iter_destroy);
+diff --git a/src/rule.c b/src/rule.c
+index 6c22141..ad8609f 100644
+--- a/src/rule.c
++++ b/src/rule.c
+@@ -52,7 +52,7 @@ struct nftnl_rule {
+ struct list_head expr_list;
+ };
+
+-struct nftnl_rule *nftnl_rule_alloc(void)
++struct nftnl_rule __EXPORTED *nftnl_rule_alloc(void)
+ {
+ struct nftnl_rule *r;
+
+@@ -64,9 +64,8 @@ struct nftnl_rule *nftnl_rule_alloc(void)
+
+ return r;
+ }
+-EXPORT_SYMBOL(nftnl_rule_alloc);
+
+-void nftnl_rule_free(const struct nftnl_rule *r)
++void __EXPORTED nftnl_rule_free(const struct nftnl_rule *r)
+ {
+ struct nftnl_expr *e, *tmp;
+
+@@ -82,15 +81,13 @@ void nftnl_rule_free(const struct nftnl_rule *r)
+
+ xfree(r);
+ }
+-EXPORT_SYMBOL(nftnl_rule_free);
+
+-bool nftnl_rule_is_set(const struct nftnl_rule *r, uint16_t attr)
++bool __EXPORTED nftnl_rule_is_set(const struct nftnl_rule *r, uint16_t attr)
+ {
+ return r->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_rule_is_set);
+
+-void nftnl_rule_unset(struct nftnl_rule *r, uint16_t attr)
++void __EXPORTED nftnl_rule_unset(struct nftnl_rule *r, uint16_t attr)
+ {
+ if (!(r->flags & (1 << attr)))
+ return;
+@@ -116,7 +113,6 @@ void nftnl_rule_unset(struct nftnl_rule *r, uint16_t attr)
+
+ r->flags &= ~(1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_rule_unset);
+
+ static uint32_t nftnl_rule_validate[NFTNL_RULE_MAX + 1] = {
+ [NFTNL_RULE_HANDLE] = sizeof(uint64_t),
+@@ -127,7 +123,7 @@ static uint32_t nftnl_rule_validate[NFTNL_RULE_MAX + 1] = {
+ [NFTNL_RULE_ID] = sizeof(uint32_t),
+ };
+
+-int nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
++int __EXPORTED nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
+ const void *data, uint32_t data_len)
+ {
+ nftnl_assert_attr_exists(attr, NFTNL_RULE_MAX);
+@@ -183,33 +179,28 @@ int nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
+ r->flags |= (1 << attr);
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_rule_set_data);
+
+-int nftnl_rule_set(struct nftnl_rule *r, uint16_t attr, const void *data)
++int __EXPORTED nftnl_rule_set(struct nftnl_rule *r, uint16_t attr, const void *data)
+ {
+ return nftnl_rule_set_data(r, attr, data, nftnl_rule_validate[attr]);
+ }
+-EXPORT_SYMBOL(nftnl_rule_set);
+
+-void nftnl_rule_set_u32(struct nftnl_rule *r, uint16_t attr, uint32_t val)
++void __EXPORTED nftnl_rule_set_u32(struct nftnl_rule *r, uint16_t attr, uint32_t val)
+ {
+ nftnl_rule_set_data(r, attr, &val, sizeof(uint32_t));
+ }
+-EXPORT_SYMBOL(nftnl_rule_set_u32);
+
+-void nftnl_rule_set_u64(struct nftnl_rule *r, uint16_t attr, uint64_t val)
++void __EXPORTED nftnl_rule_set_u64(struct nftnl_rule *r, uint16_t attr, uint64_t val)
+ {
+ nftnl_rule_set_data(r, attr, &val, sizeof(uint64_t));
+ }
+-EXPORT_SYMBOL(nftnl_rule_set_u64);
+
+-int nftnl_rule_set_str(struct nftnl_rule *r, uint16_t attr, const char *str)
++int __EXPORTED nftnl_rule_set_str(struct nftnl_rule *r, uint16_t attr, const char *str)
+ {
+ return nftnl_rule_set_data(r, attr, str, strlen(str) + 1);
+ }
+-EXPORT_SYMBOL(nftnl_rule_set_str);
+
+-const void *nftnl_rule_get_data(const struct nftnl_rule *r, uint16_t attr,
++const void __EXPORTED *nftnl_rule_get_data(const struct nftnl_rule *r, uint16_t attr,
+ uint32_t *data_len)
+ {
+ if (!(r->flags & (1 << attr)))
+@@ -246,22 +237,19 @@ const void *nftnl_rule_get_data(const struct nftnl_rule *r, uint16_t attr,
+ }
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_rule_get_data);
+
+-const void *nftnl_rule_get(const struct nftnl_rule *r, uint16_t attr)
++const void __EXPORTED *nftnl_rule_get(const struct nftnl_rule *r, uint16_t attr)
+ {
+ uint32_t data_len;
+ return nftnl_rule_get_data(r, attr, &data_len);
+ }
+-EXPORT_SYMBOL(nftnl_rule_get);
+
+-const char *nftnl_rule_get_str(const struct nftnl_rule *r, uint16_t attr)
++const char __EXPORTED *nftnl_rule_get_str(const struct nftnl_rule *r, uint16_t attr)
+ {
+ return nftnl_rule_get(r, attr);
+ }
+-EXPORT_SYMBOL(nftnl_rule_get_str);
+
+-uint32_t nftnl_rule_get_u32(const struct nftnl_rule *r, uint16_t attr)
++uint32_t __EXPORTED nftnl_rule_get_u32(const struct nftnl_rule *r, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint32_t *val = nftnl_rule_get_data(r, attr, &data_len);
+@@ -270,9 +258,8 @@ uint32_t nftnl_rule_get_u32(const struct nftnl_rule *r, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_rule_get_u32);
+
+-uint64_t nftnl_rule_get_u64(const struct nftnl_rule *r, uint16_t attr)
++uint64_t __EXPORTED nftnl_rule_get_u64(const struct nftnl_rule *r, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint64_t *val = nftnl_rule_get_data(r, attr, &data_len);
+@@ -281,9 +268,8 @@ uint64_t nftnl_rule_get_u64(const struct nftnl_rule *r, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_rule_get_u64);
+
+-uint8_t nftnl_rule_get_u8(const struct nftnl_rule *r, uint16_t attr)
++uint8_t __EXPORTED nftnl_rule_get_u8(const struct nftnl_rule *r, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint8_t *val = nftnl_rule_get_data(r, attr, &data_len);
+@@ -292,9 +278,8 @@ uint8_t nftnl_rule_get_u8(const struct nftnl_rule *r, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_rule_get_u8);
+
+-void nftnl_rule_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_rule *r)
++void __EXPORTED nftnl_rule_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_rule *r)
+ {
+ struct nftnl_expr *expr;
+ struct nlattr *nest, *nest2;
+@@ -335,13 +320,11 @@ void nftnl_rule_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_rule *r)
+ if (r->flags & (1 << NFTNL_RULE_ID))
+ mnl_attr_put_u32(nlh, NFTA_RULE_ID, htonl(r->id));
+ }
+-EXPORT_SYMBOL(nftnl_rule_nlmsg_build_payload);
+
+-void nftnl_rule_add_expr(struct nftnl_rule *r, struct nftnl_expr *expr)
++void __EXPORTED nftnl_rule_add_expr(struct nftnl_rule *r, struct nftnl_expr *expr)
+ {
+ list_add_tail(&expr->head, &r->expr_list);
+ }
+-EXPORT_SYMBOL(nftnl_rule_add_expr);
+
+ static int nftnl_rule_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -441,7 +424,7 @@ static int nftnl_rule_parse_compat(struct nlattr *nest, struct nftnl_rule *r)
+ return 0;
+ }
+
+-int nftnl_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_rule *r)
++int __EXPORTED nftnl_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_rule *r)
+ {
+ struct nlattr *tb[NFTA_RULE_MAX+1] = {};
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+@@ -510,7 +493,6 @@ int nftnl_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_rule *r)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_rule_nlmsg_parse);
+
+ #ifdef JSON_PARSING
+ int nftnl_jansson_parse_rule(struct nftnl_rule *r, json_t *tree,
+@@ -658,19 +640,17 @@ static int nftnl_rule_do_parse(struct nftnl_rule *r, enum nftnl_parse_type type,
+
+ return ret;
+ }
+-int nftnl_rule_parse(struct nftnl_rule *r, enum nftnl_parse_type type,
++int __EXPORTED nftnl_rule_parse(struct nftnl_rule *r, enum nftnl_parse_type type,
+ const char *data, struct nftnl_parse_err *err)
+ {
+ return nftnl_rule_do_parse(r, type, data, err, NFTNL_PARSE_BUFFER);
+ }
+-EXPORT_SYMBOL(nftnl_rule_parse);
+
+-int nftnl_rule_parse_file(struct nftnl_rule *r, enum nftnl_parse_type type,
++int __EXPORTED nftnl_rule_parse_file(struct nftnl_rule *r, enum nftnl_parse_type type,
+ FILE *fp, struct nftnl_parse_err *err)
+ {
+ return nftnl_rule_do_parse(r, type, fp, err, NFTNL_PARSE_FILE);
+ }
+-EXPORT_SYMBOL(nftnl_rule_parse_file);
+
+ static int nftnl_rule_export(char *buf, size_t size,
+ const struct nftnl_rule *r,
+@@ -819,13 +799,12 @@ static int nftnl_rule_cmd_snprintf(char *buf, size_t size,
+ return offset;
+ }
+
+-int nftnl_rule_snprintf(char *buf, size_t size, const struct nftnl_rule *r,
++int __EXPORTED nftnl_rule_snprintf(char *buf, size_t size, const struct nftnl_rule *r,
+ uint32_t type, uint32_t flags)
+ {
+ return nftnl_rule_cmd_snprintf(buf, size, r, nftnl_flag2cmd(flags), type,
+ flags);
+ }
+-EXPORT_SYMBOL(nftnl_rule_snprintf);
+
+ static int nftnl_rule_do_snprintf(char *buf, size_t size, const void *r,
+ uint32_t cmd, uint32_t type, uint32_t flags)
+@@ -833,15 +812,14 @@ static int nftnl_rule_do_snprintf(char *buf, size_t size, const void *r,
+ return nftnl_rule_snprintf(buf, size, r, type, flags);
+ }
+
+-int nftnl_rule_fprintf(FILE *fp, const struct nftnl_rule *r, uint32_t type,
++int __EXPORTED nftnl_rule_fprintf(FILE *fp, const struct nftnl_rule *r, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_fprintf(fp, r, NFTNL_CMD_UNSPEC, type, flags,
+ nftnl_rule_do_snprintf);
+ }
+-EXPORT_SYMBOL(nftnl_rule_fprintf);
+
+-int nftnl_expr_foreach(struct nftnl_rule *r,
++int __EXPORTED nftnl_expr_foreach(struct nftnl_rule *r,
+ int (*cb)(struct nftnl_expr *e, void *data),
+ void *data)
+ {
+@@ -855,7 +833,6 @@ int nftnl_expr_foreach(struct nftnl_rule *r,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_expr_foreach);
+
+ struct nftnl_expr_iter {
+ const struct nftnl_rule *r;
+@@ -873,7 +850,7 @@ static void nftnl_expr_iter_init(const struct nftnl_rule *r,
+ head);
+ }
+
+-struct nftnl_expr_iter *nftnl_expr_iter_create(const struct nftnl_rule *r)
++struct nftnl_expr_iter __EXPORTED *nftnl_expr_iter_create(const struct nftnl_rule *r)
+ {
+ struct nftnl_expr_iter *iter;
+
+@@ -885,9 +862,8 @@ struct nftnl_expr_iter *nftnl_expr_iter_create(const struct nftnl_rule *r)
+
+ return iter;
+ }
+-EXPORT_SYMBOL(nftnl_expr_iter_create);
+
+-struct nftnl_expr *nftnl_expr_iter_next(struct nftnl_expr_iter *iter)
++struct nftnl_expr __EXPORTED *nftnl_expr_iter_next(struct nftnl_expr_iter *iter)
+ {
+ struct nftnl_expr *expr = iter->cur;
+
+@@ -901,15 +877,13 @@ struct nftnl_expr *nftnl_expr_iter_next(struct nftnl_expr_iter *iter)
+
+ return expr;
+ }
+-EXPORT_SYMBOL(nftnl_expr_iter_next);
+
+-void nftnl_expr_iter_destroy(struct nftnl_expr_iter *iter)
++void __EXPORTED nftnl_expr_iter_destroy(struct nftnl_expr_iter *iter)
+ {
+ xfree(iter);
+ }
+-EXPORT_SYMBOL(nftnl_expr_iter_destroy);
+
+-bool nftnl_rule_cmp(const struct nftnl_rule *r1, const struct nftnl_rule *r2)
++bool __EXPORTED nftnl_rule_cmp(const struct nftnl_rule *r1, const struct nftnl_rule *r2)
+ {
+ struct nftnl_expr_iter it1, it2;
+ struct nftnl_expr *e1, *e2;
+@@ -938,13 +912,12 @@ bool nftnl_rule_cmp(const struct nftnl_rule *r1, const struct nftnl_rule *r2)
+
+ return eq;
+ }
+-EXPORT_SYMBOL(nftnl_rule_cmp);
+
+ struct nftnl_rule_list {
+ struct list_head list;
+ };
+
+-struct nftnl_rule_list *nftnl_rule_list_alloc(void)
++struct nftnl_rule_list __EXPORTED *nftnl_rule_list_alloc(void)
+ {
+ struct nftnl_rule_list *list;
+
+@@ -956,9 +929,8 @@ struct nftnl_rule_list *nftnl_rule_list_alloc(void)
+
+ return list;
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_alloc);
+
+-void nftnl_rule_list_free(struct nftnl_rule_list *list)
++void __EXPORTED nftnl_rule_list_free(struct nftnl_rule_list *list)
+ {
+ struct nftnl_rule *r, *tmp;
+
+@@ -968,33 +940,28 @@ void nftnl_rule_list_free(struct nftnl_rule_list *list)
+ }
+ xfree(list);
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_free);
+
+-int nftnl_rule_list_is_empty(const struct nftnl_rule_list *list)
++int __EXPORTED nftnl_rule_list_is_empty(const struct nftnl_rule_list *list)
+ {
+ return list_empty(&list->list);
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_is_empty);
+
+-void nftnl_rule_list_add(struct nftnl_rule *r, struct nftnl_rule_list *list)
++void __EXPORTED nftnl_rule_list_add(struct nftnl_rule *r, struct nftnl_rule_list *list)
+ {
+ list_add(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_add);
+
+-void nftnl_rule_list_add_tail(struct nftnl_rule *r, struct nftnl_rule_list *list)
++void __EXPORTED nftnl_rule_list_add_tail(struct nftnl_rule *r, struct nftnl_rule_list *list)
+ {
+ list_add_tail(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_add_tail);
+
+-void nftnl_rule_list_del(struct nftnl_rule *r)
++void __EXPORTED nftnl_rule_list_del(struct nftnl_rule *r)
+ {
+ list_del(&r->head);
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_del);
+
+-int nftnl_rule_list_foreach(struct nftnl_rule_list *rule_list,
++int __EXPORTED nftnl_rule_list_foreach(struct nftnl_rule_list *rule_list,
+ int (*cb)(struct nftnl_rule *r, void *data),
+ void *data)
+ {
+@@ -1008,14 +975,13 @@ int nftnl_rule_list_foreach(struct nftnl_rule_list *rule_list,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_foreach);
+
+ struct nftnl_rule_list_iter {
+ const struct nftnl_rule_list *list;
+ struct nftnl_rule *cur;
+ };
+
+-struct nftnl_rule_list_iter *
++struct nftnl_rule_list_iter __EXPORTED *
+ nftnl_rule_list_iter_create(const struct nftnl_rule_list *l)
+ {
+ struct nftnl_rule_list_iter *iter;
+@@ -1032,15 +998,13 @@ nftnl_rule_list_iter_create(const struct nftnl_rule_list *l)
+
+ return iter;
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_iter_create);
+
+-struct nftnl_rule *nftnl_rule_list_iter_cur(struct nftnl_rule_list_iter *iter)
++struct nftnl_rule __EXPORTED *nftnl_rule_list_iter_cur(struct nftnl_rule_list_iter *iter)
+ {
+ return iter->cur;
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_iter_cur);
+
+-struct nftnl_rule *nftnl_rule_list_iter_next(struct nftnl_rule_list_iter *iter)
++struct nftnl_rule __EXPORTED *nftnl_rule_list_iter_next(struct nftnl_rule_list_iter *iter)
+ {
+ struct nftnl_rule *r = iter->cur;
+
+@@ -1054,10 +1018,8 @@ struct nftnl_rule *nftnl_rule_list_iter_next(struct nftnl_rule_list_iter *iter)
+
+ return r;
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_iter_next);
+
+-void nftnl_rule_list_iter_destroy(const struct nftnl_rule_list_iter *iter)
++void __EXPORTED nftnl_rule_list_iter_destroy(const struct nftnl_rule_list_iter *iter)
+ {
+ xfree(iter);
+ }
+-EXPORT_SYMBOL(nftnl_rule_list_iter_destroy);
+diff --git a/src/ruleset.c b/src/ruleset.c
+index 6ef2956..10d48f6 100644
+--- a/src/ruleset.c
++++ b/src/ruleset.c
+@@ -55,13 +55,12 @@ struct nftnl_parse_ctx {
+ uint16_t flags;
+ };
+
+-struct nftnl_ruleset *nftnl_ruleset_alloc(void)
++struct nftnl_ruleset __EXPORTED *nftnl_ruleset_alloc(void)
+ {
+ return calloc(1, sizeof(struct nftnl_ruleset));
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_alloc);
+
+-void nftnl_ruleset_free(const struct nftnl_ruleset *r)
++void __EXPORTED nftnl_ruleset_free(const struct nftnl_ruleset *r)
+ {
+ if (r->flags & (1 << NFTNL_RULESET_TABLELIST))
+ nftnl_table_list_free(r->table_list);
+@@ -73,15 +72,13 @@ void nftnl_ruleset_free(const struct nftnl_ruleset *r)
+ nftnl_rule_list_free(r->rule_list);
+ xfree(r);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_free);
+
+-bool nftnl_ruleset_is_set(const struct nftnl_ruleset *r, uint16_t attr)
++bool __EXPORTED nftnl_ruleset_is_set(const struct nftnl_ruleset *r, uint16_t attr)
+ {
+ return r->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_is_set);
+
+-void nftnl_ruleset_unset(struct nftnl_ruleset *r, uint16_t attr)
++void __EXPORTED nftnl_ruleset_unset(struct nftnl_ruleset *r, uint16_t attr)
+ {
+ if (!(r->flags & (1 << attr)))
+ return;
+@@ -102,9 +99,8 @@ void nftnl_ruleset_unset(struct nftnl_ruleset *r, uint16_t attr)
+ }
+ r->flags &= ~(1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_unset);
+
+-void nftnl_ruleset_set(struct nftnl_ruleset *r, uint16_t attr, void *data)
++void __EXPORTED nftnl_ruleset_set(struct nftnl_ruleset *r, uint16_t attr, void *data)
+ {
+ switch (attr) {
+ case NFTNL_RULESET_TABLELIST:
+@@ -128,9 +124,8 @@ void nftnl_ruleset_set(struct nftnl_ruleset *r, uint16_t attr, void *data)
+ }
+ r->flags |= (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_set);
+
+-void *nftnl_ruleset_get(const struct nftnl_ruleset *r, uint16_t attr)
++void __EXPORTED *nftnl_ruleset_get(const struct nftnl_ruleset *r, uint16_t attr)
+ {
+ if (!(r->flags & (1 << attr)))
+ return NULL;
+@@ -148,9 +143,8 @@ void *nftnl_ruleset_get(const struct nftnl_ruleset *r, uint16_t attr)
+ return NULL;
+ }
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_get);
+
+-void nftnl_ruleset_ctx_free(const struct nftnl_parse_ctx *ctx)
++void __EXPORTED nftnl_ruleset_ctx_free(const struct nftnl_parse_ctx *ctx)
+ {
+ switch (ctx->type) {
+ case NFTNL_RULESET_TABLE:
+@@ -171,15 +165,13 @@ void nftnl_ruleset_ctx_free(const struct nftnl_parse_ctx *ctx)
+ break;
+ }
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_ctx_free);
+
+-bool nftnl_ruleset_ctx_is_set(const struct nftnl_parse_ctx *ctx, uint16_t attr)
++bool __EXPORTED nftnl_ruleset_ctx_is_set(const struct nftnl_parse_ctx *ctx, uint16_t attr)
+ {
+ return ctx->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_ctx_is_set);
+
+-void *nftnl_ruleset_ctx_get(const struct nftnl_parse_ctx *ctx, uint16_t attr)
++void __EXPORTED *nftnl_ruleset_ctx_get(const struct nftnl_parse_ctx *ctx, uint16_t attr)
+ {
+ if (!(ctx->flags & (1 << attr)))
+ return NULL;
+@@ -203,14 +195,12 @@ void *nftnl_ruleset_ctx_get(const struct nftnl_parse_ctx *ctx, uint16_t attr)
+ return NULL;
+ }
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_ctx_get);
+
+-uint32_t nftnl_ruleset_ctx_get_u32(const struct nftnl_parse_ctx *ctx, uint16_t attr)
++uint32_t __EXPORTED nftnl_ruleset_ctx_get_u32(const struct nftnl_parse_ctx *ctx, uint16_t attr)
+ {
+ const void *ret = nftnl_ruleset_ctx_get(ctx, attr);
+ return ret == NULL ? 0 : *((uint32_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_ctx_get_u32);
+
+ #if defined(JSON_PARSING)
+ static void nftnl_ruleset_ctx_set(struct nftnl_parse_ctx *ctx, uint16_t attr,
+@@ -593,22 +583,20 @@ nftnl_ruleset_do_parse(enum nftnl_parse_type type, const void *data,
+ return ret;
+ }
+
+-int nftnl_ruleset_parse_file_cb(enum nftnl_parse_type type, FILE *fp,
++int __EXPORTED nftnl_ruleset_parse_file_cb(enum nftnl_parse_type type, FILE *fp,
+ struct nftnl_parse_err *err, void *data,
+ int (*cb)(const struct nftnl_parse_ctx *ctx))
+ {
+ return nftnl_ruleset_do_parse(type, fp, err, NFTNL_PARSE_FILE, data, cb);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_parse_file_cb);
+
+-int nftnl_ruleset_parse_buffer_cb(enum nftnl_parse_type type, const char *buffer,
++int __EXPORTED nftnl_ruleset_parse_buffer_cb(enum nftnl_parse_type type, const char *buffer,
+ struct nftnl_parse_err *err, void *data,
+ int (*cb)(const struct nftnl_parse_ctx *ctx))
+ {
+ return nftnl_ruleset_do_parse(type, buffer, err, NFTNL_PARSE_BUFFER, data,
+ cb);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_parse_buffer_cb);
+
+ static int nftnl_ruleset_cb(const struct nftnl_parse_ctx *ctx)
+ {
+@@ -671,19 +659,17 @@ static int nftnl_ruleset_cb(const struct nftnl_parse_ctx *ctx)
+ return 0;
+ }
+
+-int nftnl_ruleset_parse(struct nftnl_ruleset *r, enum nftnl_parse_type type,
++int __EXPORTED nftnl_ruleset_parse(struct nftnl_ruleset *r, enum nftnl_parse_type type,
+ const char *data, struct nftnl_parse_err *err)
+ {
+ return nftnl_ruleset_parse_buffer_cb(type, data, err, r, nftnl_ruleset_cb);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_parse);
+
+-int nftnl_ruleset_parse_file(struct nftnl_ruleset *rs, enum nftnl_parse_type type,
++int __EXPORTED nftnl_ruleset_parse_file(struct nftnl_ruleset *rs, enum nftnl_parse_type type,
+ FILE *fp, struct nftnl_parse_err *err)
+ {
+ return nftnl_ruleset_parse_file_cb(type, fp, err, rs, nftnl_ruleset_cb);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_parse_file);
+
+ static const char *nftnl_ruleset_o_opentag(uint32_t type)
+ {
+@@ -928,7 +914,7 @@ static int nftnl_ruleset_cmd_snprintf(char *buf, size_t size,
+ }
+ }
+
+-int nftnl_ruleset_snprintf(char *buf, size_t size, const struct nftnl_ruleset *r,
++int __EXPORTED nftnl_ruleset_snprintf(char *buf, size_t size, const struct nftnl_ruleset *r,
+ uint32_t type, uint32_t flags)
+ {
+ switch (type) {
+@@ -943,7 +929,6 @@ int nftnl_ruleset_snprintf(char *buf, size_t size, const struct nftnl_ruleset *r
+ return -1;
+ }
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_snprintf);
+
+ static int nftnl_ruleset_fprintf_tables(FILE *fp, const struct nftnl_ruleset *rs,
+ uint32_t type, uint32_t flags)
+@@ -1157,10 +1142,9 @@ static int nftnl_ruleset_cmd_fprintf(FILE *fp, const struct nftnl_ruleset *rs,
+ return len;
+ }
+
+-int nftnl_ruleset_fprintf(FILE *fp, const struct nftnl_ruleset *rs, uint32_t type,
++int __EXPORTED nftnl_ruleset_fprintf(FILE *fp, const struct nftnl_ruleset *rs, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_ruleset_cmd_fprintf(fp, rs, nftnl_flag2cmd(flags), type,
+ flags);
+ }
+-EXPORT_SYMBOL(nftnl_ruleset_fprintf);
+diff --git a/src/set.c b/src/set.c
+index cce5e63..33a6794 100644
+--- a/src/set.c
++++ b/src/set.c
+@@ -27,7 +27,7 @@
+ #include <libnftnl/set.h>
+ #include <libnftnl/expr.h>
+
+-struct nftnl_set *nftnl_set_alloc(void)
++struct nftnl_set __EXPORTED *nftnl_set_alloc(void)
+ {
+ struct nftnl_set *s;
+
+@@ -38,9 +38,8 @@ struct nftnl_set *nftnl_set_alloc(void)
+ INIT_LIST_HEAD(&s->element_list);
+ return s;
+ }
+-EXPORT_SYMBOL(nftnl_set_alloc);
+
+-void nftnl_set_free(const struct nftnl_set *s)
++void __EXPORTED nftnl_set_free(const struct nftnl_set *s)
+ {
+ struct nftnl_set_elem *elem, *tmp;
+
+@@ -55,15 +54,13 @@ void nftnl_set_free(const struct nftnl_set *s)
+ }
+ xfree(s);
+ }
+-EXPORT_SYMBOL(nftnl_set_free);
+
+-bool nftnl_set_is_set(const struct nftnl_set *s, uint16_t attr)
++bool __EXPORTED nftnl_set_is_set(const struct nftnl_set *s, uint16_t attr)
+ {
+ return s->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_set_is_set);
+
+-void nftnl_set_unset(struct nftnl_set *s, uint16_t attr)
++void __EXPORTED nftnl_set_unset(struct nftnl_set *s, uint16_t attr)
+ {
+ if (!(s->flags & (1 << attr)))
+ return;
+@@ -97,7 +94,6 @@ void nftnl_set_unset(struct nftnl_set *s, uint16_t attr)
+
+ s->flags &= ~(1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_set_unset);
+
+ static uint32_t nftnl_set_validate[NFTNL_SET_MAX + 1] = {
+ [NFTNL_SET_FLAGS] = sizeof(uint32_t),
+@@ -113,7 +109,7 @@ static uint32_t nftnl_set_validate[NFTNL_SET_MAX + 1] = {
+ [NFTNL_SET_GC_INTERVAL] = sizeof(uint32_t),
+ };
+
+-int nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data,
++int __EXPORTED nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data,
+ uint32_t data_len)
+ {
+ nftnl_assert_attr_exists(attr, NFTNL_SET_MAX);
+@@ -186,33 +182,28 @@ int nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data,
+ s->flags |= (1 << attr);
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_set_set_data);
+
+-int nftnl_set_set(struct nftnl_set *s, uint16_t attr, const void *data)
++int __EXPORTED nftnl_set_set(struct nftnl_set *s, uint16_t attr, const void *data)
+ {
+ return nftnl_set_set_data(s, attr, data, nftnl_set_validate[attr]);
+ }
+-EXPORT_SYMBOL(nftnl_set_set);
+
+-void nftnl_set_set_u32(struct nftnl_set *s, uint16_t attr, uint32_t val)
++void __EXPORTED nftnl_set_set_u32(struct nftnl_set *s, uint16_t attr, uint32_t val)
+ {
+ nftnl_set_set(s, attr, &val);
+ }
+-EXPORT_SYMBOL(nftnl_set_set_u32);
+
+-void nftnl_set_set_u64(struct nftnl_set *s, uint16_t attr, uint64_t val)
++void __EXPORTED nftnl_set_set_u64(struct nftnl_set *s, uint16_t attr, uint64_t val)
+ {
+ nftnl_set_set(s, attr, &val);
+ }
+-EXPORT_SYMBOL(nftnl_set_set_u64);
+
+-int nftnl_set_set_str(struct nftnl_set *s, uint16_t attr, const char *str)
++int __EXPORTED nftnl_set_set_str(struct nftnl_set *s, uint16_t attr, const char *str)
+ {
+ return nftnl_set_set_data(s, attr, str, strlen(str) + 1);
+ }
+-EXPORT_SYMBOL(nftnl_set_set_str);
+
+-const void *nftnl_set_get_data(const struct nftnl_set *s, uint16_t attr,
++const void __EXPORTED *nftnl_set_get_data(const struct nftnl_set *s, uint16_t attr,
+ uint32_t *data_len)
+ {
+ if (!(s->flags & (1 << attr)))
+@@ -267,22 +258,19 @@ const void *nftnl_set_get_data(const struct nftnl_set *s, uint16_t attr,
+ }
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_set_get_data);
+
+-const void *nftnl_set_get(const struct nftnl_set *s, uint16_t attr)
++const void __EXPORTED *nftnl_set_get(const struct nftnl_set *s, uint16_t attr)
+ {
+ uint32_t data_len;
+ return nftnl_set_get_data(s, attr, &data_len);
+ }
+-EXPORT_SYMBOL(nftnl_set_get);
+
+-const char *nftnl_set_get_str(const struct nftnl_set *s, uint16_t attr)
++const char __EXPORTED *nftnl_set_get_str(const struct nftnl_set *s, uint16_t attr)
+ {
+ return nftnl_set_get(s, attr);
+ }
+-EXPORT_SYMBOL(nftnl_set_get_str);
+
+-uint32_t nftnl_set_get_u32(const struct nftnl_set *s, uint16_t attr)
++uint32_t __EXPORTED nftnl_set_get_u32(const struct nftnl_set *s, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint32_t *val = nftnl_set_get_data(s, attr, &data_len);
+@@ -291,9 +279,8 @@ uint32_t nftnl_set_get_u32(const struct nftnl_set *s, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_set_get_u32);
+
+-uint64_t nftnl_set_get_u64(const struct nftnl_set *s, uint16_t attr)
++uint64_t __EXPORTED nftnl_set_get_u64(const struct nftnl_set *s, uint16_t attr)
+ {
+ uint32_t data_len;
+ const uint64_t *val = nftnl_set_get_data(s, attr, &data_len);
+@@ -302,7 +289,6 @@ uint64_t nftnl_set_get_u64(const struct nftnl_set *s, uint16_t attr)
+
+ return val ? *val : 0;
+ }
+-EXPORT_SYMBOL(nftnl_set_get_u64);
+
+ struct nftnl_set *nftnl_set_clone(const struct nftnl_set *set)
+ {
+@@ -351,7 +337,7 @@ nftnl_set_nlmsg_build_desc_payload(struct nlmsghdr *nlh, struct nftnl_set *s)
+ mnl_attr_nest_end(nlh, nest);
+ }
+
+-void nftnl_set_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set *s)
++void __EXPORTED nftnl_set_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set *s)
+ {
+ if (s->flags & (1 << NFTNL_SET_TABLE))
+ mnl_attr_put_strz(nlh, NFTA_SET_TABLE, s->table);
+@@ -383,7 +369,6 @@ void nftnl_set_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set *s)
+ if (s->flags & (1 << NFTNL_SET_USERDATA))
+ mnl_attr_put(nlh, NFTA_SET_USERDATA, s->user.len, s->user.data);
+ }
+-EXPORT_SYMBOL(nftnl_set_nlmsg_build_payload);
+
+ static int nftnl_set_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -463,7 +448,7 @@ static int nftnl_set_desc_parse(struct nftnl_set *s,
+ return 0;
+ }
+
+-int nftnl_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
++int __EXPORTED nftnl_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
+ {
+ struct nlattr *tb[NFTA_SET_MAX+1] = {};
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+@@ -546,7 +531,6 @@ int nftnl_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_set_nlmsg_parse);
+
+ #ifdef JSON_PARSING
+ static int nftnl_jansson_parse_set_info(struct nftnl_set *s, json_t *tree,
+@@ -718,19 +702,17 @@ static int nftnl_set_do_parse(struct nftnl_set *s, enum nftnl_parse_type type,
+
+ return ret;
+ }
+-int nftnl_set_parse(struct nftnl_set *s, enum nftnl_parse_type type,
++int __EXPORTED nftnl_set_parse(struct nftnl_set *s, enum nftnl_parse_type type,
+ const char *data, struct nftnl_parse_err *err)
+ {
+ return nftnl_set_do_parse(s, type, data, err, NFTNL_PARSE_BUFFER);
+ }
+-EXPORT_SYMBOL(nftnl_set_parse);
+
+-int nftnl_set_parse_file(struct nftnl_set *s, enum nftnl_parse_type type,
++int __EXPORTED nftnl_set_parse_file(struct nftnl_set *s, enum nftnl_parse_type type,
+ FILE *fp, struct nftnl_parse_err *err)
+ {
+ return nftnl_set_do_parse(s, type, fp, err, NFTNL_PARSE_FILE);
+ }
+-EXPORT_SYMBOL(nftnl_set_parse_file);
+
+ static int nftnl_set_snprintf_json(char *buf, size_t size,
+ const struct nftnl_set *s,
+@@ -918,13 +900,12 @@ static int nftnl_set_cmd_snprintf(char *buf, size_t size,
+ return offset;
+ }
+
+-int nftnl_set_snprintf(char *buf, size_t size, const struct nftnl_set *s,
++int __EXPORTED nftnl_set_snprintf(char *buf, size_t size, const struct nftnl_set *s,
+ uint32_t type, uint32_t flags)
+ {
+ return nftnl_set_cmd_snprintf(buf, size, s, nftnl_flag2cmd(flags), type,
+ flags);
+ }
+-EXPORT_SYMBOL(nftnl_set_snprintf);
+
+ static int nftnl_set_do_snprintf(char *buf, size_t size, const void *s,
+ uint32_t cmd, uint32_t type, uint32_t flags)
+@@ -932,25 +913,23 @@ static int nftnl_set_do_snprintf(char *buf, size_t size, const void *s,
+ return nftnl_set_snprintf(buf, size, s, type, flags);
+ }
+
+-int nftnl_set_fprintf(FILE *fp, const struct nftnl_set *s, uint32_t type,
++int __EXPORTED nftnl_set_fprintf(FILE *fp, const struct nftnl_set *s, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_fprintf(fp, s, NFTNL_CMD_UNSPEC, type, flags,
+ nftnl_set_do_snprintf);
+ }
+-EXPORT_SYMBOL(nftnl_set_fprintf);
+
+-void nftnl_set_elem_add(struct nftnl_set *s, struct nftnl_set_elem *elem)
++void __EXPORTED nftnl_set_elem_add(struct nftnl_set *s, struct nftnl_set_elem *elem)
+ {
+ list_add_tail(&elem->head, &s->element_list);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_add);
+
+ struct nftnl_set_list {
+ struct list_head list;
+ };
+
+-struct nftnl_set_list *nftnl_set_list_alloc(void)
++struct nftnl_set_list __EXPORTED *nftnl_set_list_alloc(void)
+ {
+ struct nftnl_set_list *list;
+
+@@ -962,9 +941,8 @@ struct nftnl_set_list *nftnl_set_list_alloc(void)
+
+ return list;
+ }
+-EXPORT_SYMBOL(nftnl_set_list_alloc);
+
+-void nftnl_set_list_free(struct nftnl_set_list *list)
++void __EXPORTED nftnl_set_list_free(struct nftnl_set_list *list)
+ {
+ struct nftnl_set *s, *tmp;
+
+@@ -974,33 +952,28 @@ void nftnl_set_list_free(struct nftnl_set_list *list)
+ }
+ xfree(list);
+ }
+-EXPORT_SYMBOL(nftnl_set_list_free);
+
+-int nftnl_set_list_is_empty(const struct nftnl_set_list *list)
++int __EXPORTED nftnl_set_list_is_empty(const struct nftnl_set_list *list)
+ {
+ return list_empty(&list->list);
+ }
+-EXPORT_SYMBOL(nftnl_set_list_is_empty);
+
+-void nftnl_set_list_add(struct nftnl_set *s, struct nftnl_set_list *list)
++void __EXPORTED nftnl_set_list_add(struct nftnl_set *s, struct nftnl_set_list *list)
+ {
+ list_add(&s->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_set_list_add);
+
+-void nftnl_set_list_add_tail(struct nftnl_set *s, struct nftnl_set_list *list)
++void __EXPORTED nftnl_set_list_add_tail(struct nftnl_set *s, struct nftnl_set_list *list)
+ {
+ list_add_tail(&s->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_set_list_add_tail);
+
+-void nftnl_set_list_del(struct nftnl_set *s)
++void __EXPORTED nftnl_set_list_del(struct nftnl_set *s)
+ {
+ list_del(&s->head);
+ }
+-EXPORT_SYMBOL(nftnl_set_list_del);
+
+-int nftnl_set_list_foreach(struct nftnl_set_list *set_list,
++int __EXPORTED nftnl_set_list_foreach(struct nftnl_set_list *set_list,
+ int (*cb)(struct nftnl_set *t, void *data), void *data)
+ {
+ struct nftnl_set *cur, *tmp;
+@@ -1013,14 +986,13 @@ int nftnl_set_list_foreach(struct nftnl_set_list *set_list,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_set_list_foreach);
+
+ struct nftnl_set_list_iter {
+ const struct nftnl_set_list *list;
+ struct nftnl_set *cur;
+ };
+
+-struct nftnl_set_list_iter *
++struct nftnl_set_list_iter __EXPORTED *
+ nftnl_set_list_iter_create(const struct nftnl_set_list *l)
+ {
+ struct nftnl_set_list_iter *iter;
+@@ -1037,16 +1009,14 @@ nftnl_set_list_iter_create(const struct nftnl_set_list *l)
+
+ return iter;
+ }
+-EXPORT_SYMBOL(nftnl_set_list_iter_create);
+
+-struct nftnl_set *
++struct nftnl_set __EXPORTED *
+ nftnl_set_list_iter_cur(const struct nftnl_set_list_iter *iter)
+ {
+ return iter->cur;
+ }
+-EXPORT_SYMBOL(nftnl_set_list_iter_cur);
+
+-struct nftnl_set *nftnl_set_list_iter_next(struct nftnl_set_list_iter *iter)
++struct nftnl_set __EXPORTED *nftnl_set_list_iter_next(struct nftnl_set_list_iter *iter)
+ {
+ struct nftnl_set *s = iter->cur;
+
+@@ -1060,13 +1030,11 @@ struct nftnl_set *nftnl_set_list_iter_next(struct nftnl_set_list_iter *iter)
+
+ return s;
+ }
+-EXPORT_SYMBOL(nftnl_set_list_iter_next);
+
+-void nftnl_set_list_iter_destroy(const struct nftnl_set_list_iter *iter)
++void __EXPORTED nftnl_set_list_iter_destroy(const struct nftnl_set_list_iter *iter)
+ {
+ xfree(iter);
+ }
+-EXPORT_SYMBOL(nftnl_set_list_iter_destroy);
+
+ static struct nftnl_set *nftnl_set_lookup(const char *this_set_name,
+ struct nftnl_set_list *set_list)
+diff --git a/src/set_elem.c b/src/set_elem.c
+index 433b896..bd1e895 100644
+--- a/src/set_elem.c
++++ b/src/set_elem.c
+@@ -27,7 +27,7 @@
+ #include <libnftnl/rule.h>
+ #include <libnftnl/expr.h>
+
+-struct nftnl_set_elem *nftnl_set_elem_alloc(void)
++struct nftnl_set_elem __EXPORTED *nftnl_set_elem_alloc(void)
+ {
+ struct nftnl_set_elem *s;
+
+@@ -37,9 +37,8 @@ struct nftnl_set_elem *nftnl_set_elem_alloc(void)
+
+ return s;
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_alloc);
+
+-void nftnl_set_elem_free(struct nftnl_set_elem *s)
++void __EXPORTED nftnl_set_elem_free(struct nftnl_set_elem *s)
+ {
+ if (s->flags & (1 << NFTNL_SET_ELEM_CHAIN))
+ xfree(s->data.chain);
+@@ -55,15 +54,13 @@ void nftnl_set_elem_free(struct nftnl_set_elem *s)
+
+ xfree(s);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_free);
+
+-bool nftnl_set_elem_is_set(const struct nftnl_set_elem *s, uint16_t attr)
++bool __EXPORTED nftnl_set_elem_is_set(const struct nftnl_set_elem *s, uint16_t attr)
+ {
+ return s->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_is_set);
+
+-void nftnl_set_elem_unset(struct nftnl_set_elem *s, uint16_t attr)
++void __EXPORTED nftnl_set_elem_unset(struct nftnl_set_elem *s, uint16_t attr)
+ {
+ if (!(s->flags & (1 << attr)))
+ return;
+@@ -94,9 +91,8 @@ void nftnl_set_elem_unset(struct nftnl_set_elem *s, uint16_t attr)
+
+ s->flags &= ~(1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_unset);
+
+-int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
++int __EXPORTED nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
+ const void *data, uint32_t data_len)
+ {
+ switch(attr) {
+@@ -147,27 +143,23 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
+ s->flags |= (1 << attr);
+ return -1;
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_set);
+
+-void nftnl_set_elem_set_u32(struct nftnl_set_elem *s, uint16_t attr, uint32_t val)
++void __EXPORTED nftnl_set_elem_set_u32(struct nftnl_set_elem *s, uint16_t attr, uint32_t val)
+ {
+ nftnl_set_elem_set(s, attr, &val, sizeof(uint32_t));
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_set_u32);
+
+-void nftnl_set_elem_set_u64(struct nftnl_set_elem *s, uint16_t attr, uint64_t val)
++void __EXPORTED nftnl_set_elem_set_u64(struct nftnl_set_elem *s, uint16_t attr, uint64_t val)
+ {
+ nftnl_set_elem_set(s, attr, &val, sizeof(uint64_t));
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_set_u64);
+
+-int nftnl_set_elem_set_str(struct nftnl_set_elem *s, uint16_t attr, const char *str)
++int __EXPORTED nftnl_set_elem_set_str(struct nftnl_set_elem *s, uint16_t attr, const char *str)
+ {
+ return nftnl_set_elem_set(s, attr, str, strlen(str) + 1);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_set_str);
+
+-const void *nftnl_set_elem_get(struct nftnl_set_elem *s, uint16_t attr, uint32_t *data_len)
++const void __EXPORTED *nftnl_set_elem_get(struct nftnl_set_elem *s, uint16_t attr, uint32_t *data_len)
+ {
+ if (!(s->flags & (1 << attr)))
+ return NULL;
+@@ -205,31 +197,27 @@ const void *nftnl_set_elem_get(struct nftnl_set_elem *s, uint16_t attr, uint32_t
+ }
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_get);
+
+-const char *nftnl_set_elem_get_str(struct nftnl_set_elem *s, uint16_t attr)
++const char __EXPORTED *nftnl_set_elem_get_str(struct nftnl_set_elem *s, uint16_t attr)
+ {
+ uint32_t size;
+
+ return nftnl_set_elem_get(s, attr, &size);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_get_str);
+
+-uint32_t nftnl_set_elem_get_u32(struct nftnl_set_elem *s, uint16_t attr)
++uint32_t __EXPORTED nftnl_set_elem_get_u32(struct nftnl_set_elem *s, uint16_t attr)
+ {
+ uint32_t size;
+ uint32_t val = *((uint32_t *)nftnl_set_elem_get(s, attr, &size));
+ return val;
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_get_u32);
+
+-uint64_t nftnl_set_elem_get_u64(struct nftnl_set_elem *s, uint16_t attr)
++uint64_t __EXPORTED nftnl_set_elem_get_u64(struct nftnl_set_elem *s, uint16_t attr)
+ {
+ uint32_t size;
+ uint64_t val = *((uint64_t *)nftnl_set_elem_get(s, attr, &size));
+ return val;
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_get_u64);
+
+ struct nftnl_set_elem *nftnl_set_elem_clone(struct nftnl_set_elem *elem)
+ {
+@@ -315,7 +303,7 @@ static struct nlattr *nftnl_set_elem_build(struct nlmsghdr *nlh,
+ return nest2;
+ }
+
+-void nftnl_set_elems_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set *s)
++void __EXPORTED nftnl_set_elems_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set *s)
+ {
+ struct nftnl_set_elem *elem;
+ struct nlattr *nest1;
+@@ -332,7 +320,6 @@ void nftnl_set_elems_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_set
+
+ mnl_attr_nest_end(nlh, nest1);
+ }
+-EXPORT_SYMBOL(nftnl_set_elems_nlmsg_build_payload);
+
+ static int nftnl_set_elem_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -503,7 +490,7 @@ static int nftnl_set_elems_parse(struct nftnl_set *s, const struct nlattr *nest)
+ return ret;
+ }
+
+-int nftnl_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
++int __EXPORTED nftnl_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
+ {
+ struct nlattr *tb[NFTA_SET_ELEM_LIST_MAX+1] = {};
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+@@ -546,7 +533,6 @@ int nftnl_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_set_elems_nlmsg_parse);
+
+ static int nftnl_set_elem_json_parse(struct nftnl_set_elem *e, const void *json,
+ struct nftnl_parse_err *err,
+@@ -587,19 +573,17 @@ nftnl_set_elem_do_parse(struct nftnl_set_elem *e, enum nftnl_parse_type type,
+
+ return ret;
+ }
+-int nftnl_set_elem_parse(struct nftnl_set_elem *e, enum nftnl_parse_type type,
++int __EXPORTED nftnl_set_elem_parse(struct nftnl_set_elem *e, enum nftnl_parse_type type,
+ const char *data, struct nftnl_parse_err *err)
+ {
+ return nftnl_set_elem_do_parse(e, type, data, err, NFTNL_PARSE_BUFFER);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_parse);
+
+-int nftnl_set_elem_parse_file(struct nftnl_set_elem *e, enum nftnl_parse_type type,
++int __EXPORTED nftnl_set_elem_parse_file(struct nftnl_set_elem *e, enum nftnl_parse_type type,
+ FILE *fp, struct nftnl_parse_err *err)
+ {
+ return nftnl_set_elem_do_parse(e, type, fp, err, NFTNL_PARSE_FILE);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_parse_file);
+
+ static int nftnl_set_elem_snprintf_json(char *buf, size_t size,
+ const struct nftnl_set_elem *e,
+@@ -719,14 +703,13 @@ static int nftnl_set_elem_cmd_snprintf(char *buf, size_t size,
+ return offset;
+ }
+
+-int nftnl_set_elem_snprintf(char *buf, size_t size,
++int __EXPORTED nftnl_set_elem_snprintf(char *buf, size_t size,
+ const struct nftnl_set_elem *e,
+ uint32_t type, uint32_t flags)
+ {
+ return nftnl_set_elem_cmd_snprintf(buf, size, e, nftnl_flag2cmd(flags),
+ type, flags);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_snprintf);
+
+ static int nftnl_set_elem_do_snprintf(char *buf, size_t size, const void *e,
+ uint32_t cmd, uint32_t type,
+@@ -735,15 +718,14 @@ static int nftnl_set_elem_do_snprintf(char *buf, size_t size, const void *e,
+ return nftnl_set_elem_snprintf(buf, size, e, type, flags);
+ }
+
+-int nftnl_set_elem_fprintf(FILE *fp, struct nftnl_set_elem *se, uint32_t type,
++int __EXPORTED nftnl_set_elem_fprintf(FILE *fp, struct nftnl_set_elem *se, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_fprintf(fp, se, NFTNL_CMD_UNSPEC, type, flags,
+ nftnl_set_elem_do_snprintf);
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_fprintf);
+
+-int nftnl_set_elem_foreach(struct nftnl_set *s,
++int __EXPORTED nftnl_set_elem_foreach(struct nftnl_set *s,
+ int (*cb)(struct nftnl_set_elem *e, void *data),
+ void *data)
+ {
+@@ -757,7 +739,6 @@ int nftnl_set_elem_foreach(struct nftnl_set *s,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_set_elem_foreach);
+
+ struct nftnl_set_elems_iter {
+ const struct nftnl_set *set;
+@@ -765,7 +746,7 @@ struct nftnl_set_elems_iter {
+ struct nftnl_set_elem *cur;
+ };
+
+-struct nftnl_set_elems_iter *
++struct nftnl_set_elems_iter __EXPORTED *
+ nftnl_set_elems_iter_create(const struct nftnl_set *s)
+ {
+ struct nftnl_set_elems_iter *iter;
+@@ -784,16 +765,14 @@ nftnl_set_elems_iter_create(const struct nftnl_set *s)
+
+ return iter;
+ }
+-EXPORT_SYMBOL(nftnl_set_elems_iter_create);
+
+-struct nftnl_set_elem *
++struct nftnl_set_elem __EXPORTED *
+ nftnl_set_elems_iter_cur(const struct nftnl_set_elems_iter *iter)
+ {
+ return iter->cur;
+ }
+-EXPORT_SYMBOL(nftnl_set_elems_iter_cur);
+
+-struct nftnl_set_elem *nftnl_set_elems_iter_next(struct nftnl_set_elems_iter *iter)
++struct nftnl_set_elem __EXPORTED *nftnl_set_elems_iter_next(struct nftnl_set_elems_iter *iter)
+ {
+ struct nftnl_set_elem *s = iter->cur;
+
+@@ -806,13 +785,11 @@ struct nftnl_set_elem *nftnl_set_elems_iter_next(struct nftnl_set_elems_iter *it
+
+ return s;
+ }
+-EXPORT_SYMBOL(nftnl_set_elems_iter_next);
+
+-void nftnl_set_elems_iter_destroy(struct nftnl_set_elems_iter *iter)
++void __EXPORTED nftnl_set_elems_iter_destroy(struct nftnl_set_elems_iter *iter)
+ {
+ xfree(iter);
+ }
+-EXPORT_SYMBOL(nftnl_set_elems_iter_destroy);
+
+ static bool nftnl_attr_nest_overflow(struct nlmsghdr *nlh,
+ const struct nlattr *from,
+@@ -831,7 +808,7 @@ static bool nftnl_attr_nest_overflow(struct nlmsghdr *nlh,
+ return false;
+ }
+
+-int nftnl_set_elems_nlmsg_build_payload_iter(struct nlmsghdr *nlh,
++int __EXPORTED nftnl_set_elems_nlmsg_build_payload_iter(struct nlmsghdr *nlh,
+ struct nftnl_set_elems_iter *iter)
+ {
+ struct nftnl_set_elem *elem;
+@@ -861,4 +838,3 @@ int nftnl_set_elems_nlmsg_build_payload_iter(struct nlmsghdr *nlh,
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nftnl_set_elems_nlmsg_build_payload_iter);
+diff --git a/src/table.c b/src/table.c
+index a7d5a8f..0e99f3c 100644
+--- a/src/table.c
++++ b/src/table.c
+@@ -36,28 +36,25 @@ struct nftnl_table {
+ uint32_t flags;
+ };
+
+-struct nftnl_table *nftnl_table_alloc(void)
++struct nftnl_table __EXPORTED *nftnl_table_alloc(void)
+ {
+ return calloc(1, sizeof(struct nftnl_table));
+ }
+-EXPORT_SYMBOL(nftnl_table_alloc);
+
+-void nftnl_table_free(const struct nftnl_table *t)
++void __EXPORTED nftnl_table_free(const struct nftnl_table *t)
+ {
+ if (t->flags & (1 << NFTNL_TABLE_NAME))
+ xfree(t->name);
+
+ xfree(t);
+ }
+-EXPORT_SYMBOL(nftnl_table_free);
+
+-bool nftnl_table_is_set(const struct nftnl_table *t, uint16_t attr)
++bool __EXPORTED nftnl_table_is_set(const struct nftnl_table *t, uint16_t attr)
+ {
+ return t->flags & (1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_table_is_set);
+
+-void nftnl_table_unset(struct nftnl_table *t, uint16_t attr)
++void __EXPORTED nftnl_table_unset(struct nftnl_table *t, uint16_t attr)
+ {
+ if (!(t->flags & (1 << attr)))
+ return;
+@@ -74,14 +71,13 @@ void nftnl_table_unset(struct nftnl_table *t, uint16_t attr)
+ }
+ t->flags &= ~(1 << attr);
+ }
+-EXPORT_SYMBOL(nftnl_table_unset);
+
+ static uint32_t nftnl_table_validate[NFTNL_TABLE_MAX + 1] = {
+ [NFTNL_TABLE_FLAGS] = sizeof(uint32_t),
+ [NFTNL_TABLE_FAMILY] = sizeof(uint32_t),
+ };
+
+-int nftnl_table_set_data(struct nftnl_table *t, uint16_t attr,
++int __EXPORTED nftnl_table_set_data(struct nftnl_table *t, uint16_t attr,
+ const void *data, uint32_t data_len)
+ {
+ nftnl_assert_attr_exists(attr, NFTNL_TABLE_MAX);
+@@ -109,33 +105,28 @@ int nftnl_table_set_data(struct nftnl_table *t, uint16_t attr,
+ t->flags |= (1 << attr);
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_table_set_data);
+
+-void nftnl_table_set(struct nftnl_table *t, uint16_t attr, const void *data)
++void __EXPORTED nftnl_table_set(struct nftnl_table *t, uint16_t attr, const void *data)
+ {
+ nftnl_table_set_data(t, attr, data, nftnl_table_validate[attr]);
+ }
+-EXPORT_SYMBOL(nftnl_table_set);
+
+-void nftnl_table_set_u32(struct nftnl_table *t, uint16_t attr, uint32_t val)
++void __EXPORTED nftnl_table_set_u32(struct nftnl_table *t, uint16_t attr, uint32_t val)
+ {
+ nftnl_table_set_data(t, attr, &val, sizeof(uint32_t));
+ }
+-EXPORT_SYMBOL(nftnl_table_set_u32);
+
+-void nftnl_table_set_u8(struct nftnl_table *t, uint16_t attr, uint8_t val)
++void __EXPORTED nftnl_table_set_u8(struct nftnl_table *t, uint16_t attr, uint8_t val)
+ {
+ nftnl_table_set_data(t, attr, &val, sizeof(uint8_t));
+ }
+-EXPORT_SYMBOL(nftnl_table_set_u8);
+
+-int nftnl_table_set_str(struct nftnl_table *t, uint16_t attr, const char *str)
++int __EXPORTED nftnl_table_set_str(struct nftnl_table *t, uint16_t attr, const char *str)
+ {
+ return nftnl_table_set_data(t, attr, str, strlen(str) + 1);
+ }
+-EXPORT_SYMBOL(nftnl_table_set_str);
+
+-const void *nftnl_table_get_data(const struct nftnl_table *t, uint16_t attr,
++const void __EXPORTED *nftnl_table_get_data(const struct nftnl_table *t, uint16_t attr,
+ uint32_t *data_len)
+ {
+ if (!(t->flags & (1 << attr)))
+@@ -157,43 +148,37 @@ const void *nftnl_table_get_data(const struct nftnl_table *t, uint16_t attr,
+ }
+ return NULL;
+ }
+-EXPORT_SYMBOL(nftnl_table_get_data);
+
+-const void *nftnl_table_get(const struct nftnl_table *t, uint16_t attr)
++const void __EXPORTED *nftnl_table_get(const struct nftnl_table *t, uint16_t attr)
+ {
+ uint32_t data_len;
+ return nftnl_table_get_data(t, attr, &data_len);
+ }
+-EXPORT_SYMBOL(nftnl_table_get);
+
+-uint32_t nftnl_table_get_u32(const struct nftnl_table *t, uint16_t attr)
++uint32_t __EXPORTED nftnl_table_get_u32(const struct nftnl_table *t, uint16_t attr)
+ {
+ const void *ret = nftnl_table_get(t, attr);
+ return ret == NULL ? 0 : *((uint32_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_table_get_u32);
+
+-uint8_t nftnl_table_get_u8(const struct nftnl_table *t, uint16_t attr)
++uint8_t __EXPORTED nftnl_table_get_u8(const struct nftnl_table *t, uint16_t attr)
+ {
+ const void *ret = nftnl_table_get(t, attr);
+ return ret == NULL ? 0 : *((uint8_t *)ret);
+ }
+-EXPORT_SYMBOL(nftnl_table_get_u8);
+
+-const char *nftnl_table_get_str(const struct nftnl_table *t, uint16_t attr)
++const char __EXPORTED *nftnl_table_get_str(const struct nftnl_table *t, uint16_t attr)
+ {
+ return nftnl_table_get(t, attr);
+ }
+-EXPORT_SYMBOL(nftnl_table_get_str);
+
+-void nftnl_table_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_table *t)
++void __EXPORTED nftnl_table_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_table *t)
+ {
+ if (t->flags & (1 << NFTNL_TABLE_NAME))
+ mnl_attr_put_strz(nlh, NFTA_TABLE_NAME, t->name);
+ if (t->flags & (1 << NFTNL_TABLE_FLAGS))
+ mnl_attr_put_u32(nlh, NFTA_TABLE_FLAGS, htonl(t->table_flags));
+ }
+-EXPORT_SYMBOL(nftnl_table_nlmsg_build_payload);
+
+ static int nftnl_table_parse_attr_cb(const struct nlattr *attr, void *data)
+ {
+@@ -219,7 +204,7 @@ static int nftnl_table_parse_attr_cb(const struct nlattr *attr, void *data)
+ return MNL_CB_OK;
+ }
+
+-int nftnl_table_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_table *t)
++int __EXPORTED nftnl_table_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_table *t)
+ {
+ struct nlattr *tb[NFTA_TABLE_MAX+1] = {};
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+@@ -249,7 +234,6 @@ int nftnl_table_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_table *t)
+
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_table_nlmsg_parse);
+
+ #ifdef JSON_PARSING
+ int nftnl_jansson_parse_table(struct nftnl_table *t, json_t *tree,
+@@ -330,19 +314,17 @@ static int nftnl_table_do_parse(struct nftnl_table *t, enum nftnl_parse_type typ
+ return ret;
+ }
+
+-int nftnl_table_parse(struct nftnl_table *t, enum nftnl_parse_type type,
++int __EXPORTED nftnl_table_parse(struct nftnl_table *t, enum nftnl_parse_type type,
+ const char *data, struct nftnl_parse_err *err)
+ {
+ return nftnl_table_do_parse(t, type, data, err, NFTNL_PARSE_BUFFER);
+ }
+-EXPORT_SYMBOL(nftnl_table_parse);
+
+-int nftnl_table_parse_file(struct nftnl_table *t, enum nftnl_parse_type type,
++int __EXPORTED nftnl_table_parse_file(struct nftnl_table *t, enum nftnl_parse_type type,
+ FILE *fp, struct nftnl_parse_err *err)
+ {
+ return nftnl_table_do_parse(t, type, fp, err, NFTNL_PARSE_FILE);
+ }
+-EXPORT_SYMBOL(nftnl_table_parse_file);
+
+ static int nftnl_table_export(char *buf, size_t size,
+ const struct nftnl_table *t, int type)
+@@ -400,13 +382,12 @@ static int nftnl_table_cmd_snprintf(char *buf, size_t size,
+ return offset;
+ }
+
+-int nftnl_table_snprintf(char *buf, size_t size, const struct nftnl_table *t,
++int __EXPORTED nftnl_table_snprintf(char *buf, size_t size, const struct nftnl_table *t,
+ uint32_t type, uint32_t flags)
+ {
+ return nftnl_table_cmd_snprintf(buf, size, t, nftnl_flag2cmd(flags), type,
+ flags);
+ }
+-EXPORT_SYMBOL(nftnl_table_snprintf);
+
+ static int nftnl_table_do_snprintf(char *buf, size_t size, const void *t,
+ uint32_t cmd, uint32_t type, uint32_t flags)
+@@ -414,19 +395,18 @@ static int nftnl_table_do_snprintf(char *buf, size_t size, const void *t,
+ return nftnl_table_snprintf(buf, size, t, type, flags);
+ }
+
+-int nftnl_table_fprintf(FILE *fp, const struct nftnl_table *t, uint32_t type,
++int __EXPORTED nftnl_table_fprintf(FILE *fp, const struct nftnl_table *t, uint32_t type,
+ uint32_t flags)
+ {
+ return nftnl_fprintf(fp, t, NFTNL_CMD_UNSPEC, type, flags,
+ nftnl_table_do_snprintf);
+ }
+-EXPORT_SYMBOL(nftnl_table_fprintf);
+
+ struct nftnl_table_list {
+ struct list_head list;
+ };
+
+-struct nftnl_table_list *nftnl_table_list_alloc(void)
++struct nftnl_table_list __EXPORTED *nftnl_table_list_alloc(void)
+ {
+ struct nftnl_table_list *list;
+
+@@ -438,9 +418,8 @@ struct nftnl_table_list *nftnl_table_list_alloc(void)
+
+ return list;
+ }
+-EXPORT_SYMBOL(nftnl_table_list_alloc);
+
+-void nftnl_table_list_free(struct nftnl_table_list *list)
++void __EXPORTED nftnl_table_list_free(struct nftnl_table_list *list)
+ {
+ struct nftnl_table *r, *tmp;
+
+@@ -450,33 +429,28 @@ void nftnl_table_list_free(struct nftnl_table_list *list)
+ }
+ xfree(list);
+ }
+-EXPORT_SYMBOL(nftnl_table_list_free);
+
+-int nftnl_table_list_is_empty(const struct nftnl_table_list *list)
++int __EXPORTED nftnl_table_list_is_empty(const struct nftnl_table_list *list)
+ {
+ return list_empty(&list->list);
+ }
+-EXPORT_SYMBOL(nftnl_table_list_is_empty);
+
+-void nftnl_table_list_add(struct nftnl_table *r, struct nftnl_table_list *list)
++void __EXPORTED nftnl_table_list_add(struct nftnl_table *r, struct nftnl_table_list *list)
+ {
+ list_add(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_table_list_add);
+
+-void nftnl_table_list_add_tail(struct nftnl_table *r, struct nftnl_table_list *list)
++void __EXPORTED nftnl_table_list_add_tail(struct nftnl_table *r, struct nftnl_table_list *list)
+ {
+ list_add_tail(&r->head, &list->list);
+ }
+-EXPORT_SYMBOL(nftnl_table_list_add_tail);
+
+-void nftnl_table_list_del(struct nftnl_table *t)
++void __EXPORTED nftnl_table_list_del(struct nftnl_table *t)
+ {
+ list_del(&t->head);
+ }
+-EXPORT_SYMBOL(nftnl_table_list_del);
+
+-int nftnl_table_list_foreach(struct nftnl_table_list *table_list,
++int __EXPORTED nftnl_table_list_foreach(struct nftnl_table_list *table_list,
+ int (*cb)(struct nftnl_table *t, void *data),
+ void *data)
+ {
+@@ -490,14 +464,13 @@ int nftnl_table_list_foreach(struct nftnl_table_list *table_list,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_table_list_foreach);
+
+ struct nftnl_table_list_iter {
+ const struct nftnl_table_list *list;
+ struct nftnl_table *cur;
+ };
+
+-struct nftnl_table_list_iter *
++struct nftnl_table_list_iter __EXPORTED *
+ nftnl_table_list_iter_create(const struct nftnl_table_list *l)
+ {
+ struct nftnl_table_list_iter *iter;
+@@ -514,9 +487,8 @@ nftnl_table_list_iter_create(const struct nftnl_table_list *l)
+
+ return iter;
+ }
+-EXPORT_SYMBOL(nftnl_table_list_iter_create);
+
+-struct nftnl_table *nftnl_table_list_iter_next(struct nftnl_table_list_iter *iter)
++struct nftnl_table __EXPORTED *nftnl_table_list_iter_next(struct nftnl_table_list_iter *iter)
+ {
+ struct nftnl_table *r = iter->cur;
+
+@@ -530,10 +502,8 @@ struct nftnl_table *nftnl_table_list_iter_next(struct nftnl_table_list_iter *ite
+
+ return r;
+ }
+-EXPORT_SYMBOL(nftnl_table_list_iter_next);
+
+-void nftnl_table_list_iter_destroy(const struct nftnl_table_list_iter *iter)
++void __EXPORTED nftnl_table_list_iter_destroy(const struct nftnl_table_list_iter *iter)
+ {
+ xfree(iter);
+ }
+-EXPORT_SYMBOL(nftnl_table_list_iter_destroy);
+diff --git a/src/trace.c b/src/trace.c
+index bd05d3c..4739ef9 100644
+--- a/src/trace.c
++++ b/src/trace.c
+@@ -52,14 +52,12 @@ struct nftnl_trace {
+ uint32_t flags;
+ };
+
+-EXPORT_SYMBOL(nftnl_trace_alloc);
+-struct nftnl_trace *nftnl_trace_alloc(void)
++struct nftnl_trace __EXPORTED *nftnl_trace_alloc(void)
+ {
+ return calloc(1, sizeof(struct nftnl_trace));
+ }
+
+-EXPORT_SYMBOL(nftnl_trace_free);
+-void nftnl_trace_free(const struct nftnl_trace *t)
++void __EXPORTED nftnl_trace_free(const struct nftnl_trace *t)
+ {
+ xfree(t->chain);
+ xfree(t->table);
+@@ -70,8 +68,7 @@ void nftnl_trace_free(const struct nftnl_trace *t)
+ xfree(t);
+ }
+
+-EXPORT_SYMBOL(nftnl_trace_is_set);
+-bool nftnl_trace_is_set(const struct nftnl_trace *t, uint16_t attr)
++bool __EXPORTED nftnl_trace_is_set(const struct nftnl_trace *t, uint16_t attr)
+ {
+ return t->flags & (1 << attr);
+ }
+@@ -130,8 +127,7 @@ static int nftnl_trace_parse_attr_cb(const struct nlattr *attr, void *data)
+ return MNL_CB_OK;
+ }
+
+-EXPORT_SYMBOL(nftnl_trace_get_data);
+-const void *nftnl_trace_get_data(const struct nftnl_trace *trace,
++const void __EXPORTED *nftnl_trace_get_data(const struct nftnl_trace *trace,
+ uint16_t type, uint32_t *data_len)
+ {
+ enum nftnl_trace_attr attr = type;
+@@ -201,8 +197,7 @@ const void *nftnl_trace_get_data(const struct nftnl_trace *trace,
+ return NULL;
+ }
+
+-EXPORT_SYMBOL(nftnl_trace_get_str);
+-const char *nftnl_trace_get_str(const struct nftnl_trace *trace, uint16_t type)
++const char __EXPORTED *nftnl_trace_get_str(const struct nftnl_trace *trace, uint16_t type)
+ {
+ if (!nftnl_trace_is_set(trace, type))
+ return NULL;
+@@ -216,8 +211,7 @@ const char *nftnl_trace_get_str(const struct nftnl_trace *trace, uint16_t type)
+ return NULL;
+ }
+
+-EXPORT_SYMBOL(nftnl_trace_get_u16);
+-uint16_t nftnl_trace_get_u16(const struct nftnl_trace *trace, uint16_t type)
++uint16_t __EXPORTED nftnl_trace_get_u16(const struct nftnl_trace *trace, uint16_t type)
+ {
+ const uint16_t *d;
+ uint32_t dlen;
+@@ -229,8 +223,7 @@ uint16_t nftnl_trace_get_u16(const struct nftnl_trace *trace, uint16_t type)
+ return 0;
+ }
+
+-EXPORT_SYMBOL(nftnl_trace_get_u32);
+-uint32_t nftnl_trace_get_u32(const struct nftnl_trace *trace, uint16_t type)
++uint32_t __EXPORTED nftnl_trace_get_u32(const struct nftnl_trace *trace, uint16_t type)
+ {
+ const uint32_t *d;
+ uint32_t dlen;
+@@ -242,8 +235,7 @@ uint32_t nftnl_trace_get_u32(const struct nftnl_trace *trace, uint16_t type)
+ return 0;
+ }
+
+-EXPORT_SYMBOL(nftnl_trace_get_u64);
+-uint64_t nftnl_trace_get_u64(const struct nftnl_trace *trace, uint16_t type)
++uint64_t __EXPORTED nftnl_trace_get_u64(const struct nftnl_trace *trace, uint16_t type)
+ {
+ const uint64_t *d;
+ uint32_t dlen;
+@@ -323,9 +315,8 @@ static int nftnl_trace_parse_verdict(const struct nlattr *attr,
+ }
+ return 0;
+ }
+-EXPORT_SYMBOL(nftnl_trace_nlmsg_parse);
+
+-int nftnl_trace_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_trace *t)
++int __EXPORTED nftnl_trace_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_trace *t)
+ {
+ struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
+ struct nlattr *tb[NFTA_TRACE_MAX+1] = {};
+diff --git a/src/udata.c b/src/udata.c
+index d679dd0..7e2de0f 100644
+--- a/src/udata.c
++++ b/src/udata.c
+@@ -16,7 +16,7 @@
+ #include <stdint.h>
+ #include <string.h>
+
+-struct nftnl_udata_buf *nftnl_udata_buf_alloc(uint32_t data_size)
++struct nftnl_udata_buf __EXPORTED *nftnl_udata_buf_alloc(uint32_t data_size)
+ {
+ struct nftnl_udata_buf *buf;
+
+@@ -28,47 +28,40 @@ struct nftnl_udata_buf *nftnl_udata_buf_alloc(uint32_t data_size)
+
+ return buf;
+ }
+-EXPORT_SYMBOL(nftnl_udata_buf_alloc);
+
+-void nftnl_udata_buf_free(const struct nftnl_udata_buf *buf)
++void __EXPORTED nftnl_udata_buf_free(const struct nftnl_udata_buf *buf)
+ {
+ xfree(buf);
+ }
+-EXPORT_SYMBOL(nftnl_udata_buf_free);
+
+-uint32_t nftnl_udata_buf_len(const struct nftnl_udata_buf *buf)
++uint32_t __EXPORTED nftnl_udata_buf_len(const struct nftnl_udata_buf *buf)
+ {
+ return (uint32_t)(buf->end - buf->data);
+ }
+-EXPORT_SYMBOL(nftnl_udata_buf_len);
+
+-void *nftnl_udata_buf_data(const struct nftnl_udata_buf *buf)
++void __EXPORTED *nftnl_udata_buf_data(const struct nftnl_udata_buf *buf)
+ {
+ return (void *)buf->data;
+ }
+-EXPORT_SYMBOL(nftnl_udata_buf_data);
+
+-void nftnl_udata_buf_put(struct nftnl_udata_buf *buf, const void *data,
++void __EXPORTED nftnl_udata_buf_put(struct nftnl_udata_buf *buf, const void *data,
+ uint32_t len)
+ {
+ memcpy(buf->data, data, len <= buf->size ? len : buf->size);
+ buf->end = buf->data + len;
+ }
+-EXPORT_SYMBOL(nftnl_udata_buf_put);
+
+-struct nftnl_udata *nftnl_udata_start(const struct nftnl_udata_buf *buf)
++struct nftnl_udata __EXPORTED *nftnl_udata_start(const struct nftnl_udata_buf *buf)
+ {
+ return (struct nftnl_udata *)buf->data;
+ }
+-EXPORT_SYMBOL(nftnl_udata_start);
+
+-struct nftnl_udata *nftnl_udata_end(const struct nftnl_udata_buf *buf)
++struct nftnl_udata __EXPORTED *nftnl_udata_end(const struct nftnl_udata_buf *buf)
+ {
+ return (struct nftnl_udata *)buf->end;
+ }
+-EXPORT_SYMBOL(nftnl_udata_end);
+
+-bool nftnl_udata_put(struct nftnl_udata_buf *buf, uint8_t type, uint32_t len,
++bool __EXPORTED nftnl_udata_put(struct nftnl_udata_buf *buf, uint8_t type, uint32_t len,
+ const void *value)
+ {
+ struct nftnl_udata *attr;
+@@ -85,55 +78,47 @@ bool nftnl_udata_put(struct nftnl_udata_buf *buf, uint8_t type, uint32_t len,
+
+ return true;
+ }
+-EXPORT_SYMBOL(nftnl_udata_put);
+
+-bool nftnl_udata_put_strz(struct nftnl_udata_buf *buf, uint8_t type,
++bool __EXPORTED nftnl_udata_put_strz(struct nftnl_udata_buf *buf, uint8_t type,
+ const char *strz)
+ {
+ return nftnl_udata_put(buf, type, strlen(strz) + 1, strz);
+ }
+-EXPORT_SYMBOL(nftnl_udata_put_strz);
+
+-bool nftnl_udata_put_u32(struct nftnl_udata_buf *buf, uint8_t type,
++bool __EXPORTED nftnl_udata_put_u32(struct nftnl_udata_buf *buf, uint8_t type,
+ uint32_t data)
+ {
+ return nftnl_udata_put(buf, type, sizeof(data), &data);
+ }
+-EXPORT_SYMBOL(nftnl_udata_put_u32);
+
+-uint8_t nftnl_udata_type(const struct nftnl_udata *attr)
++uint8_t __EXPORTED nftnl_udata_type(const struct nftnl_udata *attr)
+ {
+ return attr->type;
+ }
+-EXPORT_SYMBOL(nftnl_udata_type);
+
+-uint8_t nftnl_udata_len(const struct nftnl_udata *attr)
++uint8_t __EXPORTED nftnl_udata_len(const struct nftnl_udata *attr)
+ {
+ return attr->len;
+ }
+-EXPORT_SYMBOL(nftnl_udata_len);
+
+-void *nftnl_udata_get(const struct nftnl_udata *attr)
++void __EXPORTED *nftnl_udata_get(const struct nftnl_udata *attr)
+ {
+ return (void *)attr->value;
+ }
+-EXPORT_SYMBOL(nftnl_udata_get);
+
+-uint32_t nftnl_udata_get_u32(const struct nftnl_udata *attr)
++uint32_t __EXPORTED nftnl_udata_get_u32(const struct nftnl_udata *attr)
+ {
+ uint32_t *data = (uint32_t *)attr->value;
+
+ return *data;
+ }
+-EXPORT_SYMBOL(nftnl_udata_get_u32);
+
+-struct nftnl_udata *nftnl_udata_next(const struct nftnl_udata *attr)
++struct nftnl_udata __EXPORTED *nftnl_udata_next(const struct nftnl_udata *attr)
+ {
+ return (struct nftnl_udata *)&attr->value[attr->len];
+ }
+-EXPORT_SYMBOL(nftnl_udata_next);
+
+-int nftnl_udata_parse(const void *data, uint32_t data_len, nftnl_udata_cb_t cb,
++int __EXPORTED nftnl_udata_parse(const void *data, uint32_t data_len, nftnl_udata_cb_t cb,
+ void *cb_data)
+ {
+ int ret = 0;
+@@ -147,4 +132,3 @@ int nftnl_udata_parse(const void *data, uint32_t data_len, nftnl_udata_cb_t cb,
+
+ return ret;
+ }
+-EXPORT_SYMBOL(nftnl_udata_parse);
+--
+2.11.0 (Apple Git-81)
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-avoid-naming-local-function-as-one-of-printf-family.patch b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-avoid-naming-local-function-as-one-of-printf-family.patch
new file mode 100644
index 000000000..06e68177c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl/0001-avoid-naming-local-function-as-one-of-printf-family.patch
@@ -0,0 +1,514 @@
+From f840cc0da571d98beb17855c177e9986bd096b72 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Apr 2017 11:46:09 -0700
+Subject: [PATCH] avoid naming local function as one of printf family
+
+Fixes build issues with clang
+error: no member named '__builtin___snprintf_chk' in 'struct expr_ops'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ include/expr_ops.h | 2 +-
+ include/obj.h | 2 +-
+ src/buffer.c | 2 +-
+ src/expr.c | 4 ++--
+ src/expr/bitwise.c | 2 +-
+ src/expr/byteorder.c | 2 +-
+ src/expr/cmp.c | 2 +-
+ src/expr/counter.c | 2 +-
+ src/expr/ct.c | 2 +-
+ src/expr/dup.c | 2 +-
+ src/expr/dynset.c | 2 +-
+ src/expr/exthdr.c | 2 +-
+ src/expr/fib.c | 2 +-
+ src/expr/fwd.c | 2 +-
+ src/expr/hash.c | 2 +-
+ src/expr/immediate.c | 2 +-
+ src/expr/limit.c | 2 +-
+ src/expr/log.c | 2 +-
+ src/expr/lookup.c | 2 +-
+ src/expr/masq.c | 2 +-
+ src/expr/match.c | 2 +-
+ src/expr/meta.c | 2 +-
+ src/expr/nat.c | 2 +-
+ src/expr/numgen.c | 2 +-
+ src/expr/objref.c | 2 +-
+ src/expr/payload.c | 2 +-
+ src/expr/queue.c | 2 +-
+ src/expr/quota.c | 2 +-
+ src/expr/range.c | 2 +-
+ src/expr/redir.c | 2 +-
+ src/expr/reject.c | 2 +-
+ src/expr/rt.c | 2 +-
+ src/expr/target.c | 2 +-
+ src/obj/counter.c | 2 +-
+ src/obj/ct_helper.c | 2 +-
+ src/obj/quota.c | 2 +-
+ src/object.c | 4 ++--
+ 37 files changed, 39 insertions(+), 39 deletions(-)
+
+diff --git a/include/expr_ops.h b/include/expr_ops.h
+index e639390..c4fe050 100644
+--- a/include/expr_ops.h
++++ b/include/expr_ops.h
+@@ -18,7 +18,7 @@ struct expr_ops {
+ const void *(*get)(const struct nftnl_expr *e, uint16_t type, uint32_t *data_len);
+ int (*parse)(struct nftnl_expr *e, struct nlattr *attr);
+ void (*build)(struct nlmsghdr *nlh, const struct nftnl_expr *e);
+- int (*snprintf)(char *buf, size_t len, uint32_t type, uint32_t flags, const struct nftnl_expr *e);
++ int (*snprintf_)(char *buf, size_t len, uint32_t type, uint32_t flags, const struct nftnl_expr *e);
+ int (*json_parse)(struct nftnl_expr *e, json_t *data,
+ struct nftnl_parse_err *err);
+ };
+diff --git a/include/obj.h b/include/obj.h
+index d90919f..772caff 100644
+--- a/include/obj.h
++++ b/include/obj.h
+@@ -47,7 +47,7 @@ struct obj_ops {
+ const void *(*get)(const struct nftnl_obj *e, uint16_t type, uint32_t *data_len);
+ int (*parse)(struct nftnl_obj *e, struct nlattr *attr);
+ void (*build)(struct nlmsghdr *nlh, const struct nftnl_obj *e);
+- int (*snprintf)(char *buf, size_t len, uint32_t type, uint32_t flags, const struct nftnl_obj *e);
++ int (*snprintf_)(char *buf, size_t len, uint32_t type, uint32_t flags, const struct nftnl_obj *e);
+ int (*json_parse)(struct nftnl_obj *e, json_t *data,
+ struct nftnl_parse_err *err);
+ };
+diff --git a/src/buffer.c b/src/buffer.c
+index f9d5a83..db656e2 100644
+--- a/src/buffer.c
++++ b/src/buffer.c
+@@ -206,7 +206,7 @@ int nftnl_buf_expr(struct nftnl_buf *b, int type, uint32_t flags,
+ case NFTNL_OUTPUT_JSON:
+ nftnl_buf_put(b, "{");
+ nftnl_buf_str(b, type, expr->ops->name, TYPE);
+- ret = expr->ops->snprintf(b->buf + b->off, b->len, type, flags,
++ ret = expr->ops->snprintf_(b->buf + b->off, b->len, type, flags,
+ expr);
+ if (ret > 0)
+ nftnl_buf_update(b, ret);
+diff --git a/src/expr.c b/src/expr.c
+index c7eb2b4..24f8f8c 100644
+--- a/src/expr.c
++++ b/src/expr.c
+@@ -265,10 +265,10 @@ int __EXPORTED nftnl_expr_snprintf(char *buf, size_t size, const struct nftnl_ex
+ int ret;
+ unsigned int offset = 0, len = size;
+
+- if (!expr->ops->snprintf)
++ if (!expr->ops->snprintf_)
+ return 0;
+
+- ret = expr->ops->snprintf(buf+offset, len, type, flags, expr);
++ ret = expr->ops->snprintf_(buf+offset, len, type, flags, expr);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+ return offset;
+diff --git a/src/expr/bitwise.c b/src/expr/bitwise.c
+index 0febc9d..9b48e79 100644
+--- a/src/expr/bitwise.c
++++ b/src/expr/bitwise.c
+@@ -299,6 +299,6 @@ struct expr_ops expr_ops_bitwise = {
+ .get = nftnl_expr_bitwise_get,
+ .parse = nftnl_expr_bitwise_parse,
+ .build = nftnl_expr_bitwise_build,
+- .snprintf = nftnl_expr_bitwise_snprintf,
++ .snprintf_ = nftnl_expr_bitwise_snprintf,
+ .json_parse = nftnl_expr_bitwise_json_parse,
+ };
+diff --git a/src/expr/byteorder.c b/src/expr/byteorder.c
+index 3805307..079582f 100644
+--- a/src/expr/byteorder.c
++++ b/src/expr/byteorder.c
+@@ -314,6 +314,6 @@ struct expr_ops expr_ops_byteorder = {
+ .get = nftnl_expr_byteorder_get,
+ .parse = nftnl_expr_byteorder_parse,
+ .build = nftnl_expr_byteorder_build,
+- .snprintf = nftnl_expr_byteorder_snprintf,
++ .snprintf_ = nftnl_expr_byteorder_snprintf,
+ .json_parse = nftnl_expr_byteorder_json_parse,
+ };
+diff --git a/src/expr/cmp.c b/src/expr/cmp.c
+index 353e907..99b497c 100644
+--- a/src/expr/cmp.c
++++ b/src/expr/cmp.c
+@@ -284,6 +284,6 @@ struct expr_ops expr_ops_cmp = {
+ .get = nftnl_expr_cmp_get,
+ .parse = nftnl_expr_cmp_parse,
+ .build = nftnl_expr_cmp_build,
+- .snprintf = nftnl_expr_cmp_snprintf,
++ .snprintf_ = nftnl_expr_cmp_snprintf,
+ .json_parse = nftnl_expr_cmp_json_parse,
+ };
+diff --git a/src/expr/counter.c b/src/expr/counter.c
+index 21901e8..9fd7655 100644
+--- a/src/expr/counter.c
++++ b/src/expr/counter.c
+@@ -200,6 +200,6 @@ struct expr_ops expr_ops_counter = {
+ .get = nftnl_expr_counter_get,
+ .parse = nftnl_expr_counter_parse,
+ .build = nftnl_expr_counter_build,
+- .snprintf = nftnl_expr_counter_snprintf,
++ .snprintf_ = nftnl_expr_counter_snprintf,
+ .json_parse = nftnl_expr_counter_json_parse,
+ };
+diff --git a/src/expr/ct.c b/src/expr/ct.c
+index cdd08e9..6ce5478 100644
+--- a/src/expr/ct.c
++++ b/src/expr/ct.c
+@@ -356,6 +356,6 @@ struct expr_ops expr_ops_ct = {
+ .get = nftnl_expr_ct_get,
+ .parse = nftnl_expr_ct_parse,
+ .build = nftnl_expr_ct_build,
+- .snprintf = nftnl_expr_ct_snprintf,
++ .snprintf_ = nftnl_expr_ct_snprintf,
+ .json_parse = nftnl_expr_ct_json_parse,
+ };
+diff --git a/src/expr/dup.c b/src/expr/dup.c
+index 9aa332b..2f491d8 100644
+--- a/src/expr/dup.c
++++ b/src/expr/dup.c
+@@ -206,6 +206,6 @@ struct expr_ops expr_ops_dup = {
+ .get = nftnl_expr_dup_get,
+ .parse = nftnl_expr_dup_parse,
+ .build = nftnl_expr_dup_build,
+- .snprintf = nftnl_expr_dup_snprintf,
++ .snprintf_ = nftnl_expr_dup_snprintf,
+ .json_parse = nftnl_expr_dup_json_parse,
+ };
+diff --git a/src/expr/dynset.c b/src/expr/dynset.c
+index f7b99ea..758f07c 100644
+--- a/src/expr/dynset.c
++++ b/src/expr/dynset.c
+@@ -368,6 +368,6 @@ struct expr_ops expr_ops_dynset = {
+ .get = nftnl_expr_dynset_get,
+ .parse = nftnl_expr_dynset_parse,
+ .build = nftnl_expr_dynset_build,
+- .snprintf = nftnl_expr_dynset_snprintf,
++ .snprintf_ = nftnl_expr_dynset_snprintf,
+ .json_parse = nftnl_expr_dynset_json_parse,
+ };
+diff --git a/src/expr/exthdr.c b/src/expr/exthdr.c
+index d4f1665..a834782 100644
+--- a/src/expr/exthdr.c
++++ b/src/expr/exthdr.c
+@@ -356,6 +356,6 @@ struct expr_ops expr_ops_exthdr = {
+ .get = nftnl_expr_exthdr_get,
+ .parse = nftnl_expr_exthdr_parse,
+ .build = nftnl_expr_exthdr_build,
+- .snprintf = nftnl_expr_exthdr_snprintf,
++ .snprintf_ = nftnl_expr_exthdr_snprintf,
+ .json_parse = nftnl_expr_exthdr_json_parse,
+ };
+diff --git a/src/expr/fib.c b/src/expr/fib.c
+index f3be081..3c353b2 100644
+--- a/src/expr/fib.c
++++ b/src/expr/fib.c
+@@ -272,6 +272,6 @@ struct expr_ops expr_ops_fib = {
+ .get = nftnl_expr_fib_get,
+ .parse = nftnl_expr_fib_parse,
+ .build = nftnl_expr_fib_build,
+- .snprintf = nftnl_expr_fib_snprintf,
++ .snprintf_ = nftnl_expr_fib_snprintf,
+ .json_parse = nftnl_expr_fib_json_parse,
+ };
+diff --git a/src/expr/fwd.c b/src/expr/fwd.c
+index c30d494..f6e41f1 100644
+--- a/src/expr/fwd.c
++++ b/src/expr/fwd.c
+@@ -180,6 +180,6 @@ struct expr_ops expr_ops_fwd = {
+ .get = nftnl_expr_fwd_get,
+ .parse = nftnl_expr_fwd_parse,
+ .build = nftnl_expr_fwd_build,
+- .snprintf = nftnl_expr_fwd_snprintf,
++ .snprintf_ = nftnl_expr_fwd_snprintf,
+ .json_parse = nftnl_expr_fwd_json_parse,
+ };
+diff --git a/src/expr/hash.c b/src/expr/hash.c
+index d870510..5acb66a 100644
+--- a/src/expr/hash.c
++++ b/src/expr/hash.c
+@@ -332,6 +332,6 @@ struct expr_ops expr_ops_hash = {
+ .get = nftnl_expr_hash_get,
+ .parse = nftnl_expr_hash_parse,
+ .build = nftnl_expr_hash_build,
+- .snprintf = nftnl_expr_hash_snprintf,
++ .snprintf_ = nftnl_expr_hash_snprintf,
+ .json_parse = nftnl_expr_hash_json_parse,
+ };
+diff --git a/src/expr/immediate.c b/src/expr/immediate.c
+index 0b188cc..94bd6da 100644
+--- a/src/expr/immediate.c
++++ b/src/expr/immediate.c
+@@ -316,6 +316,6 @@ struct expr_ops expr_ops_immediate = {
+ .get = nftnl_expr_immediate_get,
+ .parse = nftnl_expr_immediate_parse,
+ .build = nftnl_expr_immediate_build,
+- .snprintf = nftnl_expr_immediate_snprintf,
++ .snprintf_ = nftnl_expr_immediate_snprintf,
+ .json_parse = nftnl_expr_immediate_json_parse,
+ };
+diff --git a/src/expr/limit.c b/src/expr/limit.c
+index 856ab18..e71fc2f 100644
+--- a/src/expr/limit.c
++++ b/src/expr/limit.c
+@@ -285,6 +285,6 @@ struct expr_ops expr_ops_limit = {
+ .get = nftnl_expr_limit_get,
+ .parse = nftnl_expr_limit_parse,
+ .build = nftnl_expr_limit_build,
+- .snprintf = nftnl_expr_limit_snprintf,
++ .snprintf_ = nftnl_expr_limit_snprintf,
+ .json_parse = nftnl_expr_limit_json_parse,
+ };
+diff --git a/src/expr/log.c b/src/expr/log.c
+index b642255..71dd83a 100644
+--- a/src/expr/log.c
++++ b/src/expr/log.c
+@@ -352,6 +352,6 @@ struct expr_ops expr_ops_log = {
+ .get = nftnl_expr_log_get,
+ .parse = nftnl_expr_log_parse,
+ .build = nftnl_expr_log_build,
+- .snprintf = nftnl_expr_log_snprintf,
++ .snprintf_ = nftnl_expr_log_snprintf,
+ .json_parse = nftnl_expr_log_json_parse,
+ };
+diff --git a/src/expr/lookup.c b/src/expr/lookup.c
+index 861815f..6049913 100644
+--- a/src/expr/lookup.c
++++ b/src/expr/lookup.c
+@@ -293,6 +293,6 @@ struct expr_ops expr_ops_lookup = {
+ .get = nftnl_expr_lookup_get,
+ .parse = nftnl_expr_lookup_parse,
+ .build = nftnl_expr_lookup_build,
+- .snprintf = nftnl_expr_lookup_snprintf,
++ .snprintf_ = nftnl_expr_lookup_snprintf,
+ .json_parse = nftnl_expr_lookup_json_parse,
+ };
+diff --git a/src/expr/masq.c b/src/expr/masq.c
+index 7c235d3..adec325 100644
+--- a/src/expr/masq.c
++++ b/src/expr/masq.c
+@@ -228,6 +228,6 @@ struct expr_ops expr_ops_masq = {
+ .get = nftnl_expr_masq_get,
+ .parse = nftnl_expr_masq_parse,
+ .build = nftnl_expr_masq_build,
+- .snprintf = nftnl_expr_masq_snprintf,
++ .snprintf_ = nftnl_expr_masq_snprintf,
+ .json_parse = nftnl_expr_masq_json_parse,
+ };
+diff --git a/src/expr/match.c b/src/expr/match.c
+index dd09e1e..f0d8868 100644
+--- a/src/expr/match.c
++++ b/src/expr/match.c
+@@ -249,6 +249,6 @@ struct expr_ops expr_ops_match = {
+ .get = nftnl_expr_match_get,
+ .parse = nftnl_expr_match_parse,
+ .build = nftnl_expr_match_build,
+- .snprintf = nftnl_expr_match_snprintf,
++ .snprintf_ = nftnl_expr_match_snprintf,
+ .json_parse = nftnl_expr_match_json_parse,
+ };
+diff --git a/src/expr/meta.c b/src/expr/meta.c
+index 2c75841..907a677 100644
+--- a/src/expr/meta.c
++++ b/src/expr/meta.c
+@@ -290,6 +290,6 @@ struct expr_ops expr_ops_meta = {
+ .get = nftnl_expr_meta_get,
+ .parse = nftnl_expr_meta_parse,
+ .build = nftnl_expr_meta_build,
+- .snprintf = nftnl_expr_meta_snprintf,
++ .snprintf_ = nftnl_expr_meta_snprintf,
+ .json_parse = nftnl_expr_meta_json_parse,
+ };
+diff --git a/src/expr/nat.c b/src/expr/nat.c
+index 29bc3a2..d476283 100644
+--- a/src/expr/nat.c
++++ b/src/expr/nat.c
+@@ -383,6 +383,6 @@ struct expr_ops expr_ops_nat = {
+ .get = nftnl_expr_nat_get,
+ .parse = nftnl_expr_nat_parse,
+ .build = nftnl_expr_nat_build,
+- .snprintf = nftnl_expr_nat_snprintf,
++ .snprintf_ = nftnl_expr_nat_snprintf,
+ .json_parse = nftnl_expr_nat_json_parse,
+ };
+diff --git a/src/expr/numgen.c b/src/expr/numgen.c
+index a15f03a..28ef741 100644
+--- a/src/expr/numgen.c
++++ b/src/expr/numgen.c
+@@ -264,6 +264,6 @@ struct expr_ops expr_ops_ng = {
+ .get = nftnl_expr_ng_get,
+ .parse = nftnl_expr_ng_parse,
+ .build = nftnl_expr_ng_build,
+- .snprintf = nftnl_expr_ng_snprintf,
++ .snprintf_ = nftnl_expr_ng_snprintf,
+ .json_parse = nftnl_expr_ng_json_parse,
+ };
+diff --git a/src/expr/objref.c b/src/expr/objref.c
+index 4cfa3cb..c394290 100644
+--- a/src/expr/objref.c
++++ b/src/expr/objref.c
+@@ -278,6 +278,6 @@ struct expr_ops expr_ops_objref = {
+ .get = nftnl_expr_objref_get,
+ .parse = nftnl_expr_objref_parse,
+ .build = nftnl_expr_objref_build,
+- .snprintf = nftnl_expr_objref_snprintf,
++ .snprintf_ = nftnl_expr_objref_snprintf,
+ .json_parse = nftnl_expr_objref_json_parse,
+ };
+diff --git a/src/expr/payload.c b/src/expr/payload.c
+index 91e1587..894ac08 100644
+--- a/src/expr/payload.c
++++ b/src/expr/payload.c
+@@ -348,6 +348,6 @@ struct expr_ops expr_ops_payload = {
+ .get = nftnl_expr_payload_get,
+ .parse = nftnl_expr_payload_parse,
+ .build = nftnl_expr_payload_build,
+- .snprintf = nftnl_expr_payload_snprintf,
++ .snprintf_ = nftnl_expr_payload_snprintf,
+ .json_parse = nftnl_expr_payload_json_parse,
+ };
+diff --git a/src/expr/queue.c b/src/expr/queue.c
+index 8a9deda..389af83 100644
+--- a/src/expr/queue.c
++++ b/src/expr/queue.c
+@@ -276,6 +276,6 @@ struct expr_ops expr_ops_queue = {
+ .get = nftnl_expr_queue_get,
+ .parse = nftnl_expr_queue_parse,
+ .build = nftnl_expr_queue_build,
+- .snprintf = nftnl_expr_queue_snprintf,
++ .snprintf_ = nftnl_expr_queue_snprintf,
+ .json_parse = nftnl_expr_queue_json_parse,
+ };
+diff --git a/src/expr/quota.c b/src/expr/quota.c
+index 667e6e1..ff5d182 100644
+--- a/src/expr/quota.c
++++ b/src/expr/quota.c
+@@ -203,6 +203,6 @@ struct expr_ops expr_ops_quota = {
+ .get = nftnl_expr_quota_get,
+ .parse = nftnl_expr_quota_parse,
+ .build = nftnl_expr_quota_build,
+- .snprintf = nftnl_expr_quota_snprintf,
++ .snprintf_ = nftnl_expr_quota_snprintf,
+ .json_parse = nftnl_expr_quota_json_parse,
+ };
+diff --git a/src/expr/range.c b/src/expr/range.c
+index 8c8ce12..34d422b 100644
+--- a/src/expr/range.c
++++ b/src/expr/range.c
+@@ -283,6 +283,6 @@ struct expr_ops expr_ops_range = {
+ .get = nftnl_expr_range_get,
+ .parse = nftnl_expr_range_parse,
+ .build = nftnl_expr_range_build,
+- .snprintf = nftnl_expr_range_snprintf,
++ .snprintf_ = nftnl_expr_range_snprintf,
+ .json_parse = nftnl_expr_range_json_parse,
+ };
+diff --git a/src/expr/redir.c b/src/expr/redir.c
+index 43538d5..8a21f93 100644
+--- a/src/expr/redir.c
++++ b/src/expr/redir.c
+@@ -242,6 +242,6 @@ struct expr_ops expr_ops_redir = {
+ .get = nftnl_expr_redir_get,
+ .parse = nftnl_expr_redir_parse,
+ .build = nftnl_expr_redir_build,
+- .snprintf = nftnl_expr_redir_snprintf,
++ .snprintf_ = nftnl_expr_redir_snprintf,
+ .json_parse = nftnl_expr_redir_json_parse,
+ };
+diff --git a/src/expr/reject.c b/src/expr/reject.c
+index 11d8b20..b10e729 100644
+--- a/src/expr/reject.c
++++ b/src/expr/reject.c
+@@ -200,6 +200,6 @@ struct expr_ops expr_ops_reject = {
+ .get = nftnl_expr_reject_get,
+ .parse = nftnl_expr_reject_parse,
+ .build = nftnl_expr_reject_build,
+- .snprintf = nftnl_expr_reject_snprintf,
++ .snprintf_ = nftnl_expr_reject_snprintf,
+ .json_parse = nftnl_expr_reject_json_parse,
+ };
+diff --git a/src/expr/rt.c b/src/expr/rt.c
+index 5088e66..9f44b29 100644
+--- a/src/expr/rt.c
++++ b/src/expr/rt.c
+@@ -238,6 +238,6 @@ struct expr_ops expr_ops_rt = {
+ .get = nftnl_expr_rt_get,
+ .parse = nftnl_expr_rt_parse,
+ .build = nftnl_expr_rt_build,
+- .snprintf = nftnl_expr_rt_snprintf,
++ .snprintf_ = nftnl_expr_rt_snprintf,
+ .json_parse = nftnl_expr_rt_json_parse,
+ };
+diff --git a/src/expr/target.c b/src/expr/target.c
+index ed4bf7d..2ef4078 100644
+--- a/src/expr/target.c
++++ b/src/expr/target.c
+@@ -249,6 +249,6 @@ struct expr_ops expr_ops_target = {
+ .get = nftnl_expr_target_get,
+ .parse = nftnl_expr_target_parse,
+ .build = nftnl_expr_target_build,
+- .snprintf = nftnl_expr_target_snprintf,
++ .snprintf_ = nftnl_expr_target_snprintf,
+ .json_parse = nftnl_expr_target_json_parse,
+ };
+diff --git a/src/obj/counter.c b/src/obj/counter.c
+index beadc93..8c4cc25 100644
+--- a/src/obj/counter.c
++++ b/src/obj/counter.c
+@@ -179,6 +179,6 @@ struct obj_ops obj_ops_counter = {
+ .get = nftnl_obj_counter_get,
+ .parse = nftnl_obj_counter_parse,
+ .build = nftnl_obj_counter_build,
+- .snprintf = nftnl_obj_counter_snprintf,
++ .snprintf_ = nftnl_obj_counter_snprintf,
+ .json_parse = nftnl_obj_counter_json_parse,
+ };
+diff --git a/src/obj/ct_helper.c b/src/obj/ct_helper.c
+index d6d3111..4c7c88b 100644
+--- a/src/obj/ct_helper.c
++++ b/src/obj/ct_helper.c
+@@ -205,6 +205,6 @@ struct obj_ops obj_ops_ct_helper = {
+ .get = nftnl_obj_ct_helper_get,
+ .parse = nftnl_obj_ct_helper_parse,
+ .build = nftnl_obj_ct_helper_build,
+- .snprintf = nftnl_obj_ct_helper_snprintf,
++ .snprintf_ = nftnl_obj_ct_helper_snprintf,
+ .json_parse = nftnl_obj_quota_json_parse,
+ };
+diff --git a/src/obj/quota.c b/src/obj/quota.c
+index d5757b2..e959ff8 100644
+--- a/src/obj/quota.c
++++ b/src/obj/quota.c
+@@ -200,6 +200,6 @@ struct obj_ops obj_ops_quota = {
+ .get = nftnl_obj_quota_get,
+ .parse = nftnl_obj_quota_parse,
+ .build = nftnl_obj_quota_build,
+- .snprintf = nftnl_obj_quota_snprintf,
++ .snprintf_ = nftnl_obj_quota_snprintf,
+ .json_parse = nftnl_obj_quota_json_parse,
+ };
+diff --git a/src/object.c b/src/object.c
+index d409c6d..b938c97 100644
+--- a/src/object.c
++++ b/src/object.c
+@@ -389,7 +389,7 @@ static int nftnl_obj_export(char *buf, size_t size,
+ nftnl_buf_u32(&b, type, obj->use, USE);
+
+ if (obj->ops)
+- ret = obj->ops->snprintf(buf + b.len, size - b.len, type,
++ ret = obj->ops->snprintf_(buf + b.len, size - b.len, type,
+ flags, obj);
+
+ b.len += ret;
+@@ -410,7 +410,7 @@ static int nftnl_obj_snprintf_dflt(char *buf, size_t size,
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+
+ if (obj->ops) {
+- ret = obj->ops->snprintf(buf + offset, offset, type, flags, obj);
++ ret = obj->ops->snprintf_(buf + offset, offset, type, flags, obj);
+ SNPRINTF_BUFFER_SIZE(ret, size, len, offset);
+ }
+ ret = snprintf(buf + offset, offset, "]");
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.0.7.bb b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.0.7.bb
new file mode 100644
index 000000000..ca01c0a61
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/libnftnl/libnftnl_1.0.7.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Library for low-level interaction with nftables Netlink's API over libmnl"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=79808397c3355f163c012616125c9e26"
+SECTION = "libs"
+DEPENDS = "libmnl"
+PV .= "+git${SRCPV}"
+SRCREV = "4b89c0cb0883f638ff1abbc2ff47c43cdc26aac5"
+SRC_URI = "git://git.netfilter.org/libnftnl \
+ file://0001-Declare-the-define-visivility-attribute-together.patch \
+ file://0001-avoid-naming-local-function-as-one-of-printf-family.patch \
+ "
+SRC_URI[md5sum] = "82183867168eb6644926c48b991b8aac"
+SRC_URI[sha256sum] = "9bb66ecbc64b8508249402f0093829f44177770ad99f6042b86b3a467d963982"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-filter/nfacct/nfacct_1.0.2.bb b/meta-openembedded/meta-networking/recipes-filter/nfacct/nfacct_1.0.2.bb
new file mode 100644
index 000000000..8177ebcc2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nfacct/nfacct_1.0.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "nfacct is the command line tool to create/retrieve/delete accounting objects"
+HOMEPAGE = "http://netfilter.org/projects/nfacct/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+SRC_URI = "ftp://ftp.netfilter.org/pub/${BPN}/${BP}.tar.bz2"
+
+SRC_URI[md5sum] = "94faafdaaed85ca9220c5692be8a408e"
+SRC_URI[sha256sum] = "ecff2218754be318bce3c3a5d1775bab93bf4168b2c4aac465785de5655fbd69"
+DEPENDS = "libnfnetlink libmnl libnetfilter-acct"
+
+EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"'
+
+inherit autotools pkgconfig
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/0001-payload-explicit-network-ctx-assignment-for-icmp-icm.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0001-payload-explicit-network-ctx-assignment-for-icmp-icm.patch
new file mode 100644
index 000000000..86a3d53df
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0001-payload-explicit-network-ctx-assignment-for-icmp-icm.patch
@@ -0,0 +1,323 @@
+From 0011985554e269e1cc8f8e5b41eb9dcd795ebe8c Mon Sep 17 00:00:00 2001
+From: Arturo Borrero Gonzalez <arturo@debian.org>
+Date: Wed, 25 Jan 2017 12:51:08 +0100
+Subject: [PATCH] payload: explicit network ctx assignment for icmp/icmp6 in
+ special families
+
+In the inet, bridge and netdev families, we can add rules like these:
+
+% nft add rule inet t c ip protocol icmp icmp type echo-request
+% nft add rule inet t c ip6 nexthdr icmpv6 icmpv6 type echo-request
+
+However, when we print the ruleset:
+
+% nft list ruleset
+table inet t {
+ chain c {
+ icmpv6 type echo-request
+ icmp type echo-request
+ }
+}
+
+These rules we obtain can't be added again:
+
+% nft add rule inet t c icmp type echo-request
+<cmdline>:1:19-27: Error: conflicting protocols specified: inet-service vs. icmp
+add rule inet t c icmp type echo-request
+ ^^^^^^^^^
+
+% nft add rule inet t c icmpv6 type echo-request
+<cmdline>:1:19-29: Error: conflicting protocols specified: inet-service vs. icmpv6
+add rule inet t c icmpv6 type echo-request
+ ^^^^^^^^^^^
+
+Since I wouldn't expect an IP packet carrying ICMPv6, or IPv6 packet
+carrying ICMP, if the link layer is inet, the network layer protocol context
+can be safely update to 'ip' or 'ip6'.
+
+Moreover, nft currently generates a 'meta nfproto ipvX' depedency when
+using icmp or icmp6 in the inet family, and similar in netdev and bridge
+families.
+
+While at it, a bit of code factorization is introduced.
+
+Fixes: https://bugzilla.netfilter.org/show_bug.cgi?id=1073
+Signed-off-by: Arturo Borrero Gonzalez <arturo@debian.org>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+Upstream-Status: Backport
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/payload.c | 70 ++++++++++++++++---------------------
+ tests/py/any/icmpX.t.netdev | 8 +++++
+ tests/py/any/icmpX.t.netdev.payload | 36 +++++++++++++++++++
+ tests/py/bridge/icmpX.t | 8 +++++
+ tests/py/bridge/icmpX.t.payload | 36 +++++++++++++++++++
+ tests/py/inet/icmpX.t | 8 +++++
+ tests/py/inet/icmpX.t.payload | 36 +++++++++++++++++++
+ 7 files changed, 162 insertions(+), 40 deletions(-)
+ create mode 100644 tests/py/any/icmpX.t.netdev
+ create mode 100644 tests/py/any/icmpX.t.netdev.payload
+ create mode 100644 tests/py/bridge/icmpX.t
+ create mode 100644 tests/py/bridge/icmpX.t.payload
+ create mode 100644 tests/py/inet/icmpX.t
+ create mode 100644 tests/py/inet/icmpX.t.payload
+
+diff --git a/src/payload.c b/src/payload.c
+index af533b2..74f8254 100644
+--- a/src/payload.c
++++ b/src/payload.c
+@@ -223,6 +223,34 @@ static int payload_add_dependency(struct eval_ctx *ctx,
+ return 0;
+ }
+
++static const struct proto_desc *
++payload_gen_special_dependency(struct eval_ctx *ctx, const struct expr *expr)
++{
++ switch (expr->payload.base) {
++ case PROTO_BASE_LL_HDR:
++ switch (ctx->pctx.family) {
++ case NFPROTO_INET:
++ return &proto_inet;
++ case NFPROTO_BRIDGE:
++ return &proto_eth;
++ case NFPROTO_NETDEV:
++ return &proto_netdev;
++ default:
++ break;
++ }
++ break;
++ case PROTO_BASE_TRANSPORT_HDR:
++ if (expr->payload.desc == &proto_icmp)
++ return &proto_ip;
++ if (expr->payload.desc == &proto_icmp6)
++ return &proto_ip6;
++ return &proto_inet_service;
++ default:
++ break;
++ }
++ return NULL;
++}
++
+ /**
+ * payload_gen_dependency - generate match expression on payload dependency
+ *
+@@ -276,46 +304,8 @@ int payload_gen_dependency(struct eval_ctx *ctx, const struct expr *expr,
+
+ desc = ctx->pctx.protocol[expr->payload.base - 1].desc;
+ /* Special case for mixed IPv4/IPv6 and bridge tables */
+- if (desc == NULL) {
+- switch (ctx->pctx.family) {
+- case NFPROTO_INET:
+- switch (expr->payload.base) {
+- case PROTO_BASE_LL_HDR:
+- desc = &proto_inet;
+- break;
+- case PROTO_BASE_TRANSPORT_HDR:
+- desc = &proto_inet_service;
+- break;
+- default:
+- break;
+- }
+- break;
+- case NFPROTO_BRIDGE:
+- switch (expr->payload.base) {
+- case PROTO_BASE_LL_HDR:
+- desc = &proto_eth;
+- break;
+- case PROTO_BASE_TRANSPORT_HDR:
+- desc = &proto_inet_service;
+- break;
+- default:
+- break;
+- }
+- break;
+- case NFPROTO_NETDEV:
+- switch (expr->payload.base) {
+- case PROTO_BASE_LL_HDR:
+- desc = &proto_netdev;
+- break;
+- case PROTO_BASE_TRANSPORT_HDR:
+- desc = &proto_inet_service;
+- break;
+- default:
+- break;
+- }
+- break;
+- }
+- }
++ if (desc == NULL)
++ desc = payload_gen_special_dependency(ctx, expr);
+
+ if (desc == NULL)
+ return expr_error(ctx->msgs, expr,
+diff --git a/tests/py/any/icmpX.t.netdev b/tests/py/any/icmpX.t.netdev
+new file mode 100644
+index 0000000..a327ce6
+--- /dev/null
++++ b/tests/py/any/icmpX.t.netdev
+@@ -0,0 +1,8 @@
++:ingress;type filter hook ingress device lo priority 0
++
++*netdev;test-netdev;ingress
++
++ip protocol icmp icmp type echo-request;ok;icmp type echo-request
++icmp type echo-request;ok
++ip6 nexthdr icmpv6 icmpv6 type echo-request;ok;icmpv6 type echo-request
++icmpv6 type echo-request;ok
+diff --git a/tests/py/any/icmpX.t.netdev.payload b/tests/py/any/icmpX.t.netdev.payload
+new file mode 100644
+index 0000000..8b8107c
+--- /dev/null
++++ b/tests/py/any/icmpX.t.netdev.payload
+@@ -0,0 +1,36 @@
++# ip protocol icmp icmp type echo-request
++netdev test-netdev ingress
++ [ meta load protocol => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++ [ payload load 1b @ network header + 9 => reg 1 ]
++ [ cmp eq reg 1 0x00000001 ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++
++# icmp type echo-request
++netdev test-netdev ingress
++ [ meta load protocol => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++ [ payload load 1b @ network header + 9 => reg 1 ]
++ [ cmp eq reg 1 0x00000001 ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++
++# ip6 nexthdr icmpv6 icmpv6 type echo-request
++netdev test-netdev ingress
++ [ meta load protocol => reg 1 ]
++ [ cmp eq reg 1 0x0000dd86 ]
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000080 ]
++
++# icmpv6 type echo-request
++netdev test-netdev ingress
++ [ meta load protocol => reg 1 ]
++ [ cmp eq reg 1 0x0000dd86 ]
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000080 ]
++
+diff --git a/tests/py/bridge/icmpX.t b/tests/py/bridge/icmpX.t
+new file mode 100644
+index 0000000..8c0a597
+--- /dev/null
++++ b/tests/py/bridge/icmpX.t
+@@ -0,0 +1,8 @@
++:input;type filter hook input priority 0
++
++*bridge;test-bridge;input
++
++ip protocol icmp icmp type echo-request;ok;icmp type echo-request
++icmp type echo-request;ok
++ip6 nexthdr icmpv6 icmpv6 type echo-request;ok;icmpv6 type echo-request
++icmpv6 type echo-request;ok
+diff --git a/tests/py/bridge/icmpX.t.payload b/tests/py/bridge/icmpX.t.payload
+new file mode 100644
+index 0000000..19efdd8
+--- /dev/null
++++ b/tests/py/bridge/icmpX.t.payload
+@@ -0,0 +1,36 @@
++# ip protocol icmp icmp type echo-request
++bridge test-bridge input
++ [ payload load 2b @ link header + 12 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++ [ payload load 1b @ network header + 9 => reg 1 ]
++ [ cmp eq reg 1 0x00000001 ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++
++# icmp type echo-request
++bridge test-bridge input
++ [ payload load 2b @ link header + 12 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++ [ payload load 1b @ network header + 9 => reg 1 ]
++ [ cmp eq reg 1 0x00000001 ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++
++# ip6 nexthdr icmpv6 icmpv6 type echo-request
++bridge test-bridge input
++ [ payload load 2b @ link header + 12 => reg 1 ]
++ [ cmp eq reg 1 0x0000dd86 ]
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000080 ]
++
++# icmpv6 type echo-request
++bridge test-bridge input
++ [ payload load 2b @ link header + 12 => reg 1 ]
++ [ cmp eq reg 1 0x0000dd86 ]
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000080 ]
++
+diff --git a/tests/py/inet/icmpX.t b/tests/py/inet/icmpX.t
+new file mode 100644
+index 0000000..1b467a1
+--- /dev/null
++++ b/tests/py/inet/icmpX.t
+@@ -0,0 +1,8 @@
++:input;type filter hook input priority 0
++
++*inet;test-inet;input
++
++ip protocol icmp icmp type echo-request;ok;icmp type echo-request
++icmp type echo-request;ok
++ip6 nexthdr icmpv6 icmpv6 type echo-request;ok;icmpv6 type echo-request
++icmpv6 type echo-request;ok
+diff --git a/tests/py/inet/icmpX.t.payload b/tests/py/inet/icmpX.t.payload
+new file mode 100644
+index 0000000..81ca774
+--- /dev/null
++++ b/tests/py/inet/icmpX.t.payload
+@@ -0,0 +1,36 @@
++# ip protocol icmp icmp type echo-request
++inet test-inet input
++ [ meta load nfproto => reg 1 ]
++ [ cmp eq reg 1 0x00000002 ]
++ [ payload load 1b @ network header + 9 => reg 1 ]
++ [ cmp eq reg 1 0x00000001 ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++
++# icmp type echo-request
++inet test-inet input
++ [ meta load nfproto => reg 1 ]
++ [ cmp eq reg 1 0x00000002 ]
++ [ payload load 1b @ network header + 9 => reg 1 ]
++ [ cmp eq reg 1 0x00000001 ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000008 ]
++
++# ip6 nexthdr icmpv6 icmpv6 type echo-request
++inet test-inet input
++ [ meta load nfproto => reg 1 ]
++ [ cmp eq reg 1 0x0000000a ]
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000080 ]
++
++# icmpv6 type echo-request
++inet test-inet input
++ [ meta load nfproto => reg 1 ]
++ [ cmp eq reg 1 0x0000000a ]
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000080 ]
++
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/0002-proto-Add-some-exotic-ICMPv6-types.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0002-proto-Add-some-exotic-ICMPv6-types.patch
new file mode 100644
index 000000000..4d9e9d11a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0002-proto-Add-some-exotic-ICMPv6-types.patch
@@ -0,0 +1,147 @@
+From 9ade8fb75f8963375b45b3f2973b8bb7aa66ad76 Mon Sep 17 00:00:00 2001
+From: Phil Sutter <phil@nwl.cc>
+Date: Thu, 16 Mar 2017 13:43:20 +0100
+Subject: [PATCH] proto: Add some exotic ICMPv6 types
+
+This adds support for matching on inverse ND messages as defined by
+RFC3122 (not implemented in Linux) and MLDv2 as defined by RFC3810.
+
+Note that ICMPV6_MLD2_REPORT macro is defined in linux/icmpv6.h but
+including that header leads to conflicts with symbols defined in
+netinet/icmp6.h.
+
+In addition to the above, "mld-listener-done" is introduced as an alias
+for "mld-listener-reduction".
+
+Signed-off-by: Phil Sutter <phil@nwl.cc>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+Upstream-Status: Backport
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/proto.c | 8 ++++++++
+ tests/py/ip6/icmpv6.t | 8 ++++++--
+ tests/py/ip6/icmpv6.t.payload.ip6 | 34 +++++++++++++++++++++++++++++++++-
+ 3 files changed, 47 insertions(+), 3 deletions(-)
+
+diff --git a/src/proto.c b/src/proto.c
+index fb96530..79e9dbf 100644
+--- a/src/proto.c
++++ b/src/proto.c
+@@ -632,6 +632,10 @@ const struct proto_desc proto_ip = {
+
+ #include <netinet/icmp6.h>
+
++#define IND_NEIGHBOR_SOLICIT 141
++#define IND_NEIGHBOR_ADVERT 142
++#define ICMPV6_MLD2_REPORT 143
++
+ static const struct symbol_table icmp6_type_tbl = {
+ .base = BASE_DECIMAL,
+ .symbols = {
+@@ -643,6 +647,7 @@ static const struct symbol_table icmp6_type_tbl = {
+ SYMBOL("echo-reply", ICMP6_ECHO_REPLY),
+ SYMBOL("mld-listener-query", MLD_LISTENER_QUERY),
+ SYMBOL("mld-listener-report", MLD_LISTENER_REPORT),
++ SYMBOL("mld-listener-done", MLD_LISTENER_REDUCTION),
+ SYMBOL("mld-listener-reduction", MLD_LISTENER_REDUCTION),
+ SYMBOL("nd-router-solicit", ND_ROUTER_SOLICIT),
+ SYMBOL("nd-router-advert", ND_ROUTER_ADVERT),
+@@ -650,6 +655,9 @@ static const struct symbol_table icmp6_type_tbl = {
+ SYMBOL("nd-neighbor-advert", ND_NEIGHBOR_ADVERT),
+ SYMBOL("nd-redirect", ND_REDIRECT),
+ SYMBOL("router-renumbering", ICMP6_ROUTER_RENUMBERING),
++ SYMBOL("ind-neighbor-solicit", IND_NEIGHBOR_SOLICIT),
++ SYMBOL("ind-neighbor-advert", IND_NEIGHBOR_ADVERT),
++ SYMBOL("mld2-listener-report", ICMPV6_MLD2_REPORT),
+ SYMBOL_LIST_END
+ },
+ };
+diff --git a/tests/py/ip6/icmpv6.t b/tests/py/ip6/icmpv6.t
+index afbd451..a898fe3 100644
+--- a/tests/py/ip6/icmpv6.t
++++ b/tests/py/ip6/icmpv6.t
+@@ -11,7 +11,8 @@ icmpv6 type echo-request accept;ok
+ icmpv6 type echo-reply accept;ok
+ icmpv6 type mld-listener-query accept;ok
+ icmpv6 type mld-listener-report accept;ok
+-icmpv6 type mld-listener-reduction accept;ok
++icmpv6 type mld-listener-done accept;ok
++icmpv6 type mld-listener-reduction accept;ok;icmpv6 type mld-listener-done accept
+ icmpv6 type nd-router-solicit accept;ok
+ icmpv6 type nd-router-advert accept;ok
+ icmpv6 type nd-neighbor-solicit accept;ok
+@@ -19,8 +20,11 @@ icmpv6 type nd-neighbor-advert accept;ok
+ icmpv6 type nd-redirect accept;ok
+ icmpv6 type parameter-problem accept;ok
+ icmpv6 type router-renumbering accept;ok
++icmpv6 type ind-neighbor-solicit accept;ok
++icmpv6 type ind-neighbor-advert accept;ok
++icmpv6 type mld2-listener-report accept;ok
+ icmpv6 type {destination-unreachable, time-exceeded, nd-router-solicit} accept;ok
+-icmpv6 type {router-renumbering, mld-listener-reduction, time-exceeded, nd-router-solicit} accept;ok
++icmpv6 type {router-renumbering, mld-listener-done, time-exceeded, nd-router-solicit} accept;ok
+ icmpv6 type {mld-listener-query, time-exceeded, nd-router-advert} accept;ok
+ icmpv6 type != {mld-listener-query, time-exceeded, nd-router-advert} accept;ok
+
+diff --git a/tests/py/ip6/icmpv6.t.payload.ip6 b/tests/py/ip6/icmpv6.t.payload.ip6
+index 9fe2496..30f58ca 100644
+--- a/tests/py/ip6/icmpv6.t.payload.ip6
++++ b/tests/py/ip6/icmpv6.t.payload.ip6
+@@ -54,6 +54,14 @@ ip6 test-ip6 input
+ [ cmp eq reg 1 0x00000083 ]
+ [ immediate reg 0 accept ]
+
++# icmpv6 type mld-listener-done accept
++ip6 test-ip6 input
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000084 ]
++ [ immediate reg 0 accept ]
++
+ # icmpv6 type mld-listener-reduction accept
+ ip6 test-ip6 input
+ [ payload load 1b @ network header + 6 => reg 1 ]
+@@ -118,6 +126,30 @@ ip6 test-ip6 input
+ [ cmp eq reg 1 0x0000008a ]
+ [ immediate reg 0 accept ]
+
++# icmpv6 type ind-neighbor-solicit accept
++ip6 test-ip6 input
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x0000008d ]
++ [ immediate reg 0 accept ]
++
++# icmpv6 type ind-neighbor-advert accept
++ip6 test-ip6 input
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x0000008e ]
++ [ immediate reg 0 accept ]
++
++# icmpv6 type mld2-listener-report accept
++ip6 test-ip6 input
++ [ payload load 1b @ network header + 6 => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x0000008f ]
++ [ immediate reg 0 accept ]
++
+ # icmpv6 type {destination-unreachable, time-exceeded, nd-router-solicit} accept
+ __set%d test-ip6 3
+ __set%d test-ip6 0
+@@ -129,7 +161,7 @@ ip6 test-ip6 input
+ [ lookup reg 1 set __set%d ]
+ [ immediate reg 0 accept ]
+
+-# icmpv6 type {router-renumbering, mld-listener-reduction, time-exceeded, nd-router-solicit} accept
++# icmpv6 type {router-renumbering, mld-listener-done, time-exceeded, nd-router-solicit} accept
+ __set%d test-ip6 3
+ __set%d test-ip6 0
+ element 0000008a : 0 [end] element 00000084 : 0 [end] element 00000003 : 0 [end] element 00000085 : 0 [end]
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/0003-payload-split-ll-proto-dependency-into-helper.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0003-payload-split-ll-proto-dependency-into-helper.patch
new file mode 100644
index 000000000..50cac300e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0003-payload-split-ll-proto-dependency-into-helper.patch
@@ -0,0 +1,62 @@
+From 8d8cfe5ad6ca460a5262fb15fdbef3601058c784 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Thu, 18 May 2017 13:30:54 +0200
+Subject: [PATCH 1/4] payload: split ll proto dependency into helper
+
+will be re-used in folloup patch for icmp/icmpv6 depenency
+handling.
+
+Signed-off-by: Florian Westphal <fw@strlen.de>
+---
+Upstream-Status: Backport
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/payload.c | 29 ++++++++++++++++++-----------
+ 1 file changed, 18 insertions(+), 11 deletions(-)
+
+diff --git a/src/payload.c b/src/payload.c
+index 55128fe..31e5a02 100644
+--- a/src/payload.c
++++ b/src/payload.c
+@@ -224,21 +224,28 @@ static int payload_add_dependency(struct eval_ctx *ctx,
+ }
+
+ static const struct proto_desc *
++payload_get_get_ll_hdr(const struct eval_ctx *ctx)
++{
++ switch (ctx->pctx.family) {
++ case NFPROTO_INET:
++ return &proto_inet;
++ case NFPROTO_BRIDGE:
++ return &proto_eth;
++ case NFPROTO_NETDEV:
++ return &proto_netdev;
++ default:
++ break;
++ }
++
++ return NULL;
++}
++
++static const struct proto_desc *
+ payload_gen_special_dependency(struct eval_ctx *ctx, const struct expr *expr)
+ {
+ switch (expr->payload.base) {
+ case PROTO_BASE_LL_HDR:
+- switch (ctx->pctx.family) {
+- case NFPROTO_INET:
+- return &proto_inet;
+- case NFPROTO_BRIDGE:
+- return &proto_eth;
+- case NFPROTO_NETDEV:
+- return &proto_netdev;
+- default:
+- break;
+- }
+- break;
++ return payload_get_get_ll_hdr(ctx);
+ case PROTO_BASE_TRANSPORT_HDR:
+ if (expr->payload.desc == &proto_icmp)
+ return &proto_ip;
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/0004-src-allow-update-of-net-base-w.-meta-l4proto-icmpv6.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0004-src-allow-update-of-net-base-w.-meta-l4proto-icmpv6.patch
new file mode 100644
index 000000000..180edb350
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0004-src-allow-update-of-net-base-w.-meta-l4proto-icmpv6.patch
@@ -0,0 +1,65 @@
+From 9a1f2bbf3cd2417e0c10d18578e224abe2071d68 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Tue, 21 Mar 2017 19:47:22 +0100
+Subject: [PATCH 2/4] src: allow update of net base w. meta l4proto icmpv6
+
+nft add rule ip6 f i meta l4proto ipv6-icmp icmpv6 type nd-router-advert
+<cmdline>:1:50-60: Error: conflicting protocols specified: unknown vs. icmpv6
+
+add icmpv6 to nexthdr list so base gets updated correctly.
+
+Reported-by: Thomas Woerner <twoerner@redhat.com>
+Signed-off-by: Florian Westphal <fw@strlen.de>
+---
+Upstream-Status: Backport
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/proto.c | 1 +
+ tests/py/any/meta.t | 1 +
+ tests/py/any/meta.t.payload | 7 +++++++
+ 3 files changed, 9 insertions(+)
+
+diff --git a/src/proto.c b/src/proto.c
+index 79e9dbf..fcdfbe7 100644
+--- a/src/proto.c
++++ b/src/proto.c
+@@ -779,6 +779,7 @@ const struct proto_desc proto_inet_service = {
+ PROTO_LINK(IPPROTO_TCP, &proto_tcp),
+ PROTO_LINK(IPPROTO_DCCP, &proto_dccp),
+ PROTO_LINK(IPPROTO_SCTP, &proto_sctp),
++ PROTO_LINK(IPPROTO_ICMPV6, &proto_icmp6),
+ },
+ .templates = {
+ [0] = PROTO_META_TEMPLATE("l4proto", &inet_protocol_type, NFT_META_L4PROTO, 8),
+diff --git a/tests/py/any/meta.t b/tests/py/any/meta.t
+index c3ac0a4..2ff942f 100644
+--- a/tests/py/any/meta.t
++++ b/tests/py/any/meta.t
+@@ -38,6 +38,7 @@ meta l4proto { 33, 55, 67, 88};ok;meta l4proto { 33, 55, 67, 88}
+ meta l4proto != { 33, 55, 67, 88};ok
+ meta l4proto { 33-55};ok
+ meta l4proto != { 33-55};ok
++meta l4proto ipv6-icmp icmpv6 type nd-router-advert;ok;icmpv6 type nd-router-advert
+
+ meta priority root;ok
+ meta priority none;ok
+diff --git a/tests/py/any/meta.t.payload b/tests/py/any/meta.t.payload
+index e432656..871f1ad 100644
+--- a/tests/py/any/meta.t.payload
++++ b/tests/py/any/meta.t.payload
+@@ -187,6 +187,13 @@ ip test-ip4 input
+ [ byteorder reg 1 = hton(reg 1, 2, 1) ]
+ [ lookup reg 1 set __set%d 0x1 ]
+
++# meta l4proto ipv6-icmp icmpv6 type nd-router-advert
++ip test-ip4 input
++ [ meta load l4proto => reg 1 ]
++ [ cmp eq reg 1 0x0000003a ]
++ [ payload load 1b @ transport header + 0 => reg 1 ]
++ [ cmp eq reg 1 0x00000086 ]
++
+ # meta mark 0x4
+ ip test-ip4 input
+ [ meta load mark => reg 1 ]
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/0005-src-ipv6-switch-implicit-dependencies-to-meta-l4prot.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0005-src-ipv6-switch-implicit-dependencies-to-meta-l4prot.patch
new file mode 100644
index 000000000..f600ae05c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0005-src-ipv6-switch-implicit-dependencies-to-meta-l4prot.patch
@@ -0,0 +1,98 @@
+From 2366ed9ffcb4f5f5341f10f0a1d1a4688d37ad87 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Wed, 22 Mar 2017 15:08:48 +0100
+Subject: [PATCH 3/4] src: ipv6: switch implicit dependencies to meta l4proto
+
+when using rule like
+
+ip6 filter input tcp dport 22
+nft generates:
+ [ payload load 1b @ network header + 6 => reg 1 ]
+ [ cmp eq reg 1 0x00000006 ]
+ [ payload load 2b @ transport header + 2 => reg 1 ]
+ [ cmp eq reg 1 0x00001600 ]
+
+which is: ip6 filter input ip6 nexthdr tcp dport 22
+IOW, such a rule won't match if e.g. a fragment header is in place.
+
+This changes ip6_proto to use 'meta l4proto' which is the protocol header
+found by exthdr walk.
+
+A side effect is that for bridge we get a shorter dependency chain as it
+no longer needs to prepend 'ether proto ipv6' for old 'ip6 nexthdr' dep.
+
+Only problem:
+
+ip6 nexthdr tcp tcp dport 22
+will now inject a (useless) meta l4 dependency as ip6 nexthdr is no
+longer flagged as EXPR_F_PROTOCOL, to avoid this add a small helper
+that skips the unneded meta dependency in that case.
+
+Signed-off-by: Florian Westphal <fw@strlen.de>
+---
+Upstream-Status: Backport
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/payload.c | 19 ++++++++++++++++++-
+ src/proto.c | 2 +-
+ 2 files changed, 19 insertions(+), 2 deletions(-)
+
+diff --git a/src/payload.c b/src/payload.c
+index 31e5a02..38db15e 100644
+--- a/src/payload.c
++++ b/src/payload.c
+@@ -117,6 +117,23 @@ static const struct expr_ops payload_expr_ops = {
+ .pctx_update = payload_expr_pctx_update,
+ };
+
++/*
++ * ipv6 is special case, we normally use 'meta l4proto' to fetch the last
++ * l4 header of the ipv6 extension header chain so we will also match
++ * tcp after a fragmentation header, for instance.
++ *
++ * If user specifically asks for nexthdr x, treat is as a full
++ * dependency rather than injecting another (useless) meta l4 one.
++ */
++static bool proto_key_is_protocol(const struct proto_desc *desc, unsigned int type)
++{
++ if (type == desc->protocol_key ||
++ (desc == &proto_ip6 && type == IP6HDR_NEXTHDR))
++ return true;
++
++ return false;
++}
++
+ struct expr *payload_expr_alloc(const struct location *loc,
+ const struct proto_desc *desc,
+ unsigned int type)
+@@ -129,7 +146,7 @@ struct expr *payload_expr_alloc(const struct location *loc,
+ if (desc != NULL) {
+ tmpl = &desc->templates[type];
+ base = desc->base;
+- if (type == desc->protocol_key)
++ if (proto_key_is_protocol(desc, type))
+ flags = EXPR_F_PROTOCOL;
+ } else {
+ tmpl = &proto_unknown_template;
+diff --git a/src/proto.c b/src/proto.c
+index fcdfbe7..3b20a5f 100644
+--- a/src/proto.c
++++ b/src/proto.c
+@@ -707,7 +707,6 @@ const struct proto_desc proto_icmp6 = {
+ const struct proto_desc proto_ip6 = {
+ .name = "ip6",
+ .base = PROTO_BASE_NETWORK_HDR,
+- .protocol_key = IP6HDR_NEXTHDR,
+ .protocols = {
+ PROTO_LINK(IPPROTO_ESP, &proto_esp),
+ PROTO_LINK(IPPROTO_AH, &proto_ah),
+@@ -720,6 +719,7 @@ const struct proto_desc proto_ip6 = {
+ PROTO_LINK(IPPROTO_ICMPV6, &proto_icmp6),
+ },
+ .templates = {
++ [0] = PROTO_META_TEMPLATE("l4proto", &inet_protocol_type, NFT_META_L4PROTO, 8),
+ [IP6HDR_VERSION] = HDR_BITFIELD("version", &integer_type, 0, 4),
+ [IP6HDR_DSCP] = HDR_BITFIELD("dscp", &dscp_type, 4, 6),
+ [IP6HDR_ECN] = HDR_BITFIELD("ecn", &ecn_type, 10, 2),
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/0006-payload-enforce-ip-ip6-protocol-depending-on-icmp-or.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0006-payload-enforce-ip-ip6-protocol-depending-on-icmp-or.patch
new file mode 100644
index 000000000..00076d7ce
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0006-payload-enforce-ip-ip6-protocol-depending-on-icmp-or.patch
@@ -0,0 +1,84 @@
+From f21a7a4849b50c30341ec571813bd7fe37040ad3 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Thu, 18 May 2017 13:30:54 +0200
+Subject: [PATCH 4/4] payload: enforce ip/ip6 protocol depending on icmp or
+ icmpv6
+
+After some discussion with Pablo we agreed to treat icmp/icmpv6 specially.
+
+in the case of a rule like 'tcp dport 22' the inet, bridge and netdev
+families only care about the lower layer protocol.
+
+In the icmpv6 case however we'd like to also enforce an ipv6 protocol check
+(and ipv4 check in icmp case).
+
+This extends payload_gen_special_dependency() to consider this.
+With this patch:
+
+add rule $pf filter input meta l4proto icmpv6
+add rule $pf filter input meta l4proto icmpv6 icmpv6 type echo-request
+add rule $pf filter input icmpv6 type echo-request
+
+will work in all tables and all families.
+For inet/bridge/netdev, an ipv6 protocol dependency is added; this will
+not match ipv4 packets with ip->protocol == icmpv6, EXCEPT in the case
+of the ip family.
+
+Its still possible to match icmpv6-in-ipv4 in inet/bridge/netdev with an
+explicit dependency:
+
+add rule inet f i ip protocol ipv6-icmp meta l4proto ipv6-icmp icmpv6 type ...
+
+Implicit dependencies won't get removed at the moment, so
+ bridge ... icmp type echo-request
+will be shown as
+ ether type ip meta l4proto 1 icmp type echo-request
+
+Signed-off-by: Florian Westphal <fw@strlen.de>
+---
+Upstream-Status: Backport
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/payload.c | 27 +++++++++++++++++++++++----
+ 1 file changed, 23 insertions(+), 4 deletions(-)
+
+diff --git a/src/payload.c b/src/payload.c
+index 38db15e..8796ee5 100644
+--- a/src/payload.c
++++ b/src/payload.c
+@@ -264,10 +264,29 @@ payload_gen_special_dependency(struct eval_ctx *ctx, const struct expr *expr)
+ case PROTO_BASE_LL_HDR:
+ return payload_get_get_ll_hdr(ctx);
+ case PROTO_BASE_TRANSPORT_HDR:
+- if (expr->payload.desc == &proto_icmp)
+- return &proto_ip;
+- if (expr->payload.desc == &proto_icmp6)
+- return &proto_ip6;
++ if (expr->payload.desc == &proto_icmp ||
++ expr->payload.desc == &proto_icmp6) {
++ const struct proto_desc *desc, *desc_upper;
++ struct stmt *nstmt;
++
++ desc = ctx->pctx.protocol[PROTO_BASE_LL_HDR].desc;
++ if (!desc) {
++ desc = payload_get_get_ll_hdr(ctx);
++ if (!desc)
++ break;
++ }
++
++ desc_upper = &proto_ip6;
++ if (expr->payload.desc == &proto_icmp)
++ desc_upper = &proto_ip;
++
++ if (payload_add_dependency(ctx, desc, desc_upper,
++ expr, &nstmt) < 0)
++ return NULL;
++
++ list_add_tail(&nstmt->list, &ctx->stmt->list);
++ return desc_upper;
++ }
+ return &proto_inet_service;
+ default:
+ break;
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/0007-src-ip-switch-implicit-dependencies-to-meta-l4proto-.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0007-src-ip-switch-implicit-dependencies-to-meta-l4proto-.patch
new file mode 100644
index 000000000..5b72437d2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/0007-src-ip-switch-implicit-dependencies-to-meta-l4proto-.patch
@@ -0,0 +1,86 @@
+From 0825c57d571bb7121e7048e198b9b023f7e7f358 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Sun, 7 May 2017 03:53:30 +0200
+Subject: [PATCH] src: ip: switch implicit dependencies to meta l4proto too
+
+after ip6 nexthdr also switch ip to meta l4proto instead of ip protocol.
+
+While its needed for ipv6 (due to extension headers) this isn't needed
+for ip but it has the advantage that
+
+tcp dport 22
+
+produces same expressions for ip/ip6/inet families.
+
+Signed-off-by: Florian Westphal <fw@strlen.de>
+---
+Upstream-Status: Backport
+Signed-off-by: André Draszik <adraszik@tycoint.com>
+ src/payload.c | 17 +++++++++++------
+ src/proto.c | 3 ++-
+ 2 files changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/src/payload.c b/src/payload.c
+index 8796ee5..11b6df3 100644
+--- a/src/payload.c
++++ b/src/payload.c
+@@ -118,17 +118,22 @@ static const struct expr_ops payload_expr_ops = {
+ };
+
+ /*
+- * ipv6 is special case, we normally use 'meta l4proto' to fetch the last
+- * l4 header of the ipv6 extension header chain so we will also match
++ * We normally use 'meta l4proto' to fetch the last l4 header of the
++ * ipv6 extension header chain so we will also match
+ * tcp after a fragmentation header, for instance.
++ * For consistency we also use meta l4proto for ipv4.
+ *
+- * If user specifically asks for nexthdr x, treat is as a full
+- * dependency rather than injecting another (useless) meta l4 one.
++ * If user specifically asks for nexthdr x, don't add another (useless)
++ * meta dependency.
+ */
+ static bool proto_key_is_protocol(const struct proto_desc *desc, unsigned int type)
+ {
+- if (type == desc->protocol_key ||
+- (desc == &proto_ip6 && type == IP6HDR_NEXTHDR))
++ if (type == desc->protocol_key)
++ return true;
++
++ if (desc == &proto_ip6 && type == IP6HDR_NEXTHDR)
++ return true;
++ if (desc == &proto_ip && type == IPHDR_PROTOCOL)
+ return true;
+
+ return false;
+diff --git a/src/proto.c b/src/proto.c
+index 3b20a5f..2afedf7 100644
+--- a/src/proto.c
++++ b/src/proto.c
+@@ -587,7 +587,6 @@ const struct proto_desc proto_ip = {
+ .name = "ip",
+ .base = PROTO_BASE_NETWORK_HDR,
+ .checksum_key = IPHDR_CHECKSUM,
+- .protocol_key = IPHDR_PROTOCOL,
+ .protocols = {
+ PROTO_LINK(IPPROTO_ICMP, &proto_icmp),
+ PROTO_LINK(IPPROTO_ESP, &proto_esp),
+@@ -600,6 +599,7 @@ const struct proto_desc proto_ip = {
+ PROTO_LINK(IPPROTO_SCTP, &proto_sctp),
+ },
+ .templates = {
++ [0] = PROTO_META_TEMPLATE("l4proto", &inet_protocol_type, NFT_META_L4PROTO, 8),
+ [IPHDR_VERSION] = HDR_BITFIELD("version", &integer_type, 0, 4),
+ [IPHDR_HDRLENGTH] = HDR_BITFIELD("hdrlength", &integer_type, 4, 4),
+ [IPHDR_DSCP] = HDR_BITFIELD("dscp", &dscp_type, 8, 6),
+@@ -779,6 +779,7 @@ const struct proto_desc proto_inet_service = {
+ PROTO_LINK(IPPROTO_TCP, &proto_tcp),
+ PROTO_LINK(IPPROTO_DCCP, &proto_dccp),
+ PROTO_LINK(IPPROTO_SCTP, &proto_sctp),
++ PROTO_LINK(IPPROTO_ICMP, &proto_icmp),
+ PROTO_LINK(IPPROTO_ICMPV6, &proto_icmp6),
+ },
+ .templates = {
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/files/fix-to-generate-ntf.8.patch b/meta-openembedded/meta-networking/recipes-filter/nftables/files/fix-to-generate-ntf.8.patch
new file mode 100644
index 000000000..8dce90a75
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/files/fix-to-generate-ntf.8.patch
@@ -0,0 +1,26 @@
+[PATCH] disable to make ntf.8 man
+
+Upstream-Status: Pending
+
+$DB2MAN do not support the xinclude parameter whether it is
+docbook2x-man or other, so disable to make ntf.8 man
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ doc/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index a92de7f..537c36b 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -1,5 +1,5 @@
+ if BUILD_MAN
+-man_MANS = nft.8
++#man_MANS = nft.8
+ endif
+
+ if BUILD_PDF
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_0.7.bb b/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_0.7.bb
new file mode 100644
index 000000000..0ea79953b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-filter/nftables/nftables_0.7.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Netfilter Tables userspace utillites"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d1a78fdd879a263a5e0b42d1fc565e79"
+SECTION = "net"
+
+DEPENDS = "libmnl libnftnl readline gmp"
+RRECOMMENDS_${PN} += "kernel-module-nf-tables \
+ "
+
+SRC_URI = "http://www.netfilter.org/projects/nftables/files/${BP}.tar.bz2 \
+ file://fix-to-generate-ntf.8.patch \
+ \
+ file://0001-payload-explicit-network-ctx-assignment-for-icmp-icm.patch \
+ file://0002-proto-Add-some-exotic-ICMPv6-types.patch \
+ \
+ file://0003-payload-split-ll-proto-dependency-into-helper.patch \
+ file://0004-src-allow-update-of-net-base-w.-meta-l4proto-icmpv6.patch \
+ file://0005-src-ipv6-switch-implicit-dependencies-to-meta-l4prot.patch \
+ file://0006-payload-enforce-ip-ip6-protocol-depending-on-icmp-or.patch \
+ file://0007-src-ip-switch-implicit-dependencies-to-meta-l4proto-.patch \
+ "
+SRC_URI[md5sum] = "4c005e76a15a029afaba71d7db21d065"
+SRC_URI[sha256sum] = "fe639239d801ce5890397f6f4391c58a934bfc27d8b7d5ef922692de5ec4ed43"
+
+ASNEEDED = ""
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-irc/znc/znc_git.bb b/meta-openembedded/meta-networking/recipes-irc/znc/znc_git.bb
new file mode 100644
index 000000000..c2d71563a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-irc/znc/znc_git.bb
@@ -0,0 +1,34 @@
+SUMMARY = "ZNC, an advanced IRC bouncer"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS = "openssl zlib icu"
+
+PV = "1.6.0"
+
+SRC_URI = "git://github.com/znc/znc.git;name=znc \
+ git://github.com/jimloco/Csocket.git;destsuffix=git/third_party/Csocket;name=Csocket \
+ "
+SRCREV_znc = "f47e8465efa4e1cd948b9caae93ac401b4355df8"
+SRCREV_Csocket = "07b4437396122650e5b8fb3d014e820a5decf4ee"
+
+# This constructs a composite revision based on multiple SRCREV's.
+#
+SRCREV_FORMAT = "znc_Csocket"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep pkgconfig
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+# ZNC has a custom autogen.sh that states that this command is needed *and* expected to fail
+do_configure_prepend() {
+ automake --add-missing || true
+}
+
+do_install_append() {
+ sed -i 's/-fdebug-prefix-map[^ ]*//g; s#${STAGING_DIR_TARGET}##g' ${D}${libdir}/pkgconfig/*.pc
+}
diff --git a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_0.0.20171221.bb b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_0.0.20171221.bb
new file mode 100644
index 000000000..2c69c58f8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-module_0.0.20171221.bb
@@ -0,0 +1,31 @@
+require wireguard.inc
+
+inherit module kernel-module-split
+
+DEPENDS = "virtual/kernel libmnl"
+
+# This module requires Linux 3.10 higher and several networking related
+# configuration options. For exact kernel requirements visit:
+# https://www.wireguard.io/install/#kernel-requirements
+
+EXTRA_OEMAKE_append = " \
+ KERNELDIR=${STAGING_KERNEL_DIR} \
+ "
+
+MAKE_TARGETS = "module"
+
+RRECOMMENDS_${PN} = "kernel-module-xt-hashlimit"
+MODULE_NAME = "wireguard"
+
+# Kernel module packages MUST begin with 'kernel-module-', otherwise
+# multilib image generation can fail.
+#
+# The following line is only necessary if the recipe name does not begin
+# with kernel-module-.
+PKG_${PN} = "kernel-module-${MODULE_NAME}"
+
+module_do_install() {
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}
+ install -m 0644 ${MODULE_NAME}.ko \
+ ${D}/lib/modules/${KERNEL_VERSION}/kernel/${MODULE_NAME}/${MODULE_NAME}.ko
+}
diff --git a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_0.0.20171221.bb b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_0.0.20171221.bb
new file mode 100644
index 000000000..c4ddbcb0e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard-tools_0.0.20171221.bb
@@ -0,0 +1,27 @@
+require wireguard.inc
+
+inherit bash-completion systemd pkgconfig
+
+DEPENDS = "wireguard-module libmnl"
+
+do_compile_prepend () {
+ cd ${S}/tools
+}
+
+do_install () {
+ cd ${S}/tools
+ oe_runmake DESTDIR="${D}" PREFIX="${prefix}" SYSCONFDIR="${sysconfdir}" \
+ SYSTEMDUNITDIR="${systemd_unitdir}" \
+ WITH_SYSTEMDUNITS=${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'yes', '', d)} \
+ WITH_BASHCOMPLETION=yes \
+ WITH_WGQUICK=yes \
+ install
+}
+
+FILES_${PN} = " \
+ ${sysconfdir} \
+ ${systemd_unitdir} \
+ ${bindir} \
+"
+
+RDEPENDS_${PN} = "wireguard-module bash"
diff --git a/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard.inc b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard.inc
new file mode 100644
index 000000000..6bd581a68
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-kernel/wireguard/wireguard.inc
@@ -0,0 +1,17 @@
+SUMMARY = "WireGuard is an extremely simple yet fast and modern VPN"
+DESCRIPTION="WireGuard is a secure network tunnel, operating at layer 3, \
+implemented as a kernel virtual network interface for Linux, which aims to \
+replace both IPsec for most use cases, as well as popular user space and/or \
+TLS-based solutions like OpenVPN, while being more secure, more performant, \
+and easier to use."
+SECTION = "networking"
+HOMEPAGE = "https://www.wireguard.io/"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://../COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "https://git.zx2c4.com/WireGuard/snapshot/WireGuard-${PV}.tar.xz"
+SRC_URI[md5sum] = "39bb99fe11356423fb1ab45ae2d938bb"
+SRC_URI[sha256sum] = "2b97697e9b271ba8836a04120a287b824648124f21d5309170ec51c1f86ac5ed"
+
+S = "${WORKDIR}/WireGuard-${PV}/src/"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch
new file mode 100644
index 000000000..8376603ea
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/0001-ftp-include-sys-types.h-for-u_long.patch
@@ -0,0 +1,30 @@
+From 2ee0c51d81a0a08d64b64ab624074e5f7cd9615a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 15 Jul 2017 00:07:32 -0700
+Subject: [PATCH] ftp: include sys/types.h for u_long
+
+fixes
+ftp.c:1091:2: error: unknown type name 'u_long'; did you mean 'long'?
+ u_long a1,a2,a3,a4,p1,p2;
+ ^~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ ftp/ftp.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/ftp/ftp.c b/ftp/ftp.c
+index 7a56af6..5dcb513 100644
+--- a/ftp/ftp.c
++++ b/ftp/ftp.c
+@@ -43,6 +43,7 @@ char ftp_rcsid[] =
+ #include <sys/socket.h>
+ #include <sys/time.h>
+ #include <sys/file.h>
++#include <sys/types.h>
+
+ #include <netinet/in.h>
+ #include <netinet/ip.h>
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch
new file mode 100644
index 000000000..5a47fd917
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp/Add_ARG_MAX_define.patch
@@ -0,0 +1,28 @@
+This adds ARG_MAX define to be _SC_ARG_MAX
+
+Upstream-Status: Inappropriate.
+Most distros have their own verion for this fix.
+
+Signed-off-by: Armin Kuster <akuster808@gmail.com>
+
+Index: netkit-ftp-0.17/ftp/glob.c
+===================================================================
+--- netkit-ftp-0.17.orig/ftp/glob.c
++++ netkit-ftp-0.17/ftp/glob.c
+@@ -50,6 +50,7 @@ char glob_rcsid[] =
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <unistd.h>
+
+ #include "ftp_var.h" /* for protos only */
+ #include "glob.h"
+@@ -57,6 +58,9 @@ char glob_rcsid[] =
+ #define QUOTE 0200
+ #define TRIM 0177
+ #define eq(a,b) (strcmp(a, b)==0)
++#ifndef ARG_MAX
++#define ARG_MAX (sysconf(_SC_ARG_MAX))
++#endif
+ #define GAVSIZ (ARG_MAX/6)
+ #define isdir(d) ((d.st_mode & S_IFMT) == S_IFDIR)
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb
new file mode 100644
index 000000000..394a69e62
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-ftp/netkit-ftp_0.17.bb
@@ -0,0 +1,47 @@
+DESCRIPTION = "netkit-ft includes the ftp client."
+SECTION = "net"
+HOMEPAGE="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
+LICENSE = "BSD"
+
+LIC_FILES_CHKSUM = "file://ftp/ftp.c;beginline=2;endline=3;md5=2d40a75a50d83b8f6317b3f53db72bfa"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/n/netkit-ftp/netkit-ftp_${PV}.orig.tar.gz;name=archive \
+ ${DEBIAN_MIRROR}/main/n/netkit-ftp/netkit-ftp_${PV}-31.debian.tar.xz;name=patch31 \
+ file://Add_ARG_MAX_define.patch \
+ file://0001-ftp-include-sys-types.h-for-u_long.patch \
+ "
+
+SRC_URI[archive.md5sum] = "94441610c9b86ef45c4c6ec609444060"
+SRC_URI[archive.sha256sum] = "61c913299b81a4671ff089aac821329f7db9bc111aa812993dd585798b700349"
+SRC_URI[patch31.md5sum] = "93d71e28ce70df69e080c7f90da63cac"
+SRC_URI[patch31.sha256sum] = "4edd46a32d70daa7ba00f0ebf0118dc5d17dff23d6e46aa21a2722be2e22d1c1"
+
+inherit autotools-brokensep
+
+do_configure () {
+ ./configure --prefix=${prefix}
+ echo "LDFLAGS=${LDFLAGS}" >> MCONFIG
+}
+
+BINMODE = "0755"
+MANMODE = "0644"
+
+do_install () {
+ install -d ${D}${bindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man5
+
+ install -m${BINMODE} ${S}/ftp/ftp ${D}${bindir}
+ ln -sf ftp ${D}${bindir}/pftp
+ install -m${MANMODE} ${S}/ftp/ftp.1 ${D}${mandir}/man1
+ ln -sf ftp.1 ${D}${mandir}/man1/pftp.1
+ install -m${MANMODE} ${S}/ftp/netrc.5 ${D}${mandir}/man5
+}
+
+PACKAGES = "${PN} ${PN}-doc ${BPN}-dbg"
+FILES_${PN} = "${bindir}/*"
+FILES_${PN}-doc = "${mandir}"
+FILES_${PN}-dbg = "${prefix}/src/debug \
+ ${bindir}/.debug"
+
+RDEPENDS_${PN} = "readline"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch
new file mode 100644
index 000000000..8bd77d2e4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/0001-rpcgen-Fix-printf-formats.patch
@@ -0,0 +1,51 @@
+From 439e3e35f7fcbff1abb782de4b19b31e43ae3449 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 09:59:19 -0700
+Subject: [PATCH] rpcgen: Fix printf formats
+
+Fixes build with hardening flags
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ rpcgen/rpc_hout.c | 2 +-
+ rpcgen/rpc_tblout.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/rpcgen/rpc_hout.c b/rpcgen/rpc_hout.c
+index 0ef52df..09a7b57 100644
+--- a/rpcgen/rpc_hout.c
++++ b/rpcgen/rpc_hout.c
+@@ -474,7 +474,7 @@ pdeclaration(const char *name, declaration *dec, int tab,
+ break;
+ }
+ }
+- f_print(fout, separator );
++ f_print(fout, "%s", separator );
+ }
+
+ static int
+diff --git a/rpcgen/rpc_tblout.c b/rpcgen/rpc_tblout.c
+index d64bfde..fd62a52 100644
+--- a/rpcgen/rpc_tblout.c
++++ b/rpcgen/rpc_tblout.c
+@@ -99,7 +99,7 @@ write_table(const definition *def)
+ }
+ else {
+ expected = 1;
+- f_print(fout, null_entry);
++ f_print(fout, "%s", null_entry);
+ }
+ for (proc = vp->procs; proc != NULL; proc = proc->next) {
+ current = atoi(proc->proc_num);
+@@ -139,7 +139,7 @@ write_table(const definition *def)
+ }
+
+ /* print the table trailer */
+- f_print(fout, tbl_end);
++ f_print(fout, "%s", tbl_end);
+ f_print(fout, tbl_nproc, progvers, progvers, progvers);
+ }
+ }
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch
new file mode 100644
index 000000000..d54cea9fd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc/gcc4.patch
@@ -0,0 +1,39 @@
+This fixes an issue when building with gcc 4.x
+
+https://github.com/openembedded/openembedded/tree/master/recipes/netkit-rpc/netkit-rpc
+
+Upstream-status: Backported
+
+Signed-off-By: Armin Kuster <akuster808@gmail.com>
+
+--- netkit-rpc-0.17/rpcgen/rpc_cout.c~gcc4
++++ netkit-rpc-0.17/rpcgen/rpc_cout.c
+@@ -101,8 +101,6 @@
+ case DEF_TYPEDEF:
+ emit_typedef(def);
+ break;
+- default:
+- /* can't happen */
+ }
+ print_trailer();
+ }
+@@ -664,9 +662,6 @@
+ decl->name,decl->array_max);
+ emit_single_in_line(decl,flag,REL_VECTOR);
+ f_print(fout,"\t\t }\n\t\t };\n");
+-
+- default:
+- /* ?... do nothing I guess */
+ }
+ }
+
+--- netkit-rpc-0.17/rpcgen/rpc_hout.c~gcc4
++++ netkit-rpc-0.17/rpcgen/rpc_hout.c
+@@ -106,8 +106,6 @@
+ f_print(fout, "\n");
+ pprogramdef(def);
+ break;
+- default:
+- /* ?... shouldn't happen I guess */
+ }
+ }
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb
new file mode 100644
index 000000000..9487fdc2c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rpc/netkit-rpc_0.17.bb
@@ -0,0 +1,44 @@
+DESCRIPTION = "netkit-rpc includes rpcinfo and rpcgen."
+HOMEPAGE = "http://ftp.linux.org.uk/pub/linux/Networking/netkit"
+SECTION = "net"
+LICENSE = "SPL-1.0"
+LIC_FILES_CHKSUM = "file://rpcinfo/rpcinfo.c;beginline=2;endline=3;md5=3e6339e3ce266e1122c5ba293e04bc89"
+
+DEPENDS_append_libc-musl = " libtirpc"
+SRC_URI = "http://sources.openembedded.org/${BPN}-${PV}.tar.gz \
+ file://gcc4.patch \
+ file://0001-rpcgen-Fix-printf-formats.patch \
+ "
+SRC_URI[md5sum] = "67212720482ea1aea9182a98653a9642"
+SRC_URI[sha256sum] = "421d63b414162237a72867061f1bd3e3752a0d962cd5d30b5e933ddad8a14d3b"
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LIBS_append_libc-musl = " -ltirpc"
+
+do_configure () {
+ ./configure --prefix=${prefix}
+ echo "LDFLAGS=${LDFLAGS}" > MCONFIG
+ echo "CC=${CC}" >> MCONFIG
+ echo "LD=${LD}" >> MCONFIG
+ echo "CFLAGS=${CFLAGS}" >> MCONFIG
+ echo "LDFLAGS=${LDFLAGS}" >> MCONFIG
+ echo "LIBS=${LIBS}" >> MCONFIG
+}
+
+do_compile () {
+ oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}'
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man8
+
+ # remove strip flag
+ sed -i 's/install -s/install/' rpcinfo/Makefile
+ sed -i 's/install -s/install/' rpcgen/Makefile
+
+ oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
+ 'DAEMONMODE=0755' 'MANMODE=0644' \
+ 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
+ 'MANDIR=${mandir}' install
+}
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch
new file mode 100644
index 000000000..1d3631d47
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fix-host-variable.patch
@@ -0,0 +1,27 @@
+fix host variable when rsh is renamed to other.
+
+Upstream-Status: Pending
+
+If rsh is renamed to other, like rsh.netkit, host variable is assigned to
+rsh.netkit, which is wrong.
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ rsh/rsh.c | 1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/rsh/rsh.c b/rsh/rsh.c
+index ac594f9..11f533e 100644
+--- a/rsh/rsh.c
++++ b/rsh/rsh.c
+@@ -100,7 +100,6 @@ main(int argc, char *argv[])
+ #else
+ if (!strcmp(p, "rsh")) asrsh = 1;
+ #endif
+- else host = p;
+
+ /* handle "rsh host flags" */
+ if (!host && argc > 2 && argv[1][0] != '-') {
+--
+1.7.5.4
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch
new file mode 100644
index 000000000..cd6df62fb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/fixup_wait3_api_change.patch
@@ -0,0 +1,34 @@
+Fix build issue do to Deprecate union wait and remove support from wait functions [BZ #19613]
+
+| rlogin.c: In function 'catch_child':
+| rlogin.c:463:13: error: storage size of 'status' isn't known
+| union wait status;
+
+https://sourceware.org/ml/libc-alpha/2016-02/msg00342.html
+
+Upstream-Status: Inappropriate [ no upstream maintaner ]
+
+Signed-off-by Armin Kuster <akuster@mvista.com>
+
+Index: netkit-rsh-0.17/rlogin/rlogin.c
+===================================================================
+--- netkit-rsh-0.17.orig/rlogin/rlogin.c
++++ netkit-rsh-0.17/rlogin/rlogin.c
+@@ -460,7 +460,7 @@ writeroob(int ignore)
+ void
+ catch_child(int ignore)
+ {
+- union wait status;
++ int status;
+ int pid;
+
+ (void)ignore;
+@@ -471,7 +471,7 @@ catch_child(int ignore)
+ return;
+ /* if the child (reader) dies, just quit */
+ if (pid < 0 || (pid == childpid && !WIFSTOPPED(status)))
+- done((int)(status.w_termsig | status.w_retcode));
++ done((int)(WTERMSIG(status) | WEXITSTATUS(status)));
+ }
+ /* NOTREACHED */
+ }
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch
new file mode 100644
index 000000000..efd060f36
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/netkit-rsh-0.17-rexec-ipv6.patch
@@ -0,0 +1,30 @@
+make rexec support ipv6
+
+Upstream-status: Pending
+
+rexec equals rexec_af(... ,AF_INET) which only support ipv4,
+use rexec_af(..., AF_UNSPEC) to support both ipv6 and ipv4.
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ rexec/rexec.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/rexec/rexec.c b/rexec/rexec.c
+index 0913c02..9c8f769 100644
+--- a/rexec/rexec.c
++++ b/rexec/rexec.c
+@@ -214,8 +214,8 @@ int main(int argc, char *argv[])
+ passwd = getpass("Password: ");
+ }
+
+- if ( (sock = rexec(&host, port_exec, user_name, passwd, command,
+- p_to_aux_sock)) < 0 )
++ if ( (sock = rexec_af(&host, port_exec, user_name, passwd, command,
++ p_to_aux_sock, AF_UNSPEC)) < 0 )
+ {
+ fprintf(stderr,"%s: Error in rexec system call: ",argv[0]);
+ perror(NULL);
+--
+1.7.4.1
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch
new file mode 100644
index 000000000..fdd535be1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/no_pam_build_fix.patch
@@ -0,0 +1,39 @@
+netkit-rsh:
+Allow to build with no PAM enabled.
+
+Upstream-Status: Inappropriate [ no upstream maintaner ]
+
+Signed-off-by: Armin Kuster <akuster808@gmail.com>
+
+Index: netkit-rsh-0.17/rshd/rshd.c
+===================================================================
+--- netkit-rsh-0.17.orig/rshd/rshd.c
++++ netkit-rsh-0.17/rshd/rshd.c
+@@ -110,9 +110,11 @@ extern char **environ;
+ static void error(const char *fmt, ...);
+ static void doit(struct sockaddr *fromp, socklen_t fromlen);
+ static char *getstr(char *, size_t, const char *);
++#ifdef USE_PAM
+ static int err_conv(
+ int, const struct pam_message **, struct pam_response **, void *
+ );
++#endif /* USE_PAM */
+
+ extern int _check_rhosts_file;
+
+@@ -256,6 +258,7 @@ static void stderr_parent(int sock, int
+ }
+
+
++#ifdef USE_PAM
+ static int err_conv(
+ int num_msg, const struct pam_message **msg,
+ struct pam_response **resp, void *appdata_ptr
+@@ -266,6 +269,7 @@ static int err_conv(
+ (void) appdata_ptr;
+ return PAM_CONV_ERR;
+ }
++#endif
+
+ static struct passwd *doauth(const char *remuser,
+ const char *hostname,
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam
new file mode 100644
index 000000000..94e5dda50
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.pam
@@ -0,0 +1,10 @@
+#%PAM-1.0
+# For root login to succeed here with pam_securetty, "rexec" must be
+# listed in /etc/securetty.
+auth required pam_nologin.so
+auth required pam_env.so
+auth include common-auth
+account include common-account
+session optional pam_keyinit.so force revoke
+session include common-session
+session required pam_loginuid.so
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit
new file mode 100644
index 000000000..7354360ae
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rexec.xinetd.netkit
@@ -0,0 +1,20 @@
+# default: off
+# description:
+# Rexecd is the server for the rexec program. The server provides remote
+# execution facilities with authentication based on user names and
+# passwords.
+#
+service exec
+{
+ socket_type = stream
+ protocol = tcp
+ flags = NAMEINARGS
+ wait = no
+ user = root
+ group = root
+ log_on_success += USERID
+ log_on_failure += USERID
+ server = /usr/sbin/tcpd
+ server_args = /usr/sbin/in.rexecd
+ disable = yes
+}
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam
new file mode 100644
index 000000000..b30f139cb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.pam
@@ -0,0 +1,12 @@
+#%PAM-1.0
+# For root login to succeed here with pam_securetty, "rlogin" must be
+# listed in /etc/securetty.
+auth required pam_nologin.so
+auth required pam_securetty.so
+auth required pam_env.so
+auth include common-auth
+account include common-account
+password include common-password
+session optional pam_keyinit.so force revoke
+session include common-session
+session required pam_loginuid.so
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit
new file mode 100644
index 000000000..70493e603
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rlogin.xinetd.netkit
@@ -0,0 +1,23 @@
+# default: off
+# description:
+# Rlogind is a server for the rlogin program. The server provides remote
+# execution with authentication based on privileged port numbers from trusted
+# host
+#
+service login
+{
+ socket_type = stream
+ protocol = tcp
+ flags = NAMEINARGS
+ wait = no
+ user = root
+ group = root
+ log_on_success += USERID
+ log_on_failure += USERID
+ server = /usr/sbin/tcpd
+ server_args = /usr/sbin/in.rlogind -a
+ disable = yes
+}
+
+
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch
new file mode 100644
index 000000000..c12ee9b46
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh-redone_link_order_file.patch
@@ -0,0 +1,77 @@
+This fixes a build issue caused by linking order.
+
+Upstream-Status: Inappropriate
+Most distos have there own verison of this fix. This was derived by
+* Fix link order to list libraries after the objects that require them
+(LP: #771080).
+
+-- Colin Watson <cjwatson@ubuntu.com> Tue, 13 Sep 2011 10:07:08 +0100
+
+
+signed-off-by: Armin Kuster <akuster808@gmail.com>
+
+Index: netkit-rsh-0.17/rsh/Makefile
+===================================================================
+--- netkit-rsh-0.17.orig/rsh/Makefile
++++ netkit-rsh-0.17/rsh/Makefile
+@@ -6,7 +6,7 @@ include ../MRULES
+ OBJS = rsh.o
+
+ rsh: $(OBJS)
+- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
++ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
+
+ install: rsh
+ install -o root -m$(SUIDMODE) rsh $(INSTALLROOT)$(BINDIR)
+Index: netkit-rsh-0.17/rshd/Makefile
+===================================================================
+--- netkit-rsh-0.17.orig/rshd/Makefile
++++ netkit-rsh-0.17/rshd/Makefile
+@@ -11,7 +11,7 @@ LIBS += -ldl -lpam
+ endif
+
+ rshd: $(OBJS)
+- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
++ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
+
+ install: rshd
+ install -m$(DAEMONMODE) rshd $(INSTALLROOT)$(SBINDIR)/in.rshd
+Index: netkit-rsh-0.17/rlogin/Makefile
+===================================================================
+--- netkit-rsh-0.17.orig/rlogin/Makefile
++++ netkit-rsh-0.17/rlogin/Makefile
+@@ -7,7 +7,7 @@ PROG=rlogin
+ OBJS=rlogin.o
+
+ $(PROG): $(OBJS)
+- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
++ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
+
+ install: $(PROG)
+ install -o root -m$(SUIDMODE) $(PROG) $(INSTALLROOT)$(BINDIR)
+Index: netkit-rsh-0.17/rlogind/Makefile
+===================================================================
+--- netkit-rsh-0.17.orig/rlogind/Makefile
++++ netkit-rsh-0.17/rlogind/Makefile
+@@ -13,7 +13,7 @@ LIBS += -ldl -lpam -lpam_misc
+ endif
+
+ rlogind: $(OBJS)
+- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
++ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
+
+ rlogind.o: pathnames.h logwtmp.h rlogind.h ../version.h
+ logwtmp.o: logwtmp.h
+Index: netkit-rsh-0.17/rexecd/Makefile
+===================================================================
+--- netkit-rsh-0.17.orig/rexecd/Makefile
++++ netkit-rsh-0.17/rexecd/Makefile
+@@ -24,7 +24,7 @@ endif
+ CFLAGS += -DRESTRICT_FTP=1
+
+ rexecd: rexecd.o
+- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
++ $(CC) $^ -o $@ $(LDFLAGS) $(LIBS)
+
+ install: rexecd
+ install -m$(DAEMONMODE) rexecd $(INSTALLROOT)$(SBINDIR)/in.rexecd
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam
new file mode 100644
index 000000000..072327a76
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.pam
@@ -0,0 +1,10 @@
+#%PAM-1.0
+# For root login to succeed here with pam_securetty, "rsh" must be
+# listed in /etc/securetty.
+auth required pam_nologin.so
+auth required pam_securetty.so
+auth required pam_env.so
+account include common-account
+session optional pam_keyinit.so force revoke
+session include common-session
+session required pam_loginuid.so
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit
new file mode 100644
index 000000000..a842eb974
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh/rsh.xinetd.netkit
@@ -0,0 +1,21 @@
+# default: off
+# description:
+# The rshd server is a server for the rcmd(3) routine and,
+# consequently, for the rsh(1) program. The server provides
+# remote execution facilities with authentication based on
+# privileged port numbers from trusted hosts.
+#
+service shell
+{
+ socket_type = stream
+ protocol = tcp
+ flags = NAMEINARGS
+ wait = no
+ user = root
+ group = root
+ log_on_success += USERID
+ log_on_failure += USERID
+ server = /usr/sbin/tcpd
+ server_args = /usr/sbin/in.rshd -aL
+ disable = yes
+}
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb
new file mode 100644
index 000000000..3990f7b52
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rsh/netkit-rsh_0.17.bb
@@ -0,0 +1,102 @@
+DESCRIPTION = "netkit-rsh includes the rsh daemon and client."
+SECTION = "net"
+HOMEPAGE="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
+LICENSE = "BSD-4-Clause"
+DEPENDS = "xinetd libgcrypt"
+
+LIC_FILES_CHKSUM = "file://rsh/rsh.c;endline=32;md5=487b3c637bdc181d32b2a8543d41b606"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/n/netkit-rsh/netkit-rsh_${PV}.orig.tar.gz;name=archive \
+ ${DEBIAN_MIRROR}/main/n/netkit-rsh/netkit-rsh_${PV}-15.diff.gz;name=patch15 \
+ file://rsh-redone_link_order_file.patch \
+ file://no_pam_build_fix.patch \
+ file://rexec.xinetd.netkit \
+ file://rlogin.xinetd.netkit \
+ file://rsh.xinetd.netkit \
+ file://netkit-rsh-0.17-rexec-ipv6.patch \
+ file://fix-host-variable.patch \
+ file://fixup_wait3_api_change.patch \
+"
+
+SRC_URI[archive.md5sum] = "65f5f28e2fe22d9ad8b17bb9a10df096"
+SRC_URI[archive.sha256sum] = "edcac7fa18015f0bc04e573f3f54ae3b638d71335df1ad7dae692779914ad669"
+SRC_URI[patch15.md5sum] = "655efc0d541b03ca5de0ae506c805ea3"
+SRC_URI[patch15.sha256sum] = "2bc071c438e8b0ed42a0bd2db2d8b681b27a1e9b1798694d9874733293bc2aa9"
+
+# Other support files
+PAM_SRC_URI = "file://rexec.pam \
+ file://rlogin.pam \
+ file://rsh.pam \
+"
+SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', '${PAM_SRC_URI}', '', d)}"
+
+inherit pkgconfig
+
+CFLAGS += " -D_GNU_SOURCE -Wno-deprecated-declarations"
+LDFLAGS += " -L${STAGING_LIBDIR} -lutil -lcrypt"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG[pam] = " , --without-pam, libpam, libpam"
+
+do_configure () {
+ ./configure --prefix=${prefix} --exec-prefix=${exec_prefix}
+ echo "INSTALLROOT=${D}" > MCONFIG
+
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
+ echo "USE_PAM=1" >> MCONFIG
+ fi
+
+ # didn't want to patch these next changes
+ sed -i 's/netkit-//' ${S}/rsh/pathnames.h
+ sed -i 's/netkit-//' ${S}/rcp/pathnames.h
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man8
+ install -d ${D}${sysconfdir}/xinetd.d
+
+ oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
+ 'DAEMONMODE=0755' 'MANMODE=0644' \
+ 'SUIDMODE=4755' \
+ 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
+ 'MANDIR=${mandir}' install
+
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'pam', d)}" ]; then
+ install -d ${D}${sysconfdir}/pam.d
+ install -m 0644 debian/hosts.equiv ${D}/${sysconfdir}
+ install -m 0644 ${WORKDIR}/rexec.pam ${D}/${sysconfdir}/pam.d/rexec
+ install -m 0644 ${WORKDIR}/rlogin.pam ${D}/${sysconfdir}/pam.d/rlogin
+ install -m 0644 ${WORKDIR}/rsh.pam ${D}/${sysconfdir}/pam.d/rsh
+ fi
+ cp ${WORKDIR}/rexec.xinetd.netkit ${D}/${sysconfdir}/xinetd.d/rexec
+ cp ${WORKDIR}/rlogin.xinetd.netkit ${D}/${sysconfdir}/xinetd.d/rlogin
+ cp ${WORKDIR}/rsh.xinetd.netkit ${D}/${sysconfdir}/xinetd.d/rsh
+}
+
+PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
+
+FILES_${PN}-client = "${bindir}/*"
+FILES_${PN}-server = "${sbindir}/* ${sysconfdir}"
+FILES_${PN}-doc = "${mandir}"
+FILES_${PN}-dbg = "${prefix}/src/debug \
+ ${sbindir}/.debug ${bindir}/.debug"
+
+ALTERNATIVE_PRIORITY = "80"
+ALTERNATIVE_${PN}-client = "rcp rexec rlogin rsh"
+ALTERNATIVE_${PN}-server = "rshd rexecd rlogind"
+ALTERNATIVE_LINK_NAME[server] = "${bindir}/rshd"
+ALTERNATIVE_TARGET[rshd] = "${sbindir}/in.rshd"
+ALTERNATIVE_LINK_NAME[rexecd] = "${bindir}/rexecd"
+ALTERNATIVE_TARGET[rexecd] = "${sbindir}/in.rexecd"
+ALTERNATIVE_LINK_NAME[rlogind] = "${bindir}/rlogind"
+ALTERNATIVE_TARGET[rlogind] = "${sbindir}/in.rlogind"
+
+RCONFLICTS_${PN}-server += "inetutils-rshd"
+RPROVIDES_${PN}-server = "rshd"
+
+RDEPENDS_${PN}-server = "xinetd"
+RDEPENDS_${PN}-server += "tcp-wrappers"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch
new file mode 100644
index 000000000..d85178d71
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers/rpc.rusersd-Makefile-fix-parallel-build-issue.patch
@@ -0,0 +1,30 @@
+From c23cc112a480f90950de5cf1de09b1a7e732bf21 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Mon, 15 Dec 2014 18:31:13 -0800
+Subject: [PATCH] rpc.rusersd/Makefile: fix parallel build issue
+
+Fixed:
+rusers.x: No such file or directory
+Makefile:44: recipe for target 'rusers_xdr.c' failed
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ rpc.rusersd/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/rpc.rusersd/Makefile b/rpc.rusersd/Makefile
+index 792f528..65a424a 100644
+--- a/rpc.rusersd/Makefile
++++ b/rpc.rusersd/Makefile
+@@ -40,5 +40,5 @@ rusers.x:
+ rusers.h: $(RUSERSX) rusers.x
+ $(RPCGEN) -h -o rusers.h rusers.x
+
+-rusers_xdr.c: $(RUSERSX)
++rusers_xdr.c: $(RUSERSX) rusers.x
+ $(RPCGEN) -c -C -o rusers_xdr.c rusers.x
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb
new file mode 100644
index 000000000..459e39e59
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rusers/netkit-rusers_0.17.bb
@@ -0,0 +1,70 @@
+DESCRIPTION = "netkit-rusers includes rusers - Displays who is logged in to machines on local network \
+ rusersd - Logged in users server"
+HOMEPAGE = "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
+SECTION = "net"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://rusers/rusers.c;beginline=2;endline=3;md5=f4fc634a4ce8c569911196b72b10770e"
+DEPENDS = " tcp-wrappers libtirpc rpcbind"
+
+SRC_URI = "http://http.debian.net/debian/pool/main/n/${BPN}/${BPN}_${PV}.orig.tar.gz;name=archive \
+ http://http.debian.net/debian/pool/main/n/${BPN}/${BPN}_${PV}-8.diff.gz;name=patch8 \
+ file://rpc.rusersd-Makefile-fix-parallel-build-issue.patch \
+"
+
+SRC_URI[archive.md5sum] = "dc99a80b9fde2ab427c874f88f1c1602"
+SRC_URI[archive.sha256sum] = "f00138651865ad2dcfec5dedda0cda403cb80c4ab68efcc3bbccafe198c24b6d"
+SRC_URI[patch8.md5sum] = "1ff498113e0f920d92088092e5570bdc"
+SRC_URI[patch8.sha256sum] = "14882dbdda4e37baa84d55b54b46c7e063a20fc9e04d1be1a2807643cd0f3067"
+
+inherit autotools-brokensep
+
+do_configure () {
+ ./configure --prefix=${prefix}
+ echo "LDFLAGS=${LDFLAGS}" >> MCONFIG
+ echo "USE_GLIBC=1" >> MCONFIG
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man8
+ install -d ${D}${sysconfdir}/xinetd.d
+
+ sed -i 's/install -s/install/' rusers/Makefile
+ sed -i 's/install -s/install/' rup/Makefile
+ sed -i 's/install -s/install/' rpc.rusersd/Makefile
+
+ oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
+ 'DAEMONMODE=0755' 'MANMODE=0644' \
+ 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
+ 'MANDIR=${mandir}' install
+
+ # create the xinetd config file
+ cat >rusersd.conf <<EOF
+ service rusersd
+ {
+ disable = yes
+ type = RPC
+ rpc_version = 1-2
+ socket_type = dgram
+ protocol = udp
+ wait = yes
+ user = root
+ server = ${sbindir}/rpc.rusersd
+ }
+EOF
+ install rusersd.conf ${D}/${sysconfdir}/xinetd.d/rusersd
+}
+
+
+INSANE_SKIP_${PN} = "already-stripped"
+
+PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
+FILES_${PN}-client = "${bindir}/*"
+FILES_${PN}-server = "${sbindir}/* ${sysconfdir}"
+FILES_${PN}-doc = "${mandir}"
+FILES_${PN}-dbg = "${prefix}/src/debug \
+ ${bindir}/.debug ${sbindir}/.debug"
+
+RDEPENDS_${PN}-server = "tcp-wrappers xinetd rpcbind"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch
new file mode 100644
index 000000000..b1325b317
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0001-Add-missing-include-path-to-I-options.patch
@@ -0,0 +1,46 @@
+From 55ab6f1389261edff5f4c942bc3b0d8e695856d7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 30 Aug 2017 18:11:33 -0700
+Subject: [PATCH 1/2] Add missing include path to -I options
+
+Fixes errors like
+| rwho.c:52:10: fatal error: 'protocols/rwhod.h' file not found
+| #include <protocols/rwhod.h>
+| ^~~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ rwho/Makefile | 1 +
+ rwhod/Makefile | 2 ++
+ 2 files changed, 3 insertions(+)
+
+diff --git a/rwho/Makefile b/rwho/Makefile
+index 6f86388..67b28d4 100644
+--- a/rwho/Makefile
++++ b/rwho/Makefile
+@@ -6,6 +6,7 @@ include ../MRULES
+ rwho: rwho.o
+ $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
+
++CFLAGS += -I../include
+ rwho.o: ../version.h
+
+ install: rwho
+diff --git a/rwhod/Makefile b/rwhod/Makefile
+index 772b641..9034218 100644
+--- a/rwhod/Makefile
++++ b/rwhod/Makefile
+@@ -7,6 +7,8 @@ ifneq ($(USE_GLIBC),1)
+ CFLAGS += -D_GNU_SOURCE
+ endif
+
++CFLAGS += -I../include
++
+ OBJS = rwhod.o
+
+ rwhod: $(OBJS)
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch
new file mode 100644
index 000000000..717b4d73f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/0002-Fix-build-issues-found-with-musl.patch
@@ -0,0 +1,71 @@
+From 2108213242638fa355f662382f55495d91301858 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 30 Aug 2017 18:13:17 -0700
+Subject: [PATCH 2/2] Fix build issues found with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ ruptime/ruptime.c | 1 +
+ rwho/rwho.c | 1 +
+ rwhod/rwhod.c | 5 +++--
+ 3 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/ruptime/ruptime.c b/ruptime/ruptime.c
+index 1d4f7b6..f1f043c 100644
+--- a/ruptime/ruptime.c
++++ b/ruptime/ruptime.c
+@@ -53,6 +53,7 @@ char ruptime_rcsid[] =
+ #include <string.h>
+ #include <errno.h>
+ #include <time.h>
++#include <fcntl.h>
+
+ struct hs {
+ char hs_hostname[MAXHOSTNAMELEN];
+diff --git a/rwho/rwho.c b/rwho/rwho.c
+index 63919ac..71aec9e 100644
+--- a/rwho/rwho.c
++++ b/rwho/rwho.c
+@@ -49,6 +49,7 @@ char rcsid[] = "$Id: rwho.c,v 1.7 1999/08/01 20:44:18 dholland Exp $";
+ #include <assert.h>
+ #include <stdio.h>
+ #include <time.h>
++#include <fcntl.h>
+ #include <protocols/rwhod.h>
+
+ #include "../version.h"
+diff --git a/rwhod/rwhod.c b/rwhod/rwhod.c
+index 54498d0..40cabcf 100644
+--- a/rwhod/rwhod.c
++++ b/rwhod/rwhod.c
+@@ -76,6 +76,7 @@ char rcsid[] =
+ #include <grp.h>
+ #include <time.h>
+ #include <stdint.h>
++#include <fcntl.h>
+
+ #include "../version.h"
+
+@@ -102,7 +103,7 @@ struct nlist nl[] = {
+ static void broadcaster(void);
+ static int configure(int s);
+ static int verify(const char *name);
+-#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2)
++#if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2))
+ static int getloadavg(double ptr[3], int n);
+ #endif
+
+@@ -549,7 +550,7 @@ sendpacket(struct whod *wd)
+ }
+ }
+
+-#if __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2)
++#if defined(__GLIBC__) && (__GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 2))
+ /*
+ * Taken from:
+ *
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod
new file mode 100755
index 000000000..f6419032e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod
@@ -0,0 +1,71 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: rwhod
+# Required-Start: $network $remote_fs $syslog
+# Required-Stop: $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Server for rwho and ruptime services
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin
+
+DAEMON=/usr/sbin/rwhod
+PIDFILE=/var/run/rwhod.pid
+CONF_FILE="/etc/default/rwhod"
+DESC="Who daemon "
+# default options. Change them in /etc/default/rwhod
+RWHOD_OPTIONS="-b"
+
+# rwhod init.d script for ntpdc from ntp.isc.org
+test -f $DAEMON || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+[ -r $CONF_FILE ] && . $CONF_FILE
+
+startdaemon(){
+ echo -n "Starting $DESC" " rwhod "
+ start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON -- $RWHOD_OPTIONS
+ echo "done"
+}
+stopdaemon(){
+ echo -n "Stopping $DESC" " rwhod "
+ start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
+ echo "done"
+}
+
+case "$1" in
+ start)
+ startdaemon
+ ;;
+ stop)
+ stopdaemon
+ ;;
+ force-reload)
+ stopdaemon
+ startdaemon
+ ;;
+ restart)
+ stopdaemon
+ sleep 1
+ startdaemon
+ ;;
+ reload)
+ stopdaemon
+ sleep 1
+ startdaemon
+ ;;
+ status)
+ status /usr/sbin/rwhod;
+ exit $?
+ ;;
+ *)
+ echo "Usage: rwhod { start | stop | status | restart | reload }" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default
new file mode 100644
index 000000000..62d3a942d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho/rwhod.default
@@ -0,0 +1,2 @@
+#Options for the rwhod daemon.
+RWHOD_OPTIONS="-b"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb
new file mode 100644
index 000000000..5685f03d6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-rwho/netkit-rwho_0.17.bb
@@ -0,0 +1,85 @@
+DESCRIPTION = "netkit-rwho includes, ruptime rwho and rwhod (Daemon to maintain data for rwho/ruptime)"
+HOMEPAGE = "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
+SECTION = "net"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://rwho/rwho.c;beginline=2;endline=3;md5=5a85f13c0142d72fc378e00f15da5b9e"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/n/netkit-rwho/netkit-rwho_${PV}.orig.tar.gz;name=archive \
+ ${DEBIAN_MIRROR}/main/n/netkit-rwho/netkit-rwho_${PV}-13.debian.tar.gz;name=patch13 \
+ file://rwhod \
+ file://rwhod.default \
+ file://0001-Add-missing-include-path-to-I-options.patch \
+ file://0002-Fix-build-issues-found-with-musl.patch \
+ "
+SRC_URI[archive.md5sum] = "0f71620d45d472f89134ba0d74242e75"
+SRC_URI[archive.sha256sum] = "0409e2ce4bfdb2dacb2c193d0fedfc49bb975cb057c5c6b0ffcca603a1188da7"
+SRC_URI[patch13.md5sum] = "82ed5a3c6b0bbf00b36508b9787963b9"
+SRC_URI[patch13.sha256sum] = "53aefa27d98b565bf756db57120c03bd224a238e45699d92076420272a6eba8e"
+
+inherit autotools-brokensep useradd update-rc.d update-alternatives
+
+CFLAGS += " -D_GNU_SOURCE"
+
+debian_do_patch() {
+ cd ${S}
+ while read line; do patch -p1 < ${WORKDIR}/debian/patches/$line; done < ${WORKDIR}/debian/patches/series
+}
+
+python do_patch() {
+ bb.build.exec_func('debian_do_patch', d)
+ bb.build.exec_func('patch_do_patch', d)
+}
+
+do_configure () {
+ ./configure --prefix=${prefix}
+ echo "LDFLAGS=${LDFLAGS}" >> MCONFIG
+}
+
+do_install () {
+ # rwho & ruptime
+ install -d ${D}${bindir}
+ install -d ${D}${mandir}/man1
+ #rwhod
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man8
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/default
+ sed -i 's/install -s/install/' rwho/Makefile
+ sed -i 's/install -s/install/' ruptime/Makefile
+ sed -i 's/install -s/install/' rwhod/Makefile
+ oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
+ 'DAEMONMODE=0755' 'MANMODE=0644' \
+ 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
+ 'MANDIR=${mandir}' install
+
+ install -m 0644 ${WORKDIR}/rwhod.default ${D}${sysconfdir}/default/rwhod
+ install -m 755 ${WORKDIR}/rwhod ${D}${sysconfdir}/init.d
+
+ mkdir -p -m 755 ${D}${localstatedir}/spool/rwho
+ chown -R rwhod ${D}${localstatedir}/spool/rwho
+}
+
+pkg_postinst_${PN}-server() {
+ ${sysconfdir}/init.d/rwhod start
+}
+
+pkg_postrm_${PN}-server() {
+ ${sysconfdir}/init.d/rwhod stop
+}
+
+INITSCRIPT_NAME = "rwhod"
+INITSCRIPT_PARAM = "defaults 85 15"
+
+USERADD_PACKAGES = "${PN}-server"
+GROUPADD_PARAM_${PN}-server = "--system rwhod"
+USERADD_PARAM_${PN}-server = "--system -g rwhod --home-dir ${localstatedir}/spool/rwho \
+ --no-create-home --shell /bin/false rwhod"
+
+INSANE_SKIP_${PN} = "already-stripped"
+
+PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
+FILES_${PN}-client = "${bindir}/*"
+FILES_${PN}-server = "${sbindir}/* ${localstatedir} ${sysconfdir}/default/* ${sysconfdir}/init.d/*"
+FILES_${PN}-doc = "${mandir}"
+FILES_${PN}-dbg = "${prefix}/src/debug \
+ ${bindir}/.debug ${sbindir}/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch
new file mode 100644
index 000000000..f2f1b12e2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/0001-telnet-telnetd-Fix-print-format-strings.patch
@@ -0,0 +1,66 @@
+From 7a3095d1e9b7c73f9dca56250f433bcfc7cb660e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 10:15:34 -0700
+Subject: [PATCH] telnet/telnetd: Fix print format strings
+
+Fixes build with hardening flags
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ telnet/utilities.cc | 6 +++---
+ telnetd/utility.c | 6 +++---
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/telnet/utilities.cc b/telnet/utilities.cc
+index 66839ab..36f0731 100644
+--- a/telnet/utilities.cc
++++ b/telnet/utilities.cc
+@@ -583,17 +583,17 @@ void printsub(int direction, unsigned char *pointer, int length) {
+ case ENV_VAR:
+ if (pointer[1] == TELQUAL_SEND)
+ goto def_case;
+- fprintf(NetTrace, "\" VAR " + noquote);
++ fprintf(NetTrace, "%s", "\" VAR " + noquote);
+ noquote = 2;
+ break;
+
+ case ENV_VALUE:
+- fprintf(NetTrace, "\" VALUE " + noquote);
++ fprintf(NetTrace, "%s", "\" VALUE " + noquote);
+ noquote = 2;
+ break;
+
+ case ENV_ESC:
+- fprintf(NetTrace, "\" ESC " + noquote);
++ fprintf(NetTrace, "%s", "\" ESC " + noquote);
+ noquote = 2;
+ break;
+
+diff --git a/telnetd/utility.c b/telnetd/utility.c
+index 29b7da1..75314cb 100644
+--- a/telnetd/utility.c
++++ b/telnetd/utility.c
+@@ -909,17 +909,17 @@ printsub(char direction, unsigned char *pointer, int length)
+ case ENV_VAR:
+ if (pointer[1] == TELQUAL_SEND)
+ goto def_case;
+- netoprintf("\" VAR " + noquote);
++ netoprintf("%s", "\" VAR " + noquote);
+ noquote = 2;
+ break;
+
+ case ENV_VALUE:
+- netoprintf("\" VALUE " + noquote);
++ netoprintf("%s", "\" VALUE " + noquote);
+ noquote = 2;
+ break;
+
+ case ENV_ESC:
+- netoprintf("\" ESC " + noquote);
++ netoprintf("%s", "\" ESC " + noquote);
+ noquote = 2;
+ break;
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch
new file mode 100644
index 000000000..7fff8cffc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/To-aviod-buffer-overflow-in-telnet.patch
@@ -0,0 +1,1217 @@
+From f09a6460a62aacb87bb8683d16aa3ce55848bf7e Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 28 Nov 2014 07:06:24 +0900
+Subject: [PATCH 1/2] To aviod buffer overflow in telnet
+
+This patch is from Fedora.
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ telnet/Makefile | 4 +-
+ telnet/commands.cc | 270 +++++++++++++++++++++++++++++++++++-----------------
+ telnet/defines.h | 2 +
+ telnet/externs.h | 7 +-
+ telnet/main.cc | 65 ++++++++++---
+ telnet/netlink.cc | 78 +++++++++------
+ telnet/netlink.h | 7 +-
+ telnet/network.cc | 1 +
+ telnet/proto.h | 2 +-
+ telnet/ring.cc | 2 +-
+ telnet/ring.h | 2 +-
+ telnet/sys_bsd.cc | 11 +++
+ telnet/telnet.1 | 37 +++++--
+ telnet/telnet.cc | 45 +++++----
+ telnet/terminal.cc | 17 +++-
+ telnet/utilities.cc | 2 +
+ 16 files changed, 380 insertions(+), 172 deletions(-)
+
+diff --git a/telnet/Makefile b/telnet/Makefile
+index cef866f..39249e1 100644
+--- a/telnet/Makefile
++++ b/telnet/Makefile
+@@ -7,7 +7,7 @@ include ../MRULES
+
+ # -DAUTHENTICATE
+ CXXFLAGS += -DUSE_TERMIO -DKLUDGELINEMODE
+-LIBS += $(LIBTERMCAP)
++LIBS = $(LIBTERMCAP)
+
+ SRCS = commands.cc main.cc network.cc ring.cc sys_bsd.cc telnet.cc \
+ terminal.cc tn3270.cc utilities.cc genget.cc environ.cc netlink.cc
+@@ -22,7 +22,7 @@ depend:
+ $(CXX) $(CXXFLAGS) -MM $(SRCS) >depend.mk
+
+ install: telnet
+- install -s -m$(BINMODE) telnet $(INSTALLROOT)$(BINDIR)
++ install -m$(BINMODE) telnet $(INSTALLROOT)$(BINDIR)
+ install -m$(MANMODE) telnet.1 $(INSTALLROOT)$(MANDIR)/man1
+
+ clean:
+diff --git a/telnet/commands.cc b/telnet/commands.cc
+index d92bccd..02c593e 100644
+--- a/telnet/commands.cc
++++ b/telnet/commands.cc
+@@ -86,10 +86,6 @@ char cmd_rcsid[] =
+
+ #define HELPINDENT ((int) sizeof ("connect"))
+
+-#ifndef MAXHOSTNAMELEN
+-#define MAXHOSTNAMELEN 64
+-#endif MAXHOSTNAMELEN
+-
+ #if defined(HAS_IPPROTO_IP) && defined(IP_TOS)
+ int tos = -1;
+ #endif /* defined(HAS_IPPROTO_IP) && defined(IP_TOS) */
+@@ -98,7 +94,7 @@ static unsigned long sourceroute(char *arg, char **cpp, int *lenp);
+
+
+ char *hostname;
+-static char _hostname[MAXHOSTNAMELEN];
++static char *_hostname;
+
+ //typedef int (*intrtn_t)(int argc, const char *argv[]);
+
+@@ -161,7 +157,7 @@ class command_entry {
+ assert(argc>=1);
+ if (nargs>=0 && argc!=nargs+1) {
+ fprintf(stderr, "Wrong number of arguments for command.\n");
+- fprintf(stderr, "Try %s ? for help\n", argv[0]);
++ fprintf(stderr, "Try ? %s for help\n", argv[0]);
+ return 0; /* is this right? */
+ }
+ if (nargs==-2) {
+@@ -480,6 +476,7 @@ static int send_wontcmd(const char *name, const char *) {
+ int send_tncmd(int (*func)(int, int), const char *cmd, const char *name) {
+ char **cpp;
+ extern char *telopts[];
++ long opt;
+
+ if (isprefix(name, "help") || isprefix(name, "?")) {
+ register int col, len;
+@@ -506,16 +503,23 @@ int send_tncmd(int (*func)(int, int), const char *cmd, const char *name) {
+ name, cmd);
+ return 0;
+ }
++
++ opt = cpp - telopts;
+ if (cpp == 0) {
+- fprintf(stderr, "'%s': unknown argument ('send %s ?' for help).\n",
++ char *end;
++
++ opt = strtol(name, &end, 10);
++ if (*end || opt < 0 || opt > 255) {
++ fprintf(stderr, "'%s': unknown argument ('send %s ?' for help).\n",
+ name, cmd);
+- return 0;
++ return 0;
++ }
+ }
+ if (!connected) {
+ printf("?Need to be connected first.\n");
+ return 0;
+ }
+- (*func)(cpp - telopts, 1);
++ (*func)(opt, 1);
+ return 1;
+ }
+
+@@ -689,9 +693,9 @@ static struct togglelist Togglelist[] = {
+ "print encryption debugging information" },
+ #endif
+
+- { "skiprc", "don't read ~/.telnetrc file",
++ { "skiprc", "don't read the telnetrc files",
+ NULL, &skiprc,
+- "read ~/.telnetrc file" },
++ "read the telnetrc files" },
+ { "binary",
+ "sending and receiving of binary data",
+ togbinary, NULL,
+@@ -1615,15 +1619,20 @@ void ayt_status(int) {
+ #endif
+
+ int tn(int argc, const char *argv[]) {
+- register struct hostent *host = 0;
+ struct sockaddr_in sn;
+- struct servent *sp = 0;
+ char *srp = NULL;
+ int srlen;
+-
+- const char *cmd, *volatile user = 0;
++ int family = 0;
++ const char *cmd, *volatile user = 0, *srchostp = 0;
+ const char *portp = NULL;
+ char *hostp = NULL;
++ char *resolv_hostp;
++ struct addrinfo hints;
++ struct addrinfo *hostaddr = 0;
++ int res;
++ char name[NI_MAXHOST];
++ char service[NI_MAXSERV];
++ struct addrinfo *tmpaddr;
+
+ /* clear the socket address prior to use */
+ memset(&sn, 0, sizeof(sn));
+@@ -1632,6 +1641,10 @@ int tn(int argc, const char *argv[]) {
+ printf("?Already connected to %s\n", hostname);
+ return 0;
+ }
++ if (_hostname) {
++ delete[] _hostname;
++ _hostname = 0;
++ }
+ if (argc < 2) {
+ (void) strcpy(line, "open ");
+ printf("(to) ");
+@@ -1657,11 +1670,33 @@ int tn(int argc, const char *argv[]) {
+ --argc;
+ continue;
+ }
++ if (strcmp(*argv, "-b") == 0) {
++ --argc; ++argv;
++ if (argc == 0)
++ goto usage;
++ srchostp = *argv++;
++ --argc;
++ continue;
++ }
+ if (strcmp(*argv, "-a") == 0) {
+ --argc; ++argv;
+ autologin = 1;
+ continue;
+ }
++ if (strcmp(*argv, "-6") == 0) {
++ --argc; ++argv;
++#ifdef AF_INET6
++ family = AF_INET6;
++#else
++ puts("IPv6 unsupported");
++#endif
++ continue;
++ }
++ if (strcmp(*argv, "-4") == 0) {
++ --argc; ++argv;
++ family = AF_INET;
++ continue;
++ }
+ if (hostp == 0) {
+ /* this leaks memory - FIXME */
+ hostp = strdup(*argv++);
+@@ -1680,6 +1715,8 @@ int tn(int argc, const char *argv[]) {
+ if (hostp == 0)
+ goto usage;
+
++ resolv_hostp = hostp;
++
+ #if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
+ if (hostp[0] == '@' || hostp[0] == '!') {
+ if ((hostname = strrchr(hostp, ':')) == NULL)
+@@ -1696,78 +1733,122 @@ int tn(int argc, const char *argv[]) {
+ } else {
+ sn.sin_addr.s_addr = temp;
+ sn.sin_family = AF_INET;
++ /*
++ * For source route we just make sure to get the IP given
++ * on the command line when looking up the port.
++ */
++ resolv_hostp = inet_ntoa(sn.sin_addr);
+ }
+ }
+- else {
+-#endif
+- if (inet_aton(hostp, &sn.sin_addr)) {
+- sn.sin_family = AF_INET;
+- strcpy(_hostname, hostp);
+- hostname = _hostname;
+- }
+- else {
+- host = gethostbyname(hostp);
+- if (host) {
+- sn.sin_family = host->h_addrtype;
+- if (host->h_length > (int)sizeof(sn.sin_addr)) {
+- host->h_length = sizeof(sn.sin_addr);
+- }
+-#if defined(h_addr) /* In 4.3, this is a #define */
+- memcpy((caddr_t)&sn.sin_addr,
+- host->h_addr_list[0], host->h_length);
+-#else /* defined(h_addr) */
+- memcpy((caddr_t)&sn.sin_addr, host->h_addr, host->h_length);
+-#endif /* defined(h_addr) */
+- strncpy(_hostname, host->h_name, sizeof(_hostname));
+- _hostname[sizeof(_hostname)-1] = '\0';
+- hostname = _hostname;
+- } else {
+- herror(hostp);
+- return 0;
+- }
+- }
+-#if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
+- }
+ #endif
++
++ /* User port or the default name of telnet. */
+ if (portp) {
+ if (*portp == '-') {
+ portp++;
+ telnetport = 1;
+- } else
++ } else {
+ telnetport = 0;
+- sn.sin_port = atoi(portp);
+- if (sn.sin_port == 0) {
+- sp = getservbyname(portp, "tcp");
+- if (sp)
+- sn.sin_port = sp->s_port;
+- else {
+- printf("%s: bad port number\n", portp);
+- return 0;
++ if (*portp >='0' && *portp<='9') {
++ char *end;
++ long int p;
++
++ p=strtol(portp, &end, 10);
++ if (ERANGE==errno && (LONG_MIN==p || LONG_MAX==p)) {
++ fprintf(stderr, "telnet: port %s overflows\n", portp);
++ return 0;
++ } else if (p<=0 || p>=65536) {
++ fprintf(stderr, "telnet: port %s out of range\n", portp);
++ return 0;
++ }
+ }
+- }
+- else {
+- sn.sin_port = htons(sn.sin_port);
+ }
+- }
++ }
+ else {
+- if (sp == 0) {
+- sp = getservbyname("telnet", "tcp");
+- if (sp == 0) {
+- fprintf(stderr, "telnet: tcp/telnet: unknown service\n");
+- return 0;
+- }
+- sn.sin_port = sp->s_port;
+- }
++ portp = "telnet";
+ telnetport = 1;
+ }
+- printf("Trying %s...\n", inet_ntoa(sn.sin_addr));
++
++ /* We only understand SOCK_STREAM sockets. */
++ memset(&hints, 0, sizeof(hints));
++ hints.ai_socktype = SOCK_STREAM;
++ hints.ai_flags = AI_NUMERICHOST;
++ hints.ai_family = family;
++
++ if (srchostp) {
++ res = getaddrinfo(srchostp, "0", &hints, &hostaddr);
++ if (res) {
++ fprintf(stderr, "telnet: could not resolve %s: %s\n", srchostp,
++ gai_strerror(res));
++ return 0;
++ }
++ hints.ai_family = hostaddr->ai_family;
++ res = nlink.bind(hostaddr);
++ freeaddrinfo(hostaddr);
++ if (res < 0)
++ return 0;
++ }
++
++ /* Resolve both the host and service simultaneously. */
++ res = getaddrinfo(resolv_hostp, portp, &hints, &hostaddr);
++ if (res == EAI_NONAME) {
++ hints.ai_flags = AI_CANONNAME;
++ res = getaddrinfo(resolv_hostp, portp, &hints, &hostaddr);
++ } else if (hostaddr) {
++ hostaddr->ai_canonname = 0;
++ }
++ if (res || !hostaddr) {
++ fprintf(stderr, "telnet: could not resolve %s/%s: %s\n", resolv_hostp, portp, gai_strerror(res));
++ return 0;
++ }
++
++ /* Try to connect to every listed round robin IP. */
++ tmpaddr = hostaddr;
++ errno = 0;
+ do {
+- int x = nlink.connect(debug, host, &sn, srp, srlen, tos);
+- if (!x) return 0;
+- else if (x==1) continue;
++ int x;
++
++ if (!tmpaddr) {
++ if (errno)
++ perror("telnet: Unable to connect to remote host");
++ else
++ fputs("telnet: Unable to connect to remote host: "
++ "Bad port number\n", stderr);
++err:
++ freeaddrinfo(hostaddr);
++ return 0;
++ }
++
++ if (tmpaddr->ai_family == AF_UNIX) {
++nextaddr:
++ tmpaddr = tmpaddr->ai_next;
++ continue;
++ }
++
++ getnameinfo(tmpaddr->ai_addr, tmpaddr->ai_addrlen,
++ name, sizeof(name), service, sizeof(service),
++ NI_NUMERICHOST | NI_NUMERICSERV);
++
++ printf("Trying %s...\n", name);
++ x = nlink.connect(debug, tmpaddr, srp, srlen, tos);
++ if (!x)
++ goto err;
++ else if (x==1)
++ goto nextaddr;
++
+ connected++;
+ } while (connected == 0);
+- cmdrc(hostp, hostname);
++ if (tmpaddr->ai_canonname == 0) {
++ hostname = new char[strlen(hostp)+1];
++ strcpy(hostname, hostp);
++ }
++ else {
++ hostname = new char[strlen(tmpaddr->ai_canonname)+1];
++ strcpy(hostname, tmpaddr->ai_canonname);
++ }
++
++ cmdrc(hostp, hostname, portp);
++ freeaddrinfo(hostaddr);
+ if (autologin && user == NULL) {
+ struct passwd *pw;
+
+@@ -2013,30 +2094,21 @@ static int help(command_table *tab, int argc, const char *argv[]) {
+ return 0;
+ }
+
+-static char *rcname = 0;
+-static char rcbuf[128];
+-
+-void cmdrc(const char *m1, const char *m2) {
++static void readrc(const char *m1, const char *m2, const char *port,
++ const char *rcname)
++{
+ FILE *rcfile;
+ int gotmachine = 0;
+ int l1 = strlen(m1);
+ int l2 = strlen(m2);
+- char m1save[64];
+-
+- if (skiprc) return;
++ int lport = strlen(port);
++ char m1save[l1 + 1];
++ char portsave[lport + 1];
+
+ strcpy(m1save, m1);
+ m1 = m1save;
+-
+- if (rcname == 0) {
+- rcname = getenv("HOME");
+- if (rcname)
+- strcpy(rcbuf, rcname);
+- else
+- rcbuf[0] = '\0';
+- strcat(rcbuf, "/.telnetrc");
+- rcname = rcbuf;
+- }
++ strcpy(portsave, port);
++ port = portsave;
+
+ rcfile = fopen(rcname, "r");
+ if (!rcfile) return;
+@@ -2061,6 +2133,13 @@ void cmdrc(const char *m1, const char *m2) {
+ strncpy(line, &line[7], sizeof(line) - 7);
+ else
+ continue;
++
++ if (line[0] == ':') {
++ if (!strncasecmp(&line[1], port, lport))
++ continue;
++ strncpy(line, &line[lport + 1], sizeof(line) - lport - 1);
++ }
++
+ if (line[0] != ' ' && line[0] != '\t' && line[0] != '\n')
+ continue;
+ gotmachine = 1;
+@@ -2073,6 +2152,21 @@ void cmdrc(const char *m1, const char *m2) {
+ fclose(rcfile);
+ }
+
++void cmdrc(const char *m1, const char *m2, const char *port) {
++ char *rcname = NULL;
++
++ if (skiprc) return;
++
++ readrc(m1, m2, port, "/etc/telnetrc");
++ if (asprintf (&rcname, "%s/.telnetrc", getenv ("HOME")) == -1)
++ {
++ perror ("asprintf");
++ return;
++ }
++ readrc(m1, m2, port, rcname);
++ free (rcname);
++}
++
+ #if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
+
+ /*
+diff --git a/telnet/defines.h b/telnet/defines.h
+index 2784400..d5edc46 100644
+--- a/telnet/defines.h
++++ b/telnet/defines.h
+@@ -50,3 +50,5 @@
+ #define MODE_COMMAND_LINE(m) ((m)==-1)
+
+ #define CONTROL(x) ((x)&0x1f) /* CTRL(x) is not portable */
++
++#define MODE_OUT8 0x8000 /* binary mode sans -opost */
+diff --git a/telnet/externs.h b/telnet/externs.h
+index 955df79..0730e8a 100644
+--- a/telnet/externs.h
++++ b/telnet/externs.h
+@@ -48,9 +48,7 @@
+ typedef unsigned char cc_t;
+ #endif
+
+-#ifdef __linux__
+ #include <unistd.h> /* get _POSIX_VDISABLE */
+-#endif
+
+ #ifndef _POSIX_VDISABLE
+ #error "Please fix externs.h to define _POSIX_VDISABLE"
+@@ -60,7 +58,8 @@ typedef unsigned char cc_t;
+
+ extern int autologin; /* Autologin enabled */
+ extern int skiprc; /* Don't process the ~/.telnetrc file */
+-extern int eight; /* use eight bit mode (binary in and/or out */
++extern int eight; /* use eight bit mode (binary in and/or out) */
++extern int binary; /* use binary option (in and/or out) */
+ extern int flushout; /* flush output */
+ extern int connected; /* Are we connected to the other side? */
+ extern int globalmode; /* Mode tty should be in */
+@@ -225,6 +224,8 @@ cc_t *tcval(int);
+
+ //#if 0
+ extern struct termios new_tc;
++extern struct termios old_tc;
++
+
+ #define termEofChar new_tc.c_cc[VEOF]
+ #define termEraseChar new_tc.c_cc[VERASE]
+diff --git a/telnet/main.cc b/telnet/main.cc
+index b67f2ce..b626e54 100644
+--- a/telnet/main.cc
++++ b/telnet/main.cc
+@@ -45,7 +45,10 @@ char main_rcsid[] =
+
+ #include <sys/types.h>
+ #include <getopt.h>
++#include <stdlib.h>
+ #include <string.h>
++#include <netdb.h>
++#include <errno.h>
+
+ #include "ring.h"
+ #include "externs.h"
+@@ -80,12 +83,13 @@ tninit(void)
+ void usage(void) {
+ fprintf(stderr, "Usage: %s %s%s%s%s\n",
+ prompt,
+- " [-8] [-E] [-L] [-a] [-d] [-e char] [-l user] [-n tracefile]",
+- "\n\t",
++ "[-4] [-6] [-8] [-E] [-L] [-a] [-d] [-e char] [-l user]",
++ "\n\t[-n tracefile] [ -b addr ]",
+ #ifdef TN3270
++ "\n\t"
+ "[-noasynch] [-noasynctty] [-noasyncnet] [-r] [-t transcom]\n\t",
+ #else
+- "[-r] ",
++ " [-r] ",
+ #endif
+ "[host-name [port]]"
+ );
+@@ -102,7 +106,8 @@ main(int argc, char *argv[])
+ extern char *optarg;
+ extern int optind;
+ int ch;
+- char *user;
++ char *user, *srcaddr;
++ int family;
+
+ tninit(); /* Clear out things */
+ #if defined(CRAY) && !defined(__STDC__)
+@@ -110,21 +115,38 @@ main(int argc, char *argv[])
+ #endif
+
+ TerminalSaveState();
++ if ((old_tc.c_cflag & (CSIZE|PARENB)) != CS8)
++ eight = 0;
+
+ if ((prompt = strrchr(argv[0], '/'))!=NULL)
+ ++prompt;
+ else
+ prompt = argv[0];
+
+- user = NULL;
++ user = srcaddr = NULL;
++ family = 0;
+
+ rlogin = (strncmp(prompt, "rlog", 4) == 0) ? '~' : _POSIX_VDISABLE;
+ autologin = -1;
+
+- while ((ch = getopt(argc, argv, "8EKLS:X:ade:k:l:n:rt:x")) != EOF) {
++ while ((ch = getopt(argc, argv,
++ "4678EKLS:X:ab:de:k:l:n:rt:x")) != EOF) {
+ switch(ch) {
++ case '4':
++ family = AF_INET;
++ break;
++ case '6':
++#ifdef AF_INET6
++ family = AF_INET6;
++#else
++ fputs("IPv6 unsupported\n", stderr);
++#endif
++ break;
++ case '7':
++ eight = 0; /* 7-bit ouput and input */
++ break;
+ case '8':
+- eight = 3; /* binary output and input */
++ binary = 3; /* binary output and input */
+ break;
+ case 'E':
+ rlogin = escapechar = _POSIX_VDISABLE;
+@@ -133,23 +155,26 @@ main(int argc, char *argv[])
+ //autologin = 0;
+ break;
+ case 'L':
+- eight |= 2; /* binary output only */
++ binary |= 2; /* binary output only */
+ break;
+ case 'S':
+ {
+-#ifdef HAS_GETTOS
+ extern int tos;
++ int num;
+
+- if ((tos = parsetos(optarg, "tcp")) < 0)
++#ifdef HAS_GETTOS
++ if ((num = parsetos(optarg, "tcp")) < 0) {
++#else
++ errno = 0;
++ num = strtol(optarg, 0, 0);
++ if (errno) {
++#endif
+ fprintf(stderr, "%s%s%s%s\n",
+ prompt, ": Bad TOS argument '",
+ optarg,
+ "; will try to use default TOS");
+-#else
+- fprintf(stderr,
+- "%s: Warning: -S ignored, no parsetos() support.\n",
+- prompt);
+-#endif
++ } else
++ tos = num;
+ }
+ break;
+ case 'X':
+@@ -210,6 +235,9 @@ main(int argc, char *argv[])
+ "%s: -x ignored, no encryption support.\n",
+ prompt);
+ break;
++ case 'b':
++ srcaddr = optarg;
++ break;
+ case '?':
+ default:
+ usage();
+@@ -233,6 +261,13 @@ main(int argc, char *argv[])
+ *argp++ = "-l";
+ *argp++ = user;
+ }
++ if (srcaddr) {
++ *argp++ = "-b";
++ *argp++ = srcaddr;
++ }
++ if (family) {
++ *argp++ = family == AF_INET ? "-4" : "-6";
++ }
+ *argp++ = argv[0]; /* host */
+ if (argc > 1)
+ *argp++ = argv[1]; /* port */
+diff --git a/telnet/netlink.cc b/telnet/netlink.cc
+index f439cff..f839747 100644
+--- a/telnet/netlink.cc
++++ b/telnet/netlink.cc
+@@ -79,22 +79,61 @@ void netlink::close(int doshutdown) {
+ shutdown(net, 2);
+ }
+ ::close(net);
++ net = -1;
+ }
+
+-int netlink::connect(int debug, struct hostent *host,
+- struct sockaddr_in *sn,
+- char *srcroute, int srlen, int tos)
++int netlink::bind(struct addrinfo *addr)
+ {
+- int on=1;
++ int res;
++
++ res = socket(addr->ai_family);
++ if (res < 2) {
++ if (res == 1)
++ perror("telnet: socket");
++ return -1;
++ }
++
++ if (::bind(net, addr->ai_addr, addr->ai_addrlen) < 0) {
++ perror("telnet: bind");
++ return -1;
++ }
++
++ return 0;
++}
++
++int netlink::socket(int family)
++{
++ if (this->family != family)
++ close(0);
+
+- net = socket(AF_INET, SOCK_STREAM, 0);
+ if (net < 0) {
+- perror("telnet: socket");
+- return 0;
++ this->family = family;
++ net = ::socket(family, SOCK_STREAM, 0);
++ if (net < 0) {
++ if (errno == EAFNOSUPPORT)
++ return 1;
++ perror("telnet: socket");
++ return 0;
++ }
+ }
+
++ return 2;
++}
++
++int netlink::connect(int debug, struct addrinfo *addr,
++ char *srcroute, int srlen, int tos)
++{
++ int on=1;
++ int res;
++
++ res = socket(addr->ai_family);
++ if (res < 2)
++ return res;
++
+ #if defined(IP_OPTIONS) && defined(HAS_IPPROTO_IP)
+ if (srcroute) {
++ if (addr->ai_family != AF_INET)
++ fputs("Source route is only supported for IPv4\n", stderr);
+ if (setsockopt(net, IPPROTO_IP, IP_OPTIONS, srcroute, srlen) < 0)
+ perror("setsockopt (IP_OPTIONS)");
+ }
+@@ -108,7 +147,7 @@ int netlink::connect(int debug, struct hostent *host,
+ #endif
+ if (tos < 0) tos = 020; /* Low Delay bit */
+ if (tos && (setsockopt(net, IPPROTO_IP, IP_TOS, &tos, sizeof(int)) < 0)
+- && (errno != ENOPROTOOPT))
++ && (errno != ENOPROTOOPT) && (errno != EOPNOTSUPP))
+ perror("telnet: setsockopt (IP_TOS) (ignored)");
+ #endif /* defined(IPPROTO_IP) && defined(IP_TOS) */
+
+@@ -116,27 +155,8 @@ int netlink::connect(int debug, struct hostent *host,
+ perror("setsockopt (SO_DEBUG)");
+ }
+
+- if (::connect(net, (struct sockaddr *)sn, sizeof(*sn)) < 0) {
+-#if defined(h_addr) /* In 4.3, this is a #define */
+- if (host && host->h_addr_list[1]) {
+- int oerrno = errno;
+-
+- fprintf(stderr, "telnet: connect to address %s: ",
+- inet_ntoa(sn->sin_addr));
+- errno = oerrno;
+- perror(NULL);
+- host->h_addr_list++;
+- if (host->h_length > (int)sizeof(sn->sin_addr)) {
+- host->h_length = sizeof(sn->sin_addr);
+- }
+- memcpy(&sn->sin_addr, host->h_addr_list[0], host->h_length);
+- close(net);
+- return 1;
+- }
+-#endif /* defined(h_addr) */
+-
+- perror("telnet: Unable to connect to remote host");
+- return 0;
++ if (::connect(net, addr->ai_addr, addr->ai_addrlen) < 0) {
++ return 1;
+ }
+ return 2;
+ }
+diff --git a/telnet/netlink.h b/telnet/netlink.h
+index 9852b30..0ac8a08 100644
+--- a/telnet/netlink.h
++++ b/telnet/netlink.h
+@@ -1,13 +1,16 @@
+
+ class netlink {
++ private:
++ int family;
+ protected:
+ int net;
+ public:
+ netlink();
+ ~netlink();
+
+- int connect(int debug, struct hostent *host,
+- struct sockaddr_in *sin,
++ int bind(struct addrinfo *hostaddr);
++ int socket(int family);
++ int connect(int debug, struct addrinfo *hostaddr,
+ char *srcroute, int srlen,
+ int tos);
+ void close(int doshutdown);
+diff --git a/telnet/network.cc b/telnet/network.cc
+index 6a2c374..0dcf3e2 100644
+--- a/telnet/network.cc
++++ b/telnet/network.cc
+@@ -40,6 +40,7 @@ char net_rcsid[] =
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/time.h>
++#include <stdlib.h>
+ #include <errno.h>
+ #include <arpa/telnet.h>
+
+diff --git a/telnet/proto.h b/telnet/proto.h
+index 8be4a39..92f2419 100644
+--- a/telnet/proto.h
++++ b/telnet/proto.h
+@@ -13,7 +13,7 @@ int TerminalWindowSize(long *rows, long *cols);
+ void auth_encrypt_user(char *);
+ void auth_name(unsigned char *, int);
+ void auth_printsub(unsigned char *, int, unsigned char *, int);
+-void cmdrc(const char *m1, const char *m2);
++void cmdrc(const char *, const char *, const char *);
+ void env_init(void);
+ int getconnmode(void);
+ void init_network(void);
+diff --git a/telnet/ring.cc b/telnet/ring.cc
+index be57396..772c6c5 100644
+--- a/telnet/ring.cc
++++ b/telnet/ring.cc
+@@ -165,7 +165,7 @@ int ringbuf::flush() {
+
+ /////////////////////////////////////////////////// supply //////////////
+
+-void ringbuf::printf(const char *format, ...) {
++void ringbuf::xprintf(const char *format, ...) {
+ char xbuf[256];
+ va_list ap;
+ va_start(ap, format);
+diff --git a/telnet/ring.h b/telnet/ring.h
+index 15d3f3f..049377e 100644
+--- a/telnet/ring.h
++++ b/telnet/ring.h
+@@ -83,7 +83,7 @@ class ringbuf {
+ // manual supply
+ void putch(char c) { write(&c, 1); }
+ void write(const char *buffer, int ct);
+- void printf(const char *format, ...);
++ void xprintf(const char *format, ...);
+ int empty_count() { return size - count; }
+
+ // automatic supply
+diff --git a/telnet/sys_bsd.cc b/telnet/sys_bsd.cc
+index 93fba7e..a8c9aab 100644
+--- a/telnet/sys_bsd.cc
++++ b/telnet/sys_bsd.cc
+@@ -189,18 +189,25 @@ void NetSetPgrp(int fd) {
+ * Various signal handling routines.
+ */
+
++#if 0
+ static void deadpeer(int /*sig*/) {
+ setcommandmode();
+ siglongjmp(peerdied, -1);
+ }
++#endif
+
+ static void intr(int /*sig*/) {
+ if (localchars) {
+ intp();
+ }
+ else {
++#if 0
+ setcommandmode();
+ siglongjmp(toplevel, -1);
++#else
++ signal(SIGINT, SIG_DFL);
++ raise(SIGINT);
++#endif
+ }
+ }
+
+@@ -214,6 +221,8 @@ static void intr2(int /*sig*/) {
+ sendabort();
+ return;
+ }
++ signal(SIGQUIT, SIG_DFL);
++ raise(SIGQUIT);
+ }
+
+ #ifdef SIGWINCH
+@@ -238,7 +247,9 @@ void ayt(int sig) {
+ void sys_telnet_init(void) {
+ signal(SIGINT, intr);
+ signal(SIGQUIT, intr2);
++#if 0
+ signal(SIGPIPE, deadpeer);
++#endif
+ #ifdef SIGWINCH
+ signal(SIGWINCH, sendwin);
+ #endif
+diff --git a/telnet/telnet.1 b/telnet/telnet.1
+index 54a47fb..8365e42 100644
+--- a/telnet/telnet.1
++++ b/telnet/telnet.1
+@@ -42,8 +42,9 @@
+ protocol
+ .Sh SYNOPSIS
+ .Nm telnet
+-.Op Fl 8ELadr
++.Op Fl 468ELadr
+ .Op Fl S Ar tos
++.Op Fl b Ar address
+ .Op Fl e Ar escapechar
+ .Op Fl l Ar user
+ .Op Fl n Ar tracefile
+@@ -68,6 +69,10 @@ command implicitly; see the description below.
+ .Pp
+ Options:
+ .Bl -tag -width indent
++.It Fl 4
++Force IPv4 address resolution.
++.It Fl 6
++Force IPv6 address resolution.
+ .It Fl 8
+ Request 8-bit operation. This causes an attempt to negotiate the
+ .Dv TELNET BINARY
+@@ -89,6 +94,8 @@ of the
+ option if supported by the remote system. The username is retrieved
+ via
+ .Xr getlogin 3 .
++.It Fl b Ar address
++Use bind(2) on the local socket to bind it to a specific local address.
+ .It Fl d
+ Sets the initial value of the
+ .Ic debug
+@@ -474,17 +481,29 @@ protocol without making a mess. Protocol negotiation can be forced by
+ placing a dash before the port number.
+ .Pp
+ After establishing a connection, any commands associated with the
+-remote host in the user's
++remote host in
++.Pa /etc/telnetrc
++and the user's
+ .Pa .telnetrc
+-file are executed.
++file are executed, in that order.
+ .Pp
+-The format of the .telnetrc file is as follows: Lines beginning with a
++The format of the telnetrc files is as follows: Lines beginning with a
+ #, and blank lines, are ignored. The rest of the file should consist
+ of hostnames and sequences of
+ .Nm telnet
+ commands to use with that host. Commands should be one per line,
+ indented by whitespace; lines beginning without whitespace are
+-interpreted as hostnames. Upon connecting to a particular host, the
++interpreted as hostnames. Lines beginning with the special hostname
++.Ql DEFAULT
++will apply to all hosts. Hostnames including
++.Ql DEFAULT
++may be followed immediately by a colon and a port number or string.
++If a port is specified it must match exactly with what is specified
++on the command line. If no port was specified on the command line,
++then the value
++.Ql telnet
++is used.
++Upon connecting to a particular host, the
+ commands associated with that host are executed.
+ .It Ic quit
+ Close any open session and exit
+@@ -1184,9 +1203,7 @@ escape sequences are preceded by a '*' to aid in locating them.
+ When the skiprc toggle is
+ .Dv TRUE ,
+ .Tn telnet
+-does not read the
+-.Pa \&.telnetrc
+-file. The initial value for this toggle is
++does not read the telnetrc files. The initial value for this toggle is
+ .Dv FALSE.
+ .It Ic termdata
+ Toggles the display of all terminal data (in hexadecimal format).
+@@ -1239,7 +1256,9 @@ to the other side via the
+ .Dv TELNET ENVIRON
+ option.
+ .Sh FILES
+-.Bl -tag -width ~/.telnetrc -compact
++.Bl -tag -width /etc/telnetrc -compact
++.It Pa /etc/telnetrc
++global telnet startup values
+ .It Pa ~/.telnetrc
+ user customized telnet startup values
+ .El
+diff --git a/telnet/telnet.cc b/telnet/telnet.cc
+index 4fc3b1f..7eca811 100644
+--- a/telnet/telnet.cc
++++ b/telnet/telnet.cc
+@@ -88,7 +88,8 @@ char do_dont_resp[256];
+ char will_wont_resp[256];
+
+ int
+-eight = 0,
++ eight = 3,
++ binary = 0,
+ autologin = 0, /* Autologin anyone? */
+ skiprc = 0,
+ connected,
+@@ -639,14 +640,14 @@ static const char *gettermname(void) {
+ if (resettermname) {
+ resettermname = 0;
+ tname = env_getvalue("TERM", 0);
+- if (!tname || my_setupterm(tname, 1, &err)) {
++ if (!tname /* || my_setupterm(tname, 1, &err) */) {
+ termbuf[0] = 0;
+ tname = "UNKNOWN";
+ }
+ mklist(termbuf, tname, termtypes);
+ next = 0;
+ }
+- if (next==termtypes.num()) next = 0;
++ if (next==termtypes.num()-1) next = 0;
+ return termtypes[next++];
+ }
+ /*
+@@ -681,7 +682,7 @@ static void suboption(void) {
+ }
+ #endif /* TN3270 */
+ name = gettermname();
+- netoring.printf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_TTYPE,
++ netoring.xprintf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_TTYPE,
+ TELQUAL_IS, name, IAC, SE);
+ }
+ break;
+@@ -693,7 +694,7 @@ static void suboption(void) {
+ if (SB_GET() == TELQUAL_SEND) {
+ long oospeed, iispeed;
+ TerminalSpeeds(&iispeed, &oospeed);
+- netoring.printf("%c%c%c%c%ld,%ld%c%c", IAC, SB, TELOPT_TSPEED,
++ netoring.xprintf("%c%c%c%c%ld,%ld%c%c", IAC, SB, TELOPT_TSPEED,
+ TELQUAL_IS, oospeed, iispeed, IAC, SE);
+ }
+ break;
+@@ -780,7 +781,7 @@ static void suboption(void) {
+ send_wont(TELOPT_XDISPLOC, 1);
+ break;
+ }
+- netoring.printf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_XDISPLOC,
++ netoring.xprintf("%c%c%c%c%s%c%c", IAC, SB, TELOPT_XDISPLOC,
+ TELQUAL_IS, dp, IAC, SE);
+ }
+ break;
+@@ -798,7 +799,7 @@ void lm_will(unsigned char *cmd, int len) {
+ return;
+ }
+
+- netoring.printf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
++ netoring.xprintf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
+ DONT, cmd[0], IAC, SE);
+ }
+
+@@ -815,7 +816,7 @@ void lm_do(unsigned char *cmd, int len) {
+ /*@*/ printf("lm_do: no command!!!\n"); /* Should not happen... */
+ return;
+ }
+- netoring.printf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
++ netoring.xprintf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
+ WONT, cmd[0], IAC, SE);
+ }
+
+@@ -838,7 +839,7 @@ void lm_mode(unsigned char *cmd, int len, int init) {
+ k |= MODE_ACK;
+ }
+
+- netoring.printf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE, LM_MODE,
++ netoring.xprintf("%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE, LM_MODE,
+ k, IAC, SE);
+
+ setconnmode(0); /* set changed mode */
+@@ -933,11 +934,11 @@ void slc_mode_import(int def) {
+
+ void slc_import(int def) {
+ if (def) {
+- netoring.printf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
++ netoring.xprintf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
+ LM_SLC, 0, SLC_DEFAULT, 0, IAC, SE);
+ }
+ else {
+- netoring.printf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
++ netoring.xprintf("%c%c%c%c%c%c%c%c%c", IAC, SB, TELOPT_LINEMODE,
+ LM_SLC, 0, SLC_VARIABLE, 0, IAC, SE);
+ }
+ }
+@@ -1050,6 +1051,7 @@ void slc_check(void) {
+
+
+ unsigned char slc_reply[128];
++unsigned char const * const slc_reply_eom = &slc_reply[sizeof(slc_reply)];
+ unsigned char *slc_replyp;
+
+ void slc_start_reply(void) {
+@@ -1061,6 +1063,14 @@ void slc_start_reply(void) {
+ }
+
+ void slc_add_reply(int func, int flags, int value) {
++ /* A sequence of up to 6 bytes my be written for this member of the SLC
++ * suboption list by this function. The end of negotiation command,
++ * which is written by slc_end_reply(), will require 2 additional
++ * bytes. Do not proceed unless there is sufficient space for these
++ * items.
++ */
++ if (&slc_replyp[6+2] > slc_reply_eom)
++ return;
+ if ((*slc_replyp++ = func) == IAC)
+ *slc_replyp++ = IAC;
+ if ((*slc_replyp++ = flags) == IAC)
+@@ -1142,6 +1152,7 @@ void env_opt(unsigned char *buf, int len) {
+ }
+ }
+
++/* OPT_REPLY_SIZE must be a multiple of 2. */
+ #define OPT_REPLY_SIZE 256
+ unsigned char *opt_reply;
+ unsigned char *opt_replyp;
+@@ -1173,6 +1184,7 @@ void env_opt_start_info(void) {
+
+ void env_opt_add(const char *ep) {
+ const char *vp;
++ const unsigned char *tp;
+ unsigned char c;
+
+ if (opt_reply == NULL) /*XXX*/
+@@ -1185,11 +1197,12 @@ void env_opt_add(const char *ep) {
+ return;
+ }
+ vp = env_getvalue(ep, 1);
+- if (opt_replyp + (vp ? strlen(vp) : 0) + strlen(ep) + 6 > opt_replyend)
++ tp = opt_replyp + (vp ? strlen(vp) * 2 : 0) + strlen(ep) * 2 + 6;
++ if (tp > opt_replyend)
+ {
+ register int len;
+- opt_replyend += OPT_REPLY_SIZE;
+- len = opt_replyend - opt_reply;
++ len = ((tp - opt_reply) + OPT_REPLY_SIZE - 1) & ~(OPT_REPLY_SIZE - 1);
++ opt_replyend = opt_reply + len;
+ opt_reply = (unsigned char *)realloc(opt_reply, len);
+ if (opt_reply == NULL) {
+ /*@*/ printf("env_opt_add: realloc() failed!!!\n");
+@@ -1740,8 +1753,8 @@ void telnet(const char * /*user*/) {
+ send_do(TELOPT_STATUS, 1);
+ if (env_getvalue("DISPLAY", 0))
+ send_will(TELOPT_XDISPLOC, 1);
+- if (eight)
+- tel_enter_binary(eight);
++ if (binary)
++ tel_enter_binary(binary);
+ }
+ #endif /* !defined(TN3270) */
+
+diff --git a/telnet/terminal.cc b/telnet/terminal.cc
+index 9eb47ae..764f18f 100644
+--- a/telnet/terminal.cc
++++ b/telnet/terminal.cc
+@@ -45,6 +45,8 @@ char terminal_rcsid[] =
+ #include <signal.h>
+ #include <errno.h>
+ #include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
+
+ #include "ring.h"
+ #include "defines.h"
+@@ -155,9 +157,11 @@ int getconnmode(void) {
+ if (localflow)
+ mode |= MODE_FLOW;
+
+- if (my_want_state_is_will(TELOPT_BINARY))
++ if ((eight & 1) || my_want_state_is_will(TELOPT_BINARY))
+ mode |= MODE_INBIN;
+
++ if (eight & 2)
++ mode |= MODE_OUT8;
+ if (his_want_state_is_will(TELOPT_BINARY))
+ mode |= MODE_OUTBIN;
+
+@@ -449,10 +453,13 @@ void TerminalNewMode(int f)
+ // breaks SunOS.
+ tmp_tc.c_iflag |= ISTRIP;
+ }
+- if (f & MODE_OUTBIN) {
++ if (f & (MODE_OUTBIN|MODE_OUT8)) {
+ tmp_tc.c_cflag &= ~(CSIZE|PARENB);
+ tmp_tc.c_cflag |= CS8;
+- tmp_tc.c_oflag &= ~OPOST;
++ if (f & MODE_OUTBIN)
++ tmp_tc.c_oflag &= ~OPOST;
++ else
++ tmp_tc.c_oflag |= OPOST;
+ } else {
+ tmp_tc.c_cflag &= ~(CSIZE|PARENB);
+ tmp_tc.c_cflag |= old_tc.c_cflag & (CSIZE|PARENB);
+@@ -468,7 +475,7 @@ void TerminalNewMode(int f)
+
+ #ifdef SIGINFO
+ signal(SIGINFO, ayt);
+-#endif SIGINFO
++#endif /* SIGINFO */
+
+ #if defined(NOKERNINFO)
+ tmp_tc.c_lflag |= NOKERNINFO;
+@@ -504,7 +511,7 @@ void TerminalNewMode(int f)
+
+ #ifdef SIGINFO
+ signal(SIGINFO, ayt_status);
+-#endif SIGINFO
++#endif /* SIGINFO */
+
+ #ifdef SIGTSTP
+ signal(SIGTSTP, SIG_DFL);
+diff --git a/telnet/utilities.cc b/telnet/utilities.cc
+index 0448f0a..66839ab 100644
+--- a/telnet/utilities.cc
++++ b/telnet/utilities.cc
+@@ -47,6 +47,8 @@ char util_rcsid[] =
+ #include <sys/socket.h>
+ #include <unistd.h>
+ #include <ctype.h>
++#include <string.h>
++#include <stdlib.h>
+
+ #include "ring.h"
+ #include "defines.h"
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch
new file mode 100644
index 000000000..b9a98f1d6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/Warning-fix-in-the-step-of-install.patch
@@ -0,0 +1,41 @@
+From 31362e4c0d02b4a2b952ad0dd32acfb573c442f3 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 28 Nov 2014 07:17:40 +0900
+Subject: [PATCH 2/2] WARNING Fix and modify "CFLAGS"
+
+WARNING: QA Issue: File '/usr/sbin/in.telnetd' from netkit-telnet was
+already stripped, this will prevent future debugging! [already-stripped]
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ telnetd/Makefile | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/telnetd/Makefile b/telnetd/Makefile
+index 72650b4..a4cf9fa 100644
+--- a/telnetd/Makefile
++++ b/telnetd/Makefile
+@@ -9,7 +9,8 @@ include ../MRULES
+ # take out -DPARANOID_TTYS.
+
+ CFLAGS += '-DISSUE_FILE="/etc/issue.net"' -DPARANOID_TTYS \
+- -DNO_REVOKE -DKLUDGELINEMODE -DDIAGNOSTICS
++ -DNO_REVOKE -DKLUDGELINEMODE -DDIAGNOSTICS \
++ -DLOGIN_WRAPPER=\"/${libdir}/telnetlogin\"
+ # LIBS += $(LIBTERMCAP)
+
+ OBJS = telnetd.o state.o termstat.o slc.o sys_term.o utility.o \
+@@ -27,7 +28,7 @@ $(OBJS): defs.h ext.h pathnames.h telnetd.h logwtmp.h logout.h setproctitle.h
+ telnetd.o: ../version.h
+
+ install: telnetd
+- install -s -m$(DAEMONMODE) telnetd $(INSTALLROOT)$(SBINDIR)/in.telnetd
++ install -m$(DAEMONMODE) telnetd $(INSTALLROOT)$(SBINDIR)/in.telnetd
+ install -m$(MANMODE) issue.net.5 $(INSTALLROOT)$(MANDIR)/man5/
+ install -m$(MANMODE) telnetd.8 $(INSTALLROOT)$(MANDIR)/man8/in.telnetd.8
+ ln -sf in.telnetd.8 $(INSTALLROOT)$(MANDIR)/man8/telnetd.8
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch
new file mode 100644
index 000000000..b3fe36b7b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/cross-compile.patch
@@ -0,0 +1,48 @@
+To support the cross-compile
+
+Upstream-Status: Pending
+
+make the configure to support the cross-compile, by only to compile the
+target, and not to run it
+
+Roy Li <rongqing.li@windriver.com>
+Index: netkit-telnet-0.17/configure
+===================================================================
+--- netkit-telnet-0.17.orig/configure 2008-11-23 22:01:26.000000000 +0100
++++ netkit-telnet-0.17/configure 2008-11-23 22:05:00.000000000 +0100
+@@ -94,7 +94,7 @@
+ echo -n 'Checking if C compiler works... '
+ if (
+ $CC __conftest.c -o __conftest || exit 1
+- ./__conftest || exit 1
++ # Idiots belong shot! ./__conftest || exit 1
+ ) >/dev/null 2>&1; then
+ echo 'yes'
+ else
+@@ -141,7 +141,7 @@
+ echo -n 'Checking if C++ compiler works... '
+ if (
+ $CXX __conftest.cc -o __conftest || exit 1
+- ./__conftest || exit 1
++ # Iditios belong shot! ./__conftest || exit 1
+ ) >/dev/null 2>&1; then
+ echo 'yes'
+ else
+@@ -284,7 +284,7 @@
+ else
+ if (
+ $CXX $CXXFLAGS -D__USE_BSD_SIGNAL __conftest.cc -o __conftest || exit 1
+- ./__conftest || exit 1
++ # running still does not work./__conftest || exit 1
+ ) >/dev/null 2>&1; then
+ echo '-D__USE_BSD_SIGNAL'
+ CFLAGS="$CFLAGS -D__USE_BSD_SIGNAL"
+@@ -501,7 +501,7 @@
+ EOF
+ if (
+ $CXX $CXXFLAGS __conftest.cc $LIBBSD -o __conftest || exit 1
+- ./__conftest || exit 1
++ # argh! morons!./__conftest || exit 1
+ ) >/dev/null 2>&1; then
+ echo 'ok'
+ else
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd
new file mode 100644
index 000000000..12204c71b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/files/telnet-xinetd
@@ -0,0 +1,14 @@
+# default: on
+# description: The telnet server serves telnet sessions; it uses \
+# unencrypted username/password pairs for authentication.
+service telnet
+{
+ flags = REUSE
+ socket_type = stream
+ wait = no
+ user = root
+ server = /usr/sbin/in.telnetd
+ log_on_failure += USERID
+ disable = yes
+}
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb
new file mode 100644
index 000000000..807b56644
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-telnet/netkit-telnet_0.17.bb
@@ -0,0 +1,61 @@
+DESCRIPTION = "netkit-telnet includes the telnet daemon and client."
+HOMEPAGE = "http://www.hcs.harvard.edu/~dholland/computers/netkit.html"
+SECTION = "net"
+DEPENDS = "ncurses"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://telnet/telnet.cc;beginline=2;endline=3;md5=780868e7b566313e70cb701560ca95ef"
+
+SRC_URI = "ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/${BP}.tar.gz \
+ file://To-aviod-buffer-overflow-in-telnet.patch \
+ file://Warning-fix-in-the-step-of-install.patch \
+ file://telnet-xinetd \
+ file://cross-compile.patch \
+ file://0001-telnet-telnetd-Fix-print-format-strings.patch \
+ "
+
+EXTRA_OEMAKE = "INSTALLROOT=${D} SBINDIR=${sbindir} DAEMONMODE=755 \
+ MANMODE=644 MANDIR=${mandir}"
+
+do_configure () {
+ ./configure --prefix=${prefix}
+ sed -e 's#^CFLAGS=\(.*\)$#CFLAGS= -D_GNU_SOURCE \1#' \
+ -e 's#^CXXFLAGS=\(.*\)$#CXXFLAGS= -D_GNU_SOURCE \1#' \
+ -e 's#^LDFLAGS=.*$#LDFLAGS= ${LDFLAGS}#' \
+ -i MCONFIG
+}
+
+do_compile () {
+ oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' SUB=telnet
+ oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' LIBS=-lutil SUB=telnetd
+ oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' SUB=telnetlogin
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 telnet/telnet ${D}${bindir}/telnet.${PN}
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man5
+ install -d ${D}${mandir}/man8
+ oe_runmake SUB=telnetd install
+ rm -rf ${D}${mandir}/man1
+ install -D -m 4750 ${B}/telnetlogin/telnetlogin ${D}/${libdir}/telnetlogin
+ # fix up hardcoded paths
+ sed -i -e 's,/usr/sbin/,${sbindir}/,' ${WORKDIR}/telnet-xinetd
+ install -d ${D}/etc/xinetd.d/
+ install -p -m644 ${WORKDIR}/telnet-xinetd ${D}/etc/xinetd.d/telnet
+}
+
+pkg_postinst_${PN} () {
+#!/bin/sh
+ update-alternatives --install ${bindir}/telnet telnet telnet.${PN} 100
+}
+
+pkg_prerm_${PN} () {
+#!/bin/sh
+ update-alternatives --remove telnet telnet.${PN} 100
+}
+
+SRC_URI[md5sum] = "d6beabaaf53fe6e382c42ce3faa05a36"
+SRC_URI[sha256sum] = "9c80d5c7838361a328fb6b60016d503def9ce53ad3c589f3b08ff71a2bb88e00"
+FILES_${PN} += "${sbindir}/in.* ${libdir}/* ${sysconfdir}/xinetd.d/*"
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch
new file mode 100644
index 000000000..78936907f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/0001-tftp-Include-missing-fcntl.h.patch
@@ -0,0 +1,27 @@
+From fa57e161fc953264a75d50a787cb83983e60acc7 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 30 Aug 2017 18:30:02 -0700
+Subject: [PATCH] tftp: Include missing fcntl.h
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ tftp/main.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/tftp/main.c b/tftp/main.c
+index 8c54843..5c9b698 100644
+--- a/tftp/main.c
++++ b/tftp/main.c
+@@ -63,6 +63,7 @@ char main_rcsid[] =
+ #include <ctype.h>
+ #include <netdb.h>
+ #include <unistd.h>
++#include <fcntl.h>
+
+ #include "tftpsubs.h" /* for mysignal() */
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf
new file mode 100644
index 000000000..7bc6ca96b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp/tftp.conf
@@ -0,0 +1,11 @@
+service tftp
+{
+ disable = no
+ socket_type = dgram
+ port = 69
+ protocol = udp
+ wait = yes
+ user = nobody
+ server = /usr/sbin/in.tftpd
+ server_args = /tftpboot
+}
diff --git a/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb
new file mode 100644
index 000000000..92c13e850
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-netkit/netkit-tftp/netkit-tftp_0.17.bb
@@ -0,0 +1,55 @@
+SUMMARY = "tftp - Trivial file transfer protocol client"
+SECTION = "net"
+LICENSE = "BSD-4-Clause"
+DEPENDS = "tcp-wrappers"
+
+LIC_FILES_CHKSUM = "file://tftp/tftp.c;beginline=2;endline=3;md5=84d2cfe1e60863a7d82648734ba4d30c"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/n/${BPN}/${BPN}_${PV}.orig.tar.gz;name=archive \
+ ${DEBIAN_MIRROR}/main/n/${BPN}/${BPN}_${PV}-18.diff.gz;name=patch18 \
+ file://tftp.conf \
+ file://0001-tftp-Include-missing-fcntl.h.patch \
+ "
+
+SRC_URI[archive.md5sum] = "b7262c798e2ff50e29c2ff50dfd8d6a8"
+SRC_URI[archive.sha256sum] = "3a43c0010d4e61f412563fd83769d4667d8b8e82903526d21cb9205fe55ad14d"
+SRC_URI[patch18.md5sum] = "cb29e7a33dd85105ba6e6ec4f971e42c"
+SRC_URI[patch18.sha256sum] = "092437d27b4fa88c044ef6290372fee5ce06d223607f0e22a6e527065c8930e7"
+
+inherit autotools-brokensep
+
+do_configure () {
+ ./configure --prefix=${prefix}
+ echo "CFLAGS=${CFLAGS}" > MCONFIG
+}
+
+do_compile () {
+ oe_runmake 'CC=${CC}' 'LD=${LD}' 'LDFLAGS=${LDFLAGS}' 'CFLAGS=${CFLAGS}'
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -d ${D}${sbindir}
+ install -d ${D}${mandir}/man1
+ install -d ${D}${mandir}/man8
+ install -d ${D}${sysconfdir}/xinetd.d
+
+ sed -i 's/install -s/install/' tftp/Makefile
+ sed -i 's/install -s/install/' tftpd/Makefile
+
+ oe_runmake 'INSTALLROOT=${D}' 'BINMODE=0755' \
+ 'DAEMONMODE=0755' 'MANMODE=0644' \
+ 'BINDIR=${bindir}' 'SBINDIR=${sbindir}' \
+ 'MANDIR=${mandir}' install
+
+ install ${WORKDIR}/tftp.conf ${D}/${sysconfdir}/xinetd.d/tftp
+}
+
+PACKAGES = "${PN}-client ${PN}-server ${PN}-doc ${BPN}-dbg"
+FILES_${PN}-client = "${bindir}/*"
+FILES_${PN}-server = "${sbindir}/* ${sysconfdir}/xinetd.d/*"
+FILES_${PN}-doc = "${mandir}"
+FILES_${PN}-dbg = "${prefix}/src/debug \
+ ${bindir}/.debug ${sbindir}/.debug"
+
+RDEPENDS_${PN}-server = "tcp-wrappers xinetd"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/dante/dante_1.4.1.bb b/meta-openembedded/meta-networking/recipes-protocols/dante/dante_1.4.1.bb
new file mode 100644
index 000000000..ffdab22cf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/dante/dante_1.4.1.bb
@@ -0,0 +1,49 @@
+SECTION = "console/utils"
+SUMMARY = "A free SOCKS server"
+DESCRIPTION = "Dante consists of a SOCKS server and a SOCKS client,\
+implementing RFC 1928 and related standards. It is a flexible product\
+that can be used to provide convenient and secure network\
+connectivity. Once installed, Dante can in most cases be made\
+transparent to clients, providing functionality somewhat similar to\
+what could be described as a non-transparent Layer 4 router."
+HOMEPAGE = "http://www.inet.no/dante/"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=221118dda731fe93a85d0ed973467249"
+
+SRC_URI = "https://www.inet.no/dante/files/dante-${PV}.tar.gz \
+ "
+SRC_URI[md5sum] = "68c2ce12119e12cea11a90c7a80efa8f"
+SRC_URI[sha256sum] = "b6d232bd6fefc87d14bf97e447e4fcdeef4b28b16b048d804b50b48f261c4f53"
+
+# without --without-gssapi, config.log will contain reference to /usr/lib
+# as a consequence of GSSAPI path being set to /usr by default.
+# --with-gssapi-path=PATH specify gssapi path
+# --without-gssapi disable gssapi support
+# --enable-release build prerelease as full release
+EXTRA_OECONF += "--without-gssapi --sbindir=${bindir}"
+
+DEPENDS += "flex-native bison-native libpam"
+
+inherit autotools-brokensep distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "pam"
+
+EXTRA_AUTORECONF = "-I ${S}"
+
+PACKAGECONFIG[libwrap] = ",--disable-libwrap,tcp-wrappers,libwrap"
+PACKAGECONFIG[krb5] = ",--without-krb5,krb5"
+
+PACKAGECONFIG ??= ""
+
+do_install_append() {
+ install -d ${D}${sysconfdir}
+ cp ${S}/example/sock[sd].conf ${D}${sysconfdir}
+}
+
+PACKAGES =+ "${PN}-sockd ${PN}-libdsocks "
+
+FILES_${PN}-libdsocks = "${libdir}/libdsocks.so"
+FILES_${PN}-sockd = "${bindir}/sockd ${sysconfdir}/sockd.conf"
+
+INSANE_SKIP_${PN}-libdsocks = "dev-elf"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch
new file mode 100644
index 000000000..71a5a1ae4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch
@@ -0,0 +1,223 @@
+Replace murmurhash algorithm with Robert Jenkin's hash algorithm
+
+Upstream-Status: Pending
+
+From test result, murmurhash algorithm does not work in big endian
+processor, so replace it with Robert Jenkin's hash which has worked
+in linux kernel for many years and has more adaptability.
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ libfdproto/ostr.c | 192 +++++++++++++++++++++--------------------------------
+ 1 file changed, 74 insertions(+), 118 deletions(-)
+
+diff --git a/libfdproto/ostr.c b/libfdproto/ostr.c
+index 8f29b48..ce1f4dd 100644
+--- a/libfdproto/ostr.c
++++ b/libfdproto/ostr.c
+@@ -430,128 +430,84 @@ after_proto:
+
+
+ /********************************************************************************************************/
+-/* Hash function -- credits to Austin Appleby, thank you ^^ */
+-/* See http://murmurhash.googlepages.com for more information on this function */
+-
+-/* the strings are NOT always aligned properly (ex: received in RADIUS message), so we use the aligned MurmurHash2 function as needed */
+-#define _HASH_MIX(h,k,m) { k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; }
+-uint32_t fd_os_hash ( uint8_t * string, size_t len )
++/*
++ * Robert Jenkin's hash function.
++ * http://burtleburtle.net/bob/hash/evahash.html
++ * This is in the public domain.
++ */
++#define mix(a, b, c) \
++ do { \
++ a = a - b; a = a - c; a = a ^ (c >> 13); \
++ b = b - c; b = b - a; b = b ^ (a << 8); \
++ c = c - a; c = c - b; c = c ^ (b >> 13); \
++ a = a - b; a = a - c; a = a ^ (c >> 12); \
++ b = b - c; b = b - a; b = b ^ (a << 16); \
++ c = c - a; c = c - b; c = c ^ (b >> 5); \
++ a = a - b; a = a - c; a = a ^ (c >> 3); \
++ b = b - c; b = b - a; b = b ^ (a << 10); \
++ c = c - a; c = c - b; c = c ^ (b >> 15); \
++ } while (0)
++
++unsigned hash_rjenkins(const char *str, unsigned length)
+ {
+- uint32_t hash = len;
+- uint8_t * data = string;
+-
+- const unsigned int m = 0x5bd1e995;
+- const int r = 24;
+- int align = (long)string & 3;
+-
+- if (!align || (len < 4)) {
+- /* In case data is aligned, MurmurHash2 function */
+- while(len >= 4)
+- {
+- /* Mix 4 bytes at a time into the hash */
+- uint32_t k = *(uint32_t *)data; /* We don't care about the byte order */
+-
+- _HASH_MIX(hash, k, m);
+-
+- data += 4;
+- len -= 4;
+- }
+-
+- /* Handle the last few bytes of the input */
+- switch(len) {
+- case 3: hash ^= data[2] << 16;
+- case 2: hash ^= data[1] << 8;
+- case 1: hash ^= data[0];
+- hash *= m;
+- }
+-
+- } else {
+- /* Unaligned data, use alignment-safe slower version */
+-
+- /* Pre-load the temp registers */
+- uint32_t t = 0, d = 0;
+- switch(align)
+- {
+- case 1: t |= data[2] << 16;
+- case 2: t |= data[1] << 8;
+- case 3: t |= data[0];
+- }
+- t <<= (8 * align);
+-
+- data += 4-align;
+- len -= 4-align;
+-
+- /* From this point, "data" can be read by chunks of 4 bytes */
+-
+- int sl = 8 * (4-align);
+- int sr = 8 * align;
+-
+- /* Mix */
+- while(len >= 4)
+- {
+- uint32_t k;
+-
+- d = *(unsigned int *)data;
+- k = (t >> sr) | (d << sl);
+-
+- _HASH_MIX(hash, k, m);
+-
+- t = d;
+-
+- data += 4;
+- len -= 4;
+- }
+-
+- /* Handle leftover data in temp registers */
+- d = 0;
+- if(len >= align)
+- {
+- uint32_t k;
+-
+- switch(align)
+- {
+- case 3: d |= data[2] << 16;
+- case 2: d |= data[1] << 8;
+- case 1: d |= data[0];
+- }
+-
+- k = (t >> sr) | (d << sl);
+- _HASH_MIX(hash, k, m);
+-
+- data += align;
+- len -= align;
+-
+- /* Handle tail bytes */
+-
+- switch(len)
+- {
+- case 3: hash ^= data[2] << 16;
+- case 2: hash ^= data[1] << 8;
+- case 1: hash ^= data[0];
+- hash *= m;
+- };
+- }
+- else
+- {
+- switch(len)
+- {
+- case 3: d |= data[2] << 16;
+- case 2: d |= data[1] << 8;
+- case 1: d |= data[0];
+- case 0: hash ^= (t >> sr) | (d << sl);
+- hash *= m;
+- }
+- }
+-
++ const unsigned char *k = (const unsigned char *)str;
++ uint32_t a, b, c; /* the internal state */
++ uint32_t len; /* how many key bytes still need mixing */
++
++ /* Set up the internal state */
++ len = length;
++ a = 0x9e3779b9; /* the golden ratio; an arbitrary value */
++ b = a;
++ c = 0; /* variable initialization of internal state */
++
++ /* handle most of the key */
++ while (len >= 12) {
++ a = a + (k[0] + ((uint32_t)k[1] << 8) + ((uint32_t)k[2] << 16) +
++ ((uint32_t)k[3] << 24));
++ b = b + (k[4] + ((uint32_t)k[5] << 8) + ((uint32_t)k[6] << 16) +
++ ((uint32_t)k[7] << 24));
++ c = c + (k[8] + ((uint32_t)k[9] << 8) + ((uint32_t)k[10] << 16) +
++ ((uint32_t)k[11] << 24));
++ mix(a, b, c);
++ k = k + 12;
++ len = len - 12;
++ }
+
++ /* handle the last 11 bytes */
++ c = c + length;
++ switch (len) { /* all the case statements fall through */
++ case 11:
++ c = c + ((uint32_t)k[10] << 24);
++ case 10:
++ c = c + ((uint32_t)k[9] << 16);
++ case 9:
++ c = c + ((uint32_t)k[8] << 8);
++ /* the first byte of c is reserved for the length */
++ case 8:
++ b = b + ((uint32_t)k[7] << 24);
++ case 7:
++ b = b + ((uint32_t)k[6] << 16);
++ case 6:
++ b = b + ((uint32_t)k[5] << 8);
++ case 5:
++ b = b + k[4];
++ case 4:
++ a = a + ((uint32_t)k[3] << 24);
++ case 3:
++ a = a + ((uint32_t)k[2] << 16);
++ case 2:
++ a = a + ((uint32_t)k[1] << 8);
++ case 1:
++ a = a + k[0];
++ /* case 0: nothing left to add */
+ }
++ mix(a, b, c);
+
+- /* Do a few final mixes of the hash to ensure the last few
+- bytes are well-incorporated. */
+- hash ^= hash >> 13;
+- hash *= m;
+- hash ^= hash >> 15;
++ return c;
++}
+
+- return hash;
++uint32_t fd_os_hash ( uint8_t * string, size_t len )
++{
++ return hash_rjenkins(string, len);
+ }
+
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf
new file mode 100644
index 000000000..7b56d748a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freeDiameter.conf
@@ -0,0 +1,250 @@
+# This is a sample configuration file for freeDiameter daemon.
+
+# Most of the options can be omitted, as they default to reasonable values.
+# Only TLS-related options must be configured properly in usual setups.
+
+# It is possible to use "include" keyword to import additional files
+# e.g.: include "/etc/freeDiameter.d/*.conf"
+# This is exactly equivalent as copy & paste the content of the included file(s)
+# where the "include" keyword is found.
+
+
+##############################################################
+## Peer identity and realm
+
+# The Diameter Identity of this daemon.
+# This must be a valid FQDN that resolves to the local host.
+# Default: hostname's FQDN
+#Identity = "aaa.koganei.freediameter.net";
+
+# The Diameter Realm of this daemon.
+# Default: the domain part of Identity (after the first dot).
+#Realm = "koganei.freediameter.net";
+
+##############################################################
+## Transport protocol configuration
+
+# The port this peer is listening on for incoming connections (TCP and SCTP).
+# Default: 3868. Use 0 to disable.
+#Port = 3868;
+
+# The port this peer is listening on for incoming TLS-protected connections (TCP and SCTP).
+# See TLS_old_method for more information about TLS flavours.
+# Note: we use TLS/SCTP instead of DTLS/SCTP at the moment. This will change in future version of freeDiameter.
+# Default: 5868. Use 0 to disable.
+#SecPort = 5868;
+
+# Use RFC3588 method for TLS protection, where TLS is negociated after CER/CEA exchange is completed
+# on the unsecure connection. The alternative is RFC6733 mechanism, where TLS protects also the
+# CER/CEA exchange on a dedicated secure port.
+# This parameter only affects outgoing connections.
+# The setting can be also defined per-peer (see Peers configuration section).
+# Default: use RFC6733 method with separate port for TLS.
+#TLS_old_method;
+
+# Disable use of TCP protocol (only listen and connect over SCTP)
+# Default : TCP enabled
+#No_TCP;
+
+# Disable use of SCTP protocol (only listen and connect over TCP)
+# Default : SCTP enabled
+#No_SCTP;
+# This option is ignored if freeDiameter is compiled with DISABLE_SCTP option.
+
+# Prefer TCP instead of SCTP for establishing new connections.
+# This setting may be overwritten per peer in peer configuration blocs.
+# Default : SCTP is attempted first.
+#Prefer_TCP;
+
+# Default number of streams per SCTP associations.
+# This setting may be overwritten per peer basis.
+# Default : 30 streams
+#SCTP_streams = 30;
+
+##############################################################
+## Endpoint configuration
+
+# Disable use of IP addresses (only IPv6)
+# Default : IP enabled
+#No_IP;
+
+# Disable use of IPv6 addresses (only IP)
+# Default : IPv6 enabled
+#No_IPv6;
+
+# Specify local addresses the server must bind to
+# Default : listen on all addresses available.
+#ListenOn = "202.249.37.5";
+#ListenOn = "2001:200:903:2::202:1";
+#ListenOn = "fe80::21c:5ff:fe98:7d62%eth0";
+
+
+##############################################################
+## Server configuration
+
+# How many Diameter peers are allowed to be connecting at the same time ?
+# This parameter limits the number of incoming connections from the time
+# the connection is accepted until the first CER is received.
+# Default: 5 unidentified clients in paralel.
+#ThreadsPerServer = 5;
+
+##############################################################
+## TLS Configuration
+
+# TLS is managed by the GNUTLS library in the freeDiameter daemon.
+# You may find more information about parameters and special behaviors
+# in the relevant documentation.
+# http://www.gnu.org/software/gnutls/manual/
+
+# Credentials of the local peer
+# The X509 certificate and private key file to use for the local peer.
+# The files must contain PKCS-1 encoded RSA key, in PEM format.
+# (These parameters are passed to gnutls_certificate_set_x509_key_file function)
+# Default : NO DEFAULT
+#TLS_Cred = "<x509 certif file.PEM>" , "<x509 private key file.PEM>";
+#TLS_Cred = "/etc/ssl/certs/freeDiameter.pem", "/etc/ssl/private/freeDiameter.key";
+
+# Certificate authority / trust anchors
+# The file containing the list of trusted Certificate Authorities (PEM list)
+# (This parameter is passed to gnutls_certificate_set_x509_trust_file function)
+# The directive can appear several times to specify several files.
+# Default : GNUTLS default behavior
+#TLS_CA = "<file.PEM>";
+
+# Certificate Revocation List file
+# The information about revoked certificates.
+# The file contains a list of trusted CRLs in PEM format. They should have been verified before.
+# (This parameter is passed to gnutls_certificate_set_x509_crl_file function)
+# Note: openssl CRL format might have interoperability issue with GNUTLS format.
+# Default : GNUTLS default behavior
+#TLS_CRL = "<file.PEM>";
+
+# GNU TLS Priority string
+# This string allows to configure the behavior of GNUTLS key exchanges
+# algorithms. See gnutls_priority_init function documentation for information.
+# You should also refer to the Diameter required TLS support here:
+# http://tools.ietf.org/html/rfc6733#section-13.1
+# Default : "NORMAL"
+# Example: TLS_Prio = "NONE:+VERS-TLS1.1:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL";
+#TLS_Prio = "NORMAL";
+
+# Diffie-Hellman parameters size
+# Set the number of bits for generated DH parameters
+# Valid value should be 768, 1024, 2048, 3072 or 4096.
+# (This parameter is passed to gnutls_dh_params_generate2 function,
+# it usually should match RSA key size)
+# Default : 1024
+#TLS_DH_Bits = 1024;
+
+# Alternatively, you can specify a file to load the PKCS#3 encoded
+# DH parameters directly from. This accelerates the daemon start
+# but is slightly less secure. If this file is provided, the
+# TLS_DH_Bits parameters has no effect.
+# Default : no default.
+#TLS_DH_File = "<file.PEM>";
+
+
+##############################################################
+## Timers configuration
+
+# The Tc timer of this peer.
+# It is the delay before a new attempt is made to reconnect a disconnected peer.
+# The value is expressed in seconds. The recommended value is 30 seconds.
+# Default: 30
+#TcTimer = 30;
+
+# The Tw timer of this peer.
+# It is the delay before a watchdog message is sent, as described in RFC 3539.
+# The value is expressed in seconds. The default value is 30 seconds. Value must
+# be greater or equal to 6 seconds. See details in the RFC.
+# Default: 30
+#TwTimer = 30;
+
+##############################################################
+## Applications configuration
+
+# Disable the relaying of Diameter messages?
+# For messages not handled locally, the default behavior is to forward the
+# message to another peer if any is available, according to the routing
+# algorithms. In addition the "0xffffff" application is advertised in CER/CEA
+# exchanges.
+# Default: Relaying is enabled.
+#NoRelay;
+
+# Number of server threads that can handle incoming messages at the same time.
+# Default: 4
+#AppServThreads = 4;
+
+# Other applications are configured by loaded extensions.
+
+##############################################################
+## Extensions configuration
+
+# The freeDiameter framework merely provides support for
+# Diameter Base Protocol. The specific application behaviors,
+# as well as advanced functions, are provided
+# by loadable extensions (plug-ins).
+# These extensions may in addition receive the name of a
+# configuration file, the format of which is extension-specific.
+#
+# Format:
+#LoadExtension = "/path/to/extension" [ : "/optional/configuration/file" ] ;
+#
+# Examples:
+#LoadExtension = "extensions/sample.fdx";
+#LoadExtension = "extensions/sample.fdx":"conf/sample.conf";
+
+# Extensions are named as follow:
+# dict_* for extensions that add content to the dictionary definitions.
+# dbg_* for extensions useful only to retrieve more information on the framework execution.
+# acl_* : Access control list, to control which peers are allowed to connect.
+# rt_* : routing extensions that impact how messages are forwarded to other peers.
+# app_* : applications, these extensions usually register callbacks to handle specific messages.
+# test_* : dummy extensions that are useful only in testing environments.
+
+
+# The dbg_msg_dump.fdx extension allows you to tweak the way freeDiameter displays some
+# information about some events. This extension does not actually use a configuration file
+# but receives directly a parameter in the string passed to the extension. Here are some examples:
+## LoadExtension = "dbg_msg_dumps.fdx" : "0x1111"; # Removes all default hooks, very quiet even in case of errors.
+## LoadExtension = "dbg_msg_dumps.fdx" : "0x2222"; # Display all events with few details.
+## LoadExtension = "dbg_msg_dumps.fdx" : "0x0080"; # Dump complete information about sent and received messages.
+# The four digits respectively control: connections, routing decisions, sent/received messages, errors.
+# The values for each digit are:
+# 0 - default - keep the default behavior
+# 1 - quiet - remove any specific log
+# 2 - compact - display only a summary of the information
+# 4 - full - display the complete information on a single long line
+# 8 - tree - display the complete information in an easier to read format spanning several lines.
+
+
+##############################################################
+## Peers configuration
+
+# The local server listens for incoming connections. By default,
+# all unknown connecting peers are rejected. Extensions can override this behavior (e.g., acl_wl).
+#
+# In addition to incoming connections, the local peer can
+# be configured to establish and maintain connections to some
+# Diameter nodes and allow connections from these nodes.
+# This is achieved with the ConnectPeer directive described below.
+#
+# Note that the configured Diameter Identity MUST match
+# the information received inside CEA, or the connection will be aborted.
+#
+# Format:
+#ConnectPeer = "diameterid" [ { parameter1; parameter2; ...} ] ;
+# Parameters that can be specified in the peer's parameter list:
+# No_TCP; No_SCTP; No_IP; No_IPv6; Prefer_TCP; TLS_old_method;
+# No_TLS; # assume transparent security instead of TLS. DTLS is not supported yet (will change in future versions).
+# Port = 5868; # The port to connect to
+# TcTimer = 30;
+# TwTimer = 30;
+# ConnectTo = "202.249.37.5";
+# ConnectTo = "2001:200:903:2::202:1";
+# TLS_Prio = "NORMAL";
+# Realm = "realm.net"; # Reject the peer if it does not advertise this realm.
+# Examples:
+#ConnectPeer = "aaa.wide.ad.jp";
+#ConnectPeer = "old.diameter.serv" { TcTimer = 60; TLS_old_method; No_SCTP; Port=3868; } ;
+##############################################################
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.init b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.init
new file mode 100755
index 000000000..e63a42a7c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.init
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+### BEGIN INIT INFO
+# Provides: freediameter
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Short-Description: Start freeDiameter daemon at boot time
+# Description: Start the freeDiameter daemon at boot time.
+# freeDiameter is an extensible implementation of the Diameter protocol,
+# designed for Authentication, Authorization and Accounting. Diameter is
+# an evolution of the RADIUS protocol.
+### END INIT INFO#
+DAEMON=/usr/bin/freeDiameterd
+CONF=/etc/freeDiameter/freeDiameter.conf
+NAME=freediameter
+DESC="freeDiameter daemon"
+
+. /etc/init.d/functions
+start() {
+ [ -x $DAEMON ] || exit 5
+ echo -n $"Starting $DAEMON: "
+ start-stop-daemon -S -b -x ${DAEMON} && success || failure
+ retval=$?
+ echo ""
+ return $retval
+}
+
+stop() {
+ echo -n $"Stopping $prog: "
+ start-stop-daemon -K -x $DAEMON
+ retval=$?
+ echo ""
+ return $retval
+}
+
+restart() {
+ stop
+ sleep 3
+ start
+}
+
+rh_status() {
+ status $DAEMON
+}
+
+rh_status_q() {
+ rh_status > /dev/null 2>&1
+}
+
+case "$1" in
+ start)
+ rh_status_q && exit 0
+ start
+ ;;
+ stop)
+ rh_status_q || exit 0
+ stop
+ ;;
+ restart)
+ restart
+ ;;
+ status)
+ rh_status
+ ;;
+ *)
+ echo $"Usage: $prog {start|stop|status|restart}"
+ exit 2
+esac
+
+exit $?
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.service b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.service
new file mode 100644
index 000000000..514481b43
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/freediameter.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=freediameter daemon
+After=network.target
+
+[Service]
+Type=simple
+PIDFile=/var/run/freediameter.pid
+ExecStart=@BINDIR@/freeDiameterd
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/install_test.patch b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/install_test.patch
new file mode 100644
index 000000000..151037d69
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/install_test.patch
@@ -0,0 +1,22 @@
+CMakeLists: add an option to install tests
+
+Upstream-Status: Inappropriate [OE ptest specific]
+
+Original author: Yao Zhao <yao.zhao@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index da8da1b..de04059 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -113,4 +113,9 @@ ENDFOREACH( TEST )
+ ####
+ ## INSTALL section ##
+
+-# we do not install the tests
++# install the tests
++SET(INSTALL_TEST_SUFFIX /opt/${FD_PROJECT_NAME}-tests CACHE PATH "Directory where the test binary is installed.")
++
++INSTALL(TARGETS ${TEST_LIST}
++ RUNTIME DESTINATION ${INSTALL_TEST_SUFFIX}
++ COMPONENT freeDiameter-common)
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch
new file mode 100644
index 000000000..ea857af7d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/pass-ptest-env.patch
@@ -0,0 +1,72 @@
+freediameter ptest cases testmesg_stress.c and testloadext.c need load
+extensions both build time and runtime. Then they search extensions with
+build directory that causes runtime failures.
+
+Pass an environment variable to define runtime extension path.
+
+Upstream-Status: Inappropriate [OE ptest specific]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+diff -Nur freeDiameter-1.2.0.orig/tests/testloadext.c freeDiameter-1.2.0/tests/testloadext.c
+--- freeDiameter-1.2.0.orig/tests/testloadext.c 2014-02-19 17:33:24.785405032 +0800
++++ freeDiameter-1.2.0/tests/testloadext.c 2014-02-19 20:08:03.871403924 +0800
+@@ -49,7 +49,7 @@
+ {
+ DIR *dir;
+ struct dirent *dp;
+- char fullname[512];
++ char fullname[1024];
+ int pathlen;
+
+ /* First, initialize the daemon modules */
+@@ -57,11 +57,16 @@
+ CHECK( 0, fd_queues_init() );
+ CHECK( 0, fd_msg_init() );
+ CHECK( 0, fd_rtdisp_init() );
+-
++
++ char *ext_dir = getenv("EXTENSIONS_DIR");
++ if (ext_dir)
++ pathlen = snprintf(fullname, sizeof(fullname), "%s", ext_dir);
++ else
++ pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
++
+ /* Find all extensions which have been compiled along the test */
+- TRACE_DEBUG(INFO, "Loading from: '%s'", BUILD_DIR "/extensions");
+- CHECK( 0, (dir = opendir (BUILD_DIR "/extensions")) == NULL ? 1 : 0 );
+- pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
++ TRACE_DEBUG(INFO, "Loading from: '%s'", fullname);
++ CHECK( 0, (dir = opendir (fullname)) == NULL ? 1 : 0 );
+
+ while ((dp = readdir (dir)) != NULL) {
+ char * dot = strrchr(dp->d_name, '.');
+diff -Nur freeDiameter-1.2.0.orig/tests/testmesg_stress.c freeDiameter-1.2.0/tests/testmesg_stress.c
+--- freeDiameter-1.2.0.orig/tests/testmesg_stress.c 2014-02-19 17:33:24.785405032 +0800
++++ freeDiameter-1.2.0/tests/testmesg_stress.c 2014-02-19 20:08:03.928403924 +0800
+@@ -67,15 +67,20 @@
+ {
+ DIR *dir;
+ struct dirent *dp;
+- char fullname[512];
++ char fullname[1024];
+ int pathlen;
+ struct fd_list all_extensions = FD_LIST_INITIALIZER(all_extensions);
+ struct fd_list ext_with_depends = FD_LIST_INITIALIZER(ext_with_depends);
+
++ char *ext_dir = getenv("EXTENSIONS_DIR");
++ if (ext_dir)
++ pathlen = snprintf(fullname, sizeof(fullname), "%s", ext_dir);
++ else
++ pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
++
+ /* Find all extensions which have been compiled along the test */
+- LOG_D("Loading %s*.fdx from: '%s'", BUILD_DIR "/extensions", prefix ?: "");
+- CHECK( 0, (dir = opendir (BUILD_DIR "/extensions")) == NULL ? 1 : 0 );
+- pathlen = snprintf(fullname, sizeof(fullname), BUILD_DIR "/extensions/");
++ TRACE_DEBUG(INFO, "Loading from: '%s'", fullname);
++ CHECK( 0, (dir = opendir (fullname)) == NULL ? 1 : 0 );
+
+ while ((dp = readdir (dir)) != NULL) {
+ char * dot = strrchr(dp->d_name, '.');
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/run-ptest b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/run-ptest
new file mode 100644
index 000000000..d0ca8d962
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/files/run-ptest
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if ! lsmod | grep -q sctp && ! modprobe sctp 2>/dev/null; then
+ echo "Couldn't load kernel module sctp."
+ echo "Test cases testsctp and testcnx will fail."
+ echo
+fi
+
+export EXTENSIONS_DIR=$EXTENSIONS_DIR
+cmake -E cmake_echo_color --cyan "Running tests..."
+ctest --force-new-ctest-process
diff --git a/meta-openembedded/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb b/meta-openembedded/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb
new file mode 100644
index 000000000..c556eb48e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/freediameter/freediameter_1.2.1.bb
@@ -0,0 +1,138 @@
+SUMMARY = "An open source implementation of the diameter protocol"
+DESCRIPTION = "\
+freeDiameter is an open source Diameter protocol implementation \
+(RFC3588). It provides an extensible platform for deploying a \
+Diameter network for your Authentication, Authorization and \
+Accounting needs."
+
+HOMEPAGE = "http://www.freediameter.net"
+
+DEPENDS = "flex bison cmake-native libgcrypt gnutls libidn lksctp-tools virtual/kernel"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+fd_pkgname = "freeDiameter"
+
+SRC_URI = "\
+ http://www.freediameter.net/hg/${fd_pkgname}/archive/${PV}.tar.gz;downloadfilename=${fd_pkgname}-${PV}.tar.gz \
+ file://Replace-murmurhash-algorithm-with-Robert-Jenkin-s-ha.patch \
+ file://freediameter.service \
+ file://freediameter.init \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'file://install_test.patch file://run-ptest file://pass-ptest-env.patch', '', d)} \
+ file://freeDiameter.conf \
+ "
+
+SRC_URI[md5sum] = "61b1062aa144b5f12eed514611e6d697"
+SRC_URI[sha256sum] = "bd7f105542e9903e776aa006c6931c1f5d3d477cb59af33a9162422efa477097"
+
+S = "${WORKDIR}/${fd_pkgname}-${PV}"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=892b2ed6ae815488a08416ff7ee74a35"
+
+PTEST_PATH = "${libdir}/${fd_pkgname}/ptest"
+
+inherit cmake pkgconfig update-rc.d ptest systemd
+
+EXTRA_OECMAKE = " \
+ -DDEFAULT_CONF_PATH:PATH=${sysconfdir}/${fd_pkgname} \
+ -DBUILD_DBG_MONITOR:BOOL=ON \
+ -DBUILD_TEST_APP:BOOL=ON \
+ -DBUILD_TESTING:BOOL=ON \
+ -DBUILD_APP_RADGW:BOOL=ON \
+ -DBUILD_APP_REDIRECT:BOOL=ON \
+ -DBUILD_TEST_ACCT:BOOL=ON \
+ -DBUILD_TEST_NETEMUL:BOOL=ON \
+ -DBUILD_TEST_RT_ANY:BOOL=ON \
+ -DINSTALL_LIBRARY_SUFFIX:PATH=${baselib} \
+ -DINSTALL_EXTENSIONS_SUFFIX:PATH=${baselib}/${fd_pkgname} \
+ -DINSTALL_TEST_SUFFIX:PATH=${PTEST_PATH}-tests \
+ -DCMAKE_SKIP_RPATH:BOOL=ON \
+"
+# INSTALL_LIBRARY_SUFFIX is relative to CMAKE_INSTALL_PREFIX
+# specify it on cmd line will fix the SET bug in CMakeList.txt
+
+# -DBUILD_APP_ACCT:BOOL=ON This needs POSTGRESQL support
+
+# -DBUILD_APP_DIAMEAP:BOOL=ON -DBUILD_APP_SIP:BOOL=ON -DBUILD_TEST_SIP:BOOL=ON
+# These need MySQL support
+
+# -DBUILD_DBG_INTERACTIVE:BOOL=ON This needs SWIG support
+
+# -DALL_EXTENSIONS=ON will enable all
+
+FD_KEY ?="${BPN}.key"
+FD_PEM ?= "${BPN}.pem"
+FD_CA ?= "${BPN}.pem"
+FD_DH_PEM ?= "${BPN}-dh.pem"
+FD_HOSTNAME ?= "${MACHINE}"
+FD_REALM ?= "openembedded.org"
+
+do_install_append() {
+ # install the sample configuration files
+ install -d -m 0755 ${D}${sysconfdir}/${fd_pkgname}
+ for i in ${S}/doc/*.conf.sample; do
+ install -m 0644 $i ${D}${sysconfdir}/${fd_pkgname}/
+ done
+ mv ${D}${sysconfdir}/${fd_pkgname}/freediameter.conf.sample \
+ ${D}${sysconfdir}/${fd_pkgname}/freeDiameter.conf.sample
+ install -d ${D}${sysconfdir}/freeDiameter
+ install ${WORKDIR}/freeDiameter.conf ${D}${sysconfdir}/${fd_pkgname}/freeDiameter.conf
+
+ # install daemon init related files
+ install -d -m 0755 ${D}${sysconfdir}/default
+ install -d -m 0755 ${D}${sysconfdir}/init.d
+ install -m 0644 ${S}/contrib/debian/freediameter-daemon.default \
+ ${D}${sysconfdir}/default/${BPN}
+ install -m 0755 ${WORKDIR}/freediameter.init ${D}${sysconfdir}/init.d/${BPN}
+
+ # install for systemd
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/freediameter.service ${D}${systemd_system_unitdir}
+ sed -i -e 's,@BINDIR@,${bindir},g' ${D}${systemd_system_unitdir}/*.service
+
+ cat >> ${D}${sysconfdir}/freeDiameter/freeDiameter.conf <<EOF
+## OE specific ##
+#Identity="${FD_HOSTNAME}";
+Identity = "${FD_HOSTNAME}.${FD_REALM}";
+Realm = "${FD_REALM}";
+Port = 30868;
+SecPort = 30869;
+TLS_Cred = "/etc/freeDiameter/${FD_PEM}" , "/etc/freeDiameter/${FD_KEY}";
+TLS_CA = "/etc/freeDiameter/${FD_CA}";
+TLS_DH_File = "/etc/freeDiameter/${FD_DH_PEM}";
+EOF
+
+ # create self cert
+ openssl req -x509 -config ${STAGING_DIR_NATIVE}/etc/ssl/openssl.cnf -newkey rsa:4096 -sha256 -nodes -out ${D}${sysconfdir}/freeDiameter/${FD_PEM} -keyout ${D}${sysconfdir}/freeDiameter/${FD_KEY} -days 3650 -subj '/CN=${FD_HOSTNAME}.${FD_REALM}'
+ openssl dhparam -out ${D}${sysconfdir}/freeDiameter/${FD_DH_PEM} 1024
+
+}
+
+do_install_ptest() {
+ sed -i "s#\(EXTENSIONS_DIR=\).*\$#\1${libdir}/${fd_pkgname}/#" ${D}${PTEST_PATH}/run-ptest
+ mv ${D}${PTEST_PATH}-tests/* ${D}${PTEST_PATH}/
+ rmdir ${D}${PTEST_PATH}-tests
+ install -m 0644 ${B}/tests/CTestTestfile.cmake ${D}${PTEST_PATH}/
+}
+
+FILES_${PN}-dbg += "${libdir}/${fd_pkgname}/.debug/*"
+
+# include the extensions in main package
+FILES_${PN} += "${libdir}/${fd_pkgname}/*"
+
+RDEPENDS_${PN} = "glib-2.0 gnutls libidn"
+RDEPENDS_${PN} += "openssl openssl-conf openssl-engines"
+RRECOMMENDS_${PN} += "kernel-module-tipc kernel-module-sctp"
+RRECOMMENDS_${PN} += "kernel-module-udp-tunnel kernel-module-ipip"
+RDEPENDS_${PN}-ptest = "cmake"
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME_${PN} = "${BPN}"
+INITSCRIPT_PARAMS$_${PN} = "start 30 . stop 70 0 1 2 3 4 5 6 ."
+
+SYSTEMD_SERVICE_${PN} = "freediameter.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+CONFFILES_${PN} = "${sysconfdir}/freediameter.conf"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-nss_mdns-Do-not-include-nss.h-when-libc-glibc.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-nss_mdns-Do-not-include-nss.h-when-libc-glibc.patch
new file mode 100644
index 000000000..863866d18
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/0001-nss_mdns-Do-not-include-nss.h-when-libc-glibc.patch
@@ -0,0 +1,42 @@
+From d3082d2c606c810aa0a39378bf1e02575af3a301 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Feb 2018 21:54:11 -0800
+Subject: [PATCH] nss_mdns: Do not include nss.h when libc != glibc
+
+Provide nss_status macro instead for non-glibc case
+where nss.h is absent
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ mDNSPosix/nss_mdns.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+diff --git a/mDNSPosix/nss_mdns.c b/mDNSPosix/nss_mdns.c
+index afadb3c..c469584 100755
+--- a/mDNSPosix/nss_mdns.c
++++ b/mDNSPosix/nss_mdns.c
+@@ -378,8 +378,19 @@ init_config ();
+
+ #define ENTNAME hostent
+ #define DATABASE "hosts"
+-
++#ifdef __GLIBC__
+ #include <nss.h>
++#else
++enum nss_status
++{
++ NSS_STATUS_TRYAGAIN = -2,
++ NSS_STATUS_UNAVAIL,
++ NSS_STATUS_NOTFOUND,
++ NSS_STATUS_SUCCESS,
++ NSS_STATUS_RETURN
++};
++#define NETDB_INTERNAL NULL
++#endif
+ // For nss_status
+ #include <netdb.h>
+ // For hostent
+--
+2.16.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/build.patch b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/build.patch
new file mode 100644
index 000000000..4ab9d23bf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/build.patch
@@ -0,0 +1,167 @@
+From 43b6e98c9c37afd0d914949dcff4eab81f5a995f Mon Sep 17 00:00:00 2001
+From: Brendan Le Foll <brendan.le.foll@intel.com>
+Date: Tue, 3 Mar 2015 11:42:57 +0000
+
+Upstream-Status: Inappropriate [OE-specific]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+---
+ mDNSPosix/Makefile | 54 +++++++++++++++++++++++++-----------------------------
+ 1 file changed, 25 insertions(+), 29 deletions(-)
+
+diff --git a/mDNSPosix/Makefile b/mDNSPosix/Makefile
+index 4f98e90..8ac97ad 100755
+--- a/mDNSPosix/Makefile
++++ b/mDNSPosix/Makefile
+@@ -50,6 +50,7 @@
+
+ LIBVERS = 1
+
++POSIXDIR = ../mDNSPosix
+ COREDIR = ../mDNSCore
+ SHAREDDIR ?= ../mDNSShared
+ JDK = /usr/jdk
+@@ -58,11 +59,11 @@ CC = @cc
+ BISON = @bison
+ FLEX = @flex
+ ST = @strip
+-LD = ld -shared
++LD =@LD
+ CP = cp
+ RM = rm
+ LN = ln -s -f
+-CFLAGS_COMMON = -I$(COREDIR) -I$(SHAREDDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\"
++CFLAGS_COMMON = -I$(POSIXDIR) -I$(COREDIR) -I$(SHAREDDIR) -I$(OBJDIR) -fwrapv -W -Wall -DPID_FILE=\"/var/run/mdnsd.pid\" -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\"
+ CFLAGS_PTHREAD =
+ LINKOPTS =
+ LINKOPTS_PTHREAD = -lpthread
+@@ -70,7 +71,7 @@ LDSUFFIX = so
+ JAVACFLAGS_OS = -fPIC -shared -ldns_sd
+
+ # Set up diverging paths for debug vs. prod builds
+-DEBUG=0
++DEBUG?=1
+ ifeq ($(DEBUG),1)
+ CFLAGS_DEBUG = -g -DMDNS_DEBUGMSGS=2
+ OBJDIR = objects/debug
+@@ -213,7 +214,7 @@ endif
+ endif
+ endif
+
+-CFLAGS = $(CFLAGS_COMMON) $(CFLAGS_OS) $(CFLAGS_DEBUG)
++CFLAGS_BUILD = $(CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_OS) $(CFLAGS_DEBUG)
+
+ #############################################################################
+
+@@ -249,8 +250,7 @@ Daemon: setup $(BUILDDIR)/mdnsd
+ @echo "Responder daemon done"
+
+ $(BUILDDIR)/mdnsd: $(DAEMONOBJS)
+- $(CC) -o $@ $+ $(LINKOPTS)
+- @$(STRIP) $@
++ $(CC) -o $@ $+
+
+ # libdns_sd target builds the client library
+ libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX)
+@@ -259,22 +259,18 @@ libdns_sd: setup $(BUILDDIR)/libdns_sd.$(LDSUFFIX)
+ CLIENTLIBOBJS = $(OBJDIR)/dnssd_clientlib.c.so.o $(OBJDIR)/dnssd_clientstub.c.so.o $(OBJDIR)/dnssd_ipc.c.so.o
+
+ $(BUILDDIR)/libdns_sd.$(LDSUFFIX): $(CLIENTLIBOBJS)
+- @$(LD) $(LINKOPTS) -o $@ $+
+- @$(STRIP) $@
++ $(LD) -shared $(LINKOPTS) -Wl,-soname,libdns_sd.$(LDSUFFIX).1 -o $@ $+
+
+-Clients: setup libdns_sd ../Clients/build/dns-sd
++Clients: setup libdns_sd
++ @$(MAKE) -C ../Clients DEBUG=${DEBUG}
+ @echo "Clients done"
+
+-../Clients/build/dns-sd:
+- @$(MAKE) -C ../Clients
+-
+ # nss_mdns target builds the Name Service Switch module
+ nss_mdns: setup $(BUILDDIR)/$(NSSLIBFILE)
+ @echo "Name Service Switch module done"
+
+ $(BUILDDIR)/$(NSSLIBFILE): $(CLIENTLIBOBJS) $(OBJDIR)/nss_mdns.c.so.o
+- @$(LD) $(LINKOPTS) -o $@ $+
+- @$(STRIP) $@
++ $(LD) -shared $(LINKOPTS) -o $@ $+
+
+ #############################################################################
+
+@@ -470,55 +466,55 @@ dnsextd: setup $(BUILDDIR)/dnsextd
+ @echo "dnsextd done"
+
+ $(BUILDDIR)/mDNSClientPosix: $(APPOBJ) $(OBJDIR)/Client.c.o
+- $(CC) $+ -o $@ $(LINKOPTS)
++ $(CC) $+ -o $@
+
+ $(BUILDDIR)/mDNSResponderPosix: $(COMMONOBJ) $(OBJDIR)/Responder.c.o
+- $(CC) $+ -o $@ $(LINKOPTS)
++ $(CC) $+ -o $@
+
+ $(BUILDDIR)/mDNSProxyResponderPosix: $(COMMONOBJ) $(OBJDIR)/ProxyResponder.c.o
+- $(CC) $+ -o $@ $(LINKOPTS)
++ $(CC) $+ -o $@
+
+ $(BUILDDIR)/mDNSIdentify: $(SPECIALOBJ) $(OBJDIR)/Identify.c.o
+- $(CC) $+ -o $@ $(LINKOPTS)
++ $(CC) $+ -o $@
+
+ $(OBJDIR)/Identify.c.o: $(COREDIR)/mDNS.c # Note: Identify.c textually imports mDNS.c
+
+ $(BUILDDIR)/mDNSNetMonitor: $(SPECIALOBJ) $(OBJDIR)/NetMonitor.c.o
+- $(CC) $+ -o $@ $(LINKOPTS)
++ $(CC) $+ -o $@
+
+ $(OBJDIR)/NetMonitor.c.o: $(COREDIR)/mDNS.c # Note: NetMonitor.c textually imports mDNS.c
+
+ $(BUILDDIR)/dnsextd: $(DNSEXTDOBJ) $(OBJDIR)/dnsextd.c.threadsafe.o
+- $(CC) $+ -o $@ $(LINKOPTS) $(LINKOPTS_PTHREAD)
++ $(CC) $+ -o $@ $(LINKOPTS_PTHREAD)
+
+ #############################################################################
+
+ # Implicit rules
+ $(OBJDIR)/%.c.o: %.c
+- $(CC) $(CFLAGS) -c -o $@ $<
++ $(CC) $(CFLAGS_BUILD) -c -o $@ $<
+
+ $(OBJDIR)/%.c.o: $(COREDIR)/%.c
+- $(CC) $(CFLAGS) -c -o $@ $<
++ $(CC) $(CFLAGS_BUILD) -c -o $@ $<
+
+ $(OBJDIR)/%.c.o: $(SHAREDDIR)/%.c
+- $(CC) $(CFLAGS) -c -o $@ $<
++ $(CC) $(CFLAGS_BUILD) -c -o $@ $<
+
+ $(OBJDIR)/%.c.threadsafe.o: %.c
+- $(CC) $(CFLAGS) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
++ $(CC) $(CFLAGS_BUILD) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
+
+ $(OBJDIR)/%.c.threadsafe.o: $(SHAREDDIR)/%.c
+- $(CC) $(CFLAGS) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
++ $(CC) $(CFLAGS_BUILD) $(CFLAGS_PTHREAD) -D_REENTRANT -c -o $@ $<
+
+ $(OBJDIR)/%.c.so.o: %.c
+- $(CC) $(CFLAGS) -c -fPIC -o $@ $<
++ $(CC) $(CFLAGS_BUILD) -c -fPIC -o $@ $<
+
+ $(OBJDIR)/%.c.so.o: $(SHAREDDIR)/%.c
+- $(CC) $(CFLAGS) -c -fPIC -o $@ $<
++ $(CC) $(CFLAGS_BUILD) -c -fPIC -o $@ $<
+
+ $(OBJDIR)/%.y.o: $(SHAREDDIR)/%.y
+ $(BISON) -o $(OBJDIR)/$*.c -d $<
+- $(CC) $(CFLAGS) -c -o $@ $(OBJDIR)/$*.c
++ $(CC) $(CFLAGS_BUILD) -c -o $@ $(OBJDIR)/$*.c
+
+ $(OBJDIR)/%.l.o: $(SHAREDDIR)/%.l
+ $(FLEX) $(FLEXFLAGS_OS) -i -o$(OBJDIR)/$*.l.c $<
+- $(CC) $(CFLAGS) -Wno-error -c -o $@ $(OBJDIR)/$*.l.c
++ $(CC) $(CFLAGS_BUILD) -Wno-error -c -o $@ $(OBJDIR)/$*.l.c
+--
+2.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/files/mdns.service b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/mdns.service
new file mode 100644
index 000000000..531d142dc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/files/mdns.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Zero-configuration networking
+After=network.target
+
+[Service]
+Type=forking
+ExecStartPre=/bin/rm -f /var/run/mdnsd.pid
+ExecStart=/usr/sbin/mdnsd
+ExecReload=/bin/kill -HUP $MAINPID
+PIDFile=/var/run/mdnsd.pid
+Restart=always
+RestartSec=10s
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_765.50.9.bb b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_765.50.9.bb
new file mode 100644
index 000000000..9a7152fcf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/mdns/mdns_765.50.9.bb
@@ -0,0 +1,90 @@
+SUMMARY = "Publishes & browses available services on a link according to the Zeroconf / Bonjour protocol"
+DESCRIPTION = "Bonjour, also known as zero-configuration networking, enables automatic discovery of computers, devices, and services on IP networks."
+HOMEPAGE = "http://developer.apple.com/networking/bonjour/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://../LICENSE;md5=31c50371921e0fb731003bbc665f29bf"
+
+RPROVIDES_${PN} += "libdns_sd.so"
+
+SRC_URI = "http://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-${PV}.tar.gz \
+ file://build.patch;patchdir=.. \
+ file://mdns.service \
+ file://0001-nss_mdns-Do-not-include-nss.h-when-libc-glibc.patch;patchdir=.. \
+ "
+
+SRC_URI[md5sum] = "4a6bc1628851002634ea3833a4dca317"
+SRC_URI[sha256sum] = "de61dd0034357aa50c60806726fb1f70fa8e953ff9cb62eccfb73efad10dba0a"
+
+PARALLEL_MAKE = ""
+
+S = "${WORKDIR}/mDNSResponder-${PV}/mDNSPosix"
+
+EXTRA_OEMAKE += "os=linux DEBUG=0 'CC=${CC}' 'LD=${CCLD} ${LDFLAGS}'"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+do_install () {
+ install -d ${D}${sbindir}
+ install -m 0755 build/prod/mdnsd ${D}${sbindir}
+
+ install -d ${D}${libdir}
+ cp build/prod/libdns_sd.so ${D}${libdir}/libdns_sd.so.1
+ chmod 0644 ${D}${libdir}/libdns_sd.so.1
+ ln -s libdns_sd.so.1 ${D}${libdir}/libdns_sd.so
+
+ install -d ${D}${includedir}
+ install -m 0644 ../mDNSShared/dns_sd.h ${D}${includedir}
+
+ install -d ${D}${mandir}/man8
+ install -m 0644 ../mDNSShared/mDNSResponder.8 ${D}${mandir}/man8/mdnsd.8
+
+ install -d ${D}${bindir}
+ install -m 0755 ../Clients/build/dns-sd ${D}${bindir}
+
+ install -d ${D}${libdir}
+ oe_libinstall -C build/prod -so libnss_mdns-0.2 ${D}${libdir}
+ ln -s libnss_mdns-0.2.so ${D}${libdir}/libnss_mdns.so.2
+
+ install -d ${D}${sysconfdir}
+ install -m 0644 nss_mdns.conf ${D}${sysconfdir}
+
+ install -d ${D}${mandir}/man5
+ install -m 0644 nss_mdns.conf.5 ${D}${mandir}/man5
+
+ install -d ${D}${mandir}/man8
+ install -m 0644 libnss_mdns.8 ${D}${mandir}/man8
+
+ install -d ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/mdns.service ${D}${systemd_unitdir}/system/
+}
+
+pkg_postinst_${PN} () {
+ sed -e '/^hosts:/s/\s*\<mdns\>//' \
+ -e 's/\(^hosts:.*\)\(\<files\>\)\(.*\)\(\<dns\>\)\(.*\)/\1\2 mdns\3\4\5/' \
+ -i $D/etc/nsswitch.conf
+}
+
+pkg_prerm_${PN} () {
+ sed -e '/^hosts:/s/\s*\<mdns\>//' \
+ -e '/^hosts:/s/\s*mdns//' \
+ -i $D/etc/nsswitch.conf
+}
+
+inherit systemd
+
+SYSTEMD_SERVICE_${PN} = "mdns.service"
+
+FILES_${PN} += "${systemd_unitdir}/system/mdns.service"
+FILES_${PN} += "${libdir}/libdns_sd.so.1 \
+ ${bindir}/dns-sd \
+ ${libdir}/libnss_mdns-0.2.so \
+ ${sysconfdir}/nss_mdns.conf"
+
+FILES_${PN}-dev += "${libdir}/libdns_sd.so \
+ ${includedir}/dns_sd.h "
+
+FILES_${PN}-man += "${mandir}/man8/mdnsd.8 \
+ ${mandir}/man5/nss_mdns.conf.5 \
+ ${mandir}/man8/libnss_mdns.8"
+
+PACKAGES = "${PN} ${PN}-dev ${PN}-man ${PN}-dbg"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/init b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/init
new file mode 100755
index 000000000..47995466f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/init
@@ -0,0 +1,66 @@
+#! /bin/sh
+# /etc/init.d/snmpd: start snmp daemon.
+
+. /etc/init.d/functions
+
+# Defaults
+export MIBDIRS=/usr/share/snmp/mibs
+SNMPDRUN=yes
+SNMPDOPTS='-Lsd -Lf /dev/null -p /var/run/snmpd.pid'
+TRAPDRUN=no
+TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'
+PIDFILE=/var/run/snmpd.pid
+SPIDFILE=/var/run/snmptrapd.pid
+
+# Reads config file if exists (will override defaults above)
+[ -r /etc/default/snmpd ] && . /etc/default/snmpd
+
+[ "$SNMPDRUN" = "yes" ] && { test -x /usr/sbin/snmpd || exit 0; }
+[ "$TRAPDRUN" = "yes" ] && { test -x /usr/sbin/snmptrapd || exit 0; }
+
+case "$1" in
+ start)
+ echo -n "Starting network management services:"
+ if [ "$SNMPDRUN" = "yes" -a -f /etc/snmp/snmpd.conf -a ! -f "$PIDFILE" ]; then
+ start-stop-daemon -o --start --quiet --name snmpd --pidfile "$PIDFILE" \
+ --exec /usr/sbin/snmpd -- $SNMPDOPTS
+ echo -n " snmpd"
+ fi
+ if [ "$TRAPDRUN" = "yes" -a -f /etc/snmp/snmptrapd.conf -a ! -f "$SPIDFILE" ]; then
+ start-stop-daemon -o --start --quiet --name snmptrapd --pidfile "$SPIDFILE" \
+ --exec /usr/sbin/snmptrapd -- $TRAPDOPTS
+ echo -n " snmptrapd"
+ fi
+ echo "."
+
+ test ! -x /sbin/restorecon || /sbin/restorecon -FR /var/lib/net-snmp
+ ;;
+ stop)
+ echo -n "Stopping network management services:"
+ if [ -f "$PIDFILE" ] ; then
+ start-stop-daemon -o --stop --quiet --pidfile $PIDFILE --name snmpd
+ fi
+ echo -n " snmpd"
+ if [ -f "$SPIDFILE" ] ; then
+ start-stop-daemon -o --stop --quiet --pidfile $SPIDFILE --name snmptrapd
+ rm -rf $SPIDFILE
+ fi
+ echo -n " snmptrapd"
+ echo "."
+ ;;
+ status)
+ status /usr/sbin/snmpd;
+ exit $?
+ ;;
+ restart|reload|force-reload)
+ $0 stop
+ # Allow the daemons time to exit completely.
+ sleep 2
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/snmpd {start|stop|status|restart|reload|force-reload}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmpd.conf b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmpd.conf
new file mode 100644
index 000000000..728171c42
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmpd.conf
@@ -0,0 +1,422 @@
+###############################################################################
+#
+# EXAMPLE.conf:
+# An example configuration file for configuring the ucd-snmp snmpd agent.
+#
+###############################################################################
+#
+# This file is intended to only be an example. If, however, you want
+# to use it, it should be placed in /etc/snmp/snmpd.conf.
+# When the snmpd agent starts up, this is where it will look for it.
+#
+# You might be interested in generating your own snmpd.conf file using
+# the "snmpconf" program (perl script) instead. It's a nice menu
+# based interface to writing well commented configuration files. Try it!
+#
+# Note: This file is automatically generated from EXAMPLE.conf.def.
+# Do NOT read the EXAMPLE.conf.def file! Instead, after you have run
+# configure & make, and then make sure you read the EXAMPLE.conf file
+# instead, as it will tailor itself to your configuration.
+
+# All lines beginning with a '#' are comments and are intended for you
+# to read. All other lines are configuration commands for the agent.
+
+#
+# PLEASE: read the snmpd.conf(5) manual page as well!
+#
+
+
+###############################################################################
+# Access Control
+###############################################################################
+
+# YOU SHOULD CHANGE THE "COMMUNITY" TOKEN BELOW TO A NEW KEYWORD ONLY
+# KNOWN AT YOUR SITE. YOU *MUST* CHANGE THE NETWORK TOKEN BELOW TO
+# SOMETHING REFLECTING YOUR LOCAL NETWORK ADDRESS SPACE.
+
+# By far, the most common question I get about the agent is "why won't
+# it work?", when really it should be "how do I configure the agent to
+# allow me to access it?"
+#
+# By default, the agent responds to the "public" community for read
+# only access, if run out of the box without any configuration file in
+# place. The following examples show you other ways of configuring
+# the agent so that you can change the community names, and give
+# yourself write access as well.
+#
+# The following lines change the access permissions of the agent so
+# that the COMMUNITY string provides read-only access to your entire
+# NETWORK (EG: 10.10.10.0/24), and read/write access to only the
+# localhost (127.0.0.1, not its real ipaddress).
+#
+# For more information, read the FAQ as well as the snmpd.conf(5)
+# manual page.
+
+####
+# First, map the community name (COMMUNITY) into a security name
+# (local and mynetwork, depending on where the request is coming
+# from):
+
+# sec.name source community
+com2sec paranoid default public
+#com2sec readonly default public
+#com2sec readwrite default private
+
+####
+# Second, map the security names into group names:
+
+# sec.model sec.name
+group MyROSystem v1 paranoid
+group MyROSystem v2c paranoid
+group MyROSystem usm paranoid
+group MyROGroup v1 readonly
+group MyROGroup v2c readonly
+group MyROGroup usm readonly
+group MyRWGroup v1 readwrite
+group MyRWGroup v2c readwrite
+group MyRWGroup usm readwrite
+
+####
+# Third, create a view for us to let the groups have rights to:
+
+# incl/excl subtree mask
+view all included .1 80
+view system included .iso.org.dod.internet.mgmt.mib-2.system
+
+####
+# Finally, grant the 2 groups access to the 1 view with different
+# write permissions:
+
+# context sec.model sec.level match read write notif
+access MyROSystem "" any noauth exact system none none
+access MyROGroup "" any noauth exact all none none
+access MyRWGroup "" any noauth exact all all none
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# System contact information
+#
+
+# It is also possible to set the sysContact and sysLocation system
+# variables through the snmpd.conf file. **PLEASE NOTE** that setting
+# the value of these objects here makes these objects READ-ONLY
+# (regardless of any access control settings). Any attempt to set the
+# value of an object whose value is given here will fail with an error
+# status of notWritable.
+
+syslocation Unknown (configure /etc/snmp/snmpd.local.conf)
+syscontact Root <root@localhost> (configure /etc/snmp/snmpd.local.conf)
+
+# Example output of snmpwalk:
+# % snmpwalk -v 1 -c public localhost system
+# system.sysDescr.0 = "SunOS name sun4c"
+# system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.sunos4
+# system.sysUpTime.0 = Timeticks: (595637548) 68 days, 22:32:55
+# system.sysContact.0 = "Me <me@somewhere.org>"
+# system.sysName.0 = "name"
+# system.sysLocation.0 = "Right here, right now."
+# system.sysServices.0 = 72
+
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Process checks.
+#
+# The following are examples of how to use the agent to check for
+# processes running on the host. The syntax looks something like:
+#
+# proc NAME [MAX=0] [MIN=0]
+#
+# NAME: the name of the process to check for. It must match
+# exactly (ie, http will not find httpd processes).
+# MAX: the maximum number allowed to be running. Defaults to 0.
+# MIN: the minimum number to be running. Defaults to 0.
+
+#
+# Examples:
+#
+
+# Make sure mountd is running
+#proc mountd
+
+# Make sure there are no more than 4 ntalkds running, but 0 is ok too.
+#proc ntalkd 4
+
+# Make sure at least one sendmail, but less than or equal to 10 are running.
+#proc sendmail 10 1
+
+# A snmpwalk of the prTable would look something like this:
+#
+# % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.2
+# enterprises.ucdavis.procTable.prEntry.prIndex.1 = 1
+# enterprises.ucdavis.procTable.prEntry.prIndex.2 = 2
+# enterprises.ucdavis.procTable.prEntry.prIndex.3 = 3
+# enterprises.ucdavis.procTable.prEntry.prNames.1 = "mountd"
+# enterprises.ucdavis.procTable.prEntry.prNames.2 = "ntalkd"
+# enterprises.ucdavis.procTable.prEntry.prNames.3 = "sendmail"
+# enterprises.ucdavis.procTable.prEntry.prMin.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prMin.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prMin.3 = 1
+# enterprises.ucdavis.procTable.prEntry.prMax.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prMax.2 = 4
+# enterprises.ucdavis.procTable.prEntry.prMax.3 = 10
+# enterprises.ucdavis.procTable.prEntry.prCount.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prCount.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prCount.3 = 1
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.1 = 1
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrorFlag.3 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.1 = "No mountd process running."
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.2 = ""
+# enterprises.ucdavis.procTable.prEntry.prErrMessage.3 = ""
+# enterprises.ucdavis.procTable.prEntry.prErrFix.1 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrFix.2 = 0
+# enterprises.ucdavis.procTable.prEntry.prErrFix.3 = 0
+#
+# Note that the errorFlag for mountd is set to 1 because one is not
+# running (in this case an rpc.mountd is, but thats not good enough),
+# and the ErrMessage tells you what's wrong. The configuration
+# imposed in the snmpd.conf file is also shown.
+#
+# Special Case: When the min and max numbers are both 0, it assumes
+# you want a max of infinity and a min of 1.
+#
+
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Executables/scripts
+#
+
+#
+# You can also have programs run by the agent that return a single
+# line of output and an exit code. Here are two examples.
+#
+# exec NAME PROGRAM [ARGS ...]
+#
+# NAME: A generic name.
+# PROGRAM: The program to run. Include the path!
+# ARGS: optional arguments to be passed to the program
+
+# a simple hello world
+#exec echotest /bin/echo hello world
+
+# Run a shell script containing:
+#
+# #!/bin/sh
+# echo hello world
+# echo hi there
+# exit 35
+#
+# Note: this has been specifically commented out to prevent
+# accidental security holes due to someone else on your system writing
+# a /tmp/shtest before you do. Uncomment to use it.
+#
+#exec shelltest /bin/sh /tmp/shtest
+
+# Then,
+# % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.8
+# enterprises.ucdavis.extTable.extEntry.extIndex.1 = 1
+# enterprises.ucdavis.extTable.extEntry.extIndex.2 = 2
+# enterprises.ucdavis.extTable.extEntry.extNames.1 = "echotest"
+# enterprises.ucdavis.extTable.extEntry.extNames.2 = "shelltest"
+# enterprises.ucdavis.extTable.extEntry.extCommand.1 = "/bin/echo hello world"
+# enterprises.ucdavis.extTable.extEntry.extCommand.2 = "/bin/sh /tmp/shtest"
+# enterprises.ucdavis.extTable.extEntry.extResult.1 = 0
+# enterprises.ucdavis.extTable.extEntry.extResult.2 = 35
+# enterprises.ucdavis.extTable.extEntry.extOutput.1 = "hello world."
+# enterprises.ucdavis.extTable.extEntry.extOutput.2 = "hello world."
+# enterprises.ucdavis.extTable.extEntry.extErrFix.1 = 0
+# enterprises.ucdavis.extTable.extEntry.extErrFix.2 = 0
+
+# Note that the second line of the /tmp/shtest shell script is cut
+# off. Also note that the exit status of 35 was returned.
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# disk checks
+#
+
+# The agent can check the amount of available disk space, and make
+# sure it is above a set limit.
+
+# disk PATH [MIN=DEFDISKMINIMUMSPACE]
+#
+# PATH: mount path to the disk in question.
+# MIN: Disks with space below this value will have the Mib's errorFlag set.
+# Default value = DEFDISKMINIMUMSPACE.
+
+# Check the / partition and make sure it contains at least 10 megs.
+
+#disk / 10000
+
+# % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.9
+# enterprises.ucdavis.diskTable.dskEntry.diskIndex.1 = 0
+# enterprises.ucdavis.diskTable.dskEntry.diskPath.1 = "/" Hex: 2F
+# enterprises.ucdavis.diskTable.dskEntry.diskDevice.1 = "/dev/dsk/c201d6s0"
+# enterprises.ucdavis.diskTable.dskEntry.diskMinimum.1 = 10000
+# enterprises.ucdavis.diskTable.dskEntry.diskTotal.1 = 837130
+# enterprises.ucdavis.diskTable.dskEntry.diskAvail.1 = 316325
+# enterprises.ucdavis.diskTable.dskEntry.diskUsed.1 = 437092
+# enterprises.ucdavis.diskTable.dskEntry.diskPercent.1 = 58
+# enterprises.ucdavis.diskTable.dskEntry.diskErrorFlag.1 = 0
+# enterprises.ucdavis.diskTable.dskEntry.diskErrorMsg.1 = ""
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# load average checks
+#
+
+# load [1MAX=DEFMAXLOADAVE] [5MAX=DEFMAXLOADAVE] [15MAX=DEFMAXLOADAVE]
+#
+# 1MAX: If the 1 minute load average is above this limit at query
+# time, the errorFlag will be set.
+# 5MAX: Similar, but for 5 min average.
+# 15MAX: Similar, but for 15 min average.
+
+# Check for loads:
+#load 12 14 14
+
+# % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.10
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.1 = 1
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.2 = 2
+# enterprises.ucdavis.loadTable.laEntry.loadaveIndex.3 = 3
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.1 = "Load-1"
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.2 = "Load-5"
+# enterprises.ucdavis.loadTable.laEntry.loadaveNames.3 = "Load-15"
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.1 = "0.49" Hex: 30 2E 34 39
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.2 = "0.31" Hex: 30 2E 33 31
+# enterprises.ucdavis.loadTable.laEntry.loadaveLoad.3 = "0.26" Hex: 30 2E 32 36
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.1 = "12.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.2 = "14.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveConfig.3 = "14.00"
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.1 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.2 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrorFlag.3 = 0
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.1 = ""
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.2 = ""
+# enterprises.ucdavis.loadTable.laEntry.loadaveErrMessage.3 = ""
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Extensible sections.
+#
+
+# This alleviates the multiple line output problem found in the
+# previous executable mib by placing each mib in its own mib table:
+
+# Run a shell script containing:
+#
+# #!/bin/sh
+# echo hello world
+# echo hi there
+# exit 35
+#
+# Note: this has been specifically commented out to prevent
+# accidental security holes due to someone else on your system writing
+# a /tmp/shtest before you do. Uncomment to use it.
+#
+# exec .1.3.6.1.4.1.2021.50 shelltest /bin/sh /tmp/shtest
+
+# % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.50
+# enterprises.ucdavis.50.1.1 = 1
+# enterprises.ucdavis.50.2.1 = "shelltest"
+# enterprises.ucdavis.50.3.1 = "/bin/sh /tmp/shtest"
+# enterprises.ucdavis.50.100.1 = 35
+# enterprises.ucdavis.50.101.1 = "hello world."
+# enterprises.ucdavis.50.101.2 = "hi there."
+# enterprises.ucdavis.50.102.1 = 0
+
+# Now the Output has grown to two lines, and we can see the 'hi
+# there.' output as the second line from our shell script.
+#
+# Note that you must alter the mib.txt file to be correct if you want
+# the .50.* outputs above to change to reasonable text descriptions.
+
+# Other ideas:
+#
+# exec .1.3.6.1.4.1.2021.51 ps /bin/ps
+# exec .1.3.6.1.4.1.2021.52 top /usr/local/bin/top
+# exec .1.3.6.1.4.1.2021.53 mailq /usr/bin/mailq
+
+# -----------------------------------------------------------------------------
+
+
+###############################################################################
+# Pass through control.
+#
+
+# Usage:
+# pass MIBOID EXEC-COMMAND
+#
+# This will pass total control of the mib underneath the MIBOID
+# portion of the mib to the EXEC-COMMAND.
+#
+# Note: You'll have to change the path of the passtest script to your
+# source directory or install it in the given location.
+#
+# Example: (see the script for details)
+# (commented out here since it requires that you place the
+# script in the right location. (its not installed by default))
+
+# pass .1.3.6.1.4.1.2021.255 /bin/sh /usr/local/passtest
+
+# % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.255
+# enterprises.ucdavis.255.1 = "life the universe and everything"
+# enterprises.ucdavis.255.2.1 = 42
+# enterprises.ucdavis.255.2.2 = OID: 42.42.42
+# enterprises.ucdavis.255.3 = Timeticks: (363136200) 42 days, 0:42:42
+# enterprises.ucdavis.255.4 = IpAddress: 127.0.0.1
+# enterprises.ucdavis.255.5 = 42
+# enterprises.ucdavis.255.6 = Gauge: 42
+#
+# % snmpget -v 1 -c public localhost .1.3.6.1.4.1.2021.255.5
+# enterprises.ucdavis.255.5 = 42
+#
+# % snmpset -v 1 -c public localhost .1.3.6.1.4.1.2021.255.1 s "New string"
+# enterprises.ucdavis.255.1 = "New string"
+#
+
+# For specific usage information, see the man/snmpd.conf.5 manual page
+# as well as the local/passtest script used in the above example.
+
+###############################################################################
+# Subagent control
+#
+
+# The agent can support subagents using a number of extension mechanisms.
+# From the 4.2.1 release, AgentX support is being compiled in by default.
+# However, this is still experimental code, so should not be used on
+# critical production systems.
+# Please see the file README.agentx for more details.
+#
+# If having read, marked, learnt and inwardly digested this information,
+# you decide that you do wish to make use of this mechanism, simply
+# uncomment the following directive.
+#
+# master agentx
+#
+# I repeat - this is *NOT* regarded as suitable for front-line production
+# systems, though it is probably stable enough for day-to-day use.
+# Probably.
+#
+# No refunds will be given.
+
+###############################################################################
+# Further Information
+#
+# See the snmpd.conf manual page, and the output of "snmpd -H".
+# MUCH more can be done with the snmpd.conf than is shown as an
+# example here.
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmptrapd.conf b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmptrapd.conf
new file mode 100644
index 000000000..8d2e4375e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/files/snmptrapd.conf
@@ -0,0 +1,18 @@
+###############################################################################
+#
+# EXAMPLE.conf:
+# An example configuration file for configuring the ucd-snmp snmptrapd agent.
+#
+###############################################################################
+#
+# This file is intended to only be an example. If, however, you want
+# to use it, it should be placed in /etc/snmp/snmptrapd.conf.
+# When the snmptrapd agent starts up, this is where it will look for it.
+#
+# All lines beginning with a '#' are comments and are intended for you
+# to read. All other lines are configuration commands for the agent.
+
+#
+# PLEASE: read the snmptrapd.conf(5) manual page as well!
+#
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-BUG-a2584-Fix-snmptrap-to-use-clientaddr-from-snmp.c.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-BUG-a2584-Fix-snmptrap-to-use-clientaddr-from-snmp.c.patch
new file mode 100644
index 000000000..b14b76128
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-BUG-a2584-Fix-snmptrap-to-use-clientaddr-from-snmp.c.patch
@@ -0,0 +1,45 @@
+From a92628a163ebf1ea62220684736300461c003875 Mon Sep 17 00:00:00 2001
+From: Niels Baggesen <nba@users.sourceforge.net>
+Date: Mon, 26 Jan 2015 20:26:06 +0100
+Subject: [PATCH] BUG#a2584: Fix snmptrap to use clientaddr from snmp.conf.
+ Thanks to rizwan
+
+Upstream-Status: backport
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ snmplib/transports/snmpUDPIPv6Domain.c | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+Index: net-snmp-5.7.3/snmplib/transports/snmpUDPIPv6Domain.c
+===================================================================
+--- net-snmp-5.7.3.orig/snmplib/transports/snmpUDPIPv6Domain.c
++++ net-snmp-5.7.3/snmplib/transports/snmpUDPIPv6Domain.c
+@@ -286,6 +286,27 @@ netsnmp_udp6_transport(struct sockaddr_i
+ return NULL;
+ #endif /* NETSNMP_NO_LISTEN_SUPPORT */
+ } else {
++ char *client_socket = NULL;
++ /*
++ * This is a client session. If we've been given a
++ * client address to send from, then bind to that.
++ * Otherwise the send will use "something sensible".
++ */
++
++ client_socket = netsnmp_ds_get_string(NETSNMP_DS_LIBRARY_ID,
++ NETSNMP_DS_LIB_CLIENT_ADDR);
++ if (client_socket) {
++ struct sockaddr_in6 client_addr;
++ netsnmp_sockaddr_in6_2(&client_addr, client_socket, NULL);
++ rc = bind(t->sock, (struct sockaddr *)&client_addr,
++ sizeof(struct sockaddr_in6));
++ if ( rc != 0 ) {
++ DEBUGMSGTL(("netsnmp_udp6", "failed to bind for clientaddr: %d %s\n",
++ errno, strerror(errno)));
++ netsnmp_socketbase_close(t);
++ netsnmp_transport_free(t);
++ }
++ }
+ /*
+ * This is a client session. Save the address in the
+ * transport-specific data pointer for later use by netsnmp_udp6_send.
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Remove-U64-typedef.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Remove-U64-typedef.patch
new file mode 100644
index 000000000..7314ab16a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-Remove-U64-typedef.patch
@@ -0,0 +1,2524 @@
+net-snmp: remove U64 typedef
+
+From git://git.code.sf.net/p/net-snmp/code
+
+Upstream-Status: Backport (unmodified)
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+From 477b4307ef12ddce3b6a9205e0bdddbfb2e0e9b6 Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Sat, 20 Feb 2016 18:58:18 -0800
+Subject: [PATCH 1/1] Remove U64 typedef
+
+The U64 typedef conflicts with a typedef in a Perl header file. Hence
+remove the U64 typedef from the Net-SNMP header files. This patch does
+not modify the Net-SNMP ABI.
+---
+ agent/mibgroup/if-mib/ifXTable/ifXTable.c | 16 +-
+ agent/mibgroup/if-mib/ifXTable/ifXTable.h | 48 +-
+ .../mibgroup/if-mib/ifXTable/ifXTable_interface.c | 32 +-
+ .../ip-mib/data_access/systemstats_common.c | 2 +-
+ .../ipIfStatsTable/ipIfStatsTable_data_get.c | 28 +-
+ .../ipIfStatsTable/ipIfStatsTable_data_get.h | 28 +-
+ .../ipIfStatsTable/ipIfStatsTable_interface.c | 56 +-
+ .../ip-mib/ipSystemStatsTable/ipSystemStatsTable.c | 28 +-
+ .../ip-mib/ipSystemStatsTable/ipSystemStatsTable.h | 921 ++-------------------
+ .../ipSystemStatsTable_interface.c | 56 +-
+ include/net-snmp/data_access/ipstats.h | 42 +-
+ include/net-snmp/library/int64.h | 34 +-
+ snmplib/int64.c | 38 +-
+ snmplib/read_config.c | 6 +-
+ testing/fulltests/unit-tests/T015int64_clib.c | 10 +-
+ 15 files changed, 274 insertions(+), 1071 deletions(-)
+
+Index: net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/if-mib/ifXTable/ifXTable.c
++++ net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.c
+@@ -722,7 +722,7 @@ The total number of octets received on t
+ */
+ int
+ ifHCInOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCInOctets_val_ptr)
++ struct counter64 *ifHCInOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInOctets_val_ptr);
+@@ -779,7 +779,7 @@ The number of packets, delivered by this
+ */
+ int
+ ifHCInUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCInUcastPkts_val_ptr)
++ struct counter64 *ifHCInUcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInUcastPkts_val_ptr);
+@@ -838,7 +838,7 @@ The number of packets, delivered by this
+ */
+ int
+ ifHCInMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCInMulticastPkts_val_ptr)
++ struct counter64 *ifHCInMulticastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInMulticastPkts_val_ptr);
+@@ -897,7 +897,7 @@ The number of packets, delivered by this
+ */
+ int
+ ifHCInBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCInBroadcastPkts_val_ptr)
++ struct counter64 *ifHCInBroadcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCInBroadcastPkts_val_ptr);
+@@ -955,7 +955,7 @@ The total number of octets transmitted o
+ */
+ int
+ ifHCOutOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCOutOctets_val_ptr)
++ struct counter64 *ifHCOutOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutOctets_val_ptr);
+@@ -1013,7 +1013,7 @@ The total number of packets that higher-
+ */
+ int
+ ifHCOutUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCOutUcastPkts_val_ptr)
++ struct counter64 *ifHCOutUcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutUcastPkts_val_ptr);
+@@ -1074,7 +1074,7 @@ The total number of packets that higher-
+ */
+ int
+ ifHCOutMulticastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCOutMulticastPkts_val_ptr)
++ struct counter64 *ifHCOutMulticastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutMulticastPkts_val_ptr);
+@@ -1134,7 +1134,7 @@ The total number of packets that higher-
+ */
+ int
+ ifHCOutBroadcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCOutBroadcastPkts_val_ptr)
++ struct counter64 *ifHCOutBroadcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ifHCOutBroadcastPkts_val_ptr);
+Index: net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.h
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/if-mib/ifXTable/ifXTable.h
++++ net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable.h
+@@ -143,28 +143,28 @@ config_require(if-mib/ifXTable/ifXTable_
+ u_long *
+ ifOutBroadcastPkts_val_ptr);
+ int ifHCInOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCInOctets_val_ptr);
++ struct counter64 *ifHCInOctets_val_ptr);
+ int ifHCInUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCInUcastPkts_val_ptr);
++ struct counter64 *ifHCInUcastPkts_val_ptr);
+ int ifHCInMulticastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ifHCInMulticastPkts_val_ptr);
+ int ifHCInBroadcastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ifHCInBroadcastPkts_val_ptr);
+ int ifHCOutOctets_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCOutOctets_val_ptr);
++ struct counter64 *ifHCOutOctets_val_ptr);
+ int ifHCOutUcastPkts_get(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 * ifHCOutUcastPkts_val_ptr);
++ struct counter64 *ifHCOutUcastPkts_val_ptr);
+ int ifHCOutMulticastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ifHCOutMulticastPkts_val_ptr);
+ int ifHCOutBroadcastPkts_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ifHCOutBroadcastPkts_val_ptr);
+ int ifLinkUpDownTrapEnable_get(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -284,86 +284,86 @@ config_require(if-mib/ifXTable/ifXTable_
+
+ int ifHCInOctets_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCInOctets_val);
++ struct counter64 ifHCInOctets_val);
+ int ifHCInOctets_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInOctets_set(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 ifHCInOctets_val);
++ struct counter64 ifHCInOctets_val);
+ int ifHCInOctets_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifHCInUcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCInUcastPkts_val);
++ struct counter64 ifHCInUcastPkts_val);
+ int ifHCInUcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInUcastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 ifHCInUcastPkts_val);
++ struct counter64 ifHCInUcastPkts_val);
+ int ifHCInUcastPkts_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifHCInMulticastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64
++ struct counter64
+ ifHCInMulticastPkts_val);
+ int ifHCInMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInMulticastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCInMulticastPkts_val);
++ struct counter64 ifHCInMulticastPkts_val);
+ int ifHCInMulticastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCInBroadcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64
++ struct counter64
+ ifHCInBroadcastPkts_val);
+ int ifHCInBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCInBroadcastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCInBroadcastPkts_val);
++ struct counter64 ifHCInBroadcastPkts_val);
+ int ifHCInBroadcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCOutOctets_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCOutOctets_val);
++ struct counter64 ifHCOutOctets_val);
+ int ifHCOutOctets_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutOctets_set(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 ifHCOutOctets_val);
++ struct counter64 ifHCOutOctets_val);
+ int ifHCOutOctets_undo(ifXTable_rowreq_ctx * rowreq_ctx);
+
+ int ifHCOutUcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCOutUcastPkts_val);
++ struct counter64 ifHCOutUcastPkts_val);
+ int ifHCOutUcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutUcastPkts_set(ifXTable_rowreq_ctx * rowreq_ctx,
+- U64 ifHCOutUcastPkts_val);
++ struct counter64 ifHCOutUcastPkts_val);
+ int ifHCOutUcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCOutMulticastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64
++ struct counter64
+ ifHCOutMulticastPkts_val);
+ int ifHCOutMulticastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutMulticastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCOutMulticastPkts_val);
++ struct counter64 ifHCOutMulticastPkts_val);
+ int ifHCOutMulticastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+ int ifHCOutBroadcastPkts_check_value(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64
++ struct counter64
+ ifHCOutBroadcastPkts_val);
+ int ifHCOutBroadcastPkts_undo_setup(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+ int ifHCOutBroadcastPkts_set(ifXTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 ifHCOutBroadcastPkts_val);
++ struct counter64 ifHCOutBroadcastPkts_val);
+ int ifHCOutBroadcastPkts_undo(ifXTable_rowreq_ctx *
+ rowreq_ctx);
+
+Index: net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
++++ net-snmp-5.7.3/agent/mibgroup/if-mib/ifXTable/ifXTable_interface.c
+@@ -729,72 +729,72 @@ _ifXTable_get_column(ifXTable_rowreq_ctx
+ * ifHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCInOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCInOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCInUcastPkts(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINUCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCInUcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCInUcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCInMulticastPkts(8)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINMULTICASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCInMulticastPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCInMulticastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCInBroadcastPkts(9)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCINBROADCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCInBroadcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCInBroadcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutOctets(10)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCOutOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutUcastPkts(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTUCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCOutUcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCOutUcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutMulticastPkts(12)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTMULTICASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCOutMulticastPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCOutMulticastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+ * ifHCOutBroadcastPkts(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IFHCOUTBROADCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ifHCOutBroadcastPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ifHCOutBroadcastPkts_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/data_access/systemstats_common.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/data_access/systemstats_common.c
++++ net-snmp-5.7.3/agent/mibgroup/ip-mib/data_access/systemstats_common.c
+@@ -264,7 +264,7 @@ _calculate_entries(netsnmp_systemstats_e
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTFRAGCREATES]
+ && entry->stats.columnAvail[IPSYSTEMSTATSTABLE_HCOUTDISCARDS]) {
+
+- U64 tmp, tmp2, tmp3;
++ struct counter64 tmp, tmp2, tmp3;
+ tmp = entry->stats.HCOutRequests;
+ u64Incr(&tmp, &entry->stats.HCOutForwDatagrams);
+ u64Incr(&tmp, &entry->stats.HCOutFragCreates);
+Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
++++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.c
+@@ -270,7 +270,7 @@ The total number of input IP datagrams r
+ */
+ int
+ ipIfStatsHCInReceives_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCInReceives_val_ptr)
++ struct counter64 *ipIfStatsHCInReceives_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCInReceives_val_ptr);
+@@ -395,7 +395,7 @@ The total number of octets received in i
+ */
+ int
+ ipIfStatsHCInOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCInOctets_val_ptr)
++ struct counter64 *ipIfStatsHCInOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCInOctets_val_ptr);
+@@ -862,7 +862,7 @@ The number of input datagrams for which
+ */
+ int
+ ipIfStatsHCInForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCInForwDatagrams_val_ptr)
++ struct counter64 *ipIfStatsHCInForwDatagrams_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCInForwDatagrams_val_ptr);
+@@ -1267,7 +1267,7 @@ The total number of datagrams successful
+ */
+ int
+ ipIfStatsHCInDelivers_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCInDelivers_val_ptr)
++ struct counter64 *ipIfStatsHCInDelivers_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCInDelivers_val_ptr);
+@@ -1396,7 +1396,7 @@ The total number of IP datagrams that lo
+ */
+ int
+ ipIfStatsHCOutRequests_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCOutRequests_val_ptr)
++ struct counter64 *ipIfStatsHCOutRequests_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCOutRequests_val_ptr);
+@@ -1532,7 +1532,7 @@ The number of datagrams for which this e
+ */
+ int
+ ipIfStatsHCOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCOutForwDatagrams_val_ptr)
++ struct counter64 *ipIfStatsHCOutForwDatagrams_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCOutForwDatagrams_val_ptr);
+@@ -1999,7 +1999,7 @@ The total number of IP datagrams that th
+ */
+ int
+ ipIfStatsHCOutTransmits_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCOutTransmits_val_ptr)
++ struct counter64 *ipIfStatsHCOutTransmits_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCOutTransmits_val_ptr);
+@@ -2123,7 +2123,7 @@ The total number of octets in IP datagra
+ */
+ int
+ ipIfStatsHCOutOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCOutOctets_val_ptr)
++ struct counter64 *ipIfStatsHCOutOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCOutOctets_val_ptr);
+@@ -2245,7 +2245,7 @@ The number of IP multicast datagrams rec
+ */
+ int
+ ipIfStatsHCInMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCInMcastPkts_val_ptr)
++ struct counter64 *ipIfStatsHCInMcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCInMcastPkts_val_ptr);
+@@ -2372,7 +2372,7 @@ The total number of octets received in I
+ */
+ int
+ ipIfStatsHCInMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCInMcastOctets_val_ptr)
++ struct counter64 *ipIfStatsHCInMcastOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCInMcastOctets_val_ptr);
+@@ -2497,7 +2497,7 @@ The number of IP multicast datagrams tra
+ */
+ int
+ ipIfStatsHCOutMcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCOutMcastPkts_val_ptr)
++ struct counter64 *ipIfStatsHCOutMcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCOutMcastPkts_val_ptr);
+@@ -2621,7 +2621,7 @@ The total number of octets transmitted i
+ */
+ int
+ ipIfStatsHCOutMcastOctets_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCOutMcastOctets_val_ptr)
++ struct counter64 *ipIfStatsHCOutMcastOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCOutMcastOctets_val_ptr);
+@@ -2743,7 +2743,7 @@ The number of IP broadcast datagrams rec
+ */
+ int
+ ipIfStatsHCInBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCInBcastPkts_val_ptr)
++ struct counter64 *ipIfStatsHCInBcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCInBcastPkts_val_ptr);
+@@ -2865,7 +2865,7 @@ The number of IP broadcast datagrams tra
+ */
+ int
+ ipIfStatsHCOutBcastPkts_get(ipIfStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipIfStatsHCOutBcastPkts_val_ptr)
++ struct counter64 *ipIfStatsHCOutBcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipIfStatsHCOutBcastPkts_val_ptr);
+Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
++++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_data_get.h
+@@ -50,7 +50,7 @@ extern "C" {
+ ipIfStatsInReceives_val_ptr);
+ int ipIfStatsHCInReceives_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCInReceives_val_ptr);
+ int ipIfStatsInOctets_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -58,7 +58,7 @@ extern "C" {
+ ipIfStatsInOctets_val_ptr);
+ int ipIfStatsHCInOctets_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCInOctets_val_ptr);
+ int ipIfStatsInHdrErrors_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -87,7 +87,7 @@ extern "C" {
+ int
+ ipIfStatsHCInForwDatagrams_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCInForwDatagrams_val_ptr);
+ int ipIfStatsReasmReqds_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -111,7 +111,7 @@ extern "C" {
+ ipIfStatsInDelivers_val_ptr);
+ int ipIfStatsHCInDelivers_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCInDelivers_val_ptr);
+ int ipIfStatsOutRequests_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -119,7 +119,7 @@ extern "C" {
+ ipIfStatsOutRequests_val_ptr);
+ int ipIfStatsHCOutRequests_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCOutRequests_val_ptr);
+ int ipIfStatsOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx
+ * rowreq_ctx,
+@@ -128,7 +128,7 @@ extern "C" {
+ int
+ ipIfStatsHCOutForwDatagrams_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCOutForwDatagrams_val_ptr);
+ int ipIfStatsOutDiscards_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -156,7 +156,7 @@ extern "C" {
+ ipIfStatsOutTransmits_val_ptr);
+ int ipIfStatsHCOutTransmits_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCOutTransmits_val_ptr);
+ int ipIfStatsOutOctets_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -164,7 +164,7 @@ extern "C" {
+ ipIfStatsOutOctets_val_ptr);
+ int ipIfStatsHCOutOctets_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCOutOctets_val_ptr);
+ int ipIfStatsInMcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -172,7 +172,7 @@ extern "C" {
+ ipIfStatsInMcastPkts_val_ptr);
+ int ipIfStatsHCInMcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCInMcastPkts_val_ptr);
+ int ipIfStatsInMcastOctets_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -180,7 +180,7 @@ extern "C" {
+ ipIfStatsInMcastOctets_val_ptr);
+ int ipIfStatsHCInMcastOctets_get(ipIfStatsTable_rowreq_ctx
+ * rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCInMcastOctets_val_ptr);
+ int ipIfStatsOutMcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -188,7 +188,7 @@ extern "C" {
+ ipIfStatsOutMcastPkts_val_ptr);
+ int ipIfStatsHCOutMcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCOutMcastPkts_val_ptr);
+ int ipIfStatsOutMcastOctets_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -196,7 +196,7 @@ extern "C" {
+ ipIfStatsOutMcastOctets_val_ptr);
+ int ipIfStatsHCOutMcastOctets_get(ipIfStatsTable_rowreq_ctx
+ * rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCOutMcastOctets_val_ptr);
+ int ipIfStatsInBcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -204,7 +204,7 @@ extern "C" {
+ ipIfStatsInBcastPkts_val_ptr);
+ int ipIfStatsHCInBcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCInBcastPkts_val_ptr);
+ int ipIfStatsOutBcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+@@ -212,7 +212,7 @@ extern "C" {
+ ipIfStatsOutBcastPkts_val_ptr);
+ int ipIfStatsHCOutBcastPkts_get(ipIfStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipIfStatsHCOutBcastPkts_val_ptr);
+ int
+ ipIfStatsDiscontinuityTime_get(ipIfStatsTable_rowreq_ctx *
+Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
++++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipIfStatsTable/ipIfStatsTable_interface.c
+@@ -722,10 +722,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCInReceives(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCINRECEIVES:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCInReceives_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -741,9 +741,9 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCINOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ipIfStatsHCInOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ipIfStatsHCInOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -810,10 +810,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCInForwDatagrams(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCINFORWDATAGRAMS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCInForwDatagrams_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -869,10 +869,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCInDelivers(19)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCINDELIVERS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCInDelivers_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -889,10 +889,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCOutRequests(21)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCOUTREQUESTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCOutRequests_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -909,10 +909,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCOutForwDatagrams(24)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCOUTFORWDATAGRAMS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCOutForwDatagrams_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -979,10 +979,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCOutTransmits(31)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCOUTTRANSMITS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCOutTransmits_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -999,9 +999,9 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCOutOctets(33)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCOUTOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+- rc = ipIfStatsHCOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ rc = ipIfStatsHCOutOctets_get(rowreq_ctx, (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1018,10 +1018,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCInMcastPkts(35)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCINMCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCInMcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1038,10 +1038,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCInMcastOctets(37)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCINMCASTOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCInMcastOctets_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1058,10 +1058,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCOutMcastPkts(39)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCOUTMCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCOutMcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1078,10 +1078,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCOutMcastOctets(41)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCOUTMCASTOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCOutMcastOctets_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1098,10 +1098,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCInBcastPkts(43)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCINBCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCInBcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1118,10 +1118,10 @@ _ipIfStatsTable_get_column(ipIfStatsTabl
+ * ipIfStatsHCOutBcastPkts(45)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPIFSTATSHCOUTBCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipIfStatsHCOutBcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
++++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.c
+@@ -452,7 +452,7 @@ The total number of input IP datagrams r
+ */
+ int
+ ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCInReceives_val_ptr)
++ struct counter64 *ipSystemStatsHCInReceives_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInReceives_val_ptr);
+@@ -579,7 +579,7 @@ The total number of octets received in i
+ */
+ int
+ ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCInOctets_val_ptr)
++ struct counter64 *ipSystemStatsHCInOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInOctets_val_ptr);
+@@ -1058,7 +1058,7 @@ The number of input datagrams for which
+ int
+ ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInForwDatagrams_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+@@ -1474,7 +1474,7 @@ The total number of datagrams successful
+ */
+ int
+ ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCInDelivers_val_ptr)
++ struct counter64 *ipSystemStatsHCInDelivers_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInDelivers_val_ptr);
+@@ -1602,7 +1602,7 @@ The total number of IP datagrams which l
+ */
+ int
+ ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCOutRequests_val_ptr)
++ struct counter64 *ipSystemStatsHCOutRequests_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutRequests_val_ptr);
+@@ -1809,7 +1809,7 @@ The number of datagrams for which this e
+ int
+ ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutForwDatagrams_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+@@ -2288,7 +2288,7 @@ The total number of IP datagrams that th
+ */
+ int
+ ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCOutTransmits_val_ptr)
++ struct counter64 *ipSystemStatsHCOutTransmits_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutTransmits_val_ptr);
+@@ -2415,7 +2415,7 @@ The total number of octets in IP datagra
+ */
+ int
+ ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCOutOctets_val_ptr)
++ struct counter64 *ipSystemStatsHCOutOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutOctets_val_ptr);
+@@ -2539,7 +2539,7 @@ The number of IP multicast datagrams rec
+ */
+ int
+ ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCInMcastPkts_val_ptr)
++ struct counter64 *ipSystemStatsHCInMcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInMcastPkts_val_ptr);
+@@ -2665,7 +2665,7 @@ The total number of octets received in I
+ int
+ ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInMcastOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+@@ -2790,7 +2790,7 @@ The number of IP multicast datagrams tra
+ */
+ int
+ ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCOutMcastPkts_val_ptr)
++ struct counter64 *ipSystemStatsHCOutMcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutMcastPkts_val_ptr);
+@@ -2921,7 +2921,7 @@ The total number of octets transmitted i
+ int
+ ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutMcastOctets_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+@@ -3046,7 +3046,7 @@ The number of IP broadcast datagrams rec
+ */
+ int
+ ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCInBcastPkts_val_ptr)
++ struct counter64 *ipSystemStatsHCInBcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCInBcastPkts_val_ptr);
+@@ -3170,7 +3170,7 @@ The number of IP broadcast datagrams tra
+ */
+ int
+ ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * ipSystemStatsHCOutBcastPkts_val_ptr)
++ struct counter64 *ipSystemStatsHCOutBcastPkts_val_ptr)
+ {
+ /** we should have a non-NULL pointer */
+ netsnmp_assert(NULL != ipSystemStatsHCOutBcastPkts_val_ptr);
+Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
++++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable.h
+@@ -144,93 +144,22 @@ config_require(ip-mib/ipSystemStatsTable
+ *********************************************************************
+ * function prototypes
+ */
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsTable_pre_request(ipSystemStatsTable_registration *
++ int ipSystemStatsTable_pre_request(ipSystemStatsTable_registration *
+ user_context);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsTable_post_request(ipSystemStatsTable_registration *
++ int ipSystemStatsTable_post_request(ipSystemStatsTable_registration *
+ user_context, int rc);
+
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsTable_rowreq_ctx_init(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsTable_rowreq_ctx_init(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ void *user_init_ctx);
+ void
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+ ipSystemStatsTable_rowreq_ctx_cleanup(ipSystemStatsTable_rowreq_ctx
+ * rowreq_ctx);
+
+ ipSystemStatsTable_data *ipSystemStatsTable_allocate_data(void);
+ void ipSystemStatsTable_release_data(ipSystemStatsTable_data
+ * data);
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsTable_rowreq_ctx
++ ipSystemStatsTable_rowreq_ctx
+ * ipSystemStatsTable_row_find_by_mib_index
+ (ipSystemStatsTable_mib_index * mib_idx);
+
+@@ -265,226 +194,50 @@ config_require(ip-mib/ipSystemStatsTable
+ * indexes
+ */
+
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInReceives_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInReceives_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInReceives_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCInReceives_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInReceives_val_ptr);
+ int ipSystemStatsInOctets_get(ipSystemStatsTable_rowreq_ctx
+ * rowreq_ctx,
+ u_long *
+ ipSystemStatsInOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCInOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 * ipSystemStatsHCInOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInHdrErrors_get(ipSystemStatsTable_rowreq_ctx *
++ struct counter64 *ipSystemStatsHCInOctets_val_ptr);
++ int ipSystemStatsInHdrErrors_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInHdrErrors_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInNoRoutes_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInAddrErrors_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInAddrErrors_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInAddrErrors_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInUnknownProtos_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInUnknownProtos_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInUnknownProtos_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInTruncatedPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInTruncatedPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInTruncatedPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInForwDatagrams_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCInForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInForwDatagrams_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsReasmReqds_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsReasmReqds_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsReasmReqds_val_ptr);
+@@ -492,690 +245,142 @@ config_require(ip-mib/ipSystemStatsTable
+ * rowreq_ctx,
+ u_long *
+ ipSystemStatsReasmOKs_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsReasmFails_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsReasmFails_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsReasmFails_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInDiscards_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInDiscards_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInDiscards_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInDelivers_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInDelivers_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInDelivers_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCInDelivers_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInDelivers_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutRequests_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutRequests_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutRequests_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCOutRequests_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutRequests_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutNoRoutes_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutNoRoutes_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutForwDatagrams_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCOutForwDatagrams_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutForwDatagrams_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutDiscards_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutDiscards_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutDiscards_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutFragReqds_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutFragReqds_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragReqds_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutFragOKs_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutFragOKs_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragOKs_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutFragFails_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutFragFails_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragFails_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutFragCreates_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutFragCreates_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutFragCreates_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutTransmits_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCOutTransmits_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutTransmits_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutOctets_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCOutOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInMcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCInMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInMcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInMcastOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCInMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInMcastOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutMcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCOutMcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutMcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutMcastOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCOutMcastOctets_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutMcastOctets_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsInBcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCInBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCInBcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsOutBcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsHCOutBcastPkts_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+- U64 *
++ struct counter64 *
+ ipSystemStatsHCOutBcastPkts_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsDiscontinuityTime_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsDiscontinuityTime_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsDiscontinuityTime_val_ptr);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsRefreshRate_get(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsRefreshRate_get(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long *
+ ipSystemStatsRefreshRate_val_ptr);
+-
+-
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsTable_indexes_set_tbl_idx(ipSystemStatsTable_mib_index
++ int ipSystemStatsTable_indexes_set_tbl_idx(ipSystemStatsTable_mib_index
+ * tbl_idx,
+ u_long
+ ipSystemStatsIPVersion_val);
+- int
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+- ipSystemStatsTable_indexes_set(ipSystemStatsTable_rowreq_ctx *
++ int ipSystemStatsTable_indexes_set(ipSystemStatsTable_rowreq_ctx *
+ rowreq_ctx,
+ u_long ipSystemStatsIPVersion_val);
+
+-
+-
+ /*
+ *********************************************************************
+ * SET function declarations
+Index: net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
++++ net-snmp-5.7.3/agent/mibgroup/ip-mib/ipSystemStatsTable/ipSystemStatsTable_interface.c
+@@ -674,10 +674,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCInReceives(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINRECEIVES:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInReceives_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -694,10 +694,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInOctets_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -764,10 +764,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCInForwDatagrams(13)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINFORWDATAGRAMS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInForwDatagrams_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -824,10 +824,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCInDelivers(19)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINDELIVERS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInDelivers_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -844,10 +844,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCOutRequests(21)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTREQUESTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutRequests_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -874,10 +874,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCOutForwDatagrams(24)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTFORWDATAGRAMS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutForwDatagrams_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -944,10 +944,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCOutTransmits(31)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTTRANSMITS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutTransmits_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -964,10 +964,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCOutOctets(33)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutOctets_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -984,10 +984,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCInMcastPkts(35)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINMCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInMcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1004,10 +1004,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCInMcastOctets(37)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINMCASTOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInMcastOctets_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1024,10 +1024,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCOutMcastPkts(39)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTMCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutMcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1044,10 +1044,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCOutMcastOctets(41)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTMCASTOCTETS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutMcastOctets_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1064,10 +1064,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCInBcastPkts(43)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCINBCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCInBcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+@@ -1084,10 +1084,10 @@ _ipSystemStatsTable_get_column(ipSystemS
+ * ipSystemStatsHCOutBcastPkts(45)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+ */
+ case COLUMN_IPSYSTEMSTATSHCOUTBCASTPKTS:
+- var->val_len = sizeof(U64);
++ var->val_len = sizeof(struct counter64);
+ var->type = ASN_COUNTER64;
+ rc = ipSystemStatsHCOutBcastPkts_get(rowreq_ctx,
+- (U64 *) var->val.string);
++ (struct counter64 *) var->val.string);
+ break;
+
+ /*
+Index: net-snmp-5.7.3/include/net-snmp/data_access/ipstats.h
+===================================================================
+--- net-snmp-5.7.3.orig/include/net-snmp/data_access/ipstats.h
++++ net-snmp-5.7.3/include/net-snmp/data_access/ipstats.h
+@@ -58,45 +58,45 @@ typedef struct netsnmp_ipstats_s {
+ * other columns, when underlying OS does not provide them.
+ * Always fill at least 32 bits, the table is periodically polled -> 32 bit
+ * overflow shall be detected and 64 bit value should be computed automatically. */
+- U64 HCInReceives;
+- U64 HCInOctets;
++ struct counter64 HCInReceives;
++ struct counter64 HCInOctets;
+ u_long InHdrErrors;
+- U64 HCInNoRoutes;
++ struct counter64 HCInNoRoutes;
+ u_long InAddrErrors;
+ u_long InUnknownProtos;
+ u_long InTruncatedPkts;
+
+ /* optional, can be computed from HCInNoRoutes and HCOutForwDatagrams */
+- U64 HCInForwDatagrams;
++ struct counter64 HCInForwDatagrams;
+
+ u_long ReasmReqds;
+ u_long ReasmOKs;
+ u_long ReasmFails;
+ u_long InDiscards;
+- U64 HCInDelivers;
+- U64 HCOutRequests;
+- U64 HCOutNoRoutes;
+- U64 HCOutForwDatagrams;
+- U64 HCOutDiscards;
++ struct counter64 HCInDelivers;
++ struct counter64 HCOutRequests;
++ struct counter64 HCOutNoRoutes;
++ struct counter64 HCOutForwDatagrams;
++ struct counter64 HCOutDiscards;
+
+ /* optional, can be computed from HCOutFragOKs + HCOutFragFails*/
+- U64 HCOutFragReqds;
+- U64 HCOutFragOKs;
+- U64 HCOutFragFails;
+- U64 HCOutFragCreates;
++ struct counter64 HCOutFragReqds;
++ struct counter64 HCOutFragOKs;
++ struct counter64 HCOutFragFails;
++ struct counter64 HCOutFragCreates;
+
+ /* optional, can be computed from
+ * HCOutRequests +HCOutForwDatagrams + HCOutFragCreates
+ * - HCOutFragReqds - HCOutNoRoutes - HCOutDiscards */
+- U64 HCOutTransmits;
++ struct counter64 HCOutTransmits;
+
+- U64 HCOutOctets;
+- U64 HCInMcastPkts;
+- U64 HCInMcastOctets;
+- U64 HCOutMcastPkts;
+- U64 HCOutMcastOctets;
+- U64 HCInBcastPkts;
+- U64 HCOutBcastPkts;
++ struct counter64 HCOutOctets;
++ struct counter64 HCInMcastPkts;
++ struct counter64 HCInMcastOctets;
++ struct counter64 HCOutMcastPkts;
++ struct counter64 HCOutMcastOctets;
++ struct counter64 HCInBcastPkts;
++ struct counter64 HCOutBcastPkts;
+
+ /* Array of available columns.*/
+ int columnAvail[IPSYSTEMSTATSTABLE_LAST+1];
+Index: net-snmp-5.7.3/include/net-snmp/library/int64.h
+===================================================================
+--- net-snmp-5.7.3.orig/include/net-snmp/library/int64.h
++++ net-snmp-5.7.3/include/net-snmp/library/int64.h
+@@ -5,31 +5,29 @@
+ extern "C" {
+ #endif
+
+- typedef struct counter64 U64;
+-
+ #define I64CHARSZ 21
+
+- void divBy10(U64, U64 *, unsigned int *);
+- void multBy10(U64, U64 *);
+- void incrByU16(U64 *, unsigned int);
+- void incrByU32(U64 *, unsigned int);
++ void divBy10(struct counter64, struct counter64 *, unsigned int *);
++ void multBy10(struct counter64, struct counter64 *);
++ void incrByU16(struct counter64 *, unsigned int);
++ void incrByU32(struct counter64 *, unsigned int);
+ NETSNMP_IMPORT
+- void zeroU64(U64 *);
+- int isZeroU64(const U64 *);
++ void zeroU64(struct counter64 *);
++ int isZeroU64(const struct counter64 *);
+ NETSNMP_IMPORT
+- void printU64(char *, const U64 *);
++ void printU64(char *, const struct counter64 *);
+ NETSNMP_IMPORT
+- void printI64(char *, const U64 *);
+- int read64(U64 *, const char *);
++ void printI64(char *, const struct counter64 *);
++ int read64(struct counter64 *, const char *);
+ NETSNMP_IMPORT
+- void u64Subtract(const U64 * pu64one, const U64 * pu64two,
+- U64 * pu64out);
+- void u64Incr(U64 * pu64out, const U64 * pu64one);
+- void u64UpdateCounter(U64 * pu64out, const U64 * pu64one,
+- const U64 * pu64two);
+- void u64Copy(U64 * pu64one, const U64 * pu64two);
++ void u64Subtract(const struct counter64 *pu64one, const struct counter64 *pu64two,
++ struct counter64 *pu64out);
++ void u64Incr(struct counter64 *pu64out, const struct counter64 *pu64one);
++ void u64UpdateCounter(struct counter64 *pu64out, const struct counter64 *pu64one,
++ const struct counter64 *pu64two);
++ void u64Copy(struct counter64 *pu64one, const struct counter64 *pu64two);
+
+- int netsnmp_c64_check_for_32bit_wrap(U64 *old_val, U64 *new_val,
++ int netsnmp_c64_check_for_32bit_wrap(struct counter64 *old_val, struct counter64 *new_val,
+ int adjust);
+ NETSNMP_IMPORT
+ int netsnmp_c64_check32_and_update(struct counter64 *prev_val,
+Index: net-snmp-5.7.3/snmplib/int64.c
+===================================================================
+--- net-snmp-5.7.3.orig/snmplib/int64.c
++++ net-snmp-5.7.3/snmplib/int64.c
+@@ -33,7 +33,7 @@
+ * @param[out] puR Remainder.
+ */
+ void
+-divBy10(U64 u64, U64 * pu64Q, unsigned int *puR)
++divBy10(struct counter64 u64, struct counter64 *pu64Q, unsigned int *puR)
+ {
+ unsigned long ulT;
+ unsigned long ulQ;
+@@ -83,7 +83,7 @@ divBy10(U64 u64, U64 * pu64Q, unsigned i
+ * @param[out] pu64P Product.
+ */
+ void
+-multBy10(U64 u64, U64 * pu64P)
++multBy10(struct counter64 u64, struct counter64 *pu64P)
+ {
+ unsigned long ulT;
+ unsigned long ulP;
+@@ -130,7 +130,7 @@ multBy10(U64 u64, U64 * pu64P)
+ *
+ */
+ void
+-incrByU16(U64 * pu64, unsigned int u16)
++incrByU16(struct counter64 *pu64, unsigned int u16)
+ {
+ incrByU32(pu64, u16);
+ }
+@@ -143,7 +143,7 @@ incrByU16(U64 * pu64, unsigned int u16)
+ *
+ */
+ void
+-incrByU32(U64 * pu64, unsigned int u32)
++incrByU32(struct counter64 *pu64, unsigned int u32)
+ {
+ uint32_t tmp;
+
+@@ -161,7 +161,7 @@ incrByU32(U64 * pu64, unsigned int u32)
+ * @param[out] pu64out pu64one - pu64two.
+ */
+ void
+-u64Subtract(const U64 * pu64one, const U64 * pu64two, U64 * pu64out)
++u64Subtract(const struct counter64 *pu64one, const struct counter64 *pu64two, struct counter64 *pu64out)
+ {
+ int carry;
+
+@@ -177,7 +177,7 @@ u64Subtract(const U64 * pu64one, const U
+ * @param[in,out] pu64out pu64out += pu64one.
+ */
+ void
+-u64Incr(U64 * pu64out, const U64 * pu64one)
++u64Incr(struct counter64 *pu64out, const struct counter64 *pu64one)
+ {
+ pu64out->high = (uint32_t)(pu64out->high + pu64one->high);
+ incrByU32(pu64out, pu64one->low);
+@@ -191,9 +191,9 @@ u64Incr(U64 * pu64out, const U64 * pu64o
+ * @param[out] pu64out pu64out += (pu64one - pu64two)
+ */
+ void
+-u64UpdateCounter(U64 * pu64out, const U64 * pu64one, const U64 * pu64two)
++u64UpdateCounter(struct counter64 *pu64out, const struct counter64 *pu64one, const struct counter64 *pu64two)
+ {
+- U64 tmp;
++ struct counter64 tmp;
+
+ u64Subtract(pu64one, pu64two, &tmp);
+ u64Incr(pu64out, &tmp);
+@@ -208,7 +208,7 @@ netsnmp_feature_child_of(u64copy, netsnm
+ * @param[out] pu64one Where to store the copy - *pu64one = *pu64two.
+ */
+ void
+-u64Copy(U64 * pu64one, const U64 * pu64two)
++u64Copy(struct counter64 *pu64one, const struct counter64 *pu64two)
+ {
+ *pu64one = *pu64two;
+ }
+@@ -220,7 +220,7 @@ u64Copy(U64 * pu64one, const U64 * pu64t
+ * @param[in] pu64 Number to be zeroed.
+ */
+ void
+-zeroU64(U64 * pu64)
++zeroU64(struct counter64 *pu64)
+ {
+ pu64->low = 0;
+ pu64->high = 0;
+@@ -232,7 +232,7 @@ zeroU64(U64 * pu64)
+ * @param[in] pu64 Number to be checked.
+ */
+ int
+-isZeroU64(const U64 * pu64)
++isZeroU64(const struct counter64 *pu64)
+ {
+ return pu64->low == 0 && pu64->high == 0;
+ }
+@@ -390,10 +390,10 @@ netsnmp_c64_check32_and_update(struct co
+ /** Convert an unsigned 64-bit number to ASCII. */
+ void
+ printU64(char *buf, /* char [I64CHARSZ+1]; */
+- const U64 * pu64)
++ const struct counter64 *pu64)
+ {
+- U64 u64a;
+- U64 u64b;
++ struct counter64 u64a;
++ struct counter64 u64b;
+
+ char aRes[I64CHARSZ + 1];
+ unsigned int u;
+@@ -414,9 +414,9 @@ printU64(char *buf, /* char [I64CHARSZ+1
+ /** Convert a signed 64-bit number to ASCII. */
+ void
+ printI64(char *buf, /* char [I64CHARSZ+1]; */
+- const U64 * pu64)
++ const struct counter64 *pu64)
+ {
+- U64 u64a;
++ struct counter64 u64a;
+
+ if (pu64->high & 0x80000000) {
+ u64a.high = (uint32_t) ~pu64->high;
+@@ -429,11 +429,11 @@ printI64(char *buf, /* char [I64CHARSZ+1
+ }
+ }
+
+-/** Convert a signed 64-bit integer from ASCII to U64. */
++/** Convert a signed 64-bit integer from ASCII to struct counter64. */
+ int
+-read64(U64 * i64, const char *str)
++read64(struct counter64 *i64, const char *str)
+ {
+- U64 i64p;
++ struct counter64 i64p;
+ unsigned int u;
+ int sign = 0;
+ int ok = 0;
+Index: net-snmp-5.7.3/snmplib/read_config.c
+===================================================================
+--- net-snmp-5.7.3.orig/snmplib/read_config.c
++++ net-snmp-5.7.3/snmplib/read_config.c
+@@ -2270,10 +2270,10 @@ read_config_read_memory(int type, char *
+ return readfrom;
+
+ case ASN_COUNTER64:
+- if (*len < sizeof(U64))
++ if (*len < sizeof(struct counter64))
+ return NULL;
+- *len = sizeof(U64);
+- read64((U64 *) dataptr, readfrom);
++ *len = sizeof(struct counter64);
++ read64((struct counter64 *) dataptr, readfrom);
+ readfrom = skip_token(readfrom);
+ return readfrom;
+ }
+Index: net-snmp-5.7.3/testing/fulltests/unit-tests/T015int64_clib.c
+===================================================================
+--- net-snmp-5.7.3.orig/testing/fulltests/unit-tests/T015int64_clib.c
++++ net-snmp-5.7.3/testing/fulltests/unit-tests/T015int64_clib.c
+@@ -1,4 +1,4 @@
+-/* HEADER Testing 64-bit integer operations (U64). */
++/* HEADER Testing 64-bit integer operations (struct counter64). */
+
+ int i, j;
+ char buf[22];
+@@ -15,7 +15,7 @@ static const int64_t intval[] = {
+ };
+
+ for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
+- U64 a, b;
++ struct counter64 a, b;
+ a.low = (uint32_t)intval[i];
+ a.high = (uint32_t)(intval[i] >> 32);
+ printI64(buf, &a);
+@@ -27,7 +27,7 @@ for (i = 0; i < sizeof(intval)/sizeof(in
+
+ for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
+ for (j = i; j < sizeof(intval)/sizeof(intval[0]); ++j) {
+- U64 a, b;
++ struct counter64 a, b;
+ uint64_t d;
+ a.low = (uint32_t)intval[i];
+ a.high = (uint32_t)(intval[i] >> 32);
+@@ -43,7 +43,7 @@ for (i = 0; i < sizeof(intval)/sizeof(in
+
+ for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
+ for (j = i; j < sizeof(intval)/sizeof(intval[0]); ++j) {
+- U64 a, b, c;
++ struct counter64 a, b, c;
+ uint64_t d;
+ a.low = (uint32_t)intval[i];
+ a.high = (uint32_t)(intval[i] >> 32);
+@@ -58,7 +58,7 @@ for (i = 0; i < sizeof(intval)/sizeof(in
+ }
+
+ {
+- U64 old_val, new_val;
++ struct counter64 old_val, new_val;
+ old_val.low = 7;
+ old_val.high = 0;
+ new_val = old_val;
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch
new file mode 100644
index 000000000..44359bebe
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_headers-Error-Fix.patch
@@ -0,0 +1,34 @@
+From 261a22096c79f8e6ef7b387514a74d208e4e5945 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 21 Aug 2015 18:23:13 +0900
+Subject: [PATCH] config_os_headers: Error Fix
+
+ERROR: This autoconf log indicates errors, it looked at host include
+and/or library paths while determining system capabilities.
+cc1: warning: include location "/usr/local/include" is unsafe for cross-compilation [-Wpoison-system-directories]
+conftest.c:168:17: fatal error: pkg.h: No such file or directory
+ #include <pkg.h>
+ ^
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ configure.d/config_os_headers | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+Index: net-snmp-5.7.3/configure.d/config_os_headers
+===================================================================
+--- net-snmp-5.7.3.orig/configure.d/config_os_headers
++++ net-snmp-5.7.3/configure.d/config_os_headers
+@@ -484,8 +484,8 @@ then
+ unset ac_cv_header_pkg_h
+ netsnmp_save_CPPFLAGS="$CPPFLAGS"
+ netsnmp_save_LDFLAGS="$LDFLAGS"
+- CPPFLAGS="$CPPFLAGS -I/usr/local/include"
+- LDFLAGS="$LDFLAGS -L/usr/local/lib"
++ CPPFLAGS="$CPPFLAGS"
++ LDFLAGS="$LDFLAGS"
+ AC_CHECK_HEADERS(pkg.h,
+ NETSNMP_SEARCH_LIBS(pkg_init, pkg,
+ AC_DEFINE(HAVE_LIBPKG, 1, [define if you have BSD pkg-ng])))
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_libs2-Error-Fix.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_libs2-Error-Fix.patch
new file mode 100644
index 000000000..5866a95ed
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-config_os_libs2-Error-Fix.patch
@@ -0,0 +1,31 @@
+From e24fcd140f3f6dd18fd836b197c6d4bb773e50e7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C3=ABl=20Carr=C3=A9?= <funman@videolan.org>
+Date: Wed, 4 Nov 2015 16:49:30 +0100
+Subject: [PATCH] config_os_libs2: Error Fix
+
+ERROR: This autoconf log indicates errors, it looked at host include
+and/or library paths while determining system capabilities.
+---
+ configure.d/config_os_libs2 | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.d/config_os_libs2 b/configure.d/config_os_libs2
+index 47491e2..e3647f9 100644
+--- a/configure.d/config_os_libs2
++++ b/configure.d/config_os_libs2
+@@ -226,10 +226,10 @@ if test "x$with_nl" != "xno"; then
+ case $target_os in
+ linux*) # Check for libnl (linux)
+ netsnmp_save_CPPFLAGS="$CPPFLAGS"
+- CPPFLAGS="-I/usr/include/libnl3 $CPPFLAGS"
++ CPPFLAGS="$CPPFLAGS"
+ NETSNMP_SEARCH_LIBS(nl_connect, nl-3,
+ [AC_CHECK_HEADERS(netlink/netlink.h)
+- EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES -I/usr/include/libnl3"],
++ EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES"],
+ [CPPFLAGS="$netsnmp_save_CPPFLAGS"], [], [], [LMIBLIBS])
+ if test "x$ac_cv_header_netlink_netlink_h" != xyes; then
+ NETSNMP_SEARCH_LIBS(nl_connect, nl, [
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-configure-fix-check-for-enable-perl-cc-checks.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-configure-fix-check-for-enable-perl-cc-checks.patch
new file mode 100644
index 000000000..b87e9eec2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-configure-fix-check-for-enable-perl-cc-checks.patch
@@ -0,0 +1,31 @@
+From c6304a3e4b8441ff0a6464c0f1f6c5229092fa32 Mon Sep 17 00:00:00 2001
+From: Niels Baggesen <nba@users.sourceforge.net>
+Date: Wed, 24 May 2017 16:40:03 +0800
+Subject: [PATCH 1/4] configure: fix check for --enable-perl-cc-checks
+
+This patch comes from git://git.code.sf.net/p/net-snmp/code,
+the commit is 8f431d410b803603dc809d82e0893509615d9a11.
+
+Upstream-Status: Backport
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ configure.d/config_project_perl_python | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.d/config_project_perl_python b/configure.d/config_project_perl_python
+index 23f8c7e..475c843 100644
+--- a/configure.d/config_project_perl_python
++++ b/configure.d/config_project_perl_python
+@@ -84,7 +84,7 @@ if test "x$install_perl" != "xno" ; then
+
+ # What compiler was used to build the perl binary?
+ #
+- if test "xenable_perl_cc_checks" != "xno" ; then
++ if test "x$enable_perl_cc_checks" != "xno" ; then
+ AC_MSG_CHECKING([for Perl cc])
+ changequote(, )
+ PERLCC=`$myperl -V:cc | $myperl -n -e 'print if (s/^\s*cc=.([-=\w\s\/]+).;\s*/$1/);'`
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch
new file mode 100644
index 000000000..60ce80996
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-get_pid_from_inode-Include-limit.h.patch
@@ -0,0 +1,29 @@
+From 7136d593ba96b64537069637c328bc65e1b66b2d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 22 Jul 2016 18:34:39 +0000
+Subject: [PATCH] get_pid_from_inode: Include limit.h
+
+PATH_MAX and NAME_MAX are required by this file
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ agent/mibgroup/util_funcs/get_pid_from_inode.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/agent/mibgroup/util_funcs/get_pid_from_inode.c b/agent/mibgroup/util_funcs/get_pid_from_inode.c
+index 8e157ae..a494ec7 100644
+--- a/agent/mibgroup/util_funcs/get_pid_from_inode.c
++++ b/agent/mibgroup/util_funcs/get_pid_from_inode.c
+@@ -5,6 +5,7 @@
+ #include <net-snmp/output_api.h>
+
+ #include <ctype.h>
++#include <limits.h>
+ #include <stdio.h>
+ #if HAVE_STDLIB_H
+ #include <stdlib.h>
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-UDPIPv6-transport-Add-a-missing-return-state.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-UDPIPv6-transport-Add-a-missing-return-state.patch
new file mode 100644
index 000000000..527aa39f2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-UDPIPv6-transport-Add-a-missing-return-state.patch
@@ -0,0 +1,26 @@
+From 1ee72102fbe722d232d74abc4660a8b134cec8d6 Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Sat, 23 May 2015 07:32:53 +0200
+Subject: [PATCH] snmplib, UDPIPv6 transport: Add a missing return statement
+
+Detected by Coverity.
+
+Upstream-Status: backport
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ snmplib/transports/snmpUDPIPv6Domain.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: net-snmp-5.7.3/snmplib/transports/snmpUDPIPv6Domain.c
+===================================================================
+--- net-snmp-5.7.3.orig/snmplib/transports/snmpUDPIPv6Domain.c
++++ net-snmp-5.7.3/snmplib/transports/snmpUDPIPv6Domain.c
+@@ -305,6 +305,7 @@ netsnmp_udp6_transport(struct sockaddr_i
+ errno, strerror(errno)));
+ netsnmp_socketbase_close(t);
+ netsnmp_transport_free(t);
++ return NULL;
+ }
+ }
+ /*
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch
new file mode 100644
index 000000000..af242fafb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch
@@ -0,0 +1,33 @@
+From d3027a227bc0f603a5b650d01f97ee1dec515be5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 18 Sep 2015 00:28:45 -0400
+Subject: [PATCH] snmplib/keytools.c: Don't check for return from
+ EVP_MD_CTX_init()
+
+EVP_MD_CTX_init() API returns void, it fixes errors with new compilers
+
+snmplib/keytools.c: In function 'generate_Ku': error: invalid use of void expression
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted [https://sourceforge.net/p/net-snmp/patches/1317/]
+ snmplib/keytools.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/snmplib/keytools.c b/snmplib/keytools.c
+index 0ccb3a6..880fc14 100644
+--- a/snmplib/keytools.c
++++ b/snmplib/keytools.c
+@@ -153,8 +153,7 @@ generate_Ku(const oid * hashtype, u_int hashtype_len,
+ ctx = EVP_MD_CTX_create();
+ #else
+ ctx = malloc(sizeof(*ctx));
+- if (!EVP_MD_CTX_init(ctx))
+- return SNMPERR_GENERR;
++ EVP_MD_CTX_init(ctx);
+ #endif
+ #ifndef NETSNMP_DISABLE_MD5
+ if (ISTRANSFORM(hashtype, HMACMD5Auth)) {
+--
+2.5.2
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch
new file mode 100644
index 000000000..999976d27
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0002-configure-fix-a-cc-check-issue.patch
@@ -0,0 +1,30 @@
+From 94e7e4969bc84c945dfea12d67a1e10f61973948 Mon Sep 17 00:00:00 2001
+From: Wenlin Kang <wenlin.kang@windriver.com>
+Date: Wed, 24 May 2017 16:45:34 +0800
+Subject: [PATCH 2/4] configure: fix a cc check issue.
+
+When has "." in cc value, the expression
+$myperl -V:cc | $myperl -n -e 'print if (s/^\s*cc=.([-=\w\s\/]+).;\s*/$1/);'
+can't get corretly the cc's value.
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ configure.d/config_project_perl_python | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.d/config_project_perl_python b/configure.d/config_project_perl_python
+index 475c843..22d2ad3 100644
+--- a/configure.d/config_project_perl_python
++++ b/configure.d/config_project_perl_python
+@@ -87,7 +87,7 @@ if test "x$install_perl" != "xno" ; then
+ if test "x$enable_perl_cc_checks" != "xno" ; then
+ AC_MSG_CHECKING([for Perl cc])
+ changequote(, )
+- PERLCC=`$myperl -V:cc | $myperl -n -e 'print if (s/^\s*cc=.([-=\w\s\/]+).;\s*/$1/);'`
++ PERLCC=`$myperl -V:cc | $myperl -n -e 'print if (s/^\s*cc=.([-=\.\w\s\/]+).;\s*/$1/);'`
+ changequote([, ])
+ if test "x$PERLCC" != "x" ; then
+ AC_MSG_RESULT([$PERLCC])
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0003-CHANGES-BUG-2712-Fix-Perl-module-compilation.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0003-CHANGES-BUG-2712-Fix-Perl-module-compilation.patch
new file mode 100644
index 000000000..7951234a4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0003-CHANGES-BUG-2712-Fix-Perl-module-compilation.patch
@@ -0,0 +1,186 @@
+From e57fc809ad6ae522670f3dc157aadde20d968ca7 Mon Sep 17 00:00:00 2001
+From: Bart Van Assche <bvanassche@acm.org>
+Date: Wed, 24 May 2017 17:05:03 +0800
+Subject: [PATCH 3/4] CHANGES: BUG: 2712: Fix Perl module compilation
+
+Avoid that building the Net-SNMP Perl modules fails as follows:
+
+ERROR from evaluation of /sources/net-snmp-5.7.3/perl/ASN/Makefile.PL: Bizarre \ copy of HASH in list assignment at /usr/lib/perl5/site_perl/5.24.0/Carp.pm line\ 229.
+
+See also https://sourceforge.net/p/net-snmp/bugs/2712/.
+
+This patch comes from git://git.code.sf.net/p/net-snmp/code,
+the commit is 4e793461e96a2b4fd81142ab312d074d5c8841fa.
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ perl/ASN/Makefile.PL | 4 +---
+ perl/Makefile.PL | 4 +---
+ perl/OID/Makefile.PL | 5 +----
+ perl/SNMP/Makefile.PL | 5 +----
+ perl/TrapReceiver/Makefile.PL | 5 +----
+ perl/agent/Makefile.PL | 5 +----
+ perl/agent/Support/Makefile.PL | 5 +----
+ perl/agent/default_store/Makefile.PL | 5 +----
+ perl/default_store/Makefile.PL | 5 +----
+ 9 files changed, 9 insertions(+), 34 deletions(-)
+
+diff --git a/perl/ASN/Makefile.PL b/perl/ASN/Makefile.PL
+index 4576781..c33d8ba 100644
+--- a/perl/ASN/Makefile.PL
++++ b/perl/ASN/Makefile.PL
+@@ -7,9 +7,7 @@ my $lib_version;
+ # See lib/ExtUtils/MakeMaker.pm for details of how to influence
+ # the contents of the Makefile that is written.
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ Check_Version();
+
+diff --git a/perl/Makefile.PL b/perl/Makefile.PL
+index 31fdc40..48aba2a 100644
+--- a/perl/Makefile.PL
++++ b/perl/Makefile.PL
+@@ -3,9 +3,7 @@ use Config;
+ use Getopt::Long;
+ require 5;
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ sub InitMakeParams {
+ $nsconfig="net-snmp-config"; # in path by default
+diff --git a/perl/OID/Makefile.PL b/perl/OID/Makefile.PL
+index 6bb1616..2589985 100644
+--- a/perl/OID/Makefile.PL
++++ b/perl/OID/Makefile.PL
+@@ -6,11 +6,8 @@ require 5;
+ use Config;
+ use Getopt::Long;
+ my $lib_version;
+-my %MakeParams = ();
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ Check_Version();
+
+diff --git a/perl/SNMP/Makefile.PL b/perl/SNMP/Makefile.PL
+index e617cb7..8aab9a9 100644
+--- a/perl/SNMP/Makefile.PL
++++ b/perl/SNMP/Makefile.PL
+@@ -3,15 +3,12 @@ require 5;
+ use Config;
+ use Getopt::Long;
+ my $lib_version;
+-my %MakeParams = ();
+ my $opts;
+
+ # See lib/ExtUtils/MakeMaker.pm for details of how to influence
+ # the contents of the Makefile that is written.
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ Check_Version();
+
+diff --git a/perl/TrapReceiver/Makefile.PL b/perl/TrapReceiver/Makefile.PL
+index 874ee21..7e9e58e 100644
+--- a/perl/TrapReceiver/Makefile.PL
++++ b/perl/TrapReceiver/Makefile.PL
+@@ -3,11 +3,8 @@ require 5;
+ use Config;
+ use Getopt::Long;
+ my $lib_version;
+-my %MakeParams = ();
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ Check_Version();
+
+diff --git a/perl/agent/Makefile.PL b/perl/agent/Makefile.PL
+index 4f7bee3..003c0d1 100644
+--- a/perl/agent/Makefile.PL
++++ b/perl/agent/Makefile.PL
+@@ -3,11 +3,8 @@ require 5;
+ use Config;
+ use Getopt::Long;
+ my $lib_version;
+-my %MakeParams = ();
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ Check_Version();
+
+diff --git a/perl/agent/Support/Makefile.PL b/perl/agent/Support/Makefile.PL
+index 48815b6..2325e10 100644
+--- a/perl/agent/Support/Makefile.PL
++++ b/perl/agent/Support/Makefile.PL
+@@ -3,14 +3,11 @@ require 5;
+ use Config;
+ use Getopt::Long;
+ my $lib_version;
+-my %MakeParams = ();
+
+ # See lib/ExtUtils/MakeMaker.pm for details of how to influence
+ # the contents of the Makefile that is written.
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ Check_Version();
+
+diff --git a/perl/agent/default_store/Makefile.PL b/perl/agent/default_store/Makefile.PL
+index ed6483a..31cfbee 100644
+--- a/perl/agent/default_store/Makefile.PL
++++ b/perl/agent/default_store/Makefile.PL
+@@ -3,11 +3,8 @@ require 5;
+ use Config;
+ use Getopt::Long;
+ my $lib_version;
+-my %MakeParams = ();
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+ Check_Version();
+
+diff --git a/perl/default_store/Makefile.PL b/perl/default_store/Makefile.PL
+index 7c671b8..01c8dd0 100644
+--- a/perl/default_store/Makefile.PL
++++ b/perl/default_store/Makefile.PL
+@@ -3,11 +3,8 @@ require 5;
+ use Config;
+ use Getopt::Long;
+ my $lib_version;
+-my %MakeParams = ();
+
+-%MakeParams = InitMakeParams();
+-
+-WriteMakefile(%MakeParams);
++WriteMakefile(InitMakeParams());
+
+
+ sub InitMakeParams {
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch
new file mode 100644
index 000000000..2b03f9e9a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/0004-configure-fix-incorrect-variable.patch
@@ -0,0 +1,30 @@
+From 4ad98ef125eb4e7d7a1a93146042002f78254d36 Mon Sep 17 00:00:00 2001
+From: Wenlin Kang <wenlin.kang@windriver.com>
+Date: Wed, 24 May 2017 17:10:20 +0800
+Subject: [PATCH 4/4] configure: fix incorrect variable
+
+For cross compile platform, this variable will not be correct, so fix it.
+
+Upstream-Status: Inappropriate [cross compile specific]
+
+Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
+---
+ Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index cfcdf73..164df05 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -171,7 +171,7 @@ OTHERCLEANTODOS=perlclean @PYTHONCLEANTARGS@ cleanfeatures perlcleanfeatures pyt
+ #
+ # override LD_RUN_PATH to avoid dependencies on the build directory
+ perlmodules: perlmakefiles subdirs
+- @(cd perl ; $(MAKE) LD_RUN_PATH="$(libdir):`$(PERL) -e 'use Config; print qq($$Config{archlibexp}/CORE);'`") ; \
++ @(cd perl ; $(MAKE) LD_RUN_PATH="$(libdir):`$(PERL) -e 'use Config; print qq($$Config{installprivlib}/CORE);'`") ; \
+ if test $$? != 0 ; then \
+ exit 1 ; \
+ fi
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/dont-return-incompletely-parsed-varbinds.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/dont-return-incompletely-parsed-varbinds.patch
new file mode 100644
index 000000000..6bd0f93c4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/dont-return-incompletely-parsed-varbinds.patch
@@ -0,0 +1,131 @@
+From 6b93e686bdb6a908d00595608646a05527a5326b Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 21 Aug 2015 12:39:12 +0900
+Subject: [PATCH] the snmp_pdu_parse() function could leave incompletely parsed
+ varBind variables in the list of variables in case the parsing of the SNMP
+ PDU failed. If later processing tries to operate on the stale and
+ incompletely processed varBind (e.g. when printing the variables), this can
+ lead to e.g. crashes or, possibly, execution of arbitrary code
+
+Upstream-Status: Backport [net-snmp]
+
+Written-by: Robert Story
+---
+ snmplib/snmp_api.c | 53 ++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 28 insertions(+), 25 deletions(-)
+
+diff --git a/snmplib/snmp_api.c b/snmplib/snmp_api.c
+index 191debf..15a2d39 100644
+--- a/snmplib/snmp_api.c
++++ b/snmplib/snmp_api.c
+@@ -4350,10 +4350,9 @@ snmp_pdu_parse(netsnmp_pdu *pdu, u_char * data, size_t * length)
+ u_char type;
+ u_char msg_type;
+ u_char *var_val;
+- int badtype = 0;
+ size_t len;
+ size_t four;
+- netsnmp_variable_list *vp = NULL;
++ netsnmp_variable_list *vp = NULL, *vplast = NULL;
+ oid objid[MAX_OID_LEN];
+ u_char *p;
+
+@@ -4493,31 +4492,17 @@ snmp_pdu_parse(netsnmp_pdu *pdu, u_char * data, size_t * length)
+ (ASN_SEQUENCE | ASN_CONSTRUCTOR),
+ "varbinds");
+ if (data == NULL)
+- return -1;
++ goto fail;
+
+ /*
+ * get each varBind sequence
+ */
+ while ((int) *length > 0) {
+- netsnmp_variable_list *vptemp;
+- vptemp = (netsnmp_variable_list *) malloc(sizeof(*vptemp));
+- if (NULL == vptemp) {
+- return -1;
+- }
+- if (NULL == vp) {
+- pdu->variables = vptemp;
+- } else {
+- vp->next_variable = vptemp;
+- }
+- vp = vptemp;
++ vp = SNMP_MALLOC_TYPEDEF(netsnmp_variable_list);
++ if (NULL == vp)
++ goto fail;
+
+- vp->next_variable = NULL;
+- vp->val.string = NULL;
+ vp->name_length = MAX_OID_LEN;
+- vp->name = NULL;
+- vp->index = 0;
+- vp->data = NULL;
+- vp->dataFreeHook = NULL;
+ DEBUGDUMPSECTION("recv", "VarBind");
+ data = snmp_parse_var_op(data, objid, &vp->name_length, &vp->type,
+ &vp->val_len, &var_val, length);
+@@ -4604,7 +4589,7 @@ snmp_pdu_parse(netsnmp_pdu *pdu, u_char * data, size_t * length)
+ vp->val.string = (u_char *) malloc(vp->val_len);
+ }
+ if (vp->val.string == NULL) {
+- return -1;
++ goto fail;
+ }
+ p = asn_parse_string(var_val, &len, &vp->type, vp->val.string,
+ &vp->val_len);
+@@ -4619,7 +4604,7 @@ snmp_pdu_parse(netsnmp_pdu *pdu, u_char * data, size_t * length)
+ vp->val_len *= sizeof(oid);
+ vp->val.objid = (oid *) malloc(vp->val_len);
+ if (vp->val.objid == NULL) {
+- return -1;
++ goto fail;
+ }
+ memmove(vp->val.objid, objid, vp->val_len);
+ break;
+@@ -4631,7 +4616,7 @@ snmp_pdu_parse(netsnmp_pdu *pdu, u_char * data, size_t * length)
+ case ASN_BIT_STR:
+ vp->val.bitstring = (u_char *) malloc(vp->val_len);
+ if (vp->val.bitstring == NULL) {
+- return -1;
++ goto fail;
+ }
+ p = asn_parse_bitstring(var_val, &len, &vp->type,
+ vp->val.bitstring, &vp->val_len);
+@@ -4640,12 +4625,30 @@ snmp_pdu_parse(netsnmp_pdu *pdu, u_char * data, size_t * length)
+ break;
+ default:
+ snmp_log(LOG_ERR, "bad type returned (%x)\n", vp->type);
+- badtype = -1;
++ goto fail;
+ break;
+ }
+ DEBUGINDENTADD(-4);
++
++ if (NULL == vplast) {
++ pdu->variables = vp;
++ } else {
++ vplast->next_variable = vp;
++ }
++ vplast = vp;
++ vp = NULL;
++
+ }
+- return badtype;
++ return 0;
++
++ fail:
++ DEBUGMSGTL(("recv", "error while parsing VarBindList\n"));
++ /** if we were parsing a var, remove it from the pdu and free it */
++ if (vp)
++ snmp_free_var(vp);
++
++ return -1;
++
+ }
+
+ /*
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch
new file mode 100644
index 000000000..d29be3395
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/fix-libtool-finish.patch
@@ -0,0 +1,25 @@
+LIB_LDCONFIG_CMD failed since it is using a host dir $(libdir)
+which is /usr/lib64 does not exist on host when compile 64bit
+image.
+
+In fact, configuring dynamic linker run-time bindings is meaningless
+at this step, If it is needed, Poky would write ldconfig scripts to
+rpm-postinst for each recipe while do_package, in package.bbclass.
+
+Upstream-Status: Inappropriate [cross compile specific]
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+Index: net-snmp-5.7.3/Makefile.top
+===================================================================
+--- net-snmp-5.7.3.orig/Makefile.top
++++ net-snmp-5.7.3/Makefile.top
+@@ -87,7 +87,7 @@ LIBREVISION = 3
+ LIB_LD_CMD = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
+ LIB_EXTENSION = la
+ LIB_VERSION =
+-LIB_LDCONFIG_CMD = $(LIBTOOL) --mode=finish $(INSTALL_PREFIX)$(libdir)
++LIB_LDCONFIG_CMD = echo "do not ldconfig\n"
+ LINK = $(LIBTOOL) --mode=link $(LINKCC)
+ # RANLIB = @RANLIB@
+ RANLIB = :
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch
new file mode 100644
index 000000000..fbd274bba
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch
@@ -0,0 +1,42 @@
+From e47c60dc7f649959f63e56bc62355de4bdfd73f4 Mon Sep 17 00:00:00 2001
+From: Marian Florea <marian.florea@windriver.com>
+Date: Thu, 20 Jul 2017 16:55:24 +0800
+Subject: [PATCH] net snmp: fix engineBoots value on SIGHUP
+
+Upstream-Status: Pending
+
+Signed-off-by: Marian Florea <marian.florea@windriver.com>
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+---
+ agent/snmpd.c | 1 +
+ snmplib/snmpv3.c | 4 ++--
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+Index: net-snmp-5.7.3/agent/snmpd.c
+===================================================================
+--- net-snmp-5.7.3.orig/agent/snmpd.c
++++ net-snmp-5.7.3/agent/snmpd.c
+@@ -1253,6 +1253,7 @@ receive(void)
+ snmp_log(LOG_INFO, "NET-SNMP version %s restarted\n",
+ netsnmp_get_version());
+ update_config();
++ snmp_store(app_name);
+ send_easy_trap(SNMP_TRAP_ENTERPRISESPECIFIC, 3);
+ #if HAVE_SIGHOLD
+ sigrelse(SIGHUP);
+Index: net-snmp-5.7.3/snmplib/snmpv3.c
+===================================================================
+--- net-snmp-5.7.3.orig/snmplib/snmpv3.c
++++ net-snmp-5.7.3/snmplib/snmpv3.c
+@@ -984,9 +984,9 @@ init_snmpv3_post_config(int majorid, int
+ /*
+ * if our engineID has changed at all, the boots record must be set to 1
+ */
+- if (engineIDLen != oldEngineIDLength ||
++ if (oldEngineIDLength != (size_t)0 && (engineIDLen != oldEngineIDLength ||
+ oldEngineID == NULL || c_engineID == NULL ||
+- memcmp(oldEngineID, c_engineID, engineIDLen) != 0) {
++ memcmp(oldEngineID, c_engineID, engineIDLen) != 0)) {
+ engineBoots = 1;
+ }
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch
new file mode 100644
index 000000000..74b0c12e0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-add-knob-whether-nlist.h-are-checked.patch
@@ -0,0 +1,35 @@
+net-snmp: add knob whether nlist.h are checked
+
+Previously, it still was checked when there was no nlish.h in sysroots directory.
+Add knob to decide whether nlist.h are checked or not.
+
+Upstream-status: Pending
+
+Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
+---
+ configure.d/config_os_headers | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/configure.d/config_os_headers b/configure.d/config_os_headers
+index d903f58..a05d30e 100644
+--- a/configure.d/config_os_headers
++++ b/configure.d/config_os_headers
+@@ -31,6 +31,7 @@ AC_CHECK_HEADERS([getopt.h pthread.h regex.h ] dnl
+ [sys/un.h ])
+
+ # Library and Agent:
++if test "x$with_elf" != "xno"; then
+ AC_CHECK_HEADERS([nlist.h],,,[
+ AC_INCLUDES_DEFAULT
+ [
+@@ -38,6 +39,7 @@ AC_INCLUDES_DEFAULT
+ #define LIBBSD_DISABLE_DEPRECATED 1
+ #endif
+ ]])
++fi
+
+ # Library:
+ AC_CHECK_HEADERS([fcntl.h io.h kstat.h ] dnl
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-agentx-crash.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-agentx-crash.patch
new file mode 100644
index 000000000..5eed893e1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-agentx-crash.patch
@@ -0,0 +1,75 @@
+Description: fix snmpd crash via AgentX connection
+
+ taken from Fedora, net-snmp-5.7-agentx-crash.patch
+
+bz729738 - net-snmp dumps core in netsnmp_oid_find_prefix
+bz1038011 - net-snmp: snmpd crashes/hangs when AgentX subagent times-out
+
+commit f9304c83f76202db0e684269ca1af32e43cd9db4
+Author: Jan Safranek <jsafranek@users.sourceforge.net>
+Date: Tue Feb 7 14:53:44 2012 +0100
+
+ CHANGES: PATCH 1633670: fixed snmpd crashing when an AgentX subagent
+ disconnect in the middle of processing of a request.
+
+ I fixed also the memory leak reported in the tracker comments.
+
+Upstream-Status: Backport
+
+Signed-off-by: Zhu Yanjun <yanjun.zhu@windriver.com>
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+---
+ agent/mibgroup/agentx/master.c | 5 +++++
+ agent/mibgroup/agentx/master_admin.c | 9 +++++++--
+ 2 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/agent/mibgroup/agentx/master.c b/agent/mibgroup/agentx/master.c
+index c42a42a..baeebaf 100644
+--- a/agent/mibgroup/agentx/master.c
++++ b/agent/mibgroup/agentx/master.c
+@@ -219,6 +219,9 @@ agentx_got_response(int operation,
+ if (!cache) {
+ DEBUGMSGTL(("agentx/master", "response too late on session %8p\n",
+ session));
++ /* response is too late, free the cache */
++ if (magic)
++ netsnmp_free_delegated_cache((netsnmp_delegated_cache*) magic);
+ return 0;
+ }
+ requests = cache->requests;
+@@ -606,6 +609,8 @@ agentx_master_handler(netsnmp_mib_handler *handler,
+ result = snmp_async_send(ax_session, pdu, agentx_got_response, cb_data);
+ if (result == 0) {
+ snmp_free_pdu(pdu);
++ if (cb_data)
++ netsnmp_free_delegated_cache((netsnmp_delegated_cache*) cb_data);
+ }
+
+ return SNMP_ERR_NOERROR;
+diff --git a/agent/mibgroup/agentx/master_admin.c b/agent/mibgroup/agentx/master_admin.c
+index f16f392..b84b85e 100644
+--- a/agent/mibgroup/agentx/master_admin.c
++++ b/agent/mibgroup/agentx/master_admin.c
+@@ -133,11 +133,16 @@ close_agentx_session(netsnmp_session * session, int sessid)
+ * requests, so that the delegated request will be completed and
+ * further requests can be processed
+ */
+- netsnmp_remove_delegated_requests_for_session(session);
++ while (netsnmp_remove_delegated_requests_for_session(session)) {
++ DEBUGMSGTL(("agentx/master", "Continue removing delegated reqests\n"));
++ }
++
+ if (session->subsession != NULL) {
+ netsnmp_session *subsession = session->subsession;
+ for(; subsession; subsession = subsession->next) {
+- netsnmp_remove_delegated_requests_for_session(subsession);
++ while (netsnmp_remove_delegated_requests_for_session(subsession)) {
++ DEBUGMSGTL(("agentx/master", "Continue removing delegated subsession reqests\n"));
++ }
+ }
+ }
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch
new file mode 100644
index 000000000..25eb9c96f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-fix-for-disable-des.patch
@@ -0,0 +1,32 @@
+From 270e952f58a7e5ddeabe5a15e3ddaaadf40017d0 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Thu, 22 Jun 2017 10:25:08 +0800
+Subject: [PATCH] net-snmp: fix for --disable-des
+
+Include des.h only if it's found in openssl so that
+the --disable-des works correctly.
+
+Upstream-Status: Submitted [net-snmp-coders@lists.sourceforge.net]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ snmplib/scapi.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/snmplib/scapi.c b/snmplib/scapi.c
+index 16ac829..271684b 100644
+--- a/snmplib/scapi.c
++++ b/snmplib/scapi.c
+@@ -79,7 +79,9 @@ netsnmp_feature_child_of(usm_scapi, usm_support)
+ #include <openssl/hmac.h>
+ #include <openssl/evp.h>
+ #include <openssl/rand.h>
++#ifdef HAVE_OPENSSL_DES_H
+ #include <openssl/des.h>
++#endif
+ #ifdef HAVE_AES
+ #include <openssl/aes.h>
+ #endif
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch
new file mode 100644
index 000000000..8f8336a49
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/net-snmp-testing-add-the-output-format-for-ptest.patch
@@ -0,0 +1,34 @@
+From 4bb4024b395f19d36ab3569e2773ea80d8cc5261 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 14 Jan 2015 15:10:06 +0800
+Subject: [PATCH] testing: add the output format for ptest
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ testing/RUNTESTS | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+Index: net-snmp-5.7.3/testing/RUNTESTS
+===================================================================
+--- net-snmp-5.7.3.orig/testing/RUNTESTS
++++ net-snmp-5.7.3/testing/RUNTESTS
+@@ -29,13 +29,17 @@ failed_count=0
+ rm -f failed_tests
+ for i in "${srcdir}"/testing/fulltests/default/T*$1*; do
+ echo "RUNNING $i"
++ test_name=`basename $i`
+ ${srcdir}/testing/fulltests/support/simple_run $i
+ if [ $? = 0 ]; then
++ echo "PASS: $test_name"
+ success_count=`expr $success_count + 1`
+ else
++ echo "FAIL: $test_name"
+ failed_count=`expr $failed_count + 1`
+ echo "$i" >> failed_tests
+ fi
++ echo
+ done
+
+ if [ -f failed_tests ]; then
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/run-ptest b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/run-ptest
new file mode 100755
index 000000000..2334217bc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/run-ptest
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+cd testing
+./RUNTESTS
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmpd.service b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmpd.service
new file mode 100644
index 000000000..447683f85
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmpd.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Simple Network Management Protocol (SNMP) Daemon.
+After=syslog.target network.target
+
+[Service]
+Type=notify
+Environment=OPTIONS="-Ls0-6d"
+EnvironmentFile=-/etc/default/snmpd
+ExecStart=/usr/sbin/snmpd $OPTIONS -a -f
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmptrapd.service b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmptrapd.service
new file mode 100644
index 000000000..951f9f270
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/snmptrapd.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Simple Network Management Protocol (SNMP) Trap Daemon.
+After=syslog.target network.target
+
+[Service]
+Type=notify
+Environment=OPTIONS="-Lsd"
+EnvironmentFile=-/etc/default/snmptrapd
+ExecStart=/usr/sbin/snmptrapd $OPTIONS -f
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/systemd-support.patch b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/systemd-support.patch
new file mode 100644
index 000000000..c6af8c0f3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp/systemd-support.patch
@@ -0,0 +1,1652 @@
+From 0cad0c6c36af2a2d589563804c9ed2b37b7085fb Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Fri, 21 Aug 2015 14:37:02 +0900
+Subject: [PATCH] ystemd support backported from the master branch as of
+ 23/04/2012 (post 5.7.1, pre 5.8).
+
+The following commits have been cherry-picked:
+
+19499c3c90bf9d7b2b9e5d08baa26cc6bba28a11
+fef6cddfdb94da1a6b1fb768af62918b80f11fd3
+0641e43c694c485cbbffef0556efc4641bd3ff50
+76530a89f1c8bbd0b63acce63e10d5d4812a1a16 (conflict resolved)
+bf108d7f1354f6276fc43c129963f2c49b9fc242
+3692875172352f72cf3afd0d35f355e83d7e421b
+74412748067c685e1d8ab6ed3bcc3ca9c2774844
+86132e3f1e6ef7b4e0b96d8fa24e37c81b71b0e0
+63557cf8986a33dba1d4429b583a901361052c4f
+
+Upstream-Status: Backport
+
+Signed-off-by: Thomas Fitzsimmons <fitzsim@cisco.com>
+---
+ README.systemd | 41 +++
+ agent/snmpd.c | 33 +-
+ apps/snmptrapd.c | 32 +-
+ configure.d/config_modules_lib | 8 +
+ configure.d/config_project_with_enable | 9 +
+ dist/snmpd.servic | 18 +
+ dist/snmpd.socket | 17 +
+ dist/snmptrapd.service | 16 +
+ dist/snmptrapd.socket | 14 +
+ include/net-snmp/library/sd-daemon.h | 290 ++++++++++++++++
+ snmplib/sd-daemon.c | 532 +++++++++++++++++++++++++++++
+ snmplib/transports/snmpTCPDomain.c | 43 ++-
+ snmplib/transports/snmpTCPIPv6Domain.c | 46 ++-
+ snmplib/transports/snmpUDPIPv4BaseDomain.c | 33 +-
+ snmplib/transports/snmpUDPIPv6Domain.c | 34 +-
+ snmplib/transports/snmpUnixDomain.c | 66 ++--
+ win32/libsnmp/Makefile.in | 6 +
+ win32/net-snmp/net-snmp-config.h | 2 +
+ win32/net-snmp/net-snmp-config.h.in | 2 +
+ 19 files changed, 1176 insertions(+), 66 deletions(-)
+ create mode 100644 README.systemd
+ create mode 100644 dist/snmpd.servic
+ create mode 100644 dist/snmpd.socket
+ create mode 100644 dist/snmptrapd.service
+ create mode 100644 dist/snmptrapd.socket
+ create mode 100644 include/net-snmp/library/sd-daemon.h
+ create mode 100644 snmplib/sd-daemon.c
+
+diff --git a/README.systemd b/README.systemd
+new file mode 100644
+index 0000000..dba15d1
+--- /dev/null
++++ b/README.systemd
+@@ -0,0 +1,41 @@
++README.systemd
++--------------
++Net-SNMP provides two daemons, which support systemd system manager.
++See http://www.freedesktop.org/wiki/Software/systemd to learn how
++systemd works. Both socket activation and notification is supported by these
++daemons.
++
++To enable systemd support, the sources must be compiled with
++--with-systemd configure option.
++
++snmpd - The SNMP agent
++----------------------
++Socket activation od snmpd daemon is implemented, but it's discouraged.
++The reason is simple - snmpd not only listens and processes SNMP requests
++from network, but also gathers system statistics counters, sends traps and
++communicates with subagents. It even opens few netlink sockets.
++
++In other words, snmpd should run from system start to properly work.
++This can be done in two ways:
++1) either as snmpd service unit with 'Type=notification' and without a socket
++ unit
++2) or as snmpd service unit with 'Type=simple', appropriate socket socket unit
++ and the snmpd service enabled. This way systemd creates the snmpd listening
++ socket early during boot and passes the sockets to snmpd slightly later
++ (but still during machine boot). This way systemd can paralelize start of
++ services, which depend on snmpd. Admins must adjust the socket file manually,
++ depending if the snmpd support AgentX, IPv6, SMUX etc.
++
++snmpd should be started with '-f' command line parameter to disable forking -
++systemd does that for us automatically.
++
++
++snmptrapd - The trap processing daemon
++--------------------------------------
++snmptrapd supports full socket activation and also notification (if needed).
++Both 'Type=simple' (with appropriate socket unit) and 'Type=notify' services
++will work. Again, '-f' parameter should be provided on snmptrapd command line.
++
++If integration with SNMP agent using AgentX protocol is enabled, snmptrapd should
++start during boot and not after first SNMP trap arrives. Same rules as for snmpd
++applies then.
+diff --git a/agent/snmpd.c b/agent/snmpd.c
+index cfc7bce..116ee5c 100644
+--- a/agent/snmpd.c
++++ b/agent/snmpd.c
+@@ -164,6 +164,10 @@ typedef long fd_mask;
+
+ #endif
+
++#ifndef NETSNMP_NO_SYSTEMD
++#include <net-snmp/library/sd-daemon.h>
++#endif
++
+ netsnmp_feature_want(logging_file)
+ netsnmp_feature_want(logging_stdio)
+ netsnmp_feature_want(logging_syslog)
+@@ -443,19 +447,29 @@ main(int argc, char *argv[])
+ int agent_mode = -1;
+ char *pid_file = NULL;
+ char option_compatability[] = "-Le";
++#ifndef WIN32
++ int prepared_sockets = 0;
++#endif
+ #if HAVE_GETPID
+ int fd;
+ FILE *PID;
+ #endif
+
+ #ifndef WIN32
++#ifndef NETSNMP_NO_SYSTEMD
++ /* check if systemd has sockets for us and don't close them */
++ prepared_sockets = netsnmp_sd_listen_fds(0);
++#endif /* NETSNMP_NO_SYSTEMD */
++
+ /*
+ * close all non-standard file descriptors we may have
+ * inherited from the shell.
+ */
+- for (i = getdtablesize() - 1; i > 2; --i) {
+- (void) close(i);
+- }
++ if (!prepared_sockets) {
++ for (i = getdtablesize() - 1; i > 2; --i) {
++ (void) close(i);
++ }
++}
+ #endif /* #WIN32 */
+
+ /*
+@@ -1107,6 +1121,19 @@ main(int argc, char *argv[])
+ netsnmp_addrcache_initialise();
+
+ /*
++ * Let systemd know we're up.
++ */
++#ifndef NETSNMP_NO_SYSTEMD
++ netsnmp_sd_notify(1, "READY=1\n");
++ if (prepared_sockets)
++ /*
++ * Clear the environment variable, we already processed all the sockets
++ * by now.
++ */
++ netsnmp_sd_listen_fds(1);
++#endif
++
++ /*
+ * Forever monitor the dest_port for incoming PDUs.
+ */
+ DEBUGMSGTL(("snmpd/main", "We're up. Starting to process data.\n"));
+diff --git a/apps/snmptrapd.c b/apps/snmptrapd.c
+index bce0d47..c6a74ec 100644
+--- a/apps/snmptrapd.c
++++ b/apps/snmptrapd.c
+@@ -125,6 +125,10 @@ SOFTWARE.
+
+ #include <net-snmp/net-snmp-features.h>
+
++#ifndef NETSNMP_NO_SYSTEMD
++#include <net-snmp/library/sd-daemon.h>
++#endif
++
+ #ifndef BSD4_3
+ #define BSD4_2
+ #endif
+@@ -657,16 +661,25 @@ main(int argc, char *argv[])
+ int agentx_subagent = 1;
+ #endif
+ netsnmp_trapd_handler *traph;
++#ifndef WIN32
++ int prepared_sockets = 0;
++#endif
+
+
+ #ifndef WIN32
++#ifndef NETSNMP_NO_SYSTEMD
++ /* check if systemd has sockets for us and don't close them */
++ prepared_sockets = netsnmp_sd_listen_fds(0);
++#endif
+ /*
+ * close all non-standard file descriptors we may have
+ * inherited from the shell.
+ */
+- for (i = getdtablesize() - 1; i > 2; --i) {
+- (void) close(i);
+- }
++ if (!prepared_sockets) {
++ for (i = getdtablesize() - 1; i > 2; --i) {
++ (void) close(i);
++ }
++}
+ #endif /* #WIN32 */
+
+ #ifdef SIGTERM
+@@ -1318,6 +1331,19 @@ main(int argc, char *argv[])
+ #endif
+ #endif
+
++ /*
++ * Let systemd know we're up.
++ */
++#ifndef NETSNMP_NO_SYSTEMD
++ netsnmp_sd_notify(1, "READY=1\n");
++ if (prepared_sockets)
++ /*
++ * Clear the environment variable, we already processed all the sockets
++ * by now.
++ */
++ netsnmp_sd_listen_fds(1);
++#endif
++
+ #ifdef WIN32SERVICE
+ trapd_status = SNMPTRAPD_RUNNING;
+ #endif
+diff --git a/configure.d/config_modules_lib b/configure.d/config_modules_lib
+index 362ba0a..bb69daa 100644
+--- a/configure.d/config_modules_lib
++++ b/configure.d/config_modules_lib
+@@ -53,6 +53,14 @@ if test "x$PARTIALTARGETOS" = "xmingw32" -o "x$PARTIALTARGETOS" = "xmingw32msvc"
+ other_ftobjs_list="$other_ftobjs_list winpipe.ft"
+ fi
+
++# Linux systemd
++if test "x$with_systemd" == "xyes"; then
++ other_src_list="$other_src_list sd-daemon.c"
++ other_objs_list="$other_objs_list sd-daemon.o"
++ other_lobjs_list="$other_lobjs_list sd-daemon.lo"
++ other_ftobjs_list="$other_ftobjs_list sd-daemon.ft"
++fi
++
+ AC_SUBST(other_src_list)
+ AC_SUBST(other_objs_list)
+ AC_SUBST(other_lobjs_list)
+diff --git a/configure.d/config_project_with_enable b/configure.d/config_project_with_enable
+index 61ba026..d782d12 100644
+--- a/configure.d/config_project_with_enable
++++ b/configure.d/config_project_with_enable
+@@ -690,6 +690,15 @@ if test "x$with_dummy_values" != "xyes"; then
+ data for])
+ fi
+
++NETSNMP_ARG_WITH(systemd,
++[ --with-systemd Provide systemd support. See README.systemd
++ for details.])
++# Define unless specifically suppressed (i.e., option defaults to false).
++if test "x$with_systemd" != "xyes"; then
++ AC_DEFINE(NETSNMP_NO_SYSTEMD, 1,
++ [If you don't want to integrate with systemd.])
++fi
++
+ NETSNMP_ARG_ENABLE(set-support,
+ [ --disable-set-support Do not allow SNMP set requests.])
+ if test "x$enable_set_support" = "xno"; then
+diff --git a/dist/snmpd.servic b/dist/snmpd.servic
+new file mode 100644
+index 0000000..31391e5
+--- /dev/null
++++ b/dist/snmpd.servic
+@@ -0,0 +1,18 @@
++#
++# SNMP agent service file for systemd
++#
++#
++# The service should be enabled, i.e. snmpd should start during machine boot.
++# Socket activation shall not be used. See README.systemd for details.
++
++[Unit]
++Description=Simple Network Management Protocol (SNMP) daemon.
++After=syslog.target network.target
++
++[Service]
++# Type=notify is also supported. It should be set when snmpd.socket is not used.
++Type=simple
++ExecStart=/usr/sbin/snmpd -f
++
++[Install]
++WantedBy=multi-user.target
+diff --git a/dist/snmpd.socket b/dist/snmpd.socket
+new file mode 100644
+index 0000000..7f3a2d9
+--- /dev/null
++++ b/dist/snmpd.socket
+@@ -0,0 +1,17 @@
++[Unit]
++Description=Socket listening for SNMP and AgentX messages
++
++[Socket]
++ListenDatagram=0.0.0.0:161
++# Uncomment other listening addresses as needed - TCP, UDP6, TCP6.
++# It must match listening addresses/ports defined in snmpd.service
++# or snmpd.conf.
++# ListenStream=0.0.0.0:161
++# ListenDatagram=[::]:161
++# ListenStream=[::]:161
++#
++# Uncomment AgentX socket if snmpd.conf enables AgentX protocol.
++# ListenStream=/var/agentx/master
++
++[Install]
++WantedBy=sockets.target
+diff --git a/dist/snmptrapd.service b/dist/snmptrapd.service
+new file mode 100644
+index 0000000..e88a5b4
+--- /dev/null
++++ b/dist/snmptrapd.service
+@@ -0,0 +1,16 @@
++#
++# SNMP trap-processing service file for systemd
++#
++
++[Unit]
++Description=Simple Network Management Protocol (SNMP) Trap daemon.
++After=syslog.target network.target
++
++[Service]
++# Type=notify is also supported. It should be set when snmptrapd.socket is not
++# used.
++Type=simple
++ExecStart=/usr/sbin/snmptrapd -f
++
++[Install]
++WantedBy=multi-user.target
+diff --git a/dist/snmptrapd.socket b/dist/snmptrapd.socket
+new file mode 100644
+index 0000000..2d24fb8
+--- /dev/null
++++ b/dist/snmptrapd.socket
+@@ -0,0 +1,14 @@
+++[Unit]
+++Description=Socket listening for SNMP trap messages
+++
+++[Socket]
+++ListenDatagram=0.0.0.0:162
+++# Uncomment other listening addresses as needed - TCP, UDP6, TCP6.
+++# It must match listening addresses/ports defined in snmptrapd.service
+++# or snmptrapd.conf.
+++# ListenStream=0.0.0.0:162
+++# ListenDatagram=[::]:162
+++# ListenStream=[::]:162
+++
+++[Install]
+++WantedBy=sockets.target
+diff --git a/include/net-snmp/library/sd-daemon.h b/include/net-snmp/library/sd-daemon.h
+new file mode 100644
+index 0000000..85274c9
+--- /dev/null
++++ b/include/net-snmp/library/sd-daemon.h
+@@ -0,0 +1,290 @@
++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
++
++#ifndef SNMPD_SD_DAEMON_H
++#define SNMPD_SD_DAEMON_H
++
++/***
++ Copyright 2010 Lennart Poettering
++
++ 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.
++***/
++
++#ifdef HAVE_SYS_TYPES_H
++#include <sys/types.h>
++#endif
++#ifdef HAVE_INTTYPES_H
++#include <inttypes.h>
++#endif
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/*
++ Reference implementation of a few systemd related interfaces for
++ writing daemons. These interfaces are trivial to implement. To
++ simplify porting we provide this reference implementation.
++ Applications are welcome to reimplement the algorithms described
++ here if they do not want to include these two source files.
++
++ The following functionality is provided:
++
++ - Support for logging with log levels on stderr
++ - File descriptor passing for socket-based activation
++ - Daemon startup and status notification
++ - Detection of systemd boots
++
++ You may compile this with -DDISABLE_SYSTEMD to disable systemd
++ support. This makes all those calls NOPs that are directly related to
++ systemd (i.e. only sd_is_xxx() will stay useful).
++
++ Since this is drop-in code we don't want any of our symbols to be
++ exported in any case. Hence we declare hidden visibility for all of
++ them.
++
++ You may find an up-to-date version of these source files online:
++
++ http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.h
++ http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.c
++
++ This should compile on non-Linux systems, too, but with the
++ exception of the sd_is_xxx() calls all functions will become NOPs.
++
++ See sd-daemon(7) for more information.
++*/
++
++#ifndef _sd_printf_attr_
++#if __GNUC__ >= 4
++#define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b)))
++#else
++#define _sd_printf_attr_(a,b)
++#endif
++#endif
++
++/*
++ Log levels for usage on stderr:
++
++ fprintf(stderr, SD_NOTICE "Hello World!\n");
++
++ This is similar to printk() usage in the kernel.
++*/
++#define SD_EMERG "<0>" /* system is unusable */
++#define SD_ALERT "<1>" /* action must be taken immediately */
++#define SD_CRIT "<2>" /* critical conditions */
++#define SD_ERR "<3>" /* error conditions */
++#define SD_WARNING "<4>" /* warning conditions */
++#define SD_NOTICE "<5>" /* normal but significant condition */
++#define SD_INFO "<6>" /* informational */
++#define SD_DEBUG "<7>" /* debug-level messages */
++
++/* The first passed file descriptor is fd 3 */
++#define SD_LISTEN_FDS_START 3
++
++/*
++ Returns how many file descriptors have been passed, or a negative
++ errno code on failure. Optionally, removes the $LISTEN_FDS and
++ $LISTEN_PID file descriptors from the environment (recommended, but
++ problematic in threaded environments). If r is the return value of
++ this function you'll find the file descriptors passed as fds
++ SD_LISTEN_FDS_START to SD_LISTEN_FDS_START+r-1. Returns a negative
++ errno style error code on failure. This function call ensures that
++ the FD_CLOEXEC flag is set for the passed file descriptors, to make
++ sure they are not passed on to child processes. If FD_CLOEXEC shall
++ not be set, the caller needs to unset it after this call for all file
++ descriptors that are used.
++
++ See sd_listen_fds(3) for more information.
++*/
++int netsnmp_sd_listen_fds(int unset_environment);
++
++/*
++ Helper call for identifying a passed file descriptor. Returns 1 if
++ the file descriptor is a FIFO in the file system stored under the
++ specified path, 0 otherwise. If path is NULL a path name check will
++ not be done and the call only verifies if the file descriptor
++ refers to a FIFO. Returns a negative errno style error code on
++ failure.
++
++ See sd_is_fifo(3) for more information.
++*/
++int netsnmp_sd_is_fifo(int fd, const char *path);
++
++/*
++ Helper call for identifying a passed file descriptor. Returns 1 if
++ the file descriptor is a special character device on the file
++ system stored under the specified path, 0 otherwise.
++ If path is NULL a path name check will not be done and the call
++ only verifies if the file descriptor refers to a special character.
++ Returns a negative errno style error code on failure.
++
++ See sd_is_special(3) for more information.
++*/
++int netsnmp_sd_is_special(int fd, const char *path);
++
++/*
++ Helper call for identifying a passed file descriptor. Returns 1 if
++ the file descriptor is a socket of the specified family (AF_INET,
++ ...) and type (SOCK_DGRAM, SOCK_STREAM, ...), 0 otherwise. If
++ family is 0 a socket family check will not be done. If type is 0 a
++ socket type check will not be done and the call only verifies if
++ the file descriptor refers to a socket. If listening is > 0 it is
++ verified that the socket is in listening mode. (i.e. listen() has
++ been called) If listening is == 0 it is verified that the socket is
++ not in listening mode. If listening is < 0 no listening mode check
++ is done. Returns a negative errno style error code on failure.
++
++ See sd_is_socket(3) for more information.
++*/
++int netsnmp_sd_is_socket(int fd, int family, int type, int listening);
++
++/*
++ Helper call for identifying a passed file descriptor. Returns 1 if
++ the file descriptor is an Internet socket, of the specified family
++ (either AF_INET or AF_INET6) and the specified type (SOCK_DGRAM,
++ SOCK_STREAM, ...), 0 otherwise. If version is 0 a protocol version
++ check is not done. If type is 0 a socket type check will not be
++ done. If port is 0 a socket port check will not be done. The
++ listening flag is used the same way as in sd_is_socket(). Returns a
++ negative errno style error code on failure.
++
++ See sd_is_socket_inet(3) for more information.
++*/
++int netsnmp_sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port);
++
++/*
++ Helper call for identifying a passed file descriptor. Returns 1 if
++ the file descriptor is an AF_UNIX socket of the specified type
++ (SOCK_DGRAM, SOCK_STREAM, ...) and path, 0 otherwise. If type is 0
++ a socket type check will not be done. If path is NULL a socket path
++ check will not be done. For normal AF_UNIX sockets set length to
++ 0. For abstract namespace sockets set length to the length of the
++ socket name (including the initial 0 byte), and pass the full
++ socket path in path (including the initial 0 byte). The listening
++ flag is used the same way as in sd_is_socket(). Returns a negative
++ errno style error code on failure.
++
++ See sd_is_socket_unix(3) for more information.
++*/
++int netsnmp_sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length);
++
++/*
++ Informs systemd about changed daemon state. This takes a number of
++ newline separated environment-style variable assignments in a
++ string. The following variables are known:
++
++ READY=1 Tells systemd that daemon startup is finished (only
++ relevant for services of Type=notify). The passed
++ argument is a boolean "1" or "0". Since there is
++ little value in signaling non-readiness the only
++ value daemons should send is "READY=1".
++
++ STATUS=... Passes a single-line status string back to systemd
++ that describes the daemon state. This is free-from
++ and can be used for various purposes: general state
++ feedback, fsck-like programs could pass completion
++ percentages and failing programs could pass a human
++ readable error message. Example: "STATUS=Completed
++ 66% of file system check..."
++
++ ERRNO=... If a daemon fails, the errno-style error code,
++ formatted as string. Example: "ERRNO=2" for ENOENT.
++
++ BUSERROR=... If a daemon fails, the D-Bus error-style error
++ code. Example: "BUSERROR=org.freedesktop.DBus.Error.TimedOut"
++
++ MAINPID=... The main pid of a daemon, in case systemd did not
++ fork off the process itself. Example: "MAINPID=4711"
++
++ Daemons can choose to send additional variables. However, it is
++ recommended to prefix variable names not listed above with X_.
++
++ Returns a negative errno-style error code on failure. Returns > 0
++ if systemd could be notified, 0 if it couldn't possibly because
++ systemd is not running.
++
++ Example: When a daemon finished starting up, it could issue this
++ call to notify systemd about it:
++
++ sd_notify(0, "READY=1");
++
++ See sd_notifyf() for more complete examples.
++
++ See sd_notify(3) for more information.
++*/
++int netsnmp_sd_notify(int unset_environment, const char *state);
++
++/*
++ Similar to sd_notify() but takes a format string.
++
++ Example 1: A daemon could send the following after initialization:
++
++ sd_notifyf(0, "READY=1\n"
++ "STATUS=Processing requests...\n"
++ "MAINPID=%lu",
++ (unsigned long) getpid());
++
++ Example 2: A daemon could send the following shortly before
++ exiting, on failure:
++
++ sd_notifyf(0, "STATUS=Failed to start up: %s\n"
++ "ERRNO=%i",
++ strerror(errno),
++ errno);
++
++ See sd_notifyf(3) for more information.
++*/
++int netsnmp_sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3);
++
++/*
++ Returns > 0 if the system was booted with systemd. Returns < 0 on
++ error. Returns 0 if the system was not booted with systemd. Note
++ that all of the functions above handle non-systemd boots just
++ fine. You should NOT protect them with a call to this function. Also
++ note that this function checks whether the system, not the user
++ session is controlled by systemd. However the functions above work
++ for both user and system services.
++
++ See sd_booted(3) for more information.
++*/
++int netsnmp_sd_booted(void);
++
++/**
++ * Find an socket with given parameters. See man sd_is_socket_inet for
++ * description of the arguments.
++ *
++ * Returns the file descriptor if it is found, 0 otherwise.
++ */
++int netsnmp_sd_find_inet_socket(int family, int type, int listening, int port);
++
++/**
++ * Find an unix socket with given parameters. See man sd_is_socket_unix for
++ * description of the arguments.
++ *
++ * Returns the file descriptor if it is found, 0 otherwise.
++ */
++int
++netsnmp_sd_find_unix_socket(int type, int listening, const char *path);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* SNMPD_SD_DAEMON_H */
+diff --git a/snmplib/sd-daemon.c b/snmplib/sd-daemon.c
+new file mode 100644
+index 0000000..42dba29
+--- /dev/null
++++ b/snmplib/sd-daemon.c
+@@ -0,0 +1,532 @@
++/*
++ * Systemd integration parts.
++ *
++ * Most of this file is directly copied from systemd sources.
++ * Changes:
++ * - all functions were renamed to have netsnmp_ prefix
++ * - includes were changed to match Net-SNMP style.
++ * - removed gcc export macros
++ * - removed POSIX message queues
++ */
++
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-features.h>
++#include <net-snmp/types.h>
++#include <net-snmp/library/snmp_debug.h>
++
++#ifndef NETSNMP_NO_SYSTEMD
++
++/***
++ Copyright 2010 Lennart Poettering
++
++ 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.
++***/
++
++#ifndef _GNU_SOURCE
++#define _GNU_SOURCE
++#endif
++
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <sys/socket.h>
++#include <sys/un.h>
++#include <sys/fcntl.h>
++#include <netinet/in.h>
++#include <stdlib.h>
++#include <errno.h>
++#include <unistd.h>
++#include <string.h>
++#include <stdarg.h>
++#include <stdio.h>
++#include <stddef.h>
++#include <limits.h>
++
++#include <net-snmp/library/sd-daemon.h>
++
++int netsnmp_sd_listen_fds(int unset_environment) {
++
++ int r, fd;
++ const char *e;
++ char *p = NULL;
++ unsigned long l;
++
++ if (!(e = getenv("LISTEN_PID"))) {
++ r = 0;
++ goto finish;
++ }
++
++ errno = 0;
++ l = strtoul(e, &p, 10);
++
++ if (errno != 0) {
++ r = -errno;
++ goto finish;
++ }
++
++ if (!p || *p || l <= 0) {
++ r = -EINVAL;
++ goto finish;
++ }
++
++ /* Is this for us? */
++ if (getpid() != (pid_t) l) {
++ r = 0;
++ goto finish;
++ }
++
++ if (!(e = getenv("LISTEN_FDS"))) {
++ r = 0;
++ goto finish;
++ }
++
++ errno = 0;
++ l = strtoul(e, &p, 10);
++
++ if (errno != 0) {
++ r = -errno;
++ goto finish;
++ }
++
++ if (!p || *p) {
++ r = -EINVAL;
++ goto finish;
++ }
++
++ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) {
++ int flags;
++
++ if ((flags = fcntl(fd, F_GETFD)) < 0) {
++ r = -errno;
++ goto finish;
++ }
++
++ if (flags & FD_CLOEXEC)
++ continue;
++
++ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) {
++ r = -errno;
++ goto finish;
++ }
++ }
++
++ r = (int) l;
++
++finish:
++ if (unset_environment) {
++ unsetenv("LISTEN_PID");
++ unsetenv("LISTEN_FDS");
++ }
++
++ return r;
++}
++
++int netsnmp_sd_is_fifo(int fd, const char *path) {
++ struct stat st_fd;
++
++ if (fd < 0)
++ return -EINVAL;
++
++ memset(&st_fd, 0, sizeof(st_fd));
++ if (fstat(fd, &st_fd) < 0)
++ return -errno;
++
++ if (!S_ISFIFO(st_fd.st_mode))
++ return 0;
++
++ if (path) {
++ struct stat st_path;
++
++ memset(&st_path, 0, sizeof(st_path));
++ if (stat(path, &st_path) < 0) {
++
++ if (errno == ENOENT || errno == ENOTDIR)
++ return 0;
++
++ return -errno;
++ }
++
++ return
++ st_path.st_dev == st_fd.st_dev &&
++ st_path.st_ino == st_fd.st_ino;
++ }
++
++ return 1;
++}
++
++int netsnmp_sd_is_special(int fd, const char *path) {
++ struct stat st_fd;
++
++ if (fd < 0)
++ return -EINVAL;
++
++ if (fstat(fd, &st_fd) < 0)
++ return -errno;
++
++ if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode))
++ return 0;
++
++ if (path) {
++ struct stat st_path;
++
++ if (stat(path, &st_path) < 0) {
++
++ if (errno == ENOENT || errno == ENOTDIR)
++ return 0;
++
++ return -errno;
++ }
++
++ if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode))
++ return
++ st_path.st_dev == st_fd.st_dev &&
++ st_path.st_ino == st_fd.st_ino;
++ else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode))
++ return st_path.st_rdev == st_fd.st_rdev;
++ else
++ return 0;
++ }
++
++ return 1;
++}
++
++static int sd_is_socket_internal(int fd, int type, int listening) {
++ struct stat st_fd;
++
++ if (fd < 0 || type < 0)
++ return -EINVAL;
++
++ if (fstat(fd, &st_fd) < 0)
++ return -errno;
++
++ if (!S_ISSOCK(st_fd.st_mode))
++ return 0;
++
++ if (type != 0) {
++ int other_type = 0;
++ socklen_t l = sizeof(other_type);
++
++ if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0)
++ return -errno;
++
++ if (l != sizeof(other_type))
++ return -EINVAL;
++
++ if (other_type != type)
++ return 0;
++ }
++
++ if (listening >= 0) {
++ int accepting = 0;
++ socklen_t l = sizeof(accepting);
++
++ if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0)
++ return -errno;
++
++ if (l != sizeof(accepting))
++ return -EINVAL;
++
++ if (!accepting != !listening)
++ return 0;
++ }
++
++ return 1;
++}
++
++union sockaddr_union {
++ struct sockaddr sa;
++ struct sockaddr_in in4;
++ struct sockaddr_in6 in6;
++ struct sockaddr_un un;
++ struct sockaddr_storage storage;
++};
++
++int netsnmp_sd_is_socket(int fd, int family, int type, int listening) {
++ int r;
++
++ if (family < 0)
++ return -EINVAL;
++
++ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
++ return r;
++
++ if (family > 0) {
++ union sockaddr_union sockaddr;
++ socklen_t l;
++
++ memset(&sockaddr, 0, sizeof(sockaddr));
++ l = sizeof(sockaddr);
++
++ if (getsockname(fd, &sockaddr.sa, &l) < 0)
++ return -errno;
++
++ if (l < sizeof(sa_family_t))
++ return -EINVAL;
++
++ return sockaddr.sa.sa_family == family;
++ }
++
++ return 1;
++}
++
++int netsnmp_sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) {
++ union sockaddr_union sockaddr;
++ socklen_t l;
++ int r;
++
++ if (family != 0 && family != AF_INET && family != AF_INET6)
++ return -EINVAL;
++
++ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
++ return r;
++
++ memset(&sockaddr, 0, sizeof(sockaddr));
++ l = sizeof(sockaddr);
++
++ if (getsockname(fd, &sockaddr.sa, &l) < 0)
++ return -errno;
++
++ if (l < sizeof(sa_family_t))
++ return -EINVAL;
++
++ if (sockaddr.sa.sa_family != AF_INET &&
++ sockaddr.sa.sa_family != AF_INET6)
++ return 0;
++
++ if (family > 0)
++ if (sockaddr.sa.sa_family != family)
++ return 0;
++
++ if (port > 0) {
++ if (sockaddr.sa.sa_family == AF_INET) {
++ if (l < sizeof(struct sockaddr_in))
++ return -EINVAL;
++
++ return htons(port) == sockaddr.in4.sin_port;
++ } else {
++ if (l < sizeof(struct sockaddr_in6))
++ return -EINVAL;
++
++ return htons(port) == sockaddr.in6.sin6_port;
++ }
++ }
++
++ return 1;
++}
++
++int netsnmp_sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) {
++ union sockaddr_union sockaddr;
++ socklen_t l;
++ int r;
++
++ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0)
++ return r;
++
++ memset(&sockaddr, 0, sizeof(sockaddr));
++ l = sizeof(sockaddr);
++
++ if (getsockname(fd, &sockaddr.sa, &l) < 0)
++ return -errno;
++
++ if (l < sizeof(sa_family_t))
++ return -EINVAL;
++
++ if (sockaddr.sa.sa_family != AF_UNIX)
++ return 0;
++
++ if (path) {
++ if (length <= 0)
++ length = strlen(path);
++
++ if (length <= 0)
++ /* Unnamed socket */
++ return l == offsetof(struct sockaddr_un, sun_path);
++
++ if (path[0])
++ /* Normal path socket */
++ return
++ (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) &&
++ memcmp(path, sockaddr.un.sun_path, length+1) == 0;
++ else
++ /* Abstract namespace socket */
++ return
++ (l == offsetof(struct sockaddr_un, sun_path) + length) &&
++ memcmp(path, sockaddr.un.sun_path, length) == 0;
++ }
++
++ return 1;
++}
++
++int netsnmp_sd_notify(int unset_environment, const char *state) {
++ int fd = -1, r;
++ struct msghdr msghdr;
++ struct iovec iovec;
++ union sockaddr_union sockaddr;
++ const char *e;
++
++ if (!state) {
++ r = -EINVAL;
++ goto finish;
++ }
++
++ if (!(e = getenv("NOTIFY_SOCKET")))
++ return 0;
++
++ /* Must be an abstract socket, or an absolute path */
++ if ((e[0] != '@' && e[0] != '/') || e[1] == 0) {
++ r = -EINVAL;
++ goto finish;
++ }
++
++ if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) {
++ r = -errno;
++ goto finish;
++ }
++
++ memset(&sockaddr, 0, sizeof(sockaddr));
++ sockaddr.sa.sa_family = AF_UNIX;
++ strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path));
++
++ if (sockaddr.un.sun_path[0] == '@')
++ sockaddr.un.sun_path[0] = 0;
++
++ memset(&iovec, 0, sizeof(iovec));
++ iovec.iov_base = (char *)state;
++ iovec.iov_len = strlen(state);
++
++ memset(&msghdr, 0, sizeof(msghdr));
++ msghdr.msg_name = &sockaddr;
++ msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e);
++
++ if (msghdr.msg_namelen > sizeof(struct sockaddr_un))
++ msghdr.msg_namelen = sizeof(struct sockaddr_un);
++
++ msghdr.msg_iov = &iovec;
++ msghdr.msg_iovlen = 1;
++
++ if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) {
++ r = -errno;
++ goto finish;
++ }
++
++ r = 1;
++
++finish:
++ if (unset_environment)
++ unsetenv("NOTIFY_SOCKET");
++
++ if (fd >= 0)
++ close(fd);
++
++ return r;
++}
++
++int netsnmp_sd_notifyf(int unset_environment, const char *format, ...) {
++ va_list ap;
++ char *p = NULL;
++ int r;
++
++ va_start(ap, format);
++ r = vasprintf(&p, format, ap);
++ va_end(ap);
++
++ if (r < 0 || !p)
++ return -ENOMEM;
++
++ r = netsnmp_sd_notify(unset_environment, p);
++ free(p);
++
++ return r;
++}
++
++int netsnmp_sd_booted(void) {
++ struct stat a, b;
++
++ /* We simply test whether the systemd cgroup hierarchy is
++ * mounted */
++
++ if (lstat("/sys/fs/cgroup", &a) < 0)
++ return 0;
++
++ if (lstat("/sys/fs/cgroup/systemd", &b) < 0)
++ return 0;
++
++ return a.st_dev != b.st_dev;
++}
++
++/* End of original sd-daemon.c from systemd sources */
++
++int
++netsnmp_sd_find_inet_socket(int family, int type, int listening, int port)
++{
++ int count, fd;
++
++ count = netsnmp_sd_listen_fds(0);
++ if (count <= 0) {
++ DEBUGMSGTL(("systemd:find_inet_socket", "No LISTEN_FDS found.\n"));
++ return 0;
++ }
++ DEBUGMSGTL(("systemd:find_inet_socket", "LISTEN_FDS reports %d sockets.\n",
++ count));
++
++ for (fd = 3; fd < 3+count; fd++) {
++ int rc = netsnmp_sd_is_socket_inet(fd, family, type, listening, port);
++ if (rc < 0)
++ DEBUGMSGTL(("systemd:find_inet_socket",
++ "sd_is_socket_inet error: %d\n", rc));
++ if (rc > 0) {
++ DEBUGMSGTL(("systemd:find_inet_socket",
++ "Found the socket in LISTEN_FDS\n"));
++ return fd;
++ }
++ }
++ DEBUGMSGTL(("systemd:find_inet_socket", "Socket not found in LISTEN_FDS\n"));
++ return 0;
++}
++
++int
++netsnmp_sd_find_unix_socket(int type, int listening, const char *path)
++{
++ int count, fd;
++
++ count = netsnmp_sd_listen_fds(0);
++ if (count <= 0) {
++ DEBUGMSGTL(("systemd:find_unix_socket", "No LISTEN_FDS found.\n"));
++ return 0;
++ }
++ DEBUGMSGTL(("systemd:find_unix_socket", "LISTEN_FDS reports %d sockets.\n",
++ count));
++
++ for (fd = 3; fd < 3+count; fd++) {
++ int rc = netsnmp_sd_is_socket_unix(fd, type, listening, path, 0);
++ if (rc < 0)
++ DEBUGMSGTL(("systemd:find_unix_socket",
++ "netsnmp_sd_is_socket_unix error: %d\n", rc));
++ if (rc > 0) {
++ DEBUGMSGTL(("systemd:find_unix_socket",
++ "Found the socket in LISTEN_FDS\n"));
++ return fd;
++ }
++ }
++ DEBUGMSGTL(("systemd:find_unix_socket", "Socket not found in LISTEN_FDS\n"));
++ return 0;
++}
++
++#endif /* ! NETSNMP_NO_SYSTEMD */
+diff --git a/snmplib/transports/snmpTCPDomain.c b/snmplib/transports/snmpTCPDomain.c
+index 7feb028..a41b926 100644
+--- a/snmplib/transports/snmpTCPDomain.c
++++ b/snmplib/transports/snmpTCPDomain.c
+@@ -43,6 +43,10 @@
+ #include <net-snmp/library/snmpTCPBaseDomain.h>
+ #include <net-snmp/library/tools.h>
+
++#ifndef NETSNMP_NO_SYSTEMD
++#include <net-snmp/library/sd-daemon.h>
++#endif
++
+ /*
+ * needs to be in sync with the definitions in snmplib/snmpUDPDomain.c
+ * and perl/agent/agent.xs
+@@ -149,6 +153,7 @@ netsnmp_tcp_transport(struct sockaddr_in *addr, int local)
+ netsnmp_transport *t = NULL;
+ netsnmp_udp_addr_pair *addr_pair = NULL;
+ int rc = 0;
++ int socket_initialized = 0;
+
+ #ifdef NETSNMP_NO_LISTEN_SUPPORT
+ if (local)
+@@ -178,7 +183,19 @@ netsnmp_tcp_transport(struct sockaddr_in *addr, int local)
+ t->domain_length =
+ sizeof(netsnmp_snmpTCPDomain) / sizeof(netsnmp_snmpTCPDomain[0]);
+
+- t->sock = socket(PF_INET, SOCK_STREAM, 0);
++#ifndef NETSNMP_NO_SYSTEMD
++ /*
++ * Maybe the socket was already provided by systemd...
++ */
++ if (local) {
++ t->sock = netsnmp_sd_find_inet_socket(PF_INET, SOCK_STREAM, 1,
++ ntohs(addr->sin_port));
++ if (t->sock)
++ socket_initialized = 1;
++ }
++#endif
++ if (!socket_initialized)
++ t->sock = socket(PF_INET, SOCK_STREAM, 0);
+ if (t->sock < 0) {
+ netsnmp_transport_free(t);
+ return NULL;
+@@ -215,11 +232,13 @@ netsnmp_tcp_transport(struct sockaddr_in *addr, int local)
+ setsockopt(t->sock, SOL_SOCKET, SO_REUSEADDR, (void *)&opt,
+ sizeof(opt));
+
+- rc = bind(t->sock, (struct sockaddr *)addr, sizeof(struct sockaddr));
+- if (rc != 0) {
+- netsnmp_socketbase_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
++ if (!socket_initialized) {
++ rc = bind(t->sock, (struct sockaddr *)addr, sizeof(struct sockaddr));
++ if (rc != 0) {
++ netsnmp_socketbase_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
+ }
+
+ /*
+@@ -236,11 +255,13 @@ netsnmp_tcp_transport(struct sockaddr_in *addr, int local)
+ * Now sit here and wait for connections to arrive.
+ */
+
+- rc = listen(t->sock, NETSNMP_STREAM_QUEUE_LEN);
+- if (rc != 0) {
+- netsnmp_socketbase_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
++ if (!socket_initialized) {
++ rc = listen(t->sock, NETSNMP_STREAM_QUEUE_LEN);
++ if (rc != 0) {
++ netsnmp_socketbase_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
+ }
+
+ /*
+diff --git a/snmplib/transports/snmpTCPIPv6Domain.c b/snmplib/transports/snmpTCPIPv6Domain.c
+index d2e0a2d..22de6d4 100644
+--- a/snmplib/transports/snmpTCPIPv6Domain.c
++++ b/snmplib/transports/snmpTCPIPv6Domain.c
+@@ -49,6 +49,10 @@
+ #include <net-snmp/library/snmpTCPBaseDomain.h>
+ #include <net-snmp/library/tools.h>
+
++#ifndef NETSNMP_NO_SYSTEMD
++#include <net-snmp/library/sd-daemon.h>
++#endif
++
+ #include "inet_ntop.h"
+
+ oid netsnmp_TCPIPv6Domain[] = { TRANSPORT_DOMAIN_TCP_IPV6 };
+@@ -140,6 +144,8 @@ netsnmp_tcp6_transport(struct sockaddr_in6 *addr, int local)
+ {
+ netsnmp_transport *t = NULL;
+ int rc = 0;
++ char *str = NULL;
++ int socket_initialized = 0;
+
+ #ifdef NETSNMP_NO_LISTEN_SUPPORT
+ if (local)
+@@ -174,7 +180,19 @@ netsnmp_tcp6_transport(struct sockaddr_in6 *addr, int local)
+ t->domain = netsnmp_TCPIPv6Domain;
+ t->domain_length = sizeof(netsnmp_TCPIPv6Domain) / sizeof(oid);
+
+- t->sock = socket(PF_INET6, SOCK_STREAM, 0);
++#ifndef NETSNMP_NO_SYSTEMD
++ /*
++ * Maybe the socket was already provided by systemd...
++ */
++ if (local) {
++ t->sock = netsnmp_sd_find_inet_socket(PF_INET6, SOCK_STREAM, 1,
++ ntohs(addr->sin6_port));
++ if (t->sock)
++ socket_initialized = 1;
++ }
++#endif
++ if (!socket_initialized)
++ t->sock = socket(PF_INET6, SOCK_STREAM, 0);
+ if (t->sock < 0) {
+ netsnmp_transport_free(t);
+ return NULL;
+@@ -220,12 +238,14 @@ netsnmp_tcp6_transport(struct sockaddr_in6 *addr, int local)
+
+ setsockopt(t->sock, SOL_SOCKET, SO_REUSEADDR, (void *)&opt, sizeof(opt));
+
+- rc = bind(t->sock, (struct sockaddr *) addr,
+- sizeof(struct sockaddr_in6));
+- if (rc != 0) {
+- netsnmp_socketbase_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
++ if (!socket_initialized) {
++ rc = bind(t->sock, (struct sockaddr *) addr,
++ sizeof(struct sockaddr_in6));
++ if (rc != 0) {
++ netsnmp_socketbase_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
+ }
+
+ /*
+@@ -242,11 +262,13 @@ netsnmp_tcp6_transport(struct sockaddr_in6 *addr, int local)
+ * Now sit here and wait for connections to arrive.
+ */
+
+- rc = listen(t->sock, NETSNMP_STREAM_QUEUE_LEN);
+- if (rc != 0) {
+- netsnmp_socketbase_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
++ if (!socket_initialized) {
++ rc = listen(t->sock, NETSNMP_STREAM_QUEUE_LEN);
++ if (rc != 0) {
++ netsnmp_socketbase_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
+ }
+
+ /*
+diff --git a/snmplib/transports/snmpUDPIPv4BaseDomain.c b/snmplib/transports/snmpUDPIPv4BaseDomain.c
+index 8c0fb05..00e5bbc 100644
+--- a/snmplib/transports/snmpUDPIPv4BaseDomain.c
++++ b/snmplib/transports/snmpUDPIPv4BaseDomain.c
+@@ -40,6 +40,10 @@
+
+ #include <net-snmp/library/snmpSocketBaseDomain.h>
+
++#ifndef NETSNMP_NO_SYSTEMD
++#include <net-snmp/library/sd-daemon.h>
++#endif
++
+ #if defined(HAVE_IP_PKTINFO) || defined(HAVE_IP_RECVDSTADDR)
+ int netsnmp_udpipv4_recvfrom(int s, void *buf, int len, struct sockaddr *from,
+ socklen_t *fromlen, struct sockaddr *dstip,
+@@ -64,6 +68,7 @@ netsnmp_udpipv4base_transport(struct sockaddr_in *addr, int local)
+ char *client_socket = NULL;
+ netsnmp_indexed_addr_pair addr_pair;
+ socklen_t local_addr_len;
++ int socket_initialized = 0;
+
+ #ifdef NETSNMP_NO_LISTEN_SUPPORT
+ if (local)
+@@ -88,7 +93,19 @@ netsnmp_udpipv4base_transport(struct sockaddr_in *addr, int local)
+ free(str);
+ }
+
+- t->sock = socket(PF_INET, SOCK_DGRAM, 0);
++#ifndef NETSNMP_NO_SYSTEMD
++ /*
++ * Maybe the socket was already provided by systemd...
++ */
++ if (local) {
++ t->sock = netsnmp_sd_find_inet_socket(PF_INET, SOCK_DGRAM, -1,
++ ntohs(addr->sin_port));
++ if (t->sock)
++ socket_initialized = 1;
++ }
++#endif
++ if (!socket_initialized)
++ t->sock = socket(PF_INET, SOCK_DGRAM, 0);
+ DEBUGMSGTL(("UDPBase", "openned socket %d as local=%d\n", t->sock, local));
+ if (t->sock < 0) {
+ netsnmp_transport_free(t);
+@@ -151,12 +168,14 @@ netsnmp_udpipv4base_transport(struct sockaddr_in *addr, int local)
+ }
+ }
+ #endif /* !defined(WIN32) */
+- rc = bind(t->sock, (struct sockaddr *) addr,
+- sizeof(struct sockaddr));
+- if (rc != 0) {
+- netsnmp_socketbase_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
++ if (!socket_initialized) {
++ rc = bind(t->sock, (struct sockaddr *) addr,
++ sizeof(struct sockaddr));
++ if (rc != 0) {
++ netsnmp_socketbase_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
+ }
+ t->data = NULL;
+ t->data_length = 0;
+diff --git a/snmplib/transports/snmpUDPIPv6Domain.c b/snmplib/transports/snmpUDPIPv6Domain.c
+index 18de876..fd2ced4 100644
+--- a/snmplib/transports/snmpUDPIPv6Domain.c
++++ b/snmplib/transports/snmpUDPIPv6Domain.c
+@@ -67,6 +67,10 @@ static const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT;
+ #include <net-snmp/library/snmpSocketBaseDomain.h>
+ #include <net-snmp/library/tools.h>
+
++#ifndef NETSNMP_NO_SYSTEMD
++#include <net-snmp/library/sd-daemon.h>
++#endif
++
+ #include "inet_ntop.h"
+ #include "inet_pton.h"
+
+@@ -190,6 +194,8 @@ netsnmp_udp6_transport(struct sockaddr_in6 *addr, int local)
+ {
+ netsnmp_transport *t = NULL;
+ int rc = 0;
++ char *str = NULL;
++ int socket_initialized = 0;
+
+ #ifdef NETSNMP_NO_LISTEN_SUPPORT
+ if (local)
+@@ -217,7 +223,19 @@ netsnmp_udp6_transport(struct sockaddr_in6 *addr, int local)
+ t->domain_length =
+ sizeof(netsnmp_UDPIPv6Domain) / sizeof(netsnmp_UDPIPv6Domain[0]);
+
+- t->sock = socket(PF_INET6, SOCK_DGRAM, 0);
++#ifndef NETSNMP_NO_SYSTEMD
++ /*
++ * Maybe the socket was already provided by systemd...
++ */
++ if (local) {
++ t->sock = netsnmp_sd_find_inet_socket(PF_INET6, SOCK_DGRAM, -1,
++ ntohs(addr->sin6_port));
++ if (t->sock)
++ socket_initialized = 1;
++ }
++#endif
++ if (!socket_initialized)
++ t->sock = socket(PF_INET6, SOCK_DGRAM, 0);
+ if (t->sock < 0) {
+ netsnmp_transport_free(t);
+ return NULL;
+@@ -243,12 +261,14 @@ netsnmp_udp6_transport(struct sockaddr_in6 *addr, int local)
+ }
+ #endif
+
+- rc = bind(t->sock, (struct sockaddr *) addr,
+- sizeof(struct sockaddr_in6));
+- if (rc != 0) {
+- netsnmp_socketbase_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
++ if (!socket_initialized) {
++ rc = bind(t->sock, (struct sockaddr *) addr,
++ sizeof(struct sockaddr_in6));
++ if (rc != 0) {
++ netsnmp_socketbase_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
+ }
+ t->local = (unsigned char*)malloc(18);
+ if (t->local == NULL) {
+diff --git a/snmplib/transports/snmpUnixDomain.c b/snmplib/transports/snmpUnixDomain.c
+index 47dffc1..8f34c37 100644
+--- a/snmplib/transports/snmpUnixDomain.c
++++ b/snmplib/transports/snmpUnixDomain.c
+@@ -37,6 +37,10 @@
+ #include <net-snmp/library/system.h> /* mkdirhier */
+ #include <net-snmp/library/tools.h>
+
++#ifndef NETSNMP_NO_SYSTEMD
++#include <net-snmp/library/sd-daemon.h>
++#endif
++
+ netsnmp_feature_child_of(transport_unix_socket_all, transport_all)
+ netsnmp_feature_child_of(unix_socket_paths, transport_unix_socket_all)
+
+@@ -295,6 +299,8 @@ netsnmp_unix_transport(struct sockaddr_un *addr, int local)
+ netsnmp_transport *t = NULL;
+ sockaddr_un_pair *sup = NULL;
+ int rc = 0;
++ char *string = NULL;
++ int socket_initialized = 0;
+
+ #ifdef NETSNMP_NO_LISTEN_SUPPORT
+ /* SPECIAL CIRCUMSTANCE: We still want AgentX to be able to operate,
+@@ -333,7 +339,18 @@ netsnmp_unix_transport(struct sockaddr_un *addr, int local)
+ t->data_length = sizeof(sockaddr_un_pair);
+ sup = (sockaddr_un_pair *) t->data;
+
+- t->sock = socket(PF_UNIX, SOCK_STREAM, 0);
++#ifndef NETSNMP_NO_SYSTEMD
++ /*
++ * Maybe the socket was already provided by systemd...
++ */
++ if (local) {
++ t->sock = netsnmp_sd_find_unix_socket(SOCK_STREAM, 1, addr->sun_path);
++ if (t->sock)
++ socket_initialized = 1;
++ }
++#endif
++ if (!socket_initialized)
++ t->sock = socket(PF_UNIX, SOCK_STREAM, 0);
+ if (t->sock < 0) {
+ netsnmp_transport_free(t);
+ return NULL;
+@@ -357,25 +374,26 @@ netsnmp_unix_transport(struct sockaddr_un *addr, int local)
+
+ t->flags |= NETSNMP_TRANSPORT_FLAG_LISTEN;
+
+- unlink(addr->sun_path);
+- rc = bind(t->sock, (struct sockaddr *) addr, SUN_LEN(addr));
+-
+- if (rc != 0 && errno == ENOENT && create_path) {
+- rc = mkdirhier(addr->sun_path, create_mode, 1);
++ if (!socket_initialized) {
++ unlink(addr->sun_path);
++ rc = bind(t->sock, (struct sockaddr *) addr, SUN_LEN(addr));
++ if (rc != 0 && errno == ENOENT && create_path) {
++ rc = mkdirhier(addr->sun_path, create_mode, 1);
++ if (rc != 0) {
++ netsnmp_unix_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
++ rc = bind(t->sock, (struct sockaddr *) addr, SUN_LEN(addr));
++ }
+ if (rc != 0) {
++ DEBUGMSGTL(("netsnmp_unix_transport",
++ "couldn't bind \"%s\", errno %d (%s)\n",
++ addr->sun_path, errno, strerror(errno)));
+ netsnmp_unix_close(t);
+ netsnmp_transport_free(t);
+ return NULL;
+ }
+- rc = bind(t->sock, (struct sockaddr *) addr, SUN_LEN(addr));
+- }
+- if (rc != 0) {
+- DEBUGMSGTL(("netsnmp_unix_transport",
+- "couldn't bind \"%s\", errno %d (%s)\n",
+- addr->sun_path, errno, strerror(errno)));
+- netsnmp_unix_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
+ }
+
+ /*
+@@ -391,14 +409,16 @@ netsnmp_unix_transport(struct sockaddr_un *addr, int local)
+ * Now sit here and listen for connections to arrive.
+ */
+
+- rc = listen(t->sock, NETSNMP_STREAM_QUEUE_LEN);
+- if (rc != 0) {
+- DEBUGMSGTL(("netsnmp_unix_transport",
+- "couldn't listen to \"%s\", errno %d (%s)\n",
+- addr->sun_path, errno, strerror(errno)));
+- netsnmp_unix_close(t);
+- netsnmp_transport_free(t);
+- return NULL;
++ if (!socket_initialized) {
++ rc = listen(t->sock, NETSNMP_STREAM_QUEUE_LEN);
++ if (rc != 0) {
++ DEBUGMSGTL(("netsnmp_unix_transport",
++ "couldn't listen to \"%s\", errno %d (%s)\n",
++ addr->sun_path, errno, strerror(errno)));
++ netsnmp_unix_close(t);
++ netsnmp_transport_free(t);
++ return NULL;
++ }
+ }
+
+ } else {
+diff --git a/win32/libsnmp/Makefile.in b/win32/libsnmp/Makefile.in
+index 98d83c8..b228d20 100644
+--- a/win32/libsnmp/Makefile.in
++++ b/win32/libsnmp/Makefile.in
+@@ -42,6 +42,7 @@ LIB32_OBJS= \
+ "$(INTDIR)\read_config.obj" \
+ "$(INTDIR)\readdir.obj" \
+ "$(INTDIR)\scapi.obj" \
++ "$(INTDIR)\sd-daemon.obj" \
+ "$(INTDIR)\snmp-tc.obj" \
+ "$(INTDIR)\snmp.obj" \
+ "$(INTDIR)\snmpCallbackDomain.obj" \
+@@ -138,6 +139,11 @@ SOURCE=..\..\snmplib\asn1.c
+ "$(INTDIR)\asn1.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
++SOURCE=..\..\snmplib\sd-daemon.c
++
++"$(INTDIR)\sd-daemon.obj" : $(SOURCE) "$(INTDIR)"
++ $(CPP) $(CPP_PROJ) $(SOURCE)
++
+
+ SOURCE=..\..\snmplib\callback.c
+
+diff --git a/win32/net-snmp/net-snmp-config.h b/win32/net-snmp/net-snmp-config.h
+index 1608563..7aec547 100644
+--- a/win32/net-snmp/net-snmp-config.h
++++ b/win32/net-snmp/net-snmp-config.h
+@@ -1717,6 +1717,8 @@ enum {
+ #define DMALLOC_FUNC_CHECK
+ #endif
+
+++#define NETSNMP_NO_SYSTEMD
+++
+ /* #undef NETSNMP_ENABLE_LOCAL_SMUX */
+
+ /* define if agentx transport is to use domain sockets only */
+diff --git a/win32/net-snmp/net-snmp-config.h.in b/win32/net-snmp/net-snmp-config.h.in
+index 9693730..96ec3d9 100644
+--- a/win32/net-snmp/net-snmp-config.h.in
++++ b/win32/net-snmp/net-snmp-config.h.in
+@@ -1717,6 +1717,8 @@ enum {
+ #define DMALLOC_FUNC_CHECK
+ #endif
+
++#define NETSNMP_NO_SYSTEMD
++
+ /* #undef NETSNMP_ENABLE_LOCAL_SMUX */
+
+ /* define if agentx transport is to use domain sockets only */
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.3.bb b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.3.bb
new file mode 100644
index 000000000..faf73a563
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/net-snmp/net-snmp_5.7.3.bb
@@ -0,0 +1,244 @@
+SUMMARY = "Various tools relating to the Simple Network Management Protocol"
+HOMEPAGE = "http://www.net-snmp.org/"
+SECTION = "net"
+LICENSE = "BSD"
+
+LIC_FILES_CHKSUM = "file://README;beginline=3;endline=8;md5=7f7f00ba639ac8e8deb5a622ea24634e"
+
+DEPENDS = "openssl libnl pciutils"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/net-snmp/net-snmp-${PV}.zip \
+ file://init \
+ file://snmpd.conf \
+ file://snmptrapd.conf \
+ file://systemd-support.patch \
+ file://snmpd.service \
+ file://snmptrapd.service \
+ file://net-snmp-add-knob-whether-nlist.h-are-checked.patch \
+ file://fix-libtool-finish.patch \
+ file://net-snmp-testing-add-the-output-format-for-ptest.patch \
+ file://run-ptest \
+ file://dont-return-incompletely-parsed-varbinds.patch \
+ file://0001-config_os_headers-Error-Fix.patch \
+ file://0001-config_os_libs2-Error-Fix.patch \
+ file://0001-snmplib-keytools.c-Don-t-check-for-return-from-EVP_M.patch \
+ file://net-snmp-agentx-crash.patch \
+ file://0001-get_pid_from_inode-Include-limit.h.patch \
+ file://0001-BUG-a2584-Fix-snmptrap-to-use-clientaddr-from-snmp.c.patch \
+ file://0001-snmplib-UDPIPv6-transport-Add-a-missing-return-state.patch \
+ file://0001-configure-fix-check-for-enable-perl-cc-checks.patch \
+ file://0002-configure-fix-a-cc-check-issue.patch \
+ file://0003-CHANGES-BUG-2712-Fix-Perl-module-compilation.patch \
+ file://0004-configure-fix-incorrect-variable.patch \
+ file://net-snmp-5.7.2-fix-engineBoots-value-on-SIGHUP.patch \
+ file://net-snmp-fix-for-disable-des.patch \
+ file://0001-Remove-U64-typedef.patch \
+ "
+SRC_URI[md5sum] = "9f682bd70c717efdd9f15b686d07baee"
+SRC_URI[sha256sum] = "e8dfc79b6539b71a6ff335746ce63d2da2239062ad41872fff4354cafed07a3e"
+
+inherit autotools-brokensep update-rc.d siteinfo systemd pkgconfig perlnative
+
+EXTRA_OEMAKE = "INSTALL_PREFIX=${D} OTHERLDFLAGS='${LDFLAGS}' HOST_CPPFLAGS='${BUILD_CPPFLAGS}'"
+
+PARALLEL_MAKE = ""
+CCACHE = ""
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[elfutils] = "--with-elf, --without-elf, elfutils"
+PACKAGECONFIG[libnl] = "--with-nl, --without-nl, libnl"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,,"
+
+PACKAGECONFIG[perl] = "--enable-embedded-perl --with-perl-modules=yes, --disable-embedded-perl --with-perl-modules=no,\
+ perl, perl perl-lib"
+
+EXTRA_OECONF = "--enable-shared \
+ --disable-manuals \
+ --with-defaults \
+ --with-install-prefix=${D} \
+ --with-persistent-directory=${localstatedir}/lib/net-snmp \
+ ${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', '--with-endianness=little', '--with-endianness=big', d)} \
+"
+
+# net-snmp needs to have mib-modules=smux enabled to enable quagga to support snmp
+EXTRA_OECONF += "--with-mib-modules=smux"
+
+CACHED_CONFIGUREVARS = " \
+ ac_cv_header_valgrind_valgrind_h=no \
+ ac_cv_header_valgrind_memcheck_h=no \
+ ac_cv_ETC_MNTTAB=/etc/mtab \
+ lt_cv_shlibpath_overrides_runpath=yes \
+"
+export PERLPROG="${bindir}/env perl"
+PERLPROG_append = "${@bb.utils.contains('PACKAGECONFIG', 'perl', ' -I${WORKDIR}', '', d)}"
+
+HAS_PERL = "${@bb.utils.contains('PACKAGECONFIG', 'perl', '1', '0', d)}"
+
+do_configure_prepend() {
+ sed -i -e "s|I/usr/include|I${STAGING_INCDIR}|g" \
+ "${S}"/configure \
+ "${S}"/configure.d/config_os_libs2
+
+ if [ "${HAS_PERL}" = "1" ]; then
+ # this may need to be changed when package perl has any change.
+ cp -f ${STAGING_DIR_TARGET}/usr/lib*/perl/*/Config.pm ${WORKDIR}/
+ cp -f ${STAGING_DIR_TARGET}/usr/lib*/perl/*/Config_heavy.pl ${WORKDIR}/
+ sed -e "s@libpth => '/usr/lib.*@libpth => '${STAGING_DIR_TARGET}/${libdir} ${STAGING_DIR_TARGET}/${base_libdir}',@g" \
+ -e "s@privlibexp => '/usr@privlibexp => '${STAGING_DIR_TARGET}/usr@g" \
+ -e "s@scriptdir => '/usr@scriptdir => '${STAGING_DIR_TARGET}/usr@g" \
+ -e "s@sitearchexp => '/usr@sitearchexp => '${STAGING_DIR_TARGET}/usr@g" \
+ -e "s@sitelibexp => '/usr@sitearchexp => '${STAGING_DIR_TARGET}/usr@g" \
+ -e "s@vendorarchexp => '/usr@vendorarchexp => '${STAGING_DIR_TARGET}/usr@g" \
+ -e "s@vendorlibexp => '/usr@vendorlibexp => '${STAGING_DIR_TARGET}/usr@g" \
+ -i ${WORKDIR}/Config.pm
+ fi
+
+}
+
+do_configure_append() {
+ if [ "${HAS_PERL}" = "1" ]; then
+ sed -e "s@^NSC_INCLUDEDIR=.*@NSC_INCLUDEDIR=${STAGING_DIR_TARGET}\$\{includedir\}@g" \
+ -e "s@^NSC_LIBDIR=-L.*@NSC_LIBDIR=-L${STAGING_DIR_TARGET}\$\{libdir\}@g" \
+ -i ${B}/net-snmp-config
+ fi
+}
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/snmp
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/snmpd
+ install -m 644 ${WORKDIR}/snmpd.conf ${D}${sysconfdir}/snmp/
+ install -m 644 ${WORKDIR}/snmptrapd.conf ${D}${sysconfdir}/snmp/
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/snmpd.service ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/snmptrapd.service ${D}${systemd_unitdir}/system
+ sed -e "s@^NSC_SRCDIR=.*@NSC_SRCDIR=.@g" \
+ -i ${D}${bindir}/net-snmp-create-v3-user
+ sed -e "s@^NSC_SRCDIR=.*@NSC_SRCDIR=.@g" \
+ -e "s@\([^ ]*-fdebug-prefix-map=[^ ]*\)\1*@@g" \
+ -e "s@\([^ ]*--sysroot=[^ ]*\)\1*@@g" \
+ -e "s@\([^ ]*--with-libtool-sysroot=[^ ]*\)\1*@@g" \
+ -e "s@\([^ ]*--with-install-prefix=[^ ]*\)\1*@@g" \
+ -i ${D}${bindir}/net-snmp-config
+
+ if [ "${HAS_PERL}" = "1" ]; then
+ sed -e "s@^NSC_INCLUDEDIR=.*@NSC_INCLUDEDIR=\$\{includedir\}@g" \
+ -e "s@^NSC_LIBDIR=-L.*@NSC_LIBDIR=-L\$\{libdir\}@g" \
+ -i ${D}${bindir}/net-snmp-config
+ fi
+}
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}
+ for i in ${S}/dist ${S}/include ${B}/include ${S}/mibs ${S}/configure \
+ ${B}/net-snmp-config ${S}/testing; do
+ if [ -e "$i" ]; then
+ cp -R --no-dereference --preserve=mode,links -v "$i" ${D}${PTEST_PATH}
+ fi
+ done
+ echo `autoconf -V|awk '/autoconf/{print $NF}'` > ${D}${PTEST_PATH}/dist/autoconf-version
+
+ rmdlist="${D}${PTEST_PATH}/dist/net-snmp-solaris-build"
+ for i in $rmdlist; do
+ if [ -d "$i" ]; then
+ rm -rf "$i"
+ fi
+ done
+}
+
+SYSROOT_PREPROCESS_FUNCS += "net_snmp_sysroot_preprocess"
+SNMP_DBGDIR = "/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR}"
+
+net_snmp_sysroot_preprocess () {
+ if [ -e ${D}${bindir}/net-snmp-config ]; then
+ install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 755 ${D}${bindir}/net-snmp-config ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ sed -e "s@-I/usr/include@-I${STAGING_INCDIR}@g" \
+ -e "s@^prefix=.*@prefix=${STAGING_DIR_HOST}${prefix}@g" \
+ -e "s@^exec_prefix=.*@exec_prefix=${STAGING_EXECPREFIXDIR}@g" \
+ -e "s@^includedir=.*@includedir=${STAGING_INCDIR}@g" \
+ -e "s@^libdir=.*@libdir=${STAGING_LIBDIR}@g" \
+ -e "s@^NSC_SRCDIR=.*@NSC_SRCDIR=${S}@g" \
+ -e "s@-fdebug-prefix-map=${SNMP_DBGDIR}@-fdebug-prefix-map=${WORKDIR}=${SNMP_DBGDIR}@g" \
+ -e "s@-fdebug-prefix-map= -fdebug-prefix-map=@-fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
+ -fdebug-prefix-map=${STAGING_DIR_HOST}=@g" \
+ -e "s@--sysroot=@--sysroot=${STAGING_DIR_HOST}@g" \
+ -e "s@--with-libtool-sysroot=@--with-libtool-sysroot=${STAGING_DIR_HOST}@g" \
+ -e "s@--with-install-prefix=@--with-install-prefix=${D}@g" \
+ -i ${SYSROOT_DESTDIR}${bindir_crossscripts}/net-snmp-config
+ fi
+}
+
+PACKAGES += "${PN}-libs ${PN}-mibs ${PN}-server ${PN}-client ${PN}-server-snmpd ${PN}-server-snmptrapd"
+
+# perl module
+PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'perl', '${PN}-perl-modules', '', d)}"
+
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-server = "1"
+
+FILES_${PN}-perl-modules = "${libdir}/perl/*"
+
+FILES_${PN}-libs = "${libdir}/lib*${SOLIBS}"
+FILES_${PN}-mibs = "${datadir}/snmp/mibs"
+FILES_${PN}-server-snmpd = "${sbindir}/snmpd \
+ ${sysconfdir}/snmp/snmpd.conf \
+ ${sysconfdir}/init.d \
+ ${systemd_unitdir}/system/snmpd.service \
+"
+
+FILES_${PN}-server-snmptrapd = "${sbindir}/snmptrapd \
+ ${sysconfdir}/snmp/snmptrapd.conf \
+ ${systemd_unitdir}/system/snmptrapd.service \
+"
+
+FILES_${PN} = ""
+FILES_${PN}-client = "${bindir}/* ${datadir}/snmp/"
+FILES_${PN}-dbg += "${libdir}/.debug/ ${sbindir}/.debug/ ${bindir}/.debug/"
+FILES_${PN}-dev += "${bindir}/mib2c ${bindir}/mib2c-update"
+
+CONFFILES_${PN}-server-snmpd = "${sysconfdir}/snmp/snmpd.conf"
+CONFFILES_${PN}-server-snmptrapd = "${sysconfdir}/snmp/snmptrapd.conf"
+
+INITSCRIPT_PACKAGES = "${PN}-server-snmpd"
+INITSCRIPT_NAME_${PN}-server-snmpd = "snmpd"
+INITSCRIPT_PARAMS_${PN}-server-snmpd = "start 90 2 3 4 5 . stop 60 0 1 6 ."
+
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemd', '--without-systemd', d)}"
+
+SYSTEMD_PACKAGES = "${PN}-server-snmpd \
+ ${PN}-server-snmptrapd"
+
+SYSTEMD_SERVICE_${PN}-server-snmpd = "snmpd.service"
+SYSTEMD_SERVICE_${PN}-server-snmptrapd = "snmptrapd.service"
+
+RDEPENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'perl', 'net-snmp-perl-modules', '', d)}"
+RDEPENDS_${PN} += "net-snmp-client"
+RDEPENDS_${PN}-server-snmpd += "net-snmp-mibs"
+RDEPENDS_${PN}-server-snmptrapd += "net-snmp-server-snmpd"
+RDEPENDS_${PN}-server += "net-snmp-server-snmpd net-snmp-server-snmptrapd"
+RDEPENDS_${PN}-client += "net-snmp-mibs net-snmp-libs"
+RDEPENDS_${PN}-libs += "libpci"
+RDEPENDS_${PN}-ptest += "perl \
+ perl-module-test \
+ perl-module-file-basename \
+ perl-module-getopt-long \
+ perl-module-file-temp \
+ perl-module-data-dumper \
+"
+RDEPENDS_${PN}-dev = "net-snmp-client (= ${EXTENDPKGV}) net-snmp-server (= ${EXTENDPKGV})"
+RRECOMMENDS_${PN}-dbg = "net-snmp-client (= ${EXTENDPKGV}) net-snmp-server (= ${EXTENDPKGV})"
+
+RPROVIDES_${PN}-server-snmpd += "${PN}-server-snmpd-systemd"
+RREPLACES_${PN}-server-snmpd += "${PN}-server-snmpd-systemd"
+RCONFLICTS_${PN}-server-snmpd += "${PN}-server-snmpd-systemd"
+
+RPROVIDES_${PN}-server-snmptrapd += "${PN}-server-snmptrapd-systemd"
+RREPLACES_${PN}-server-snmptrapd += "${PN}-server-snmptrapd-systemd"
+RCONFLICTS_${PN}-server-snmptrapd += "${PN}-server-snmptrapd-systemd"
+
+LEAD_SONAME = "libnetsnmp.so"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/nopoll/nopoll_0.4.2.b297.bb b/meta-openembedded/meta-networking/recipes-protocols/nopoll/nopoll_0.4.2.b297.bb
new file mode 100644
index 000000000..1d77891d4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/nopoll/nopoll_0.4.2.b297.bb
@@ -0,0 +1,23 @@
+SUMMARY = "OpenSource WebSocket Toolkit"
+DESCRIPTION = "noPoll is a OpenSource WebSocket implementation (RFC 6455), \
+written in ansi C, that allows building pure WebSocket solutions or to \
+provide WebSocket support to existing TCP oriented applications.\
+\
+noPoll provides support for WebSocket (ws://) and TLS (secure) WebSocket (wss://),\
+allowing message based (handler notified) programming or stream oriented access."
+
+HOMEPAGE = "http://www.aspl.es/nopoll/"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f0504124678c1b3158146e0630229298 \
+ "
+DEPENDS = "openssl"
+SRC_URI = "http://www.aspl.es/nopoll/downloads/nopoll-${PV}.tar.gz \
+ "
+SRC_URI[md5sum] = "8c411cd0f3c0479aed28c4cf7b114fbb"
+SRC_URI[sha256sum] = "f5fbf8aaa16a77b0f265d8c847eb06cb3e68f2b1a50737466dae81181618654c"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF += "--disable-nopoll-doc"
+
+LDFLAGS += "-lpthread"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow.inc b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow.inc
new file mode 100644
index 000000000..cccbfa19a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow.inc
@@ -0,0 +1,37 @@
+SUMMARY = "OpenFlow communications protocol"
+DESCRIPTION = "\
+Open standard that enables researchers to run experimental protocols in \
+contained networks. OpenFlow is a communications interface between \
+control and forwarding planes of a software-defined networking architecture.\
+"
+HOMEPAGE = "http://www.openflow.org"
+
+SECTION = "net"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=e870c934e2c3d6ccf085fd7cf0a1e2e2"
+
+SRC_URI = "git://gitosis.stanford.edu/openflow.git;protocol=git"
+
+DEPENDS = "virtual/libc"
+
+PACKAGECONFIG ??= "openssl"
+PACKAGECONFIG[openssl] = "--enable-ssl,--disable-ssl, openssl openssl-native, libssl"
+
+EXTRA_OECONF += " \
+ KARCH=${TARGET_ARCH} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'openssl', 'SSL_LIBS="-lssl -lcrypto"', '', d)} \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep pkgconfig
+
+do_configure_prepend() {
+ ./boot.sh
+}
+
+do_install_append() {
+ # Remove /var/run as it is created on startup
+ rm -rf ${D}${localstatedir}/run
+}
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0001-Check-and-use-strlcpy-from-libc-before-defining-own.patch b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0001-Check-and-use-strlcpy-from-libc-before-defining-own.patch
new file mode 100644
index 000000000..952274bb9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0001-Check-and-use-strlcpy-from-libc-before-defining-own.patch
@@ -0,0 +1,64 @@
+From 7b62e5884353b247f542844d1e4687d0e9211999 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Jul 2017 04:27:32 -0700
+Subject: [PATCH 1/2] Check and use strlcpy from libc before defining own
+
+This is required especially on musl where
+function prototype conflicts and causes build
+failures.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.ac | 2 +-
+ lib/util.c | 2 ++
+ lib/util.h | 1 +
+ 3 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 13064f6..596c43f 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -57,7 +57,7 @@ OFP_CHECK_HWTABLES
+ OFP_CHECK_HWLIBS
+ AC_SYS_LARGEFILE
+
+-AC_CHECK_FUNCS([strsignal])
++AC_CHECK_FUNCS([strlcpy strsignal])
+
+ AC_ARG_VAR(KARCH, [Kernel Architecture String])
+ AC_SUBST(KARCH)
+diff --git a/lib/util.c b/lib/util.c
+index 21cc28d..1f341b1 100644
+--- a/lib/util.c
++++ b/lib/util.c
+@@ -138,6 +138,7 @@ xasprintf(const char *format, ...)
+ return s;
+ }
+
++#ifndef HAVE_STRLCPY
+ void
+ strlcpy(char *dst, const char *src, size_t size)
+ {
+@@ -148,6 +149,7 @@ strlcpy(char *dst, const char *src, size_t size)
+ dst[n_copy] = '\0';
+ }
+ }
++#endif
+
+ void
+ ofp_fatal(int err_no, const char *format, ...)
+diff --git a/lib/util.h b/lib/util.h
+index fde681f..9e45ea9 100644
+--- a/lib/util.h
++++ b/lib/util.h
+@@ -41,6 +41,7 @@
+ #include <stdio.h>
+ #include <string.h>
+ #include "compiler.h"
++#include "config.h"
+
+ #ifndef va_copy
+ #ifdef __va_copy
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0002-lib-netdev-Adjust-header-include-sequence.patch b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0002-lib-netdev-Adjust-header-include-sequence.patch
new file mode 100644
index 000000000..75180fe32
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow/0002-lib-netdev-Adjust-header-include-sequence.patch
@@ -0,0 +1,59 @@
+From 5bba224edea38607e8732081f86679ffd8b218ab Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 20 Jul 2017 04:29:04 -0700
+Subject: [PATCH 2/2] lib/netdev: Adjust header include sequence
+
+Specify libc headers before kernel UAPIs
+this helps compiling with musl where otherwise
+it uses the definition from kernel and complains
+about double definition in libc headers
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lib/netdev.c | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/lib/netdev.c b/lib/netdev.c
+index 3b6fbc5..c7de25e 100644
+--- a/lib/netdev.c
++++ b/lib/netdev.c
+@@ -39,7 +39,6 @@
+ #include <fcntl.h>
+ #include <arpa/inet.h>
+ #include <inttypes.h>
+-#include <linux/if_tun.h>
+
+ /* Fix for some compile issues we were experiencing when setting up openwrt
+ * with the 2.4 kernel. linux/ethtool.h seems to use kernel-style inttypes,
+@@ -57,10 +56,6 @@
+ #define s64 __s64
+ #endif
+
+-#include <linux/ethtool.h>
+-#include <linux/rtnetlink.h>
+-#include <linux/sockios.h>
+-#include <linux/version.h>
+ #include <sys/types.h>
+ #include <sys/ioctl.h>
+ #include <sys/socket.h>
+@@ -68,12 +63,16 @@
+ #include <net/ethernet.h>
+ #include <net/if.h>
+ #include <net/if_arp.h>
+-#include <net/if_packet.h>
+ #include <net/route.h>
+ #include <netinet/in.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
++#include <linux/ethtool.h>
++#include <linux/rtnetlink.h>
++#include <linux/sockios.h>
++#include <linux/version.h>
++#include <linux/if_tun.h>
+
+ #include "fatal-signal.h"
+ #include "list.h"
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_1.0.bb b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_1.0.bb
new file mode 100644
index 000000000..a7e254dd8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_1.0.bb
@@ -0,0 +1,4 @@
+include ${BPN}.inc
+
+SRCREV = "5ccca75a69f99791659bcfbcf35353ab1921320a"
+PV = "1.0"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_git.bb b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_git.bb
new file mode 100644
index 000000000..eceb45e94
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openflow/openflow_git.bb
@@ -0,0 +1,9 @@
+include ${BPN}.inc
+
+SRCREV = "c84f33f09d5dbcfc9b489f64cb30475bf36f653a"
+PV = "1.0+git${SRCPV}"
+
+SRC_URI += "\
+ file://0001-Check-and-use-strlcpy-from-libc-before-defining-own.patch \
+ file://0002-lib-netdev-Adjust-header-include-sequence.patch \
+ "
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-Use-1-instead-of-WAIT_ANY.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-Use-1-instead-of-WAIT_ANY.patch
new file mode 100644
index 000000000..d1ee3c591
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-Use-1-instead-of-WAIT_ANY.patch
@@ -0,0 +1,29 @@
+From 1f8d336a5cd88b87e15596d05980f6fe77a0f226 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 11:28:41 -0700
+Subject: [PATCH 1/4] Use -1 instead of WAIT_ANY
+
+WAIT_ANY is not supported by POSIX and some C libraries
+e.g. musl do not define this.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ usl/usl_pid.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/usl/usl_pid.c b/usl/usl_pid.c
+index 103458b..9819473 100644
+--- a/usl/usl_pid.c
++++ b/usl/usl_pid.c
+@@ -78,7 +78,7 @@ int usl_pid_reap_children(int waitfor)
+
+ /* Wait for processes in our process group. */
+
+- while (((pid = waitpid(WAIT_ANY, &status, (waitfor ? 0: WNOHANG))) != -1) && (pid != 0)) {
++ while (((pid = waitpid(-1, &status, (waitfor ? 0: WNOHANG))) != -1) && (pid != 0)) {
+ have_callback = 0;
+ usl_list_for_each(walk, tmp, &usl_child_list) {
+ child = usl_list_entry(walk, struct usl_pid_child, list);
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api-Included-needed-headers.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api-Included-needed-headers.patch
new file mode 100644
index 000000000..c50f68e65
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api-Included-needed-headers.patch
@@ -0,0 +1,34 @@
+From 25dce20a75bc84ae9e4ec640590cef0c12750789 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 17:48:13 -0700
+Subject: [PATCH 1/2] l2tp_api: Included needed headers
+
+These are flagged by musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ l2tp_api.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/l2tp_api.c b/l2tp_api.c
+index d16f80e..9d6f60a 100644
+--- a/l2tp_api.c
++++ b/l2tp_api.c
+@@ -22,9 +22,12 @@
+ * Each module implements the required RPC xxx_1_svc() callbacks which
+ * are called directly by the RPC library.
+ */
+-
++#define _GNU_SOURCE
++#include <sys/types.h>
++#include <rpc/types.h>
++#include <rpc/xdr.h>
+ #include <rpc/pmap_clnt.h>
+-#include <net/ethernet.h>
++//#include <netinet/in.h>
+
+ #include "usl.h"
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api.c-include-rpc-clnt.h-for-resultproc_t.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api.c-include-rpc-clnt.h-for-resultproc_t.patch
new file mode 100644
index 000000000..a11a97ebd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-l2tp_api.c-include-rpc-clnt.h-for-resultproc_t.patch
@@ -0,0 +1,31 @@
+From 8f299df4dd1ca857e34859c377a29b183c630961 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 21 Sep 2017 13:05:03 -0700
+Subject: [PATCH] l2tp_api.c: include rpc/clnt.h for 'resultproc_t'
+
+Fixes
+
+| /mnt/a/oe/build/tmp/work/mips32r2-bec-linux-musl/openl2tp/1.8-r0/recipe-sysroot/usr/include/tirpc/rpc/pmap_clnt.h:81:12: error: unknown type name 'resultproc_t'; did you mean 'rpcproc_t'? | resultproc_t); | ^~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ l2tp_api.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/l2tp_api.c b/l2tp_api.c
+index f0946fd..f77881c 100644
+--- a/l2tp_api.c
++++ b/l2tp_api.c
+@@ -26,6 +26,7 @@
+ #include <sys/types.h>
+ #include <rpc/types.h>
+ #include <rpc/xdr.h>
++#include <rpc/clnt.h>
+ #include <rpc/pmap_clnt.h>
+ //#include <netinet/in.h>
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-test-pppd_dummy.c-Fix-return-value.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-test-pppd_dummy.c-Fix-return-value.patch
new file mode 100644
index 000000000..1f576fa71
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0001-test-pppd_dummy.c-Fix-return-value.patch
@@ -0,0 +1,38 @@
+From ce5f5563ab54db9d28dba44a0e25e8a8c7bb9876 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 19 Oct 2016 00:34:35 +0000
+Subject: [PATCH] test/pppd_dummy.c: Fix return value
+
+pause() is defined in unistd.h, clang does not
+like the fact that we are using a function without
+declaration
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ test/pppd_dummy.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/test/pppd_dummy.c b/test/pppd_dummy.c
+index 148e7d2..b564c36 100644
+--- a/test/pppd_dummy.c
++++ b/test/pppd_dummy.c
+@@ -26,6 +26,7 @@
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <syslog.h>
++#include <unistd.h>
+
+ #define PPPD_DUMMY_TMP_FILE "/tmp/pppd_dummy"
+
+@@ -40,7 +41,7 @@ int main(int argc, char **argv)
+
+ if (file == NULL) {
+ syslog(LOG_ERR, "Failed to open %s\n", filename);
+- return;
++ return -1;
+ }
+
+ for (arg = 1; arg < argc; arg++) {
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-cli-include-fcntl.h-for-O_CREAT-define.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-cli-include-fcntl.h-for-O_CREAT-define.patch
new file mode 100644
index 000000000..9df32658a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-cli-include-fcntl.h-for-O_CREAT-define.patch
@@ -0,0 +1,25 @@
+From 2d633f4c18ff3cb52234449fd86a0a63b55d669b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 11:31:55 -0700
+Subject: [PATCH 2/4] cli: include fcntl.h for O_CREAT define
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cli/cli_readline.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/cli/cli_readline.c b/cli/cli_readline.c
+index 097ed6a..127136c 100644
+--- a/cli/cli_readline.c
++++ b/cli/cli_readline.c
+@@ -24,6 +24,7 @@
+ #include <sys/file.h>
+ #include <sys/stat.h>
+ #include <sys/errno.h>
++#include <fcntl.h>
+ #include <signal.h>
+
+ #include <readline/readline.h>
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-user-ipv6-structures.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-user-ipv6-structures.patch
new file mode 100644
index 000000000..3f8bcaa48
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0002-user-ipv6-structures.patch
@@ -0,0 +1,33 @@
+From a41cbeee3cf660663a9baac80545050a8d960898 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 18:09:58 -0700
+Subject: [PATCH 2/2] user ipv6 structures
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ l2tp_api.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/l2tp_api.c b/l2tp_api.c
+index 9d6f60a..f0946fd 100644
+--- a/l2tp_api.c
++++ b/l2tp_api.c
+@@ -450,10 +450,12 @@ int l2tp_api_rpc_check_request(SVCXPRT *xprt)
+ * non-loopback interface, reject the request.
+ */
+ if ((!l2tp_opt_remote_rpc) &&
+- ((xprt->xp_raddr.sin_addr.s_addr != htonl(INADDR_LOOPBACK)) &&
+- (xprt->xp_raddr.sin_addr.s_addr != htonl(INADDR_ANY)))) {
++ ((xprt->xp_raddr.sin6_addr.s6_addr != htonl(INADDR_LOOPBACK)) &&
++ (xprt->xp_raddr.sin6_addr.s6_addr != htonl(INADDR_ANY)))) {
++ char straddr[INET6_ADDRSTRLEN];
++ inet_ntop(AF_INET6, &xprt->xp_raddr.sin6_addr, straddr, sizeof(straddr));
+ if (l2tp_opt_trace_flags & L2TP_DEBUG_API) {
+- l2tp_log(LOG_ERR, "Rejecting RPC request from %s", inet_ntoa(xprt->xp_raddr.sin_addr));
++ l2tp_log(LOG_ERR, "Rejecting RPC request from %s", straddr);
+ }
+ svcerr_auth(xprt, AUTH_TOOWEAK);
+ return -EPERM;
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0003-cli-Define-_GNU_SOURCE-for-getting-sighandler_t.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0003-cli-Define-_GNU_SOURCE-for-getting-sighandler_t.patch
new file mode 100644
index 000000000..e05be1bbb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0003-cli-Define-_GNU_SOURCE-for-getting-sighandler_t.patch
@@ -0,0 +1,35 @@
+From 74fe72583472bcc3c89a52839cac2ebbad6c8a74 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 11:34:52 -0700
+Subject: [PATCH 3/4] cli: Define _GNU_SOURCE for getting sighandler_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cli/cli_readline.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/cli/cli_readline.c b/cli/cli_readline.c
+index 127136c..931779b 100644
+--- a/cli/cli_readline.c
++++ b/cli/cli_readline.c
+@@ -17,7 +17,7 @@
+ * Boston, MA 02110-1301 USA
+ *
+ *****************************************************************************/
+-
++#define _GNU_SOURCE
+ #include <stdio.h>
+ #include <unistd.h>
+ #include <sys/types.h>
+@@ -634,7 +634,7 @@ static void cli_rl_uninstall_signal_handlers(void)
+
+ static int cli_rl_install_signal_handlers(void)
+ {
+- __sighandler_t handler;
++ sighandler_t handler;
+
+ rl_catch_signals = 0;
+ rl_clear_signals();
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0004-Adjust-for-linux-kernel-headers-assumptions-on-glibc.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0004-Adjust-for-linux-kernel-headers-assumptions-on-glibc.patch
new file mode 100644
index 000000000..0fcba6546
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/0004-Adjust-for-linux-kernel-headers-assumptions-on-glibc.patch
@@ -0,0 +1,36 @@
+From ede4ae8e25f9fb746a6f4e076d0ef029938d2880 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 11:46:56 -0700
+Subject: [PATCH 4/4] Adjust for linux-kernel headers assumptions on glibc
+
+Fixes build issues e.g.
+
+In file included from /mnt/a/build/tmp-musl/work/cortexa7hf-neon-vfpv4-oe-linux-musleabi/openl2tp/1.8-r0/recipe-sysroot/usr/include/linux/if_pppox.h:24:
+/mnt/a/build/tmp-musl/work/cortexa7hf-neon-vfpv4-oe-linux-musleabi/openl2tp/1.8-r0/recipe-sysroot/usr/include/linux/if.h:97:2: error: expected identifier
+ IFF_LOWER_UP = 1<<16, /* __volatile__ */
+ ^
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ plugins/ppp_unix.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/plugins/ppp_unix.c b/plugins/ppp_unix.c
+index 869066f..5c1e44f 100644
+--- a/plugins/ppp_unix.c
++++ b/plugins/ppp_unix.c
+@@ -21,6 +21,11 @@
+ * Plugin to use the standard UNIX pppd
+ */
+
++/* hack to make sure kernel headers understand that libc (musl)
++ * does define IFF_LOWER_UP et al.
++ */
++#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 0
++
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/types.h>
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-modify-CFLAGS-to-aviod-build-error.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-modify-CFLAGS-to-aviod-build-error.patch
new file mode 100644
index 000000000..96dbc7551
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-modify-CFLAGS-to-aviod-build-error.patch
@@ -0,0 +1,106 @@
+From 152486fa3c36c3b99d17d5b553cf87ef412fae8e Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Mon, 1 Dec 2014 01:53:41 +0900
+Subject: [PATCH] Makefile:modify CFLAGS to aviod build error.
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ Makefile | 22 +++++++++++-----------
+ plugins/Makefile | 6 +++---
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 4aaa448..baa7882 100644
+--- a/Makefile
++++ b/Makefile
+@@ -152,10 +152,10 @@ LIBS.dmalloc= -ldmalloc
+ export USE_DMALLOC
+ endif
+
+-CPPFLAGS= $(CPPFLAGS.l2tptest) $(CPPFLAGS-y)
+-CFLAGS= -I. -Iusl -Icli -isystem include \
+- -MMD -Wall -Werror -Wno-strict-aliasing \
+- $(CPPFLAGS) $(CPPFLAGS.dmalloc) \
++ADD_CPPFLAGS= $(CPPFLAGS.l2tptest) $(CPPFLAGS-y)
++ADD_CFLAGS= -I. -Iusl -Icli -isystem include \
++ -MMD -Wall -Wno-strict-aliasing \
++ $(ADD_CPPFLAGS) $(CPPFLAGS.dmalloc) \
+ -DSYS_LIBDIR=$(SYS_LIBDIR)
+ LDFLAGS.l2tpd= -Wl,-E -L. -Lusl -lusl -ldl $(LIBS.dmalloc) -lc
+ LDFLAGS.l2tpconfig= -Lcli -lcli -lreadline $(LIBS.dmalloc) $(READLINE_LDFLAGS) -lc
+@@ -170,10 +170,10 @@ CFLAGS.optimize= $(OPT_CFLAGS)
+ endif
+ export CFLAGS.optimize
+
+-CFLAGS+= $(CFLAGS.optimize)
++ADD_CFLAGS+= $(CFLAGS.optimize)
+
+ ifeq ($(L2TP_USE_ASYNC_RPC),y)
+-CPPFLAGS+= -DL2TP_ASYNC_RPC
++ADD_CPPFLAGS+= -DL2TP_ASYNC_RPC
+ endif
+
+ ifeq ($(L2TP_FEATURE_RPC_MANAGEMENT),y)
+@@ -220,13 +220,13 @@ endif
+
+ # Compile without -Wall because rpcgen-generated code is full of warnings.
+ %_xdr.o: %_xdr.c
+- $(CC) -I. -MMD -w $(CFLAGS.optimize) -c $(CPPFLAGS) $<
++ $(CC) -I. -MMD -w $(CFLAGS.optimize) -c $(ADD_CPPFLAGS) $<
+
+ %_client.o: %_client.c
+- $(CC) -I. -MMD -w $(CFLAGS.optimize) -c $(CPPFLAGS) $<
++ $(CC) -I. -MMD -w $(CFLAGS.optimize) -c $(ADD_CPPFLAGS) $<
+
+ %_server.o: %_server.c
+- $(CC) -I. -MMD -w $(CFLAGS.optimize) -c $(CPPFLAGS) $<
++ $(CC) -I. -MMD -w $(CFLAGS.optimize) -c $(ADD_CPPFLAGS) $<
+
+ %_xdr.c: %.x
+ -$(RM) $@
+@@ -272,7 +272,7 @@ l2tpconfig: $(L2TPCONFIG_SRCS.o)
+ $(CC) -o $@ $^ $(LDFLAGS.l2tpconfig)
+
+ %.o: %.c
+- $(CC) -c $(CFLAGS) $< -o $@
++ $(CC) -c $(CFLAGS) $(ADD_CFLAGS) $< -o $@
+
+ l2tp_options.h: FORCE
+ @rm -f $@.tmp
+@@ -325,7 +325,7 @@ install: install-all
+ install-all: all install-daemon install-app
+
+ install-daemon:
+- @for d in $(filter-out usl,$(SUBDIRS)); do $(MAKE) -C $$d $(MFLAGS) EXTRA_CFLAGS="$(CPPFLAGS)" install; if [ $$? -ne 0 ]; then exit 1; fi; done
++ @for d in $(filter-out usl,$(SUBDIRS)); do $(MAKE) -C $$d $(MFLAGS) EXTRA_CFLAGS="$(CPPFLAGS) $(ADD_CPPFLAGS)" install; if [ $$? -ne 0 ]; then exit 1; fi; done
+ $(INSTALL) -d $(DESTDIR)/usr/sbin
+ $(INSTALL) openl2tpd $(DESTDIR)/usr/sbin
+
+diff --git a/plugins/Makefile b/plugins/Makefile
+index 5be996d..6810236 100644
+--- a/plugins/Makefile
++++ b/plugins/Makefile
+@@ -1,7 +1,7 @@
+-CFLAGS := $(CFLAGS.optimize) -MMD -Wall \
++ADD_CFLAGS := $(CFLAGS.optimize) -MMD -Wall \
+ -isystem ../include \
+ -I. -I.. -I../usl -fPIC $(EXTRA_CFLAGS)
+-LDFLAGS := -shared
++ADD_LDFLAGS := -shared
+
+ PLUGINS.c:= ppp_unix.c ppp_null.c ipsec.c event_sock.c
+
+@@ -21,7 +21,7 @@ clean:
+ $(RM) $(PLUGINS.so) $(wildcard *.o) $(wildcard *.d) $(SRC.generated)
+
+ %.so: %.c
+- $(CC) -o $@ $(LDFLAGS) $(CFLAGS) $<
++ $(CC) -o $@ $(LDFLAGS) $(ADD_LDFLAGS) $(CFLAGS) $(ADD_CFLAGS) $<
+
+ install: all
+ $(INSTALL) -d $(DESTDIR)$(SYS_LIBDIR)/openl2tp
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-obey-LDFLAGS.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-obey-LDFLAGS.patch
new file mode 100644
index 000000000..811faddd0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/Makefile-obey-LDFLAGS.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Pending
+
+--- openl2tp-1.8/Makefile.orig 2016-09-16 14:54:18.554291976 +0200
++++ openl2tp-1.8/Makefile 2016-09-16 14:57:23.559090400 +0200
+@@ -157,8 +157,8 @@ ADD_CFLAGS= -I. -Iusl -Icli -isystem i
+ -MMD -Wall -Wno-strict-aliasing \
+ $(ADD_CPPFLAGS) $(CPPFLAGS.dmalloc) \
+ -DSYS_LIBDIR=$(SYS_LIBDIR)
+-LDFLAGS.l2tpd= -Wl,-E -L. -Lusl -lusl -ldl $(LIBS.dmalloc) -lc
+-LDFLAGS.l2tpconfig= -Lcli -lcli -lreadline $(LIBS.dmalloc) $(READLINE_LDFLAGS) -lc
++LDFLAGS.l2tpd= -Wl,-E -L. -Lusl -lusl -ldl $(LIBS.dmalloc) -lc $(LDFLAGS)
++LDFLAGS.l2tpconfig= -Lcli -lcli -lreadline $(LIBS.dmalloc) $(READLINE_LDFLAGS) -lc $(LDFLAGS)
+
+ OPT_CFLAGS?= -O
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/fix_linux_4.15_compile.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/fix_linux_4.15_compile.patch
new file mode 100644
index 000000000..4597df80a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/fix_linux_4.15_compile.patch
@@ -0,0 +1,44 @@
+This fixes a compile issue introduced with linux kernel 4.15
+
+include/linux/in.h:222:8: error: redefinition of 'struct in_pktinfo'
+| struct in_pktinfo {
+
+
+Upstream-Status: Pending
+Signed-off-by: Armin Kuster <akuster808@gmail.com>
+
+Index: openl2tp-1.8/plugins/ppp_unix.c
+===================================================================
+--- openl2tp-1.8.orig/plugins/ppp_unix.c
++++ openl2tp-1.8/plugins/ppp_unix.c
+@@ -25,9 +25,14 @@
+ #include <fcntl.h>
+ #include <sys/types.h>
+ #include <signal.h>
++#include <linux/version.h>
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
+ #include <net/ethernet.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
++#endif
++
+ #include <arpa/inet.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
+@@ -41,12 +46,12 @@
+ #define __user
+ #endif
+ #include <sys/ioctl.h>
+-#include <linux/if_ether.h>
+-#include <linux/if_pppox.h>
+ #include <linux/ppp_defs.h>
+ #include <linux/if_ppp.h>
++#include <linux/if_pppox.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
+ #include <linux/if_pppol2tp.h>
+-
++#endif
+ #include "usl.h"
+ #include "l2tp_private.h"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tp-simplify-gcc-warning-hack.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tp-simplify-gcc-warning-hack.patch
new file mode 100644
index 000000000..c11a127b8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tp-simplify-gcc-warning-hack.patch
@@ -0,0 +1,41 @@
+From 460549a3de27f8dd8371b6d6fc1f69d8bffa102b Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Tue, 6 Jan 2015 11:23:21 -0500
+Subject: [PATCH] openl2tp: simplify gcc warning hack
+
+The hack to work around the gcc warning causes problems with some modern
+gcc configurations. Since the redef behaviour is essentially correct
+everywhere and since the hack is still required on 32-bit builders, leave
+it in place but remove the #if guard since it is only there to ensure that
+the l2tp_private.h file is updated if the rpc source file is changed and
+the two get out of sync.
+
+Upstream-status: pending
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ l2tp_private.h | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/l2tp_private.h b/l2tp_private.h
+index f3c1af7..cca6806 100644
+--- a/l2tp_private.h
++++ b/l2tp_private.h
+@@ -89,14 +89,8 @@
+ * So we redefine the constant with UL suffix to avoid the gcc warning.
+ * Is there some C preprocessor magic that could avoid having to do this?
+ */
+-#if L2TP_API_TUNNEL_FLAG_MTU != 2147483648
+-#error Constant L2TP_API_TUNNEL_FLAG_MTU changed. Update local definition here.
+-#endif
+ #undef L2TP_API_TUNNEL_FLAG_MTU
+ #define L2TP_API_TUNNEL_FLAG_MTU 2147483648UL
+-#if L2TP_API_SESSION_FLAG_NO_PPP != 2147483648
+-#error Constant L2TP_API_SESSION_FLAG_NO_PPP changed. Update local definition here.
+-#endif
+ #undef L2TP_API_SESSION_FLAG_NO_PPP
+ #define L2TP_API_SESSION_FLAG_NO_PPP 2147483648UL
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-enable-tests.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-enable-tests.patch
new file mode 100644
index 000000000..0bece2f4d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-enable-tests.patch
@@ -0,0 +1,24 @@
+commit 3e96a6c41bdd26417265a45ed685138d8eed564e
+Author: Aws Ismail <aws.ismail@windriver.com>
+Date: Fri Sep 14 02:32:53 2012 -0400
+
+ openl2tp: Enable tests
+
+ Build the test direcctory as part
+ of the overall build
+
+ Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index 412cf4d..adf4f44 100644
+--- a/Makefile
++++ b/Makefile
+@@ -16,7 +16,7 @@ L2TP_FEATURE_LOCAL_CONF_FILE= y
+
+ # Define to include test code. This must be defined to run the
+ # regression tests
+-# L2TP_TEST= y
++L2TP_TEST=y
+
+ # Define to compile in debug code. Also makes default trace flags
+ # enable all messages
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-sysconfig.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-sysconfig.patch
new file mode 100644
index 000000000..3119425e6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-sysconfig.patch
@@ -0,0 +1,35 @@
+commit 6ea3125e2bec15004f312814022335d94cdf7e94
+Author: Aws Ismail <aws.ismail@windriver.com>
+Date: Wed Sep 19 11:34:48 2012 -0400
+
+ Fix openl2tp config script location
+
+ Correct the location of the sysconfig
+ script. Use /etc/default/ instead of
+ /etc/sysconfig/
+
+ Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+
+ Upstream-Status: Inappropriate [configuration]
+
+ Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+diff --git a/etc/rc.d/init.d/openl2tpd b/etc/rc.d/init.d/openl2tpd
+index 7f27bb7..4194f63 100755
+--- a/etc/rc.d/init.d/openl2tpd
++++ b/etc/rc.d/init.d/openl2tpd
+@@ -8,12 +8,12 @@
+ # can be used to implement L2TP VPNs. As a server, it can handle
+ # hundreds of tunnels and sessions.
+ # processname: openl2tpd
+-# config: /etc/sysconfig/openl2tpd
++# config: /etc/default/openl2tpd
+ # pidfile: /var/run/openl2tpd.pid
+
+ # Source function library.
+ . /etc/init.d/functions
+-. /etc/sysconfig/openl2tpd
++. /etc/default/openl2tpd
+
+ # See how we were called.
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-warning.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-warning.patch
new file mode 100644
index 000000000..15a8c5b08
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix-warning.patch
@@ -0,0 +1,32 @@
+openl2tp: eliminate warning from modprobe
+
+modprobe will emit alarming warnings if it cannot
+find a module, but we only care that it find one
+of two possible modules when we start openl2tpd.
+
+Suppress messages from modprobe.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe Slater <jslater@windriver.com>
+
+--- a/etc/rc.d/init.d/openl2tpd
++++ b/etc/rc.d/init.d/openl2tpd
+@@ -29,7 +29,7 @@ start() {
+ return 1
+ fi
+ fi
+- modprobe -s pppol2tp || modprobe -s l2tp_ppp
++ modprobe -sq pppol2tp || modprobe -sq l2tp_ppp
+ RETVAL=$?
+ if [ $RETVAL -eq 0 ]; then
+ start-stop-daemon --start --exec openl2tpd $OPENL2TPDARGS
+@@ -57,7 +57,7 @@ stop() {
+ return 1;
+ fi
+ killproc openl2tpd
+- modprobe -s -r pppol2tp || modprobe -s -r l2tp_ppp
++ modprobe -srq pppol2tp || modprobe -srq l2tp_ppp
+ echo
+ rm -f /var/run/openl2tpd.pid
+ rm -f /var/lock/subsys/openl2tpd
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix.patch b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix.patch
new file mode 100644
index 000000000..9ecd4b072
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd-initscript-fix.patch
@@ -0,0 +1,49 @@
+commit 7c58a1e244ea83a9e7bbd51a6d354cee25cdbd33
+Author: Aws Ismail <aws.ismail@windriver.com>
+Date: Wed Sep 12 23:35:40 2012 -0400
+
+ Fix openl2tpd initscript
+
+ - Correct the location of the retval statement.
+ - use start-stop-daemon instead of daemon.
+
+ Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+
+ Upstream-Status: Inappropriate [OE specific]
+
+ Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+diff --git a/etc/rc.d/init.d/openl2tpd b/etc/rc.d/init.d/openl2tpd
+index ce21b50..7f27bb7 100755
+--- a/etc/rc.d/init.d/openl2tpd
++++ b/etc/rc.d/init.d/openl2tpd
+@@ -24,7 +24,7 @@ start() {
+ if [ -e /var/lock/subsys/openl2tpd ]; then
+ if [ -e /var/run/openl2tpd.pid ] && [ -e /proc/`cat /var/run/openl2tpd.pid` ]; then
+ echo -n $"cannot start openl2tpd: openl2tpd is already running.";
+- failure $"cannot start openl2tpd: openl2tpd already running.";
++ #failure $"cannot start openl2tpd: openl2tpd already running.";
+ echo
+ return 1
+ fi
+@@ -32,9 +32,9 @@ start() {
+ modprobe -s pppol2tp || modprobe -s l2tp_ppp
+ RETVAL=$?
+ if [ $RETVAL -eq 0 ]; then
+- daemon openl2tpd $OPENL2TPDARGS
++ start-stop-daemon --start --exec openl2tpd $OPENL2TPDARGS
++ RETVAL=$?
+ fi
+- RETVAL=$?
+ echo
+ if [ $RETVAL -eq 0 ]; then
+ touch /var/lock/subsys/openl2tpd
+@@ -52,7 +52,7 @@ stop() {
+ echo -n $"Stopping $prog: "
+ if [ ! -e /var/lock/subsys/openl2tpd ]; then
+ echo -n $"cannot stop openl2tpd: openl2tpd is not running."
+- failure $"cannot stop openl2tpd: openl2tpd is not running."
++ #failure $"cannot stop openl2tpd: openl2tpd is not running."
+ echo
+ return 1;
+ fi
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd.service b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd.service
new file mode 100644
index 000000000..7b3faf672
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/openl2tpd.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=The open L2TP implementation
+After=network.target remote-fs.target nss-lookup.target rpcbind.target
+Requires=rpcbind.service
+
+[Service]
+Type=forking
+PIDFile=@STATEDIR@/run/openl2tpd.pid
+EnvironmentFile=@SYSCONFDIR@/default/openl2tpd
+ExecStartPre=@BASE_BINDIR@/sh -c "@BASE_SBINDIR@/modprobe -sq l2tp_ppp || @BASE_SBINDIR@/modprobe -sq pppol2tp"
+ExecStart=@SBINDIR@/openl2tpd $OPENL2TPDARGS
+ExecStartPost=@BASE_BINDIR@/sh -c 'if [ -n "$OPENL2TPD_CONFIG_FILE" ]; then sleep 1; @BINDIR@/l2tpconfig config restore file=$OPENL2TPD_CONFIG_FILE; fi'
+ExecStopPost=@BASE_BINDIR@/sh -c "@BASE_SBINDIR@/modprobe -rsq l2tp_ppp || @BASE_SBINDIR@/modprobe -rsq pppol2tp"
+SuccessExitStatus=1
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/run-ptest b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/run-ptest
new file mode 100644
index 000000000..01c9c7b44
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp/run-ptest
@@ -0,0 +1,97 @@
+#!/bin/sh
+
+TMP_DIR=`mktemp -d /tmp/std.26.tmp.XXXXXX`
+
+# restore the file if exist
+restore_file()
+{
+ filelist="test_procs.tcl tunnel.test session.test"
+ for file in ${filelist}
+ do
+ if [ -f ${TMP_DIR}/${file} ]; then
+ mv ${TMP_DIR}/${file} ${OPENL2TP_DIR}
+ fi
+ done
+}
+
+exit_cus()
+{
+ restore_file
+ echo $1
+ exit $2
+}
+
+if [ -d /usr/lib64/openl2tp/ptest ]; then
+ OPENL2TP_DIR="/usr/lib64/openl2tp"
+elif [ -d /usr/lib/openl2tp/ptest ]; then
+ OPENL2TP_DIR="/usr/lib/openl2tp"
+else
+ exit_cus "The openl2tp ptest directory not installed, skip the test" 1
+fi
+
+#read -p "Please input the network interface you use to test(such as eth0, em1 etc):" ETH_TEST
+echo "Please input the network interface you use to test(such as eth0, em1 etc):"
+read ETH_TEST > /dev/null
+
+if [ x"$ETH_TEST" = x ]; then
+ exit_cus "The network interface cannot be null" 1
+fi
+ifconfig | grep $ETH_TEST > /dev/null || exit_cus "The network interface you provide is invalid" 1
+
+# check openl2tp related kernel config
+zcat /proc/config.gz | grep CONFIG_L2TP=y > /dev/null || exit_cus "Failed to check CONFIG_L2TP=y, skip the tests." 1
+zcat /proc/config.gz | grep CONFIG_PPPOL2TP=m > /dev/null || exit_cus "Failed to check CONFIG_PPPOL2TP=m, skip the tests." 1
+
+SYSV_INIT="/etc/init.d/rpcbind"
+if [ -e ${SYSV_INIT} ]; then
+ ${SYSV_INIT} status > /dev/null || ${SYSV_INIT} start > /dev/null
+else
+ systemctl status rpcbind > /dev/null || systemctl start rpcbind > /dev/null
+fi
+
+which systemctl > /dev/null && systemctl status rpcbind > /dev/null || service rpcbind status > /dev/null
+[ $? -ne 0 ] && exit_cus "Failed to start rpcbind service, skip the tests." 1
+
+# backup the below files
+cp ${OPENL2TP_DIR}/ptest/test_procs.tcl $TMP_DIR
+cp ${OPENL2TP_DIR}/ptest/tunnel.test $TMP_DIR
+cp ${OPENL2TP_DIR}/ptest/session.test $TMP_DIR
+
+# customise the config
+if [ x"$ETH_TEST" = x ]; then
+ exit_cus "Please set ETH_TEST which used to test first, skip the tests." 1
+fi
+
+sed -i 's/eth2/'\"$ETH_TEST\"'/g' ${OPENL2TP_DIR}/ptest/test_procs.tcl
+test_ip="`ifconfig $ETH_TEST | grep 'inet ' | sed 's/^.*inet addr://g' | \
+ sed 's/ *Mask.*$//g'|sed 's/ *Bcast.*$//g'`"
+sed -i 's/192.168.0.1/'"$test_ip"'/g' ${OPENL2TP_DIR}/ptest/tunnel.test
+
+# load module l2tp_ppp
+modprobe l2tp_ppp > /dev/null
+lsmod | grep l2tp_ppp > /dev/null || exit_cus "FAIL: Load module l2tp_ppp" 2
+
+# start openl2tpd
+ps aux | grep openl2tpd | grep -v grep > /dev/null && killall openl2tpd > /dev/null
+ppp_path=`rpm -ql openl2tp | grep ppp_null.so`
+echo "test it here"
+/usr/sbin/openl2tpd -d all -D -f -p ${ppp_path} & > /dev/null
+
+# prepare the test env
+rm -rf $OPENL2TP_DIR/results
+mkdir -p $OPENL2TP_DIR/results || exit_cus "FAIL: mkdir $OPENL2TP_DIR/results" 2
+cp /usr/bin/l2tpconfig ${OPENL2TP_DIR} || exit_cus "FAIL: copy /usr/bin/l2tpconfig to ${OPENL2TP_DIR}" 2
+
+# start the test
+cd ${OPENL2TP_DIR}/ptest && tclsh all.tcl -preservecore 3 -verbose bps -tmpdir $OPENL2TP_DIR/results -outfile test-l2tpd.result -constraints "l2tpdRunning peerProfile tunnelProfile sessionProfile pppProfile system" -match "peer_profile-1.1 tunnel_profile-1.1 session_profile-1.1 ppp_profile-1.1 system-1.1"
+
+# check the result
+PASSNUM=`grep PASS $OPENL2TP_DIR/results/test-l2tpd.result | wc -l`
+FAILNUM=`grep FAIL $OPENL2TP_DIR/results/test-l2tpd.result | wc -l`
+if [ $PASSNUM -ne 0 ] && [ $FAILNUM -eq 0 ]; then
+ echo "PASS: openl2tp"
+else
+ echo "FAIL: openl2tp"
+fi
+
+restore_file
diff --git a/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp_1.8.bb b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp_1.8.bb
new file mode 100644
index 000000000..1f6b4ded3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/openl2tp/openl2tp_1.8.bb
@@ -0,0 +1,99 @@
+SUMMARY = "An L2TP client/server, designed for VPN use."
+DESCRIPTION = "OpenL2TP is an open source L2TP client / server, written \
+specifically for Linux. It has been designed for use as an enterprise \
+L2TP VPN server or in commercial, Linux-based, embedded networking \
+products and is able to support hundreds of sessions, each with \
+different configuration. It is used by several ISPs to provide \
+L2TP services and by corporations to implement L2TP VPNs."
+HOMEPAGE = "http://www.openl2tp.org/"
+SECTION = "net"
+
+# cli and usl use license LGPL-2.1
+LICENSE = "GPL-2.0 & LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e9d9259cbbf00945adc25a470c1d3585 \
+ file://LICENSE;md5=f8970abd5ea9be701a0deedf5afd77a5 \
+ file://cli/LICENSE;md5=9c1387a3c5213aa40671438af3e00793 \
+ file://usl/LICENSE;md5=9c1387a3c5213aa40671438af3e00793 \
+ "
+
+DEPENDS = "popt flex readline"
+
+SRC_URI = "ftp://ftp.openl2tp.org/releases/${BP}/${BP}.tar.gz \
+ file://Makefile-modify-CFLAGS-to-aviod-build-error.patch \
+ file://openl2tp-simplify-gcc-warning-hack.patch \
+ file://Makefile-obey-LDFLAGS.patch \
+ file://0001-test-pppd_dummy.c-Fix-return-value.patch \
+ file://0001-Use-1-instead-of-WAIT_ANY.patch \
+ file://0002-cli-include-fcntl.h-for-O_CREAT-define.patch \
+ file://0003-cli-Define-_GNU_SOURCE-for-getting-sighandler_t.patch \
+ file://0001-l2tp_api-Included-needed-headers.patch \
+ file://openl2tpd-initscript-fix.patch \
+ file://openl2tpd-initscript-fix-sysconfig.patch \
+ file://openl2tpd-initscript-fix-warning.patch \
+ file://openl2tpd.service \
+ file://openl2tpd-enable-tests.patch \
+ file://run-ptest \
+ file://fix_linux_4.15_compile.patch \
+ "
+
+SRC_URI_append_libc-musl = "\
+ file://0004-Adjust-for-linux-kernel-headers-assumptions-on-glibc.patch \
+ file://0002-user-ipv6-structures.patch \
+ file://0001-l2tp_api.c-include-rpc-clnt.h-for-resultproc_t.patch \
+ "
+SRC_URI[md5sum] = "e3d08dedfb9e6a9a1e24f6766f6dadd0"
+SRC_URI[sha256sum] = "1c97704d4b963a87fbc0e741668d4530933991515ae9ab0dffd11b5444f4860f"
+
+inherit autotools-brokensep pkgconfig systemd ptest
+
+SYSTEMD_SERVICE_${PN} = "openl2tpd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+DEPENDS_append_libc-musl = " libtirpc"
+CPPFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LDFLAGS_append_libc-musl = " -ltirpc"
+
+PARALLEL_MAKE = ""
+EXTRA_OEMAKE = 'CFLAGS="${CFLAGS} -Wno-unused-but-set-variable" CPPFLAGS="${CPPFLAGS}" OPT_CFLAGS="${CFLAGS}"'
+
+do_compile_prepend() {
+ sed -i -e "s:SYS_LIBDIR=.*:SYS_LIBDIR=${libdir}:g" \
+ -e 's:$(CROSS_COMPILE)as:${AS}:g' \
+ -e 's:$(CROSS_COMPILE)ld:${LD}:g' \
+ -e 's:$(CROSS_COMPILE)gcc:${CC}:g' \
+ -e 's:$(CROSS_COMPILE)ar:${AR}:g' \
+ -e 's:$(CROSS_COMPILE)nm:${NM}:g' \
+ -e 's:$(CROSS_COMPILE)strip:${STRIP}:g' \
+ -e 's:$(CROSS_COMPILE)install:install:g' \
+ -e 's:CPPFLAGS-y:CPPFLAGS:g' \
+ ${S}/Makefile
+}
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/default
+ install -m 0755 ${S}/etc/rc.d/init.d/openl2tpd ${D}${sysconfdir}/init.d/openl2tpd
+ install -m 0755 ${S}/etc/sysconfig/openl2tpd ${D}${sysconfdir}/default/openl2tpd
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -D -m 0644 ${WORKDIR}/openl2tpd.service ${D}${systemd_system_unitdir}/openl2tpd.service
+ sed -i -e 's,@STATEDIR@,${localstatedir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@BINDIR@,${bindir},g' \
+ -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
+ -e 's,@BASE_BINDIR@,${base_bindir},g' \
+ ${D}${systemd_system_unitdir}/openl2tpd.service
+ fi
+}
+
+do_install_ptest () {
+ for i in all.tcl configfile.test peer_profile.test ppp_profile.test \
+ session_profile.test session.test system.test test_procs.tcl \
+ thirdparty_lns.test tunnel_profile.test tunnel.test; do
+ install -m 0755 ${S}/test/$i ${D}${PTEST_PATH}
+ done
+}
+
+RDEPENDS_${PN} = "ppp ppp-l2tp bash"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/0001-include-missing-sys-types.h.patch b/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/0001-include-missing-sys-types.h.patch
new file mode 100644
index 000000000..804bf1234
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/0001-include-missing-sys-types.h.patch
@@ -0,0 +1,28 @@
+From f6c4d2468ae0dadd2f35680d61b98b2a59077328 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 7 Jul 2017 10:31:03 -0700
+Subject: [PATCH] include missing sys/types.h
+
+Fixes errors seen on musl
+pqueue.h:21:3: error: unknown type name 'u_int32_t'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ pqueue.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/pqueue.h b/pqueue.h
+index c37ba7b..ae4cc6a 100644
+--- a/pqueue.h
++++ b/pqueue.h
+@@ -3,6 +3,7 @@
+
+ #include <time.h>
+ #include <sys/time.h>
++#include <sys/types.h>
+
+ /* wait this many seconds for missing packets before forgetting about them */
+ #define DEFAULT_PACKET_TIMEOUT 0.3
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/options.pptp b/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/options.pptp
new file mode 100644
index 000000000..f446e22a6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux/options.pptp
@@ -0,0 +1,30 @@
+#
+# Lock the port
+#
+lock
+
+#
+# We don't need the tunnel server to authenticate itself
+#
+noauth
+
+#
+# Turn off transmission protocols we know won't be used
+#
+nobsdcomp
+nodeflate
+
+#
+# We want MPPE
+# (option naming specific to ppp 2.4.0 with unofficial patch)
+#
+#mppe-40
+mppe-128
+#mppe-stateless
+
+#
+# We want a sane mtu/mru
+# (ppp 2.4.0 with unofficial patch)
+#
+#mtu 1000
+#mru 1000
diff --git a/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux_1.9.0.bb b/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux_1.9.0.bb
new file mode 100644
index 000000000..10c9170fb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/pptp-linux/pptp-linux_1.9.0.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Client for Microsoft PPTP VPNs"
+DESCRIPTION = "PPTP Client is a Linux, FreeBSD, NetBSD \
+ and OpenBSD client for the proprietary Microsoft Point-to-Point \
+ Tunneling Protocol, PPTP. Allows connection to a PPTP based \
+ Virtual Private Network (VPN) as used by employers and some \
+ cable and ADSL internet service providers."
+HOMEPAGE = "http://pptpclient.sourceforge.net"
+SECTION = "net"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sourceforge/pptpclient/pptp-${PV}.tar.gz \
+ file://options.pptp \
+ file://0001-include-missing-sys-types.h.patch \
+ "
+
+SRC_URI[md5sum] = "b2117b377f65294a9786f80f0235d308"
+SRC_URI[sha256sum] = "0b1e8cbfc578d3f5ab12ee87c5c2c60419abfe9cc445690a8a19c320b11c9201"
+
+S = "${WORKDIR}/pptp-${PV}"
+
+EXTRA_OEMAKE = "-e MAKEFLAGS="
+
+do_install() {
+ install -d ${D}${sbindir} ${D}${sysconfdir}/ppp ${D}${mandir}/man8
+ install -m 555 pptp ${D}${sbindir}
+ install -m 644 pptp.8 ${D}${mandir}/man8
+ install -m 644 ${WORKDIR}/options.pptp ${D}${sysconfdir}/ppp
+}
+
+RDEPENDS_${PN} = "ppp"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/bgpd.service b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/bgpd.service
new file mode 100644
index 000000000..76f9f61e7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/bgpd.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=BGP routing daemon
+BindTo=zebra.service
+After=zebra.service
+ConditionPathExists=@SYSCONFDIR@/quagga/bgpd.conf
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/quagga
+PIDFile=@localstatedir@/run/quagga/bgpd.pid
+ExecStart=@SBINDIR@/bgpd -d $bgpd_options -f @SYSCONFDIR@/quagga/bgpd.conf
+ExecStopPost=@base_bindir@/rm -rf @localstatedir@/run/quagga/bgpd.pid
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/isisd.service b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/isisd.service
new file mode 100644
index 000000000..9bfe7b65e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/isisd.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=IS-IS routing daemon
+BindTo=zebra.service
+After=zebra.service
+ConditionPathExists=@SYSCONFDIR@/quagga/isisd.conf
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/quagga
+ExecStart=@SBINDIR@/isisd -d $isisd_options -f /etc/quagga/isisd.conf
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospf6d.service b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospf6d.service
new file mode 100644
index 000000000..a2e493b42
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospf6d.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=OSPF routing daemon for IPv6
+BindTo=zebra.service
+After=zebra.service
+ConditionPathExists=@SYSCONFDIR@/quagga/ospf6d.conf
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/quagga
+PIDFile=@localstatedir@/run/quagga/ospf6d.pid
+ExecStart=@SBINDIR@/ospf6d -d $ospf6d_options -f @SYSCONFDIR@/quagga/ospf6d.conf
+ExecStopPost=@base_bindir@/rm -rf @localstatedir@/run/quagga/ospf6d.pid
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospfd.service b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospfd.service
new file mode 100644
index 000000000..0c62cbce5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ospfd.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=OSPF routing daemon
+BindTo=zebra.service
+After=zebra.service
+ConditionPathExists=@SYSCONFDIR@/quagga/ospfd.conf
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/quagga
+PIDFile=@localstatedir@/run/quagga/ospfd.pid
+ExecStart=@SBINDIR@/ospfd -d $ospfd_options -f @SYSCONFDIR@/quagga/ospfd.conf
+ExecStopPost=@base_bindir@/rm -rf @localstatedir@/run/quagga/ospfd.pid
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.default b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.default
new file mode 100644
index 000000000..4c4bc2307
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.default
@@ -0,0 +1,12 @@
+# If this option is set the /etc/init.d/quagga script automatically loads
+# the config via "vtysh -b" when the servers are started.
+vtysh_enable=yes
+
+# Bind all daemons to loopback only by default
+zebra_options=" --daemon -A 127.0.0.1"
+bgpd_options=" --daemon -A 127.0.0.1"
+ospfd_options=" --daemon -A 127.0.0.1"
+ospf6d_options="--daemon -A ::1"
+ripd_options=" --daemon -A 127.0.0.1"
+ripngd_options="--daemon -A ::1"
+isisd_options=" --daemon -A 127.0.0.1"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.init b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.init
new file mode 100644
index 000000000..df1beb712
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.init
@@ -0,0 +1,200 @@
+#!/bin/sh
+#
+# /etc/init.d/quagga -- start/stop the Quagga routing daemons
+#
+# Based on debian version by Endre Hirling <endre@mail.elte.hu> and
+# Christian Hammers <ch@debian.org>.
+#
+
+### BEGIN INIT INFO
+# Provides: quagga
+# Required-Start: $local_fs $network $remote_fs $syslog
+# Required-Stop: $local_fs $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: start and stop the Quagga routing suite
+# Description: Quagga is a routing suite for IP routing protocols like
+# BGP, OSPF, RIP and others. This script contols the main
+# daemon "quagga" as well as the individual protocol daemons.
+### END INIT INFO
+
+# NOTE: sbin must be before bin so we get the iproute2 ip and not the
+# busybox ip command. The busybox one flushes all routes instead of just
+# the dynamic routes
+PATH=/sbin:/usr/sbin:/bin:/usr/bin:/sbin
+D_PATH=/usr/sbin
+C_PATH=/etc/quagga
+
+# Keep zebra first and do not list watchquagga!
+DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd"
+
+# Print the name of the pidfile.
+pidfile()
+{
+ echo "/var/run/quagga/$1.pid"
+}
+
+# Check if daemon is started by using the pidfile.
+started()
+{
+ [ -e `pidfile $1` ] && kill -0 `cat \`pidfile $1\`` 2> /dev/null && return 0
+ return 1
+}
+
+# Loads the config via vtysh -b if configured to do so.
+vtysh_b ()
+{
+ # Rember, that all variables have been incremented by 1 in convert_daemon_prios()
+ if [ "$vtysh_enable" = 2 -a -f $C_PATH/Quagga.conf ]; then
+ /usr/bin/vtysh -b
+ fi
+}
+
+# Check if the daemon is activated and if its executable and config files
+# are in place.
+# params: daemon name
+# returns: 0=ok, 1=error
+check_daemon()
+{
+ # If the integrated config file is used the others are not checked.
+ if [ -r "$C_PATH/Quagga.conf" ]; then
+ return 0
+ fi
+
+ # check for config file
+ if [ ! -r "$C_PATH/$1.conf" ]; then
+ return 1
+ fi
+ return 0
+}
+
+# Starts the server if it's not alrady running according to the pid file.
+# The Quagga daemons creates the pidfile when starting.
+start()
+{
+ if ! check_daemon $1; then echo -n " (!$1)"; return; fi
+ echo -n " $1"
+ start-stop-daemon \
+ --start \
+ --pidfile=`pidfile $1` \
+ --exec "$D_PATH/$1" \
+ -- \
+ `eval echo "$""$1""_options"`
+
+}
+
+# Stop the daemon given in the parameter, printing its name to the terminal.
+stop()
+{
+ if ! started "$1" ; then
+ echo -n " (!$1)"
+ return 0
+ else
+ PIDFILE=`pidfile $1`
+ PID=`cat $PIDFILE 2>/dev/null`
+ start-stop-daemon --stop --quiet --exec "$D_PATH/$1"
+ #
+ # Now we have to wait until $DAEMON has _really_ stopped.
+ #
+ if test -n "$PID" && kill -0 $PID 2>/dev/null; then
+ echo -n " (waiting) ."
+ cnt=0
+ while kill -0 $PID 2>/dev/null; do
+ cnt=`expr $cnt + 1`
+ if [ $cnt -gt 60 ]; then
+ # Waited 120 secs now, fail.
+ echo -n "Failed.. "
+ break
+ fi
+ sleep 2
+ echo -n "."
+ done
+ fi
+ echo -n " $1"
+ rm -f `pidfile $1`
+ fi
+}
+
+stop_all()
+{
+ local daemon_list
+ daemon_list=${1:-$DAEMONS}
+
+ echo -n "Stopping Quagga daemons:"
+ for daemon_name in $daemon_list; do
+ stop "$daemon_name"
+ done
+ echo "."
+}
+
+start_all()
+{
+ local daemon_list
+ daemon_list=${1:-$DAEMONS}
+
+ echo -n "Starting Quagga daemons:"
+ for daemon_name in $daemon_list; do
+ start "$daemon_name"
+ done
+ echo "."
+}
+
+status_all()
+{
+ local daemon_list
+ daemon_list=${1:-$DAEMONS}
+ res=1
+
+ echo -n "quagga: "
+ for daemon_name in $daemon_list; do
+ if started "$daemon_name" ; then
+ id=`cat \`pidfile $daemon_name\``
+ echo -n "$daemon_name (pid $id) "
+ res=0
+ fi
+ done
+ if [ $res -eq 0 ]; then
+ echo "is running..."
+ else
+ echo "is stopped..."
+ fi
+ exit $res
+}
+
+#########################################################
+# Main program #
+#########################################################
+
+# Load configuration
+test -f /etc/default/quagga && . /etc/default/quagga
+
+case "$1" in
+ start)
+ cd $C_PATH/
+ start_all $2
+ vtysh_b
+ ;;
+
+ stop)
+ stop_all $2
+ echo "Removing all routes made by zebra."
+ ip route flush proto zebra
+ ;;
+
+ status)
+ status_all $2
+ ;;
+
+ restart|force-reload)
+ $0 stop $2
+ sleep 1
+ $0 start $2
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/quagga {start|stop|restart|status|force-reload} [daemon]"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.pam b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.pam
new file mode 100644
index 000000000..3541a975a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/quagga.pam
@@ -0,0 +1,13 @@
+#
+# The PAM configuration file for the quagga `vtysh' service
+#
+
+# This allows root to change user infomation without being
+# prompted for a password
+auth sufficient pam_rootok.so
+
+# The standard Unix authentication modules, used with
+# NIS (man nsswitch) as well as normal /etc/passwd and
+# /etc/shadow entries.
+auth include common-auth
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripd.service b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripd.service
new file mode 100644
index 000000000..1d20389e8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripd.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=RIP routing daemon
+BindTo=zebra.service
+After=zebra.service
+ConditionPathExists=@SYSCONFDIR@/quagga/ripd.conf
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/quagga
+PIDFile=@localstatedir@/run/quagga/ripd.pid
+ExecStart=@SBINDIR@/ripd -d $ripd_options -f @SYSCONFDIR@/quagga/ripd.conf
+ExecStopPost=@base_bindir@/rm -rf @localstatedir@/run/quagga/ripd.pid
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripngd.service b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripngd.service
new file mode 100644
index 000000000..0355ad12a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/ripngd.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=RIP routing daemon for IPv6
+BindTo=zebra.service
+After=zebra.service
+ConditionPathExists=@SYSCONFDIR@/quagga/ripngd.conf
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/quagga
+PIDFile=@localstatedir@/run/quagga/ripngd.pid
+ExecStart=@SBINDIR@/ripngd -d $ripngd_options -f @SYSCONFDIR@/quagga/ripngd.conf
+ExecStopPost=@base_bindir@/rm -rf @localstatedir@/run/quagga/ripngd.pid
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/volatiles.03_quagga b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/volatiles.03_quagga
new file mode 100644
index 000000000..1f28c0b24
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/volatiles.03_quagga
@@ -0,0 +1,3 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d quagga quagga 0755 /var/run/quagga none
+d quagga quagga 0755 /var/log/quagga none
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.default b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.default
new file mode 100644
index 000000000..2d601ec97
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.default
@@ -0,0 +1,12 @@
+# Watchquagga configuration
+#watch_daemons="zebra bgpd ospfd ospf6d ripd ripngd"
+watch_daemons="zebra"
+
+# To enable restarts when multiple daemons are being used, uncomment this line (but first be sure to edit
+# the WATCH_DAEMONS line to reflect the daemons you are actually using):
+#watch_options="-Az -b_ -r/etc/init.d/quagga_restart_%s -s/etc/init.d/quagga_start_%s -k/etc/init.d/quagga_stop_%s"
+
+# Since we are using one quagga daemon for now, use the following line. If using
+# multiple daemons, comment the line below and uncoment the line mentioned
+# above.
+watch_options="-z -b_ -r/etc/init.d/quagga_restart_%s"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.init b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.init
new file mode 100644
index 000000000..5ddd94a3d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/watchquagga.init
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+### BEGIN INIT INFO
+# Provides: watchquagga
+# Required-Start: $local_fs $network $remote_fs $syslog
+# Required-Stop: $local_fs $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: start and stop the Quagga watchdog
+### END INIT INFO
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+
+# Load configuration
+test -f /etc/default/watchquagga && . /etc/default/watchquagga
+
+# Check that there are daemons to be monitored.
+[ -z "$watch_daemons" ] && exit 0
+
+pidfile="/var/run/quagga/watchquagga.pid"
+
+case "$1" in
+ start)
+ echo -n "Starting quagga watchdog daemon: watchquagga"
+ start-stop-daemon --start \
+ --pidfile $pidfile \
+ --exec /usr/sbin/watchquagga \
+ -- -d $watch_options $watch_daemons
+ echo "."
+ ;;
+
+ stop)
+ echo -n "Stopping quagga watchdog daemon: watchquagga"
+ start-stop-daemon --stop --quiet \
+ --pidfile $pidfile
+ echo "."
+ ;;
+
+ status)
+ echo -n "watchquagga "
+ res=1
+ [ -e $pidfile ] && kill -0 `cat $pidfile` 2> /dev/null
+ if [ $? -eq 0 ]; then
+ echo "(pid `cat $pidfile`) is running..."
+ res=0
+ else
+ echo "is stopped..."
+ fi
+ exit $res
+ ;;
+
+ restart|force-reload)
+ $0 stop $2
+ sleep 1
+ $0 start $2
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/watchquagga {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/files/zebra.service b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/zebra.service
new file mode 100644
index 000000000..e4fb6c808
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/files/zebra.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=GNU Zebra routing manager
+Wants=network.target
+Before=network.target
+ConditionPathExists=@SYSCONFDIR@/quagga/zebra.conf
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/quagga
+PIDFile=@localstatedir@/run/quagga/zebra.pid
+ExecStartPre=@BASE_SBINDIR@/ip route flush proto zebra
+ExecStart=@SBINDIR@/zebra -d $zebra_options -f @SYSCONFDIR@/quagga/zebra.conf
+ExecStopPost=@base_bindir@/rm -rf @localstatedir@/run/quagga/zebra.pid
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc b/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc
new file mode 100644
index 000000000..dfd6aa7eb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga.inc
@@ -0,0 +1,232 @@
+SUMMARY = "BGP/OSPF/RIP routing daemon"
+DESCRIPTION = "Quagga is a routing software suite, providing \
+implementations of OSPFv2, OSPFv3, RIP v1 and v2, RIPv3 and BGPv4 for \
+Unix platforms, particularly FreeBSD, Linux, Solaris and NetBSD. \
+Quagga is a fork of GNU Zebra which was developed by Kunihiro \
+Ishiguro. The Quagga tree aims to build a more involved community \
+around Quagga than the current centralised model of GNU Zebra."
+HOMEPAGE = "http://www.nongnu.org/quagga/"
+SECTION = "net"
+
+
+LICENSE = "GPL-2.0 & LGPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=81bcece21748c91ba9992349a91ec11d \
+ file://COPYING.LIB;md5=01ef24401ded36cd8e5d18bfe947240c"
+
+DEPENDS = "readline ncurses perl-native c-ares"
+DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'snmp', 'net-snmp', '', d)}"
+SNMP_CONF="${@bb.utils.contains('DISTRO_FEATURES', 'snmp', '--enable-snmp', '', d)}"
+
+# the "ip" command from busybox is not sufficient (flush by protocol flushes all routes)
+RDEPENDS_${PN} += "iproute2"
+
+SRC_URI = "${SAVANNAH_GNU_MIRROR}/quagga/quagga-${PV}.tar.gz; \
+ file://quagga.init \
+ file://quagga.default \
+ file://watchquagga.init \
+ file://watchquagga.default \
+ file://volatiles.03_quagga \
+ file://quagga.pam \
+ file://bgpd.service \
+ file://isisd.service \
+ file://ospf6d.service \
+ file://ospfd.service \
+ file://ripd.service \
+ file://ripngd.service \
+ file://zebra.service \
+ "
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}"
+PACKAGECONFIG[cap] = "--enable-capabilities,--disable-capabilities,libcap"
+PACKAGECONFIG[pam] = "--with-libpam, --without-libpam, libpam"
+
+inherit autotools update-rc.d useradd systemd pkgconfig
+
+SYSTEMD_PACKAGES = "${PN} ${PN}-bgpd ${PN}-isisd ${PN}-ospf6d ${PN}-ospfd ${PN}-ripd ${PN}-ripngd"
+SYSTEMD_SERVICE_${PN}-bgpd = "bgpd.service"
+SYSTEMD_SERVICE_${PN}-isisd = "isisd.service"
+SYSTEMD_SERVICE_${PN}-ospf6d = "ospf6d.service"
+SYSTEMD_SERVICE_${PN}-ospfd = "ospfd.service"
+SYSTEMD_SERVICE_${PN}-ripd = "ripd.service"
+SYSTEMD_SERVICE_${PN}-ripngd = "ripngd.service"
+SYSTEMD_SERVICE_${PN} = "zebra.service"
+
+EXTRA_OECONF = "--sysconfdir=${sysconfdir}/quagga \
+ --localstatedir=${localstatedir}/run/quagga \
+ --enable-exampledir=${docdir}/quagga/examples/ \
+ --enable-vtysh \
+ --enable-isisd \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '--enable-watchquagga', '--disable-watchquagga', d)} \
+ --enable-ospfclient=yes \
+ --enable-multipath=64 \
+ --enable-user=quagga \
+ --enable-group=quagga \
+ --enable-vty-group=quaggavty \
+ --enable-configfile-mask=0640 \
+ --enable-logfile-mask=0640 \
+ --enable-rtadv \
+ --enable-linux24-tcp-md5 \
+ ap_cv_cc_pie=no \
+ ${SNMP_CONF}"
+
+CACHED_CONFIGUREVARS += "ac_cv_path_PERL='/usr/bin/env perl'"
+
+do_install () {
+ # Install init script and default settings
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/quagga ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/quagga.default ${D}${sysconfdir}/default/quagga
+ install -m 0644 ${WORKDIR}/watchquagga.default ${D}${sysconfdir}/default/watchquagga
+ install -m 0755 ${WORKDIR}/quagga.init ${D}${sysconfdir}/init.d/quagga
+ install -m 0755 ${WORKDIR}/watchquagga.init ${D}${sysconfdir}/init.d/watchquagga
+ install -m 0644 ${WORKDIR}/volatiles.03_quagga ${D}${sysconfdir}/default/volatiles/volatiles.03_quagga
+
+ # Install sample configurations for the daemons
+ for f in bgpd vtysh isisd ospfd ripngd zebra ripd ospf6d; do
+ install -m 0640 ${S}/$f/$f.conf.sample ${D}${sysconfdir}/quagga/$f.conf.sample
+ done
+
+ for f in bgpd vtysh isisd ospfd ripngd zebra ripd ospf6d; do
+ touch ${D}${sysconfdir}/quagga/$f.conf
+ done
+ chown quagga:quaggavty ${D}${sysconfdir}/quagga
+ chown quagga:quagga ${D}${sysconfdir}/quagga/*.conf
+ chmod 750 ${D}${sysconfdir}/quagga
+ chmod 640 ${D}${sysconfdir}/quagga/*.conf
+
+ # Install quagga
+ oe_runmake install DESTDIR=${D} prefix=${prefix} \
+ sbindir=${sbindir} \
+ sysconfdir=${sysconfdir}/quagga \
+ localstatedir=${localstatedir}/run/quagga
+
+ # Fix hardcoded paths
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/*
+ sed -i 's!/usr/bin/!${bindir}/!g' ${D}${sysconfdir}/init.d/quagga
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/* ${D}${sysconfdir}/default/watchquagga
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/* ${D}${sysconfdir}/default/volatiles/volatiles.03_quagga
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${sbindir}:${base_bindir}:${bindir}!' ${D}${sysconfdir}/init.d/*
+
+ # For PAM
+ for feature in ${DISTRO_FEATURES}; do
+ if [ "$feature" = "pam" ]; then
+ install -D -m 644 ${WORKDIR}/quagga.pam ${D}/${sysconfdir}/pam.d/quagga
+ break
+ fi
+ done
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /var/run/quagga 0755 quagga quagga -" \
+ > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+ fi
+
+ # Remove sysinit script if sysvinit is not in DISTRO_FEATURES
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
+ rm -rf ${D}${sysconfdir}/init.d/
+ rm -f ${D}${sysconfdir}/default/watchquagga
+ fi
+
+ install -d ${D}${systemd_unitdir}/system
+ for i in bgpd isisd ospf6d ospfd ripd ripngd zebra; do
+ install -m 0644 ${WORKDIR}/$i.service ${D}${systemd_unitdir}/system
+ done
+ sed -e 's,@BASE_SBINDIR@,${base_sbindir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ -e 's,@base_bindir@,${base_bindir},g' \
+ -e 's,@localstatedir@,${localstatedir},g' \
+ -i ${D}${systemd_unitdir}/system/*.service
+}
+
+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 quagga.service
+ fi
+}
+
+# Split into a main package and separate per-protocol packages
+PACKAGE_BEFORE_PN = "${PN}-ospfd ${PN}-ospf6d ${PN}-bgpd \
+ ${PN}-ripd ${PN}-ripngd ${PN}-isisd \
+ ${PN}-ospfclient ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '${PN}-watchquagga', '', d)}"
+
+RDEPENDS_${PN} += "${PN}-bgpd ${PN}-isisd ${PN}-ospf6d ${PN}-ospfd ${PN}-ripd ${PN}-ripngd"
+
+FILES_${PN}-ospfd = "${sbindir}/ospfd ${libdir}/libospf.so.*"
+FILES_${PN}-ospf6d = "${sbindir}/ospf6d"
+FILES_${PN}-bgpd = "${sbindir}/bgpd"
+FILES_${PN}-ripd = "${sbindir}/ripd"
+FILES_${PN}-ripngd = "${sbindir}/ripngd"
+FILES_${PN}-isisd = "${sbindir}/isisd"
+FILES_${PN}-ospfclient = "${sbindir}/ospfclient ${libdir}/libospfapiclient.so.*"
+FILES_${PN}-watchquagga = "${sbindir}/watchquagga ${sysconfdir}/default/watchquagga \
+ ${sysconfdir}/init.d/watchquagga"
+
+# Indicate that the default files are configuration files
+CONFFILES_${PN} = "${sysconfdir}/default/quagga \
+ ${sysconfdir}/quagga/bgpd.conf \
+ ${sysconfdir}/quagga/vtysh.conf \
+ ${sysconfdir}/quagga/isisd.conf \
+ ${sysconfdir}/quagga/ospfd.conf \
+ ${sysconfdir}/quagga/ripngd.conf \
+ ${sysconfdir}/quagga/zebra.conf \
+ ${sysconfdir}/quagga/ripd.conf \
+ ${sysconfdir}/quagga/ospf6d.conf \
+ "
+CONFFILES_${PN}-watchquagga = "${sysconfdir}/default/watchquagga"
+
+# Stop the names being rewritten due to the internal shared libraries
+DEBIAN_NOAUTONAME_${PN}-ospfd = "1"
+DEBIAN_NOAUTONAME_${PN}-ospfclient = "1"
+
+# Main init script starts all deamons
+# Seperate init script for watchquagga
+INITSCRIPT_PACKAGES = "${PN} ${PN}-watchquagga"
+INITSCRIPT_NAME_${PN} = "quagga"
+INITSCRIPT_PARAMS_${PN} = "defaults 15 85"
+INITSCRIPT_NAME_${PN}-watchquagga = "watchquagga"
+INITSCRIPT_PARAMS_${PN}-watchquagga = "defaults 90 10"
+
+# Add quagga's user and group
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system quagga ; --system quaggavty"
+USERADD_PARAM_${PN} = "--system --home ${localstatedir}/run/quagga/ -M -g quagga -G quaggavty --shell /bin/false quagga"
+
+pkg_postinst_${PN} () {
+ if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+}
+
+# Stop apps before uninstall
+pkg_prerm_${PN} () {
+ ${sysconfdir}/init.d/quagga stop
+}
+
+pkg_prerm_${PN}-ospfd () {
+ ${sysconfdir}/init.d/quagga stop ospfd
+}
+
+pkg_prerm_${PN}-ospf6d () {
+ ${sysconfdir}/init.d/quagga stop ospf6d
+}
+
+pkg_prerm_${PN}-bgpd () {
+ ${sysconfdir}/init.d/quagga stop bgpd
+}
+
+pkg_prerm_${PN}-ripd () {
+ ${sysconfdir}/init.d/quagga stop ripd
+}
+
+pkg_prerm_${PN}-ripngd () {
+ ${sysconfdir}/init.d/quagga stop ripngd
+}
+
+pkg_prerm_${PN}-isisd () {
+ ${sysconfdir}/init.d/quagga stop isisd
+}
diff --git a/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga_1.2.4.bb b/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga_1.2.4.bb
new file mode 100644
index 000000000..a7697a1ae
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/quagga/quagga_1.2.4.bb
@@ -0,0 +1,4 @@
+require quagga.inc
+
+SRC_URI[md5sum] = "eced21b054d71c9e1b7c6ac43286a166"
+SRC_URI[sha256sum] = "e364c082c3309910e1eb7b068bf39ee298e2f2f3f31a6431a5c115193bd653d3"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/Modify-configure.in-and-etc-Makefile.am.patch b/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/Modify-configure.in-and-etc-Makefile.am.patch
new file mode 100644
index 000000000..ecc2d74e7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/Modify-configure.in-and-etc-Makefile.am.patch
@@ -0,0 +1,84 @@
+From 45b97b474ce2d0ad56828db11edde8562bb47a43 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Tue, 2 Dec 2014 02:33:53 +0900
+Subject: [PATCH] Modify configure.in and etc/Makefile.am
+
+this patch is from Fedora to fix error:
+"conftest.c:26:9: error: unknown type name 'not'"
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ configure.in | 6 +++++-
+ etc/Makefile.am | 9 ++++++---
+ etc/radiusclient.conf.in | 2 +-
+ 3 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 812f640..3a8af99 100644
+--- a/configure.in
++++ b/configure.in
+@@ -29,6 +29,9 @@ AC_SUBST(LIBVERSION)
+ pkgsysconfdir=${sysconfdir}/$PACKAGE
+ AC_SUBST(pkgsysconfdir)
+
++pkgdatadir=${datadir}/$PACKAGE
++AC_SUBST(pkgdatadir)
++
+ AC_PROG_LIBTOOL
+
+ AC_PROG_CC
+@@ -118,7 +121,8 @@ then
+ ],
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STRUCT_UTSNAME_DOMAINNAME),
+- AC_MSG_RESULT(no)
++ AC_MSG_RESULT(no),
++ AC_MSG_RESULT(assume no),
+ )
+ fi
+
+diff --git a/etc/Makefile.am b/etc/Makefile.am
+index 39b6975..a3c403f 100644
+--- a/etc/Makefile.am
++++ b/etc/Makefile.am
+@@ -14,9 +14,11 @@ CLEANFILES = *~ radiusclient.conf
+
+ sbindir = @sbindir@
+ pkgsysconfdir = @pkgsysconfdir@
+-pkgsysconf_DATA = issue port-id-map radiusclient.conf \
+- dictionary dictionary.ascend dictionary.compat dictionary.merit \
+- dictionary.sip
++pkgsysconf_DATA = issue port-id-map radiusclient.conf
++
++pkgdatadir = @pkgdatadir@
++pkgdata_DATA = dictionary dictionary.ascend dictionary.compat \
++ dictionary.merit dictionary.sip
+
+ EXTRA_DIST = issue port-id-map dictionary dictionary.ascend \
+ dictionary.compat dictionary.merit servers radiusclient.conf.in \
+@@ -25,6 +27,7 @@ EXTRA_DIST = issue port-id-map dictionary dictionary.ascend \
+ radiusclient.conf: radiusclient.conf.in
+ sed -e 's|@sbin''dir@|$(sbindir)|g' \
+ -e 's|@pkgsysconf''dir@|$(pkgsysconfdir)|g' \
++ -e 's|@pkgdata''dir@|$(pkgdatadir)|g' \
+ <$(srcdir)/radiusclient.conf.in >radiusclient.conf
+
+ install-data-local: servers
+diff --git a/etc/radiusclient.conf.in b/etc/radiusclient.conf.in
+index 948bc2f..aac9973 100644
+--- a/etc/radiusclient.conf.in
++++ b/etc/radiusclient.conf.in
+@@ -47,7 +47,7 @@ servers @pkgsysconfdir@/servers
+
+ # dictionary of allowed attributes and values
+ # just like in the normal RADIUS distributions
+-dictionary @pkgsysconfdir@/dictionary
++dictionary @pkgdatadir@/dictionary
+
+ # program to call for a RADIUS authenticated login
+ login_radius @sbindir@/login.radius
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/config-site.radiusclient-ng-0.5.6 b/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/config-site.radiusclient-ng-0.5.6
new file mode 100644
index 000000000..a30c144b9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng/config-site.radiusclient-ng-0.5.6
@@ -0,0 +1 @@
+ac_cv_func_uname=no
diff --git a/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng_0.5.6.bb b/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng_0.5.6.bb
new file mode 100644
index 000000000..95faa65b1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/radiusclient-ng/radiusclient-ng_0.5.6.bb
@@ -0,0 +1,36 @@
+SUMMARY = "RADIUS protocol client library"
+DESCRIPTION = "Portable, easy-to-use and standard compliant library suitable \
+for developing free and commercial software that need support for a RADIUS \
+protocol (RFCs 2128 and 2139)."
+HOMEPAGE = "http://sourceforge.net/projects/radiusclient-ng.berlios/"
+SECTION = "net"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/r/${BPN}/${BPN}_${PV}.orig.tar.gz \
+ file://Modify-configure.in-and-etc-Makefile.am.patch \
+ file://config-site.radiusclient-ng-${PV}"
+
+SRC_URI[md5sum] = "6fb7d4d0aefafaee7385831ac46a8e9c"
+SRC_URI[sha256sum] = "282a9f1355f190efbb06c0d7c4e062eaa652caf342ed3ad361ac595f72f09f14"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=3e47566c9271b786693d8a08792dbf41"
+
+inherit autotools-brokensep
+
+EXTRA_OECONF += "--disable-static"
+
+do_configure_prepend () {
+ export CONFIG_SITE=./config-site.${P}
+}
+
+do_compile_prepend() {
+ for m in `find . -name "Makefile"` ; do
+ sed -i -e 's:^program_transform_name =.*:program_transform_name =:g' ${m}
+ done
+}
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+ rm -f ${D}${libdir}/*.la
+ rm -f ${D}${sbindir}/radexample
+}
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0001-ppoe-Dont-include-linux-if_ether.h.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0001-ppoe-Dont-include-linux-if_ether.h.patch
new file mode 100644
index 000000000..7601f0d32
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0001-ppoe-Dont-include-linux-if_ether.h.patch
@@ -0,0 +1,28 @@
+From fdb64d21560bfdafeefccc7d20e105e4857faa99 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 19:20:07 -0700
+Subject: [PATCH] ppoe: Dont include linux/if_ether.h
+
+Fixes build with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/pppoe.h | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/src/pppoe.h b/src/pppoe.h
+index ec067a0..281879c 100644
+--- a/src/pppoe.h
++++ b/src/pppoe.h
+@@ -127,10 +127,6 @@ typedef unsigned long UINT32_t;
+ #error Could not find a 32-bit integer type
+ #endif
+
+-#ifdef HAVE_LINUX_IF_ETHER_H
+-#include <linux/if_ether.h>
+-#endif
+-
+ #include <netinet/in.h>
+
+ #ifdef HAVE_NETINET_IF_ETHER_H
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0002-Enable-support-for-the-kernel-module.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0002-Enable-support-for-the-kernel-module.patch
new file mode 100644
index 000000000..2103b3888
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/0002-Enable-support-for-the-kernel-module.patch
@@ -0,0 +1,23 @@
+From 31b6eecd7e5ebfb9a37915f28823e5af9d1062b4 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 28 Mar 2017 19:24:53 -0700
+Subject: [PATCH] Enable support for the kernel module
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/configure.in | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/configure.in b/src/configure.in
+index cae0976..951a042 100644
+--- a/src/configure.in
++++ b/src/configure.in
+@@ -33,6 +33,7 @@ AC_CHECK_HEADERS(linux/if_pppox.h, [], [],
+ #include<net/ethernet.h>
+ #include<linux/if.h>
+ #include<linux/in.h>
++#include<linux/in6.h>
+ ])
+
+ dnl Checks for typedefs, structures, and compiler characteristics.
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.in-Error-fix.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.in-Error-fix.patch
new file mode 100644
index 000000000..bbd516fde
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.in-Error-fix.patch
@@ -0,0 +1,57 @@
+From bdd20b7a584a20504dfabb409a41ee2b9ae41657 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Wed, 19 Aug 2015 13:52:57 +0900
+Subject: [PATCH] configure.in: Error fix.
+
+the error is: conftest.c:9:28: fatal error: ac_nonexistent.h:
+No such file or directory #include <ac_nonexistent.h>
+
+Upstream-Status: pending
+
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+
+---
+ src/configure.in | 30 ------------------------------
+ 1 file changed, 30 deletions(-)
+
+diff --git a/src/configure.in b/src/configure.in
+index 1714e69..cae0976 100644
+--- a/src/configure.in
++++ b/src/configure.in
+@@ -195,36 +195,6 @@ if test "$GCC" = yes; then
+ CFLAGS="$CFLAGS -fno-strict-aliasing -Wall -Wstrict-prototypes"
+ fi
+
+-dnl Figure out packing order of structures
+-AC_CACHE_CHECK([packing order of bit fields],rpppoe_cv_pack_bitfields,[
+-if test "${rpppoe_cv_pack_bitfields+set}" != set ; then
+-AC_TRY_RUN([
+-union foo {
+- struct bar {
+- unsigned int ver:4;
+- unsigned int type:4;
+- } bb;
+- unsigned char baz;
+-};
+-
+-int
+-main(void)
+-{
+- union foo x;
+- x.bb.ver = 1;
+- x.bb.type = 2;
+- if (x.baz == 0x21) {
+- return 1;
+- } else if (x.baz == 0x12) {
+- return 0;
+- } else {
+- return 2;
+- }
+-}], rpppoe_cv_pack_bitfields=normal, rpppoe_cv_pack_bitfields=rev,
+-$ECHO "no defaults for cross-compiling"; exit 1)
+-fi
+-])
+-
+ if test "$rpppoe_cv_pack_bitfields" = "rev" ; then
+ AC_MSG_RESULT(reversed)
+ AC_DEFINE([PACK_BITFIELDS_REVERSED], [], [Reversed bitfields])
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.patch
new file mode 100644
index 000000000..be892803e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure.patch
@@ -0,0 +1,19 @@
+From c96dda04ec024bdef2a15d374e5f8242e041cad4 Mon Sep 17 00:00:00 2001
+From: Richard Purdie <richard.purdie@linuxfoundation.org>
+Date: Fri, 18 Jul 2014 08:25:16 +0000
+
+---
+ configure.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index ac1a7e4..11b9f31 100644
+--- a/configure.in
++++ b/configure.in
+@@ -1,4 +1,4 @@
+-AC_INIT(src/pppoe.c)
+-AM_INIT_AUTOMAKE([rp-pppoe], [3.8])
++AC_INIT([rp-pppoe], [3.8])
++AM_INIT_AUTOMAKE([foreign])
+ AC_CONFIG_SUBDIRS(src)
+ AC_OUTPUT(Makefile)
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure_in_cross.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure_in_cross.patch
new file mode 100644
index 000000000..3b945934f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/configure_in_cross.patch
@@ -0,0 +1,153 @@
+From 172907f31d64da4c3f289a439fd605d2ab51b24a Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Wed, 19 Aug 2015 12:17:03 +0900
+Subject: [PATCH] configure in cross
+
+Update the configure script to cross-compiling with OE. This hard-codes
+a few target paths, reworks a few tests to be more friendly for cross
+and drops other tests.
+
+Upstream-Status: Inappropriate [build system specific changes]
+
+---
+ src/configure.in | 66 ++++++++++++++------------------------------------------
+ 1 file changed, 16 insertions(+), 50 deletions(-)
+
+diff --git a/src/configure.in b/src/configure.in
+index 90a07df..1d30243 100644
+--- a/src/configure.in
++++ b/src/configure.in
+@@ -5,6 +5,13 @@ AC_INIT(pppoe.c)
+ dnl pppd directory for kernel-mode PPPoE
+ PPPD_DIR=ppp-2.4.1.pppoe2
+
++dnl hard code some paths
++PPPD=/usr/sbin/pppd
++ID=/usr/bin/id
++ECHO=/bin/echo
++AC_ARG_VAR(PPPD)
++AC_ARG_VAR(ID)
++
+ AC_CONFIG_HEADER(config.h)
+
+ AC_PREFIX_DEFAULT(/usr)
+@@ -45,7 +52,7 @@ ac_cv_struct_sockaddr_ll=no)
+ AC_MSG_RESULT($ac_cv_struct_sockaddr_ll)
+
+ if test "$ac_cv_struct_sockaddr_ll" = yes ; then
+-AC_DEFINE(HAVE_STRUCT_SOCKADDR_LL)
++AC_DEFINE([HAVE_STRUCT_SOCKADDR_LL], [], [Have struct SOCKADDR_LL])
+ fi
+
+ dnl Check for N_HDLC line discipline
+@@ -58,7 +65,7 @@ AC_TRY_COMPILE([
+ ac_cv_n_hdlc=no)
+ AC_MSG_RESULT($ac_cv_n_hdlc)
+ if test "$ac_cv_n_hdlc" = yes ; then
+-AC_DEFINE(HAVE_N_HDLC)
++AC_DEFINE([HAVE_N_HDLC], [], [Have N_HDLC])
+ fi
+
+ AC_ARG_ENABLE(plugin, [ --enable-plugin=pppd_src_path build pppd plugin], ac_cv_pluginpath=$enableval, ac_cv_pluginpath=no)
+@@ -106,7 +113,7 @@ PPPD_INCDIR=""
+ if test "$ac_cv_header_linux_if_pppox_h" = yes ; then
+ if test "$ac_cv_pluginpath" != no ; then
+ LINUX_KERNELMODE_PLUGIN=rp-pppoe.so
+- AC_DEFINE(HAVE_LINUX_KERNEL_PPPOE)
++ AC_DEFINE([HAVE_LINUX_KERNEL_PPPOE], [], [Have kernel PPPoE])
+ PPPD_INCDIR=$ac_cv_pluginpath
+ fi
+ fi
+@@ -116,7 +123,7 @@ if test "$PPPD_INCDIR" = "" ; then
+ fi
+
+ if test "$ac_cv_debugging" = "yes" ; then
+- AC_DEFINE(DEBUGGING_ENABLED)
++ AC_DEFINE([DEBUGGING_ENABLED], [], [Debugging enabled])
+ fi
+
+ AC_SUBST(LINUX_KERNELMODE_PLUGIN)
+@@ -142,15 +149,8 @@ AC_CHECK_SIZEOF(unsigned short)
+ AC_CHECK_SIZEOF(unsigned int)
+ AC_CHECK_SIZEOF(unsigned long)
+
+-dnl Check for location of pppd
+-AC_PATH_PROG(PPPD, pppd, NOTFOUND, $PATH:/sbin:/usr/sbin:/usr/local/sbin)
+-AC_PATH_PROG(ECHO, echo, echo)
+-
+-dnl Check for setsid (probably Linux-specific)
+-AC_PATH_PROG(SETSID, setsid, "", $PATH:/sbin:/usr/sbin:/usr/local/sbin)
+-
+ dnl Check for an "id" which accepts "-u" option -- hack for Solaris.
+-AC_PATH_PROG(ID, id, "", /usr/xpg4/bin:$PATH)
++dnl AC_PATH_PROG(ID, id, "", /usr/xpg4/bin:$PATH)
+
+ dnl Check for Linux-specific kernel support for PPPoE
+ AC_MSG_CHECKING(for Linux 2.4.X kernel-mode PPPoE support)
+@@ -195,44 +195,8 @@ if test "$GCC" = yes; then
+ CFLAGS="$CFLAGS -fno-strict-aliasing -Wall -Wstrict-prototypes"
+ fi
+
+-dnl If we couldn't find pppd, die
+-if test "$PPPD" = "NOTFOUND"; then
+- AC_MSG_WARN([*** Oops! I couldn't find pppd, the PPP daemon anywhere.])
+- AC_MSG_WARN([*** You must install pppd, version 2.3.10 or later.])
+- AC_MSG_WARN([*** I will keep going, but it may not work.])
+- PPPD=pppd
+-fi
+-
+-dnl Figure out pppd version. 2.3.7 to 2.3.9 -- issue warning. Less than
+-dnl 2.3.7 -- stop
+-
+-PPPD_VERSION=`$PPPD --version 2>&1 | awk ' /version/ {print $NF}'`
+-
+-case "$PPPD_VERSION" in
+-1.*|2.0.*|2.1.*|2.2.*|2.3.0|2.3.1|2.3.2|2.3.3|2.3.4|2.3.5|2.3.6)
+- AC_MSG_WARN([*** Oops! Your version of pppd is $PPPD_VERSION, which is too old.])
+- AC_MSG_WARN([*** You need at least 2.3.7 (2.3.10 or newer recommended.])
+- AC_MSG_WARN([*** I will keep going, but it may not work.])
+- ;;
+-
+-2.3.7|2.3.8|2.3.9)
+- AC_MSG_WARN([*** Warning. Your version of pppd is $PPPD_VERSION. You will])
+- AC_MSG_WARN([*** not be able to use connect-on-demand. Upgrade to pppd])
+- AC_MSG_WARN([*** 2.3.10 or newer if you need connect-on-demand.])
+- ;;
+-
+-2*|3*|4*|5*|6*|7*|8*|9*)
+- ;;
+-
+-*)
+- AC_MSG_WARN([*** Oops. I cannot figure out what version of pppd you have.])
+- AC_MSG_WARN([*** All I got back was '$PPPD_VERSION'])
+- AC_MSG_WARN([*** I will keep going, but it may not work.])
+- ;;
+-esac
+-
+ dnl Figure out packing order of structures
+-AC_MSG_CHECKING([packing order of bit fields])
++AC_CACHE_CHECK([packing order of bit fields],rpppoe_cv_pack_bitfields,[
+ if test "${rpppoe_cv_pack_bitfields+set}" != set ; then
+ AC_TRY_RUN([
+ union foo {
+@@ -259,10 +223,11 @@ main(void)
+ }], rpppoe_cv_pack_bitfields=normal, rpppoe_cv_pack_bitfields=rev,
+ $ECHO "no defaults for cross-compiling"; exit 0)
+ fi
++])
+
+ if test "$rpppoe_cv_pack_bitfields" = "rev" ; then
+ AC_MSG_RESULT(reversed)
+- AC_DEFINE(PACK_BITFIELDS_REVERSED)
++ AC_DEFINE([PACK_BITFIELDS_REVERSED], [], [Reversed bitfields])
+ else
+ AC_MSG_RESULT(normal)
+ fi
+@@ -326,6 +291,7 @@ AC_SUBST(PPPOE_SERVER_DEPS)
+ AC_SUBST(RDYNAMIC)
+ AC_SUBST(LIBEVENT)
+ AC_SUBST(ECHO)
++AC_SUBST(HAVE_STRUCT_SOCKADDR_LL)
+ AC_SUBST(LDFLAGS)
+
+ datadir_evaluated=`eval echo $datadir`
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/discard-use-of-dnl-in-Makefile.am.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/discard-use-of-dnl-in-Makefile.am.patch
new file mode 100644
index 000000000..9801f6e27
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/discard-use-of-dnl-in-Makefile.am.patch
@@ -0,0 +1,25 @@
+From f658181c58347c3e2b0ee4f0a6a3d19162921471 Mon Sep 17 00:00:00 2001
+From: Ting Liu <b28495@freescale.com>
+Date: Tue, 12 Jun 2012 14:26:16 -0400
+Subject: [PATCH] discard use of dnl in Makefile.am
+
+Since Makefile.am is not processed by m4, but by automake, 'dnl' does
+not introduce a comment.
+
+Signed-off-by: Ting Liu <b28495@freescale.com>
+
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index eff6977..3091c33 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,5 +1,5 @@
+ PACKAGE = rp-pppoe
+ VERSION = 3.8
+
+-dnl AM_CFLAGS = -Wall -DDEBUG
++##dnl AM_CFLAGS = -Wall -DDEBUG
+ SUBDIRS = src
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/dont-swallow-errors.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/dont-swallow-errors.patch
new file mode 100644
index 000000000..8a857888b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/dont-swallow-errors.patch
@@ -0,0 +1,26 @@
+From a9a7322273c51882af58c35ba288a0fae00ba841 Mon Sep 17 00:00:00 2001
+From: Lei Maohui <leimaohui@cn.fujitsu.com>
+Date: Wed, 19 Aug 2015 12:33:41 +0900
+Subject: [PATCH] don't swallow errors
+
+Further fixup to the configure scripts to not swallow errors
+
+Upstream-Status: Pending
+
+---
+ src/configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/configure.in b/src/configure.in
+index 1d30243..1714e69 100644
+--- a/src/configure.in
++++ b/src/configure.in
+@@ -221,7 +221,7 @@ main(void)
+ return 2;
+ }
+ }], rpppoe_cv_pack_bitfields=normal, rpppoe_cv_pack_bitfields=rev,
+-$ECHO "no defaults for cross-compiling"; exit 0)
++$ECHO "no defaults for cross-compiling"; exit 1)
+ fi
+ ])
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.default b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.default
new file mode 100644
index 000000000..996d57f3c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.default
@@ -0,0 +1,22 @@
+# PPPoE Server options
+
+# Maximum segment size, not used for in kernel PPPoE
+#MSS=1412
+
+# Device(s) - Space seperated list of devices to listen on
+#DEVICES="eth1"
+
+# Local IP
+#LOCAL_IP=10.0.0.1
+
+# Starting remote IP
+#REMOTE_IP=10.67.15.1
+
+# Service name
+#SERVICE_NAME="acme"
+
+# Maximum number of sessions, default is 16
+#MAX_SESSIONS=64
+
+# Access concentrator name, default is the hostname
+#ACCESS_CONCENTRATOR_NAME="pppoe-rtr-1"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.init b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.init
new file mode 100755
index 000000000..21afe0be3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.init
@@ -0,0 +1,59 @@
+#! /bin/sh
+
+test -f /usr/sbin/pppoe-server || exit 0
+test -f /etc/default/pppoe-server && . /etc/default/pppoe-server
+
+case $1 in
+ start)
+ OPTIONS=""
+ if [ -n "$MSS" ]; then
+ OPTIONS="$OPTIONS -m $MSS"
+ fi
+ if [ -n "$DEVICES" ]; then
+ for i in $DEVICES; do
+ OPTIONS="$OPTIONS -I $i"
+ done
+ fi
+ if [ -n "$LOCAL_IP" ]; then
+ OPTIONS="$OPTIONS -L $LOCAL_IP"
+ fi
+ if [ -n "$REMOTE_IP" ]; then
+ OPTIONS="$OPTIONS -R $REMOTE_IP"
+ fi
+ if [ -n "$SERVICE_NAME" ]; then
+ OPTIONS="$OPTIONS -S $SERVICE_NAME"
+ fi
+ if [ -n "$MAX_SESSIONS" ]; then
+ OPTIONS="$OPTIONS -N $MAX_SESSIONS"
+ fi
+ if [ -n "$ACCESS_CONCENTRATOR_NAME" ]; then
+ OPTIONS="$OPTIONS -C $ACCESS_CONCENTRATOR_NAME"
+ fi
+ echo -n "Starting PPPoE server: pppoe-server"
+ start-stop-daemon --start --quiet --exec /usr/sbin/pppoe-server -- $OPTIONS
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping PPPoE server: pppoe-server"
+ start-stop-daemon --stop --quiet --exec /usr/sbin/pppoe-server -- $OPTIONS
+ echo "."
+ ;;
+ status)
+ pid=$(pidof pppoe-server)
+ if [ -n "$pid" ] ; then
+ echo "Running with pid $pid"
+ else
+ echo "Not running"
+ fi
+ ;;
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: /etc/init.d/pppoe-server {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.service b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.service
new file mode 100644
index 000000000..41e0b9e85
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-server.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=PPPOE Service
+After=network.target
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/pppoe-server
+ExecStart=@SBINDIR@/pppoe-server
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-src-restrictions.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-src-restrictions.patch
new file mode 100644
index 000000000..03697ff1f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/pppoe-src-restrictions.patch
@@ -0,0 +1,31 @@
+From a6a85ec5c85cbd3c86743b6e2fa391198869bff8 Mon Sep 17 00:00:00 2001
+From: Tom Rini <tom_rini@mentor.com>
+Date: Wed, 27 Jul 2011 03:46:52 +0000
+Subject: [PATCH] rp-pppoe: Port from oe.dev
+
+Relax restrictions on the PPPoE src address, as per debian bug
+293811:
+
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=293811
+
+Upstream-Status: Inappropriate [Backport from Debian]
+
+---
+ src/discovery.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/discovery.c b/src/discovery.c
+index 7ee259d..5213a37 100644
+--- a/src/discovery.c
++++ b/src/discovery.c
+@@ -472,8 +472,8 @@ waitForPADO(PPPoEConnection *conn, int timeout)
+ if (!packetIsForMe(conn, &packet)) continue;
+
+ if (packet.code == CODE_PADO) {
+- if (NOT_UNICAST(packet.ethHdr.h_source)) {
+- printErr("Ignoring PADO packet from non-unicast MAC address");
++ if (BROADCAST(packet.ethHdr.h_source)) {
++ printErr("Ignoring broadcast PADO packet");
+ continue;
+ }
+ #ifdef PLUGIN
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/top-autoconf.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/top-autoconf.patch
new file mode 100644
index 000000000..f64da4fa2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/top-autoconf.patch
@@ -0,0 +1,41 @@
+From 0b62f71eb5d44d4a57103566ba58022b6304fa4f Mon Sep 17 00:00:00 2001
+From: Tom Rini <tom_rini@mentor.com>
+Date: Wed, 27 Jul 2011 03:46:52 +0000
+Subject: [PATCH] rp-pppoe: Port from oe.dev
+
+The autoconf stuff is all in a subdirectory, which is rather annoying
+as OE expects patches to be applied and autoconf stuff to be done in
+S. This adds enough autoconf at the top level to allow it to be
+called there - all it does is run a sub autoconf stuff in the src
+directory.
+
+Upstream-Status: Inappropriate [build system specific change]
+
+---
+ Makefile.am | 5 +++++
+ configure.in | 4 ++++
+ 2 files changed, 9 insertions(+)
+ create mode 100644 Makefile.am
+ create mode 100644 configure.in
+
+diff --git a/Makefile.am b/Makefile.am
+new file mode 100644
+index 0000000..eff6977
+--- /dev/null
++++ b/Makefile.am
+@@ -0,0 +1,5 @@
++PACKAGE = rp-pppoe
++VERSION = 3.8
++
++dnl AM_CFLAGS = -Wall -DDEBUG
++SUBDIRS = src
+diff --git a/configure.in b/configure.in
+new file mode 100644
+index 0000000..ac1a7e4
+--- /dev/null
++++ b/configure.in
+@@ -0,0 +1,4 @@
++AC_INIT(src/pppoe.c)
++AM_INIT_AUTOMAKE([rp-pppoe], [3.8])
++AC_CONFIG_SUBDIRS(src)
++AC_OUTPUT(Makefile)
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/update-config.patch b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/update-config.patch
new file mode 100644
index 000000000..c759e09aa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe-3.12/update-config.patch
@@ -0,0 +1,41 @@
+From 4d34e0d7d790ec41b0afb731c7dc1b1ee90dd377 Mon Sep 17 00:00:00 2001
+From: Tom Rini <tom_rini@mentor.com>
+Date: Wed, 27 Jul 2011 03:46:52 +0000
+Subject: [PATCH] rp-pppoe: Port from oe.dev
+
+Set the timeout to 0 since we don't want pppoe to try reconnecting,
+we want whatever is calling it to reconnect. Lots of odd things
+happen when you have pppoe retrying itself.
+
+The path for the plugin is wrong, it's now part of ppp and is in a
+ppp's plugin lib directory. If no path is specified then that's where
+ppp looks, so that's what we do here.
+
+Upstream-Status: Inappropriate [configuration]
+
+---
+ configs/pppoe.conf | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configs/pppoe.conf b/configs/pppoe.conf
+index c222b2f..65618a5 100644
+--- a/configs/pppoe.conf
++++ b/configs/pppoe.conf
+@@ -66,7 +66,7 @@ DEFAULTROUTE=yes
+ # to connect forever after pppoe-start is called. Otherwise, it will
+ # give out after CONNECT_TIMEOUT seconds and will not attempt to
+ # connect again, making it impossible to reach.
+-CONNECT_TIMEOUT=30
++CONNECT_TIMEOUT=0
+
+ # How often in seconds pppoe-start polls to check if link is up
+ CONNECT_POLL=2
+@@ -115,7 +115,7 @@ PPPOE_TIMEOUT=80
+ FIREWALL=NONE
+
+ # Linux kernel-mode plugin for pppd. If you want to try the kernel-mode
+-# plugin, use LINUX_PLUGIN=/etc/ppp/plugins/rp-pppoe.so
++# plugin, use LINUX_PLUGIN=rp-pppoe.so
+ LINUX_PLUGIN=
+
+ # Any extra arguments to pass to pppoe. Normally, use a blank string
diff --git a/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe_3.12.bb b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe_3.12.bb
new file mode 100644
index 000000000..fbe015f5e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/rp-pppoe/rp-pppoe_3.12.bb
@@ -0,0 +1,77 @@
+SUMMARY = "A user-mode PPPoE client and server suite for Linux"
+HOMEPAGE = "http://www.roaringpenguin.com/products/pppoe"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://doc/LICENSE;md5=a194eaefae2be54ee3221339b10d0581"
+
+PR = "r10"
+
+SRC_URI = "http://www.roaringpenguin.com/files/download/${BP}.tar.gz \
+ file://top-autoconf.patch \
+ file://configure_in_cross.patch \
+ file://pppoe-src-restrictions.patch \
+ file://update-config.patch \
+ file://dont-swallow-errors.patch \
+ file://discard-use-of-dnl-in-Makefile.am.patch \
+ file://configure.patch \
+ file://pppoe-server.default \
+ file://pppoe-server.init \
+ file://configure.in-Error-fix.patch \
+ file://pppoe-server.service \
+ file://0001-ppoe-Dont-include-linux-if_ether.h.patch \
+ file://0002-Enable-support-for-the-kernel-module.patch \
+ "
+
+SRC_URI[md5sum] = "216eb52b69062b92a64ee37fd71f4b66"
+SRC_URI[sha256sum] = "00794e04031546b0e9b8cf286f2a6d1ccfc4a621b2a3abb2d7ef2a7ab7cc86c2"
+
+inherit autotools-brokensep update-rc.d systemd
+
+do_install_append() {
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/pppoe-server.service ${D}${systemd_unitdir}/system
+ sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' ${D}${systemd_unitdir}/system/pppoe-server.service
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/pppoe-server.service
+ install -d ${D}${datadir}/doc/${PN}
+ if [ -f ${D}${datadir}/doc/README ]; then
+ mv ${D}${datadir}/doc/README ${D}${datadir}/doc/${PN}/
+ fi
+}
+
+do_install() {
+ # Install init script and default settings
+ install -m 0755 -d ${D}${sysconfdir}/default ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/pppoe-server.default ${D}${sysconfdir}/default/pppoe-server
+ install -m 0755 ${WORKDIR}/pppoe-server.init ${D}${sysconfdir}/init.d/pppoe-server
+ # Install
+ oe_runmake -C ${S} DESTDIR=${D} docdir=${docdir} install
+ chmod 4755 ${D}${sbindir}/pppoe
+}
+
+SYSTEMD_PACKAGES = "${PN}-server"
+SYSTEMD_SERVICE_${PN}-server = "pppoe-server.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+# Insert server package before main package
+PACKAGES = "${PN}-dbg ${PN}-server ${PN}-relay ${PN}-sniff ${PN} ${PN}-doc"
+
+FILES_${PN}-server = "${sysconfdir}/default/pppoe-server \
+ ${sysconfdir}/init.d/pppoe-server \
+ ${sbindir}/pppoe-server \
+ ${sysconfdir}/ppp/pppoe-server-options"
+FILES_${PN}-relay = "${sbindir}/pppoe-relay"
+FILES_${PN}-sniff = "${sbindir}/pppoe-sniff"
+
+CONFFILES_${PN} = "${sysconfdir}/ppp/pppoe.conf \
+ ${sysconfdir}/ppp/firewall-standalone \
+ ${sysconfdir}/ppp/firewall-masq"
+CONFFILES_${PN}-server = "${sysconfdir}/ppp/pppoe-server-options \
+ ${sysconfdir}/default/pppoe-server"
+
+INITSCRIPT_PACKAGES = "${PN}-server"
+INITSCRIPT_NAME_${PN}-server = "pppoe-server"
+INITSCRIPT_PARAMS_${PN}-server = "defaults 92 8"
+
+RDEPENDS_${PN} = "ppp"
+RDEPENDS_${PN}-server = "${PN}"
+RRECOMMENDS_${PN} = "ppp-oe"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks/makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks/makefile-add-ldflags.patch
new file mode 100644
index 000000000..21464188c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks/makefile-add-ldflags.patch
@@ -0,0 +1,19 @@
+Add LDFLAGS variable to Makefile.in, make sure the extra linker flags can be passed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile.in b/Makefile.in
+index cad6706..0ed55c5 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -50,7 +50,7 @@ ${SAVE}: ${SAVE}.c
+ ${SHCC} ${CFLAGS} ${INCLUDES} -static -o ${SAVE} ${SAVE}.c
+
+ ${SHLIB}: ${OBJS} ${COMMON}.o ${PARSER}.o
+- ${SHCC} ${CFLAGS} ${INCLUDES} -nostdlib -shared -o ${SHLIB} ${OBJS} ${COMMON}.o ${PARSER}.o ${DYNLIB_FLAGS} ${SPECIALLIBS} ${LIBS}
++ ${SHCC} ${CFLAGS} ${LDFLAGS} ${INCLUDES} -nostdlib -shared -o ${SHLIB} ${OBJS} ${COMMON}.o ${PARSER}.o ${DYNLIB_FLAGS} ${SPECIALLIBS} ${LIBS}
+ ln -sf ${SHLIB} ${LIB_NAME}.so
+
+ %.so: %.c
diff --git a/meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks_1.8beta5.bb b/meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks_1.8beta5.bb
new file mode 100644
index 000000000..b2757f6dd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/tsocks/tsocks_1.8beta5.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Libraries and wrapper for using a SOCKS proxy"
+DESCRIPTION = "The role of tsocks is to allow non SOCKS aware \
+applications (e.g telnet, ssh, ftp etc) to use SOCKS without any \
+modification. It does this by intercepting the calls that applications \
+make to establish network connections and negotating them through a \
+SOCKS server as necessary."
+HOMEPAGE = "http://sourceforge.net/projects/tsocks/"
+SECTION = "net"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=18810669f13b87348459e611d31ab760"
+
+SRC_URI = "http://downloads.sourceforge.net/tsocks/tsocks-${PV}.tar.gz \
+ file://makefile-add-ldflags.patch \
+ "
+
+SRC_URI[md5sum] = "51caefd77e5d440d0bbd6443db4fc0f8"
+SRC_URI[sha256sum] = "849d7ef5af80d03e76cc05ed9fb8fa2bcc2b724b51ebfd1b6be11c7863f5b347"
+
+inherit autotools-brokensep
+
+S = "${WORKDIR}/tsocks-1.8"
+
+FILES_${PN} = "${libdir}/* ${bindir}/tsocks"
+FILES_${PN}-dev = ""
+INSANE_SKIP_${PN} = "dev-so"
+
+EXTRA_OEMAKE = "SHCC='${CC} -fPIC ${LDFLAGS}'"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp/0001-Use-foreign-switch-for-automake.patch b/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp/0001-Use-foreign-switch-for-automake.patch
new file mode 100644
index 000000000..b932ebbb4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp/0001-Use-foreign-switch-for-automake.patch
@@ -0,0 +1,28 @@
+From 748bc693cf24baf42e459e12f152349e392b6737 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 20 Dec 2016 21:32:11 -0800
+Subject: [PATCH] Use foreign switch for automake
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 64cc9994..19ccd4a3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -29,7 +29,7 @@ dnl SUCH DAMAGE.
+ dnl
+
+ AC_INIT([libusrsctp], [0.9.3.0])
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+
+ AC_PROG_CC
+ AC_PROG_LIBTOOL
+--
+2.11.0
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb b/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb
new file mode 100644
index 000000000..3ec746684
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/usrsctp/usrsctp_git.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "This is a userland SCTP stack supporting FreeBSD, Linux, Mac OS X and Windows."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=ffcf846341f3856d79a483eafa18e2a5"
+
+SRCREV = "dbfc1b8c4cf1a46a4d8987ba542d5ff06bdaf14c"
+SRC_URI = "git://github.com/sctplab/usrsctp;protocol=https;branch=master \
+ file://0001-Use-foreign-switch-for-automake.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+DEPENDS += "openssl"
+
+CFLAGS += "-DSCTP_USE_OPENSSL_SHA1 -fPIC"
+LDFLAGS += "-lssl -lcrypto"
+
+PACKAGECONFIG ?= "disablewarnings inet inet6"
+PACKAGECONFIG[disablewarnings] = "--disable-warnings-as-errors,,"
+PACKAGECONFIG[inet] = "--enable-inet,--disable-inet,"
+PACKAGECONFIG[inet6] = "--enable-inet6,--disable-inet6,"
+
+EXTRA_OECONF += "--disable-debug"
diff --git a/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd.inc b/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd.inc
new file mode 100644
index 000000000..d037c7cfc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd.inc
@@ -0,0 +1,41 @@
+SUMMARY = "Xelerance version of the Layer 2 Tunneling Protocol (L2TP) daemon"
+HOMEPAGE = "http://www.xelerance.com/software/xl2tpd/"
+SECTION = "net"
+DEPENDS = "ppp virtual/kernel"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "git://github.com/xelerance/xl2tpd.git \
+"
+
+S = "${WORKDIR}/git"
+
+inherit update-rc.d
+
+do_compile () {
+ oe_runmake CFLAGS="${CFLAGS} -DLINUX" LDFLAGS="${LDFLAGS}" PREFIX="${prefix}" KERNELSRC=${STAGING_KERNEL_DIR} all
+}
+
+do_install () {
+ oe_runmake PREFIX="${D}${prefix}" install
+
+ install -d ${D}${sysconfdir}/init.d
+ touch ${D}${sysconfdir}/xl2tpd.conf
+ install -m 0755 debian/xl2tpd.init ${D}${sysconfdir}/init.d/xl2tpd
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/xl2tpd
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/xl2tpd
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/xl2tpd
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}${sysconfdir}/init.d/xl2tpd
+
+ install -d ${D}${sysconfdir}/default
+ install -m 0644 debian/xl2tpd.default ${D}${sysconfdir}/default/xl2tpd
+}
+
+CONFFILES_${PN} += "${sysconfdir}/xl2tpd.conf ${sysconfdir}/default/xl2tpd"
+
+INITSCRIPT_PACKAGES = "${PN}"
+INITSCRIPT_NAME_${PN} = "xl2tpd"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_1.3.6.bb b/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_1.3.6.bb
new file mode 100644
index 000000000..df2ec52c6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_1.3.6.bb
@@ -0,0 +1,7 @@
+require xl2tpd.inc
+
+# The SRCREV corresponds to v1.3.6.
+# Adding tag=v1.3.6 to the SRC_URI will force access to the upstream repo.
+#
+SRCREV = "5619e1771048e74b729804e8602f409af0f3faea"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_git.bb b/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_git.bb
new file mode 100644
index 000000000..88ae5d6f8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/xl2tpd/xl2tpd_git.bb
@@ -0,0 +1,8 @@
+require xl2tpd.inc
+
+# This is v1.3.6 plus some commits. There is no tag for this commit.
+#
+PV = "1.3.9+git${SRCPV}"
+
+SRCREV = "f114c10ac532051badeca0132b144a2f1596f047"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/0001-zeroconf-Rename-arp_op-to-avoid-namespace-conflicts-.patch b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/0001-zeroconf-Rename-arp_op-to-avoid-namespace-conflicts-.patch
new file mode 100644
index 000000000..b4d6d94b0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/0001-zeroconf-Rename-arp_op-to-avoid-namespace-conflicts-.patch
@@ -0,0 +1,69 @@
+From 549773fdaf1fb003b84f25df386a07d299cdeb3e Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 18 Jul 2017 21:25:33 -0700
+Subject: [PATCH] zeroconf: Rename arp_op to avoid namespace conflicts with C
+ library
+
+on musl e.g. we get
+In file included from /mnt/a/oe/build/tmp/work/corei7-64-bec-linux-musl/zeroconf/0.9-r1/recipe-sysroot/usr/include/net/ethernet.h:10:0,
+
+This is because in musl arp_op is a define which is included
+and causes the conflict
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ zeroconf.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/zeroconf.c b/zeroconf.c
+index 812d34b..f27e907 100644
+--- a/zeroconf.c
++++ b/zeroconf.c
+@@ -14,8 +14,6 @@
+
+ #include <sys/types.h>
+ #include <sys/socket.h>
+-#include <linux/rtnetlink.h>
+-#include <linux/if.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -34,6 +32,8 @@
+ #include <sys/time.h>
+ #include <signal.h>
+ #include <limits.h>
++#include <linux/rtnetlink.h>
++#include <linux/if.h>
+
+ #include "delay.h"
+
+@@ -108,7 +108,7 @@ int arp_conflict(struct intf *intf, struct arp_packet *pkt);
+ void arp_packet_dump(struct arp_packet *pkt);
+ void arp_packet_send(int as,
+ struct intf *intf,
+- short int arp_op,
++ short int arpop,
+ int null_sender);
+ void arp_probe(int as, struct intf *intf);
+ void arp_claim(int as, struct intf *intf);
+@@ -1591,7 +1591,7 @@ int arp_conflict(struct intf *intf, struct arp_packet *pkt)
+
+ void arp_packet_send(int as,
+ struct intf *intf,
+- short int arp_op,
++ short int arpop,
+ int null_sender)
+ {
+
+@@ -1605,7 +1605,7 @@ void arp_packet_send(int as,
+ ap.arp.ar_pro = htons(ARP_IP_PROTO);
+ ap.arp.ar_hln = ETH_ALEN;
+ ap.arp.ar_pln = 4; /* octets in IPv4 address */
+- ap.arp.ar_op = htons(arp_op);
++ ap.arp.ar_op = htons(arpop);
+
+ /* filling with 0xff sets the destination to
+ * the broadcast link-layer address for free
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/compilefix.patch b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/compilefix.patch
new file mode 100644
index 000000000..328e574a9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/compilefix.patch
@@ -0,0 +1,19 @@
+| zeroconf.c: In function 'main':
+| zeroconf.c:145: error: 'PATH_MAX' undeclared (first use in this function)
+
+RP - 4/9/09
+
+Upstream-Status: Pending
+
+Index: zeroconf-0.9/zeroconf.c
+===================================================================
+--- zeroconf-0.9.orig/zeroconf.c 2009-09-04 10:05:25.000000000 +0100
++++ zeroconf-0.9/zeroconf.c 2009-09-04 10:05:42.000000000 +0100
+@@ -33,6 +33,7 @@
+ #include <net/if_arp.h>
+ #include <sys/time.h>
+ #include <signal.h>
++#include <limits.h>
+
+ #include "delay.h"
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/debian-zeroconf b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/debian-zeroconf
new file mode 100644
index 000000000..0c9d15ba1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/debian-zeroconf
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+if [ ! -x /usr/sbin/zeroconf ]; then
+ exit 0
+fi
+
+# IPv4 link-local addresses (zeroconf) are
+# only applicable on the 'inet' address family
+[ "X$ADDRFAM" != "Xinet" ] && exit 0
+
+# However there are some methods where it doesn't
+# make any sense to configure an IPv4LL address
+
+# not on loopback
+[ "X$METHOD" = "Xloopback" ] && exit 0
+
+# not on ppp or wvdial either
+[ "X$METHOD" = "Xppp" ] && exit 0
+[ "X$METHOD" = "Xwvdial" ] && exit 0
+
+# The administrator may have blacklisted interfaces
+# or only want zeroconf in a fallback situation
+[ -f /etc/default/zeroconf ] &&
+ . /etc/default/zeroconf
+
+[ -n "$DISABLE" ] && exit 0
+
+for BLACK in $IFBLACKLIST; do
+ case $IFACE in
+ $BLACK)
+ exit 0
+ ;;
+ esac
+done
+
+# should we only allocate an address if we do not already have one?
+if [ -n "$FALLBACK" ]; then
+ /sbin/ip addr show $IFACE scope global | grep -q "inet"
+ IP=$?
+ if [ $IP -eq 0 ]; then
+ /sbin/ip route add 169.254.0.0/16 dev $IFACE
+ exit 0
+ fi
+fi
+
+# otherwise, run if we aren't already going
+if [ ! -r /var/run/zeroconf.$IFACE.pid ]; then
+ /usr/sbin/zeroconf -i $IFACE
+fi
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/makefile-add-ldflags.patch
new file mode 100644
index 000000000..c5a4414db
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/makefile-add-ldflags.patch
@@ -0,0 +1,19 @@
+Add LDFLAGS variable to Makefile, make sure the extra linker flags can be passed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index 77f3364..c98083f 100644
+--- a/Makefile
++++ b/Makefile
+@@ -18,7 +18,7 @@ clean:
+
+ zeroconf: zeroconf.o delay.o
+ $(Q)echo "Creating $@"
+- $(Q)$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
++ $(Q)$(CC) $(CFLAGS) ${LDFLAGS} -o $@ $^ $(LIBS)
+
+
+ # Automatic dependency generation
diff --git a/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/zeroconf-default b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/zeroconf-default
new file mode 100644
index 000000000..cc07b275f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf/zeroconf-default
@@ -0,0 +1,17 @@
+# Default for zeroconf
+
+# disable zeroconf
+# If you want to disable zeroconf completely, uncomment the following line
+# this may be useful if you are debugging zeroconf or starting it manually
+#DISABLE=yes
+
+# black-listed interfaces
+# Interfaces which you never wish to have zeroconf run on should
+# be listed here. e.g. "eth2 wlan1" in a space seperated string
+IFBLACKLIST=""
+
+# fallback only
+# If you would only like a link-local address if you were unable to
+# obtain an address via DHCP then uncomment the following line
+#FALLBACK=yes
+
diff --git a/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf_0.9.bb b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf_0.9.bb
new file mode 100644
index 000000000..753d83298
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-protocols/zeroconf/zeroconf_0.9.bb
@@ -0,0 +1,37 @@
+SUMMARY = "IPv4 link-local address allocator"
+DESCRIPTION = "Zeroconf is a program that is used to claim IPv4 \
+link-local addresses. IPv4 link-local addresses are useful when setting \
+up ad-hoc networking between devices without the involvement of a either \
+a DHCP server or network administrator. \
+These addresses are allocated from the 169.254.0.0/16 address range and \
+are normally attached to each Ethernet device in your computer. \
+Addresses are assigned randomly by each host and, in case of collision, \
+both hosts (are supposed to) renumber."
+AUTHOR = "Anand Kumria <wildfire@progsoc.uts.edu.au>"
+HOMEPAGE = "http://www.progsoc.org/~wildfire/zeroconf/"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4 \
+ file://zeroconf.c;beginline=1;endline=13;md5=a5bada96e1e34b08eb7446b28e2630b2"
+SECTION = "net"
+
+PR = "r1"
+
+SRC_URI = "http://www.progsoc.org/~wildfire/zeroconf/download/${BPN}-${PV}.tar.gz \
+ file://compilefix.patch \
+ file://makefile-add-ldflags.patch \
+ file://zeroconf-default \
+ file://debian-zeroconf \
+ file://0001-zeroconf-Rename-arp_op-to-avoid-namespace-conflicts-.patch \
+ "
+
+SRC_URI[md5sum] = "bdafb16b008ebb5633e4e581f77821d2"
+SRC_URI[sha256sum] = "a8c74df127753e2310fa1e072f3c9ca44a404bb0bbce9cfec7a84c6dff8bec7b"
+
+do_install () {
+ install -d ${D}${sbindir}
+ install -d ${D}${sysconfdir}/network/if-up.d
+ install -d ${D}${sysconfdir}/default
+ install -c -m 755 ${S}/zeroconf ${D}${sbindir}/zeroconf
+ install -c -m 755 ${WORKDIR}/debian-zeroconf ${D}${sysconfdir}/network/if-up.d/zeroconf
+ install -c ${WORKDIR}/zeroconf-default ${D}${sysconfdir}/default/zeroconf
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/aoe-stat-no-bashism.patch b/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/aoe-stat-no-bashism.patch
new file mode 100644
index 000000000..ec89b7a53
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/aoe-stat-no-bashism.patch
@@ -0,0 +1,27 @@
+From 38c97e590fde19213f6ba31e72d1c227db869427 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Sun, 31 Aug 2014 22:28:38 -0700
+Subject: [PATCH] aoe-stat.in: no bashism
+
+The checkbashisms shows there is no bashism, so use /bin/sh.
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ aoe-stat.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/aoe-stat.in b/aoe-stat.in
+index 50e6ac6..0c1d6f5 100755
+--- a/aoe-stat.in
++++ b/aoe-stat.in
+@@ -1,4 +1,4 @@
+-#! /bin/bash
++#! /bin/sh
+ # aoe-stat - collate and present information about AoE storage
+ # Copyright 2012, CORAID, Inc., and licensed under GPL v.2.
+
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/makefile-add-ldflags.patch
new file mode 100644
index 000000000..726d8c564
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools/makefile-add-ldflags.patch
@@ -0,0 +1,31 @@
+Add LDFLAGS variable to Makefile, make sure the extra linker flags can be passed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index 0c56ade..79f2e2b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -68,17 +68,17 @@ clean :
+ rm -f ${CONF_SCRIPTS} ${AOE_PING_OBJ} ${AOE_CFG_OBJ} ${SANCHECK_OBJ} ${PROGS}
+
+ aoeping : ${AOE_PING_OBJ}
+- ${CC} ${CFLAGS} -o $@ ${AOE_PING_OBJ}
++ ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${AOE_PING_OBJ}
+ aoeping.o : aoeping.c dat.h fns.h
+ ${CC} ${CFLAGS} -o $@ -c $<
+ linux.o : linux.c config.h
+ ${CC} ${CFLAGS} -o $@ -c $<
+ aoecfg: ${AOE_CFG_OBJ}
+- ${CC} ${CFLAGS} -o $@ ${AOE_CFG_OBJ}
++ ${CC} ${CFLAGS} ${LDFLAGS} -o $@ ${AOE_CFG_OBJ}
+ aoecfg.o : aoecfg.c dat.h fns.h
+ ${CC} ${CFLAGS} -o $@ -c $<
+ aoe-sancheck : ${SANCHECK_OBJ}
+- -$(CC) $(CFLAGS) -o $@ ${SANCHECK_OBJ} $(SANCHECKLIBS)
++ -$(CC) $(CFLAGS) ${LDFLAGS} -o $@ ${SANCHECK_OBJ} $(SANCHECKLIBS)
+ aoe-sancheck.o : aoe-sancheck.c
+ -$(CC) $(CFLAGS) -o $@ -c $<
+
diff --git a/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools_36.bb b/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools_36.bb
new file mode 100644
index 000000000..9b73b442a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/aoetools/aoetools_36.bb
@@ -0,0 +1,26 @@
+SUMMARY = "ATA over Ethernet Tools"
+DESCRIPTION = " \
+The aoetools are programs for users of the ATA over Ethernet (AoE)network \
+storage protocol, a simple protocol for using storage over anethernet LAN. \
+The vblade program (storage target) exports a blockdevice using AoE. \
+"
+HOMEPAGE = "http://sourceforge.net/projects/${BPN}"
+SECTION = "admin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+RRECOMMENDS_${PN} = "kernel-module-aoe"
+
+SRC_URI = "http://sourceforge.net/projects/${BPN}/files/${BPN}/${BPN}-${PV}.tar.gz \
+ file://aoe-stat-no-bashism.patch \
+ file://makefile-add-ldflags.patch \
+ "
+SRC_URI[md5sum] = "bff30daa988a65f69d4448ce4726a6db"
+SRC_URI[sha256sum] = "fb5e2cd0de7644cc1ec04ee3aeb43211cf7445a0c19e13d6b3ed5a8fbdf215ff"
+
+# EXTRA_OEMAKE is typically: -e MAKEFLAGS=
+# the -e causes problems as CFLAGS is modified in the Makefile.
+EXTRA_OEMAKE = ""
+
+do_install() {
+ oe_runmake DESTDIR=${D} install
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/arptables/arptables/0001-Use-ARPCFLAGS-for-package-specific-compiler-flags.patch b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/0001-Use-ARPCFLAGS-for-package-specific-compiler-flags.patch
new file mode 100644
index 000000000..e8be45e6b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/0001-Use-ARPCFLAGS-for-package-specific-compiler-flags.patch
@@ -0,0 +1,79 @@
+From a2021f0bc0f029dfa05dcca5db3d2ec77904d41a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 30 Mar 2017 12:33:51 -0700
+Subject: [PATCH] Use ARPCFLAGS for package specific compiler flags
+
+This leaves room for setting CFLAGS in environment
+which OE uses to pass tweaks
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 15 +++++++--------
+ extensions/Makefile | 5 ++++-
+ 2 files changed, 11 insertions(+), 9 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 7bead0d..336db6b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -7,15 +7,13 @@ LIBDIR:=$(PREFIX)/lib
+ BINDIR:=$(PREFIX)/sbin
+ MANDIR:=$(PREFIX)/man
+ man8dir=$(MANDIR)/man8
+-INITDIR:=/etc/rc.d/init.d
++INITDIR:=/etc/init.d
+ SYSCONFIGDIR:=/etc/sysconfig
+ DESTDIR:=
+
+ MANS = arptables.8 arptables-save.8 arptables-restore.8
+
+-COPT_FLAGS:=-O2
+-CFLAGS:=$(COPT_FLAGS) -Wall -Wunused -I$(KERNEL_DIR)/include/ -Iinclude/ -DARPTABLES_VERSION=\"$(ARPTABLES_VERSION)\" #-g -DDEBUG #-pg # -DARPTC_DEBUG
+-
++ARPCFLAGS:=-Wall -Wunused -I$(KERNEL_DIR)/include/ -Iinclude/ -DARPTABLES_VERSION=\"$(ARPTABLES_VERSION)\"
+ ifndef ARPT_LIBDIR
+ ARPT_LIBDIR:=$(LIBDIR)/arptables
+ endif
+@@ -25,13 +23,13 @@ include extensions/Makefile
+ all: arptables libarptc/libarptc.a
+
+ arptables.o: arptables.c
+- $(CC) $(CFLAGS) -c -o $@ $<
++ $(CC) $(ARPCFLAGS) $(CFLAGS) -c -o $@ $<
+
+ arptables-standalone.o: arptables-standalone.c
+- $(CC) $(CFLAGS) -c -o $@ $<
++ $(CC) $(ARPCFLAGS) $(CFLAGS) -c -o $@ $<
+
+ libarptc/libarptc.o: libarptc/libarptc.c libarptc/libarptc_incl.c
+- $(CC) $(CFLAGS) -c -o $@ $<
++ $(CC) $(ARPCFLAGS) $(CFLAGS) -c -o $@ $<
+
+ libarptc/libarptc.a: libarptc/libarptc.o
+ $(AR) rcs $@ $<
+@@ -53,7 +51,8 @@ scripts: arptables-save arptables-restore arptables.sysv
+ install -m 0755 arptables-restore_ $(DESTDIR)$(BINDIR)/arptables-restore
+ cat arptables.sysv | sed 's/__EXEC_PATH__/$(tmp1)/g' | sed 's/__SYSCONFIG__/$(tmp2)/g' > arptables.sysv_
+ if [ "$(DESTDIR)" != "" ]; then mkdir -p $(DESTDIR)$(INITDIR); fi
+- if test -d $(DESTDIR)$(INITDIR); then install -m 0755 arptables.sysv_ $(DESTDIR)$(INITDIR)/arptables; fi
++ install -d $(DESTDIR)$(INITDIR)
++ install -m 0755 arptables.sysv_ $(DESTDIR)$(INITDIR)/arptables
+ rm -f arptables-save_ arptables-restore_ arptables.sysv_
+
+ .PHONY: install-man
+diff --git a/extensions/Makefile b/extensions/Makefile
+index 0189cc9..b046425 100644
+--- a/extensions/Makefile
++++ b/extensions/Makefile
+@@ -4,4 +4,7 @@ EXT_FUNC+=standard mangle CLASSIFY MARK
+ EXT_OBJS+=$(foreach T,$(EXT_FUNC), extensions/arpt_$(T).o)
+
+ extensions/ebt_%.o: extensions/arpt_%.c include/arptables.h include/arptables_common.h
+- $(CC) $(CFLAGS) $(PROGSPECS) -c -o $@ $<
++ $(CC) $(CFLAGS) $(ARPCFLAGS) $(PROGSPECS) -c -o $@ $<
++
++extensions/arpt_%.o: extensions/arpt_%.c include/arptables.h include/arptables_common.h
++ $(CC) $(CFLAGS) $(ARPCFLAGS) $(PROGSPECS) -c -o $@ $<
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-arpt-get-target-fix.patch b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-arpt-get-target-fix.patch
new file mode 100644
index 000000000..0875344fe
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-arpt-get-target-fix.patch
@@ -0,0 +1,30 @@
+arptables: fix the redefinition of 'arpt_get_target'
+
+Upstream-Status: Pending
+
+This function is already defined as a static inline function in
+include/linux/netfilter_arp/arp_tables.h, once GCC uses -O0, the
+inline will not work, and the redefinition error will happen
+
+Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+
+diff --git a/libarptc/libarptc_incl.c b/libarptc/libarptc_incl.c
+index 35736db..addd3f9 100644
+--- a/libarptc/libarptc_incl.c
++++ b/libarptc/libarptc_incl.c
+@@ -11,14 +11,6 @@
+ /* (C)1999 Paul ``Rusty'' Russell - Placed under the GNU GPL (See
+ COPYING for details). */
+
+-#ifndef __OPTIMIZE__
+-STRUCT_ENTRY_TARGET *
+-GET_TARGET(STRUCT_ENTRY *e)
+-{
+- return (void *)e + e->target_offset;
+-}
+-#endif
+-
+ static int sockfd = -1;
+ static void *arptc_fn = NULL;
+
diff --git a/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-init-busybox.patch b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-init-busybox.patch
new file mode 100644
index 000000000..24956c4ca
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-init-busybox.patch
@@ -0,0 +1,77 @@
+Index: arptables-v0.0.3-4/arptables.sysv
+===================================================================
+--- arptables-v0.0.3-4.orig/arptables.sysv 2010-03-22 16:28:03.000000000 +0300
++++ arptables-v0.0.3-4/arptables.sysv 2010-03-22 16:27:51.000000000 +0300
+@@ -12,10 +12,10 @@
+ # config: __SYSCONFIG__/arptables
+
+ source /etc/init.d/functions
+-source /etc/sysconfig/network
++# source /etc/sysconfig/network
+
+ # Check that networking is up.
+-[ ${NETWORKING} = "no" ] && exit 0
++# [ ${NETWORKING} = "no" ] && exit 0
+
+ [ -x __EXEC_PATH__/arptables ] || exit 1
+ [ -x __EXEC_PATH__/arptables-save ] || exit 1
+@@ -28,32 +28,30 @@
+ desc="Arp filtering"
+
+ start() {
+- echo -n $"Starting $desc ($prog): "
++ echo -n "Starting $desc ($prog): "
+ __EXEC_PATH__/arptables-restore < __SYSCONFIG__/arptables || RETVAL=1
+
+ if [ $RETVAL -eq 0 ]; then
+- success "$prog startup"
+- rm -f /var/lock/subsys/$prog
++ echo "$prog ok"
++ touch /var/lock/subsys/$prog
+ else
+- failure "$prog startup"
++ echo "$prog failed"
+ fi
+
+- echo
+ return $RETVAL
+ }
+
+ stop() {
+- echo -n $"Stopping $desc ($prog): "
++ echo -n "Stopping $desc ($prog): "
+ __EXEC_PATH__/arptables-restore < /dev/null || RETVAL=1
+
+ if [ $RETVAL -eq 0 ]; then
+- success "$prog shutdown"
+- rm -f %{_localstatedir}/lock/subsys/$prog
++ echo "$prog stopped"
++ rm -f /var/lock/subsys/$prog
+ else
+- failure "$prog shutdown"
++ echo "$prog failed to stop"
+ fi
+
+- echo
+ return $RETVAL
+ }
+
+@@ -63,15 +61,14 @@
+ }
+
+ save() {
+- echo -n $"Saving $desc ($prog): "
++ echo -n "Saving $desc ($prog): "
+ __EXEC_PATH__/arptables-save > __SYSCONFIG__/arptables || RETVAL=1
+
+ if [ $RETVAL -eq 0 ]; then
+- success "$prog saved"
++ echo "$prog saved"
+ else
+- failure "$prog saved"
++ echo "$prog is not saved"
+ fi
+- echo
+ }
+
+ case "$1" in
diff --git a/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-remove-bashism.patch b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-remove-bashism.patch
new file mode 100644
index 000000000..f332658bc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables-remove-bashism.patch
@@ -0,0 +1,37 @@
+From cd312bc0e3686404428878d23b8888cba09a20e1 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Thu, 18 Sep 2014 19:46:58 -0700
+Subject: [PATCH] arptables.sysv: remove bashism
+
+Use "." to replace of "source", and change /bin/bash to /bin/sh, the
+echo $"foo" works well in busybox.
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ arptables.sysv | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/arptables.sysv b/arptables.sysv
+index 7a90bd2..7710376 100644
+--- a/arptables.sysv
++++ b/arptables.sysv
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # init script for arptables
+ #
+@@ -11,7 +11,7 @@
+ #
+ # config: __SYSCONFIG__/arptables
+
+-source /etc/init.d/functions
++. /etc/init.d/functions
+ # source /etc/sysconfig/network
+
+ # Check that networking is up.
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables.service b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables.service
new file mode 100644
index 000000000..f9fd56df0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/arptables/arptables/arptables.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Arp filtering arptables
+After=network.target
+Requires=network.target
+
+[Service]
+Type=oneshot
+ExecStartPre=/bin/sh -c "mkdir -p /etc/sysconfig; if [ ! -f /etc/sysconfig/arptables ]; then /usr/sbin/arptables-save > /etc/sysconfig/arptables; fi"
+ExecStart=/bin/sh -c "/usr/sbin/arptables-restore < /etc/sysconfig/arptables"
+ExecStartPost=/bin/sh -c "touch /var/lock/subsys/arptables"
+RemainAfterExit=yes
+ExecStop=/bin/sh -c "/usr/sbin/arptables-restore < /dev/null"
+ExecStopPost=/bin/sh -c "rm -f /var/lock/subsys/arptables"
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/arptables/arptables_git.bb b/meta-openembedded/meta-networking/recipes-support/arptables/arptables_git.bb
new file mode 100644
index 000000000..cec1d1f77
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/arptables/arptables_git.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Administration tool for arp packet filtering"
+SECTION = "net"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+SRCREV = "f4ab8f63f11a72f14687a6646d04ae1bae3fa45f"
+PV = "0.0.4+git${SRCPV}"
+
+SRC_URI = " \
+ git://git.netfilter.org/arptables \
+ file://0001-Use-ARPCFLAGS-for-package-specific-compiler-flags.patch \
+ file://arptables-init-busybox.patch \
+ file://arptables-arpt-get-target-fix.patch \
+ file://arptables-remove-bashism.patch \
+ file://arptables.service \
+"
+SRC_URI[arptables.md5sum] = "1d4ab05761f063b0751645d8f2b8f8e5"
+SRC_URI[arptables.sha256sum] = "e529fd465c67d69ad335299a043516e6b38cdcd337a5ed21718413e96073f928"
+
+S = "${WORKDIR}/git"
+SYSTEMD_SERVICE_${PN} = "arptables.service"
+
+inherit systemd
+
+EXTRA_OEMAKE = "'BINDIR=${sbindir}' 'MANDIR=${mandir}'"
+
+do_install() {
+ oe_runmake install DESTDIR=${D}
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/arptables.service ${D}${systemd_unitdir}/system
+ fi
+}
+
+RDEPENDS_${PN} += "perl"
+
+# the install target is not multi-job safe, but it doesn't do much
+# so we just install serially
+#
+PARALLEL_MAKEINST = "-j1"
diff --git a/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0005-build-don-t-ignore-CFLAGS-from-environment.patch b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0005-build-don-t-ignore-CFLAGS-from-environment.patch
new file mode 100644
index 000000000..0a72c6b2c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0005-build-don-t-ignore-CFLAGS-from-environment.patch
@@ -0,0 +1,40 @@
+From 9d63838d12c772dfe33371e2bb8b8191625539f2 Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Mon, 30 Oct 2017 13:37:48 -0400
+Subject: [PATCH] build: don't ignore CFLAGS from environment
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We need to take them into account so as to behave nicely towards
+build environments which expect to be able to set them, e.g. for
+optimisation flags, or debug options.
+
+Therefore they need to be added to the compiler command line of
+every source file, and in addition, the same CFLAGS that were
+used during compilation must also always be used during linking!
+
+Upstream-Status: Pending
+
+Signed-off-by: André Draszik <git@andred.net>
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ brctl/Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/brctl/Makefile.in b/brctl/Makefile.in
+index e1956d6..eff260c 100644
+--- a/brctl/Makefile.in
++++ b/brctl/Makefile.in
+@@ -34,7 +34,7 @@ install: $(PROGRAMS)
+ $(INSTALL) -m 755 $(PROGRAMS) $(DESTDIR)$(sbindir)
+
+ brctl: $(brctl_OBJECTS) ../libbridge/libbridge.a
+- $(CC) $(LDFLAGS) $(brctl_OBJECTS) $(LIBS) -o brctl
++ $(CC) $(CFLAGS) $(LDFLAGS) $(brctl_OBJECTS) $(LIBS) -o brctl
+
+ %.o: %.c brctl.h
+ $(CC) $(CFLAGS) $(INCLUDE) -c $<
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0006-libbridge-Modifying-the-AR-to-cross-toolchain.patch b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0006-libbridge-Modifying-the-AR-to-cross-toolchain.patch
new file mode 100644
index 000000000..3f65761f5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/0006-libbridge-Modifying-the-AR-to-cross-toolchain.patch
@@ -0,0 +1,51 @@
+From c924f66743c054d7ebafef90ca1bbebc96732357 Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Mon, 30 Oct 2017 13:48:33 -0400
+Subject: [PATCH] libbridge: Modifying the AR to cross toolchain
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The Makefile uses the host “ar” tool when it should be using the ar from
+the target toolchain.
+
+Upstream-Status: Pending
+
+Signed-off-by: Li Zhou <li.zhou@windriver.com>
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ configure.ac | 1 +
+ libbridge/Makefile.in | 2 +-
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 8b2e2ea..8426b7c 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -12,6 +12,10 @@ dnl Checks for programs.
+ AC_PROG_CC
+ 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
+
+ dnl Checks for header files.
+ AC_HEADER_STDC
+diff --git a/libbridge/Makefile.in b/libbridge/Makefile.in
+index 7932bfe..bd55e9b 100644
+--- a/libbridge/Makefile.in
++++ b/libbridge/Makefile.in
+@@ -1,7 +1,7 @@
+
+ KERNEL_HEADERS=-I@KERNEL_HEADERS@
+
+-AR=ar
++AR=@AR@
+ RANLIB=@RANLIB@
+
+ CC=@CC@
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/kernel-headers.patch b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/kernel-headers.patch
new file mode 100644
index 000000000..8a23a3070
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils/kernel-headers.patch
@@ -0,0 +1,33 @@
+From 824f838cc9c7b8a44174358446993d61be7bbb3f Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Mon, 30 Oct 2017 13:18:20 -0400
+Subject: [PATCH] include missing kernel header
+
+Fixes errors like
+
+| /b/kraj/jlinux-next/poky/build/tmp-eglibc/sysroots/re-64b/usr/include/linux/if_bridge.h:172:20: error: field 'ip6' has incomplete type
+| In file included from ../libbridge/libbridge.h:24:0,
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ libbridge/libbridge.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/libbridge/libbridge.h b/libbridge/libbridge.h
+index c038b92..fd09306 100644
+--- a/libbridge/libbridge.h
++++ b/libbridge/libbridge.h
+@@ -24,6 +24,7 @@
+ #include <sys/time.h>
+ #include <netinet/in.h>
+
++#include <linux/in6.h>
+ #include <linux/if.h>
+ #include <linux/if_bridge.h>
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils_1.6.bb b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils_1.6.bb
new file mode 100644
index 000000000..1c87c48bf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/bridge-utils/bridge-utils_1.6.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Tools for ethernet bridging"
+HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/networking/bridge"
+SECTION = "net"
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=f9d20a453221a1b7e32ae84694da2c37"
+
+SRCREV = "42c1aefc303fdf891fbb099ea51f00dca83ab606"
+
+SRC_URI = "\
+ git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/bridge-utils.git \
+ file://kernel-headers.patch \
+ file://0005-build-don-t-ignore-CFLAGS-from-environment.patch \
+ file://0006-libbridge-Modifying-the-AR-to-cross-toolchain.patch \
+"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "sysfsutils"
+
+inherit autotools-brokensep update-alternatives
+
+ALTERNATIVE_${PN} = "brctl"
+ALTERNATIVE_PRIORITY[brctl] = "100"
+ALTERNATIVE_LINK_NAME[brctl] = "${sbindir}/brctl"
+
+EXTRA_OECONF = "--with-linux-headers=${STAGING_INCDIR}"
+
+do_install_append () {
+ install -d ${D}/${datadir}/bridge-utils
+ install -d ${D}/${sysconfdir}/network/if-pre-up.d
+ install -d ${D}/${sysconfdir}/network/if-post-down.d
+}
+
+RRECOMMENDS_${PN} = "kernel-module-bridge"
diff --git a/meta-openembedded/meta-networking/recipes-support/c-ares/c-ares/cmake-install-libcares.pc.patch b/meta-openembedded/meta-networking/recipes-support/c-ares/c-ares/cmake-install-libcares.pc.patch
new file mode 100644
index 000000000..5dd4c7d77
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/c-ares/c-ares/cmake-install-libcares.pc.patch
@@ -0,0 +1,105 @@
+From 7e1ae687916fd5878ee755afbdea6b10494e0b92 Mon Sep 17 00:00:00 2001
+From: Alexey Firago <alexey_firago@mentor.com>
+Date: Wed, 26 Jul 2017 23:21:25 +0300
+Subject: [PATCH] cmake: Install libcares.pc
+
+Prepare and install libcares.pc file during cmake build, so libraries
+using pkg-config to find libcares will not fail.
+
+Signed-off-by: Alexey Firago <alexey_firago@mentor.com>
+---
+ CMakeLists.txt | 21 +++++++++++++++++++++
+ libcares.pc.cmakein | 20 ++++++++++++++++++++
+ 2 files changed, 41 insertions(+)
+ create mode 100644 libcares.pc.cmakein
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 364b6c7..0016b67 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -173,21 +173,29 @@ ADD_DEFINITIONS(${SYSFLAGS})
+
+
+ # Tell C-Ares about libraries to depend on
++# Also pass these libraries to pkg-config file
++SET(CARES_PRIVATE_LIBS_LIST)
+ IF (HAVE_LIBRESOLV)
+ LIST (APPEND CARES_DEPENDENT_LIBS resolv)
++ LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lresolv")
+ ENDIF ()
+ IF (HAVE_LIBNSL)
+ LIST (APPEND CARES_DEPENDENT_LIBS nsl)
++ LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lnsl")
+ ENDIF ()
+ IF (HAVE_LIBSOCKET)
+ LIST (APPEND CARES_DEPENDENT_LIBS socket)
++ LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lsocket")
+ ENDIF ()
+ IF (HAVE_LIBRT)
+ LIST (APPEND CARES_DEPENDENT_LIBS rt)
++ LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lrt")
+ ENDIF ()
+ IF (WIN32)
+ LIST (APPEND CARES_DEPENDENT_LIBS ws2_32)
++ LIST (APPEND CARES_PRIVATE_LIBS_LIST "-lws2_32")
+ ENDIF ()
++string (REPLACE ";" " " CARES_PRIVATE_LIBS "${CARES_PRIVATE_LIBS_LIST}")
+
+
+ # When checking for symbols, we need to make sure we set the proper
+@@ -489,6 +497,13 @@ CONFIGURE_FILE (ares_build.h.cmake ${PROJECT_BINARY_DIR}/ares_build.h)
+ # Write ares_config.h configuration file. This is used only for the build.
+ CONFIGURE_FILE (ares_config.h.cmake ${PROJECT_BINARY_DIR}/ares_config.h)
+
++# Pass required CFLAGS to pkg-config in case of static library
++IF (CARES_STATIC)
++ SET (CPPFLAG_CARES_STATICLIB "-DCARES_STATICLIB")
++ENDIF()
++
++# Write ares_config.h configuration file. This is used only for the build.
++CONFIGURE_FILE (libcares.pc.cmakein ${PROJECT_BINARY_DIR}/libcares.pc @ONLY)
+
+ # TRANSFORM_MAKEFILE_INC
+ #
+@@ -625,6 +640,12 @@ IF (CARES_INSTALL)
+ INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" DESTINATION ${CMAKECONFIG_INSTALL_DIR})
+ ENDIF ()
+
++# pkg-config file
++IF (CARES_INSTALL)
++ SET (PKGCONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
++ INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcares.pc" DESTINATION ${PKGCONFIG_INSTALL_DIR})
++ENDIF ()
++
+ # Legacy chain-building variables (provided for compatibility with old code).
+ # Don't use these, external code should be updated to refer to the aliases directly (e.g., Cares::cares).
+ SET (CARES_FOUND 1 CACHE INTERNAL "CARES LIBRARY FOUND")
+diff --git a/libcares.pc.cmakein b/libcares.pc.cmakein
+new file mode 100644
+index 0000000..f29fede
+--- /dev/null
++++ b/libcares.pc.cmakein
+@@ -0,0 +1,20 @@
++#***************************************************************************
++# Project ___ __ _ _ __ ___ ___
++# / __|____ / _` | '__/ _ \/ __|
++# | (_|_____| (_| | | | __/\__ \
++# \___| \__,_|_| \___||___/
++#
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=@CMAKE_INSTALL_PREFIX@
++libdir=@CMAKE_INSTALL_FULL_LIBDIR@
++includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
++
++Name: c-ares
++URL: http://daniel.haxx.se/projects/c-ares/
++Description: asynchronous DNS lookup library
++Version: @VERSION@
++Requires:
++Requires.private:
++Cflags: -I${includedir} @CPPFLAG_CARES_STATICLIB@
++Libs: -L${libdir} -lcares
++Libs.private: @CARES_PRIVATE_LIBS@
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/c-ares/c-ares_1.13.0.bb b/meta-openembedded/meta-networking/recipes-support/c-ares/c-ares_1.13.0.bb
new file mode 100644
index 000000000..70e497f5f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/c-ares/c-ares_1.13.0.bb
@@ -0,0 +1,24 @@
+# Copyright (c) 2012-2014 LG Electronics, Inc.
+SUMMARY = "c-ares is a C library that resolves names asynchronously."
+HOMEPAGE = "http://daniel.haxx.se/projects/c-ares/"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=f4b026880834eb01c035c5e5cb47ccac"
+SRCREV = "3be1924221e1326df520f8498d704a5c4c8d0cce"
+PV = "1.13.0+gitr${SRCPV}"
+
+SRC_URI = "\
+ git://github.com/c-ares/c-ares.git \
+ file://cmake-install-libcares.pc.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+PACKAGES =+ "${PN}-utils"
+
+FILES_${PN}-dev += "${libdir}/cmake"
+FILES_${PN}-utils = "${bindir}"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-networking/recipes-support/chrony/chrony/arm_eabi.patch b/meta-openembedded/meta-networking/recipes-support/chrony/chrony/arm_eabi.patch
new file mode 100644
index 000000000..92a2dbd93
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/chrony/chrony/arm_eabi.patch
@@ -0,0 +1,63 @@
+ chrony: fix build failure for arma9
+
+ Eliminate references to syscalls not available
+ for ARM_EABI. Also add a dependency on libseccomp
+ which is needed for scfilter to work.
+
+ Set PACKAGECONFIG to not enable scfilter, since
+ kernel CONFIG_SECCOMP is unlikely to be set. This
+ aligns the usage of libseccomp with that of other packages.
+
+ Upstream-Status: Pending
+
+ Signed-off-by: Joe Slater <jslater@windriver.com>
+
+ Refresh patch for new upstream version.
+
+ Signed-off-by: Robert Joslyn <robert.joslyn@redrectangle.org>
+
+--- a/sys_linux.c
++++ b/sys_linux.c
+@@ -465,14 +465,14 @@ SYS_Linux_EnableSystemCallFilter(int lev
+ const int syscalls[] = {
+ /* Clock */
+ SCMP_SYS(adjtimex), SCMP_SYS(clock_gettime), SCMP_SYS(gettimeofday),
+- SCMP_SYS(settimeofday), SCMP_SYS(time),
++ SCMP_SYS(settimeofday),
+ /* Process */
+ SCMP_SYS(clone), SCMP_SYS(exit), SCMP_SYS(exit_group), SCMP_SYS(getpid),
+- SCMP_SYS(getrlimit), SCMP_SYS(rt_sigaction), SCMP_SYS(rt_sigreturn),
++ SCMP_SYS(rt_sigaction), SCMP_SYS(rt_sigreturn),
+ SCMP_SYS(rt_sigprocmask), SCMP_SYS(set_tid_address), SCMP_SYS(sigreturn),
+ SCMP_SYS(wait4),
+ /* Memory */
+- SCMP_SYS(brk), SCMP_SYS(madvise), SCMP_SYS(mmap), SCMP_SYS(mmap2),
++ SCMP_SYS(brk), SCMP_SYS(madvise), SCMP_SYS(mmap2),
+ SCMP_SYS(mprotect), SCMP_SYS(mremap), SCMP_SYS(munmap), SCMP_SYS(shmdt),
+ /* Filesystem */
+ SCMP_SYS(access), SCMP_SYS(chmod), SCMP_SYS(chown), SCMP_SYS(chown32),
+@@ -483,14 +483,21 @@
+ SCMP_SYS(bind), SCMP_SYS(connect), SCMP_SYS(getsockname),
+ SCMP_SYS(recvfrom), SCMP_SYS(recvmmsg), SCMP_SYS(recvmsg),
+ SCMP_SYS(sendmmsg), SCMP_SYS(sendmsg), SCMP_SYS(sendto),
+- /* TODO: check socketcall arguments */
+- SCMP_SYS(socketcall),
+ /* General I/O */
+ SCMP_SYS(_newselect), SCMP_SYS(close), SCMP_SYS(open), SCMP_SYS(openat), SCMP_SYS(pipe),
+- SCMP_SYS(poll), SCMP_SYS(read), SCMP_SYS(futex), SCMP_SYS(select),
++ SCMP_SYS(poll), SCMP_SYS(read), SCMP_SYS(futex),
+ SCMP_SYS(set_robust_list), SCMP_SYS(write),
+ /* Miscellaneous */
+ SCMP_SYS(getrandom), SCMP_SYS(sysinfo), SCMP_SYS(uname),
++ /* not always available */
++#if ! defined(__ARM_EABI__)
++ SCMP_SYS(time),
++ SCMP_SYS(getrlimit),
++ SCMP_SYS(select),
++ SCMP_SYS(mmap),
++ /* TODO: check socketcall arguments */
++ SCMP_SYS(socketcall),
++#endif
+ };
+
+ const int socket_domains[] = {
diff --git a/meta-openembedded/meta-networking/recipes-support/chrony/chrony/chrony.conf b/meta-openembedded/meta-networking/recipes-support/chrony/chrony/chrony.conf
new file mode 100644
index 000000000..8d226d31a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/chrony/chrony/chrony.conf
@@ -0,0 +1,44 @@
+# Use public NTP servers from the pool.ntp.org project.
+# Please consider joining the pool project if possible by running your own
+# server(s).
+# If you are a vendor distributing a product using chrony, you *MUST*
+# read and comply with http://www.pool.ntp.org/vendors.html
+pool 0.openembedded.pool.ntp.org iburst
+
+# Use a local timeserver in preference to the pool, if it's reachable.
+#server 192.168.22.22 iburst minpoll 2 prefer
+
+# Sync to pulse-per-second from an onboard GPS.
+#refclock PPS /dev/pps0 poll 0 prefer
+# You'll want to enable CONFIG_PPS and CONFIG_PPS_CLIENT_GPIO in your kernel,
+# and an entry something like this in your device tree:
+# pps {
+# compatible = "pps-gpio";
+# gpios = <&ps7_gpio_0 56 0>;
+# };
+
+# In first three updates step the system clock instead of slew
+# if the adjustment is larger than 1 second.
+makestep 1.0 3
+
+# Record the rate at which the system clock gains/loses time,
+# improving accuracy after reboot
+driftfile /var/lib/chrony/drift
+
+# Enable kernel synchronization of the hardware real-time clock (RTC).
+rtcsync
+
+# Allow NTP client access from local network.
+#allow 192.168/16
+
+# Serve time even if not synchronized to any NTP server.
+#local stratum 10
+
+# Specify file containing keys for NTP authentication.
+#keyfile /etc/chrony.keys
+
+# Specify directory for log files.
+logdir /var/log/chrony
+
+# Select which information is logged.
+#log measurements statistics tracking
diff --git a/meta-openembedded/meta-networking/recipes-support/chrony/chrony/chronyd b/meta-openembedded/meta-networking/recipes-support/chrony/chrony/chronyd
new file mode 100644
index 000000000..04f1b681c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/chrony/chrony/chronyd
@@ -0,0 +1,58 @@
+#! /bin/sh
+
+# System V init script for chrony
+# Adapted from the script already in meta-networking for ntpd
+
+### BEGIN INIT INFO
+# Provides: chrony
+# Required-Start: $network $remote_fs $syslog
+# Required-Stop: $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: Start chrony time daemon
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin
+
+DAEMON=/usr/sbin/chronyd
+PIDFILE=/var/run/chronyd.pid
+
+test -x $DAEMON -a -r /etc/chrony.conf || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+# Functions to do individual actions
+startdaemon(){
+ echo -n "Starting chronyd: "
+ start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- "$@"
+ echo "done"
+}
+stopdaemon(){
+ echo -n "Stopping chronyd: "
+ start-stop-daemon --stop --quiet --oknodo -p $PIDFILE
+ echo "done"
+}
+
+case "$1" in
+ start)
+ startdaemon
+ ;;
+ stop)
+ stopdaemon
+ ;;
+ force-reload | restart | reload)
+ stopdaemon
+ startdaemon
+ ;;
+ status)
+ status /usr/sbin/chronyd;
+ exit $?
+ ;;
+ *)
+ echo "Usage: chronyd { start | stop | status | restart | reload }" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-support/chrony/chrony_3.2.bb b/meta-openembedded/meta-networking/recipes-support/chrony/chrony_3.2.bb
new file mode 100644
index 000000000..8b90a354e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/chrony/chrony_3.2.bb
@@ -0,0 +1,134 @@
+SUMMARY = "Versatile implementation of the Network Time Protocol"
+DESCRIPTION = "Chrony can synchronize the system clock with NTP \
+servers, reference clocks (e.g. GPS receiver), and manual input using \
+wristwatch and keyboard. It can also operate as an NTPv4 (RFC 5905) \
+server and peer to provide a time service to other computers in the \
+network. \
+\
+It is designed to perform well in a wide range of conditions, \
+including intermittent network connections, heavily congested \
+networks, changing temperatures (ordinary computer clocks are \
+sensitive to temperature), and systems that do not run continuously, or \
+run on a virtual machine. \
+\
+Typical accuracy between two machines on a LAN is in tens, or a few \
+hundreds, of microseconds; over the Internet, accuracy is typically \
+within a few milliseconds. With a good hardware reference clock \
+sub-microsecond accuracy is possible. \
+\
+Two programs are included in chrony: chronyd is a daemon that can be \
+started at boot time and chronyc is a command-line interface program \
+which can be used to monitor chronyd's performance and to change \
+various operating parameters whilst it is running. \
+\
+This recipe produces two binary packages: 'chrony' which contains chronyd, \
+the configuration file and the init script, and 'chronyc' which contains \
+the client program only."
+
+HOMEPAGE = "https://chrony.tuxfamily.org/"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "https://download.tuxfamily.org/chrony/chrony-${PV}.tar.gz \
+ file://chrony.conf \
+ file://chronyd \
+ file://arm_eabi.patch \
+"
+SRC_URI[md5sum] = "f4c4eb0dc92f35ee4bb7d3dcd8029ecb"
+SRC_URI[sha256sum] = "329f6718dd8c3ece3eee78be1f4821cbbeb62608e7d23f25da293cfa433c4116"
+
+DEPENDS = "pps-tools"
+
+# Note: Despite being built via './configure; make; make install',
+# chrony does not use GNU Autotools.
+inherit update-rc.d systemd
+
+# Configuration options:
+# - For command line editing support in chronyc, you may specify either
+# 'editline' or 'readline' but not both. editline is smaller, but
+# many systems already have readline for other purposes so you might want
+# to choose that instead. However, beware license incompatibility
+# since chrony is GPLv2 and readline versions after 6.0 are GPLv3+.
+# You can of course choose neither, but if you're that tight on space
+# consider dropping chronyc entirely (you can use it remotely with
+# appropriate chrony.conf options).
+# - Security-related:
+# - 'sechash' is omitted by default because it pulls in nss which is huge.
+# - 'privdrop' allows chronyd to run as non-root; would need changes to
+# chrony.conf and init script.
+# - 'scfilter' enables support for system call filtering, but requires the
+# kernel to have CONFIG_SECCOMP enabled.
+PACKAGECONFIG ??= "editline \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG[readline] = "--without-editline,--without-readline,readline"
+PACKAGECONFIG[editline] = ",--without-editline,libedit"
+PACKAGECONFIG[sechash] = "--without-tomcrypt,--disable-sechash,nss"
+PACKAGECONFIG[privdrop] = ",--disable-privdrop,libcap"
+PACKAGECONFIG[scfilter] = "--enable-scfilter,--without-seccomp,libseccomp"
+PACKAGECONFIG[ipv6] = ",--disable-ipv6,"
+PACKAGECONFIG[nss] = "--with-nss,--without-nss,nss"
+PACKAGECONFIG[libcap] = "--with-libcap,--without-libcap,libcap"
+
+# --disable-static isn't supported by chrony's configure script.
+DISABLE_STATIC = ""
+
+do_configure() {
+ ./configure --sysconfdir=${sysconfdir} --bindir=${bindir} --sbindir=${sbindir} \
+ --localstatedir=${localstatedir} --datarootdir=${datadir} \
+ ${PACKAGECONFIG_CONFARGS}
+}
+
+do_install() {
+ # Binaries
+ install -d ${D}${bindir}
+ install -m 0755 ${S}/chronyc ${D}${bindir}
+ install -d ${D}${sbindir}
+ install -m 0755 ${S}/chronyd ${D}${sbindir}
+
+ # Config file
+ install -d ${D}${sysconfdir}
+ install -m 644 ${WORKDIR}/chrony.conf ${D}${sysconfdir}
+
+ # System V init script
+ install -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/chronyd ${D}${sysconfdir}/init.d
+
+ # systemd unit configuration file
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${S}/examples/chronyd.service ${D}${systemd_unitdir}/system/
+
+ # Variable data (for drift and/or rtc file)
+ install -d ${D}${localstatedir}/lib/chrony
+
+ # Log files
+ install -d ${D}${localstatedir}/log/chrony
+
+ # Fix hard-coded paths in config files and init scripts
+ sed -i -e 's!/var/!${localstatedir}/!g' -e 's!/etc/!${sysconfdir}/!g' \
+ -e 's!/usr/sbin/!${sbindir}/!g' -e 's!/usr/bin/!${bindir}/!g' \
+ ${D}${sysconfdir}/chrony.conf \
+ ${D}${sysconfdir}/init.d/chronyd \
+ ${D}${systemd_unitdir}/system/chronyd.service
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}${sysconfdir}/init.d/chronyd
+ sed -i 's!^EnvironmentFile=.*!EnvironmentFile=-${sysconfdir}/default/chronyd!' ${D}${systemd_unitdir}/system/chronyd.service
+}
+
+FILES_${PN} = "${sbindir}/chronyd ${sysconfdir} ${localstatedir}"
+CONFFILES_${PN} = "${sysconfdir}/chrony.conf"
+INITSCRIPT_NAME = "chronyd"
+INITSCRIPT_PARAMS = "defaults"
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "chronyd.service"
+
+# It's probably a bad idea to run chrony and another time daemon on
+# the same system. systemd includes the SNTP client 'timesyncd', which
+# will be disabled by chronyd.service, however it will remain on the rootfs
+# wasting 150 kB unless you put 'PACKAGECONFIG_remove_pn-systemd = "timesyncd"'
+# in a conf file or bbappend somewhere.
+RCONFLICTS_${PN} = "ntp ntimed"
+
+# Separate the client program into its own package
+PACKAGES =+ "chronyc"
+FILES_chronyc = "${bindir}/chronyc"
diff --git a/meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_git.bb b/meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_git.bb
new file mode 100644
index 000000000..198e3ef98
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cifs/cifs-utils_git.bb
@@ -0,0 +1,37 @@
+DESCRIPTION = "A a package of utilities for doing and managing mounts of the Linux CIFS filesystem."
+HOMEPAGE = "http://wiki.samba.org/index.php/LinuxCIFS_utils"
+SECTION = "otherosfs"
+LICENSE = "GPLv3 & LGPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+PV = "6.7"
+
+SRCREV = "8101a07871f185c7044fa2ca221b282ab4607c8b"
+SRC_URI = "git://git.samba.org/cifs-utils.git \
+ file://0001-mount.cifs-Remove-data_blob.h-include.patch \
+ "
+
+S = "${WORKDIR}/git"
+DEPENDS += "libtalloc"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[cap] = "--with-libcap,--without-libcap,libcap"
+# when enabled, it creates ${bindir}/cifscreds and --ignore-fail-on-non-empty in do_install_append is needed
+PACKAGECONFIG[cifscreds] = "--enable-cifscreds,--disable-cifscreds,keyutils"
+# when enabled, it creates ${sbindir}/cifs.upcall and --ignore-fail-on-non-empty in do_install_append is needed
+PACKAGECONFIG[cifsupcall] = "--enable-cifsupcall,--disable-cifsupcall,krb5 libtalloc keyutils"
+PACKAGECONFIG[cifsidmap] = "--enable-cifsidmap,--disable-cifsidmap,keyutils samba"
+PACKAGECONFIG[cifsacl] = "--enable-cifsacl,--disable-cifsacl,samba"
+PACKAGECONFIG[pam] = "--enable-pam --with-pamdir=${base_libdir}/security,--disable-pam,libpam keyutils"
+
+inherit autotools pkgconfig
+
+do_install_append() {
+ # Remove empty /usr/bin and /usr/sbin directories since the mount helper
+ # is installed to /sbin
+ rmdir --ignore-fail-on-non-empty ${D}${bindir} ${D}${sbindir}
+}
+
+FILES_${PN} += "${base_libdir}/security"
+FILES_${PN}-dbg += "${base_libdir}/security/.debug"
+RRECOMMENDS_${PN} = "kernel-module-cifs"
diff --git a/meta-openembedded/meta-networking/recipes-support/cifs/files/0001-mount.cifs-Remove-data_blob.h-include.patch b/meta-openembedded/meta-networking/recipes-support/cifs/files/0001-mount.cifs-Remove-data_blob.h-include.patch
new file mode 100644
index 000000000..07f2a5726
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cifs/files/0001-mount.cifs-Remove-data_blob.h-include.patch
@@ -0,0 +1,32 @@
+Upstream-Status: Backport
+Signed-off-by: S. Lockwood-Childs <sjl@vctlabs.com>
+
+From 272d523a57a4e8791d625a479128613be5e401f5 Mon Sep 17 00:00:00 2001
+From: Thomas Witt <pyromaniac@exherbo.org>
+Date: Wed, 15 Mar 2017 20:20:44 +0000
+Subject: [PATCH] mount.cifs: Remove data_blob.h include
+
+data_blob.h includes talloc.h from libtalloc, but that is only marked as
+a dependency for cifs.upcall. No symbols from that header are used by
+cifs.mount, so remove it to avoid the libtalloc dependency
+
+Signed-off-by: Thomas Witt <pyromaniac@exherbo.org>
+---
+ mount.cifs.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/mount.cifs.c b/mount.cifs.c
+index 13b71ef..2612feb 100644
+--- a/mount.cifs.c
++++ b/mount.cifs.c
+@@ -61,7 +61,6 @@
+ #include "mount.h"
+ #include "util.h"
+ #include "resolve_host.h"
+-#include "data_blob.h"
+
+ #ifndef MS_MOVE
+ #define MS_MOVE 8192
+--
+1.9.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-docs_2.40.0.bb b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-docs_2.40.0.bb
new file mode 100644
index 000000000..31875ea50
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-docs_2.40.0.bb
@@ -0,0 +1,25 @@
+require cim-schema.inc
+
+SECTION = "doc"
+
+LICENSE = "DMTF"
+
+SRC_URI = "http://dmtf.org/sites/default/files/cim/cim_schema_v2400/cim_schema_${PV}Final-Doc.zip \
+ file://LICENSE \
+ "
+SRC_URI[md5sum] = "3d01940bc1085c6c42184c25fb61f739"
+SRC_URI[sha256sum] = "3174cf0f8657b19d80dc59e184778d8e553da424728cb2966fe9d5428dd84267"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=eecc6f71a56ff3caf17f15bf7aeac7b4"
+
+do_unpack() {
+ unzip -q ${DL_DIR}/cim_schema_${PV}Final-Doc.zip -d ${S}
+ cp -f ${FILE_DIRNAME}/files/LICENSE ${WORKDIR}/
+}
+
+do_install() {
+ install -d -m 0755 ${D}${datadir}/doc/cim-schema-${PV}-docs
+ cp -R --no-dereference --preserve=mode,links -v ${S}/* ${D}${datadir}/doc/cim-schema-${PV}-docs
+}
+
+FILES_${PN} = "${datadir}/doc/*"
+FILES_${PN}-doc = ""
diff --git a/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-exper_2.50.0.bb b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-exper_2.50.0.bb
new file mode 100644
index 000000000..90ea882b7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-exper_2.50.0.bb
@@ -0,0 +1,29 @@
+require cim-schema.inc
+
+LICENSE = "DMTF"
+
+RCONFLICTS_${PN} = "cim-schema-final"
+
+SRC_URI = "http://dmtf.org/sites/default/files/cim/cim_schema_v2500/cim_schema_${PV}Experimental-MOFs.zip;subdir=${BPN}-${PV} \
+ file://LICENSE \
+"
+SRC_URI[md5sum] = "ee4ad6441a2b65ca60a3abc53e3ec629"
+SRC_URI[sha256sum] = "a44d67881325e267ef46b72eabe0c69f90470b1033b1ce7c26d9ba99072adb50"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=eecc6f71a56ff3caf17f15bf7aeac7b4"
+
+do_install() {
+ install -d -m 0755 ${D}${datadir}/mof/cimv${PV}/
+ install -d -m 0755 ${D}${datadir}/doc/cim-schema-${PV}
+ install -m 644 ${WORKDIR}/LICENSE ${D}${datadir}/doc/cim-schema-${PV}
+
+ cp -R --no-dereference --preserve=mode,links -v ${S}/* ${D}${datadir}/mof/cimv${PV}/
+ chown -R root:root ${D}${datadir}/mof/cimv${PV}
+ for i in `find ${D}${datadir}/mof/cimv${PV} -name "*.mof"`; do
+ sed -i -e 's/\r//g' $i
+ done
+ ln -s cimv${PV} ${D}${datadir}/mof/cim-current
+ ln -s cim_schema_${PV}.mof ${D}${datadir}/mof/cim-current/CIM_Schema.mof
+}
+
+FILES_${PN} = "${datadir}/mof/* ${datadir}/doc/*"
+FILES_${PN}-doc = ""
diff --git a/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-final_2.40.0.bb b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-final_2.40.0.bb
new file mode 100644
index 000000000..a14de46db
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema-final_2.40.0.bb
@@ -0,0 +1,34 @@
+require cim-schema.inc
+
+LICENSE = "DMTF"
+
+RCONFLICTS_${PN} = "cim-schema-exper"
+
+SRC_URI = "http://dmtf.org/sites/default/files/cim/cim_schema_v2400/cim_schema_${PV}Final-MOFs.zip \
+ file://LICENSE \
+"
+SRC_URI[md5sum] = "a9bdf17c7374e3b5b7adeaac4842c4ad"
+SRC_URI[sha256sum] = "dbfa3064ea427acd71a4bebbc172ca2dc44b0b09a6d83b0945b9ffa988a9058a"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=eecc6f71a56ff3caf17f15bf7aeac7b4"
+
+do_unpack() {
+ unzip -q ${DL_DIR}/cim_schema_${PV}Final-MOFs.zip -d ${S}
+ cp -f ${FILE_DIRNAME}/files/LICENSE ${WORKDIR}/
+}
+
+do_install() {
+ install -d -m 0755 ${D}${datadir}/mof/cimv${PV}/
+ install -d -m 0755 ${D}${datadir}/doc/cim-schema-${PV}
+ install -m 644 ${WORKDIR}/LICENSE ${D}${datadir}/doc/cim-schema-${PV}
+
+ cp -R --no-dereference --preserve=mode,links -v ${S}/* ${D}${datadir}/mof/cimv${PV}/
+ chown -R root:root ${D}${datadir}/mof/cimv${PV}/
+ for i in `find ${D}${datadir}/mof/cimv${PV} -name "*.mof"`; do
+ sed -i -e 's/\r//g' $i
+ done
+ ln -s cimv${PV} ${D}${datadir}/mof/cim-current
+ ln -s cim_schema_${PV}.mof ${D}${datadir}/mof/cim-current/CIM_Schema.mof
+}
+
+FILES_${PN} = "${datadir}/mof/* ${datadir}/doc/*"
+FILES_${PN}-doc = ""
diff --git a/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema.inc b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema.inc
new file mode 100644
index 000000000..b9171e474
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Common Information Model (CIM) Schema"
+DESCRIPTION = "Common Information Model (CIM) is a model for describing overall\
+management information in a network or enterprise environment. CIM\
+consists of a specification and a schema. The specification defines the\
+details for integration with other management models. The schema\
+provides the actual model descriptions."
+
+HOMEPAGE = "http://www.dmtf.org/"
+SECTION = "libs"
diff --git a/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema/files/LICENSE b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema/files/LICENSE
new file mode 100644
index 000000000..54a28120e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cim-schema/cim-schema/files/LICENSE
@@ -0,0 +1,34 @@
+// Copyright 1998-2008 Distributed Management Task Force, Inc. (DMTF).
+// All rights reserved.
+// DMTF is a not-for-profit association of industry members dedicated
+// to promoting enterprise and systems management and interoperability.
+// DMTF specifications and documents may be reproduced by
+// members and non-members, provided that correct attribution is given.
+// As DMTF specifications may be revised from time to time,
+// the particular version and release date should always be noted.
+//
+// Implementation of certain elements of this standard or proposed
+// standard may be subject to third party patent rights, including
+// provisional patent rights (herein "patent rights"). DMTF makes
+// no representations to users of the standard as to the existence
+// of such rights, and is not responsible to recognize, disclose, or
+// identify any or all such third party patent right, owners or
+// claimants, nor for any incomplete or inaccurate identification or
+// disclosure of such rights, owners or claimants. DMTF shall have no
+// liability to any party, in any manner or circumstance, under any
+// legal theory whatsoever, for failure to recognize, disclose, or
+// identify any such third party patent rights, or for such party's
+// reliance on the standard or incorporation thereof in its product,
+// protocols or testing procedures. DMTF shall have no liability to
+// any party implementing such standard, whether such implementation
+// is foreseeable or not, nor to any patent owner or claimant, and shall
+// have no liability or responsibility for costs or losses incurred if
+// a standard is withdrawn or modified after publication, and shall be
+// indemnified and held harmless by any party implementing the
+// standard from any and all claims of infringement by a patent owner
+// for such implementations.
+//
+// For information about patents held by third-parties which have
+// notified the DMTF that, in their opinion, such patent may relate to
+// or impact implementations of DMTF standards, visit
+// http://www.dmtf.org/about/policies/disclosures.php.
diff --git a/meta-openembedded/meta-networking/recipes-support/cim-schema/files/LICENSE b/meta-openembedded/meta-networking/recipes-support/cim-schema/files/LICENSE
new file mode 100644
index 000000000..54a28120e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/cim-schema/files/LICENSE
@@ -0,0 +1,34 @@
+// Copyright 1998-2008 Distributed Management Task Force, Inc. (DMTF).
+// All rights reserved.
+// DMTF is a not-for-profit association of industry members dedicated
+// to promoting enterprise and systems management and interoperability.
+// DMTF specifications and documents may be reproduced by
+// members and non-members, provided that correct attribution is given.
+// As DMTF specifications may be revised from time to time,
+// the particular version and release date should always be noted.
+//
+// Implementation of certain elements of this standard or proposed
+// standard may be subject to third party patent rights, including
+// provisional patent rights (herein "patent rights"). DMTF makes
+// no representations to users of the standard as to the existence
+// of such rights, and is not responsible to recognize, disclose, or
+// identify any or all such third party patent right, owners or
+// claimants, nor for any incomplete or inaccurate identification or
+// disclosure of such rights, owners or claimants. DMTF shall have no
+// liability to any party, in any manner or circumstance, under any
+// legal theory whatsoever, for failure to recognize, disclose, or
+// identify any such third party patent rights, or for such party's
+// reliance on the standard or incorporation thereof in its product,
+// protocols or testing procedures. DMTF shall have no liability to
+// any party implementing such standard, whether such implementation
+// is foreseeable or not, nor to any patent owner or claimant, and shall
+// have no liability or responsibility for costs or losses incurred if
+// a standard is withdrawn or modified after publication, and shall be
+// indemnified and held harmless by any party implementing the
+// standard from any and all claims of infringement by a patent owner
+// for such implementations.
+//
+// For information about patents held by third-parties which have
+// notified the DMTF that, in their opinion, such patent may relate to
+// or impact implementations of DMTF standards, visit
+// http://www.dmtf.org/about/policies/disclosures.php.
diff --git a/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/01-support-cross-compile-for-linux-os.patch b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/01-support-cross-compile-for-linux-os.patch
new file mode 100644
index 000000000..c9195b4f4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/01-support-cross-compile-for-linux-os.patch
@@ -0,0 +1,24 @@
+support cross-compile for linux-os.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+diff -Nurp ctdb-2.5.1.orig/configure ctdb-2.5.1/configure
+--- ctdb-2.5.1.orig/configure 2015-05-07 16:24:28.545000238 +0900
++++ ctdb-2.5.1/configure 2015-05-07 16:28:20.894000244 +0900
+@@ -10692,10 +10692,16 @@ if test x"$libreplace_cv_HAVE_GETADDRINF
+ # see bug 5910, use our replacements if we detect
+ # a broken system.
+ if test "$cross_compiling" = yes; then :
++ case "$target_os" in
++ *linux*)
++ ;;
++ *)
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ as_fn_error $? "cannot run test program while cross compiling
+ See \`config.log' for more details" "$LINENO" 5; }
++ ;;
++ esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
diff --git a/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/02-link-rep_snprintf-for-ltdbtool.patch b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/02-link-rep_snprintf-for-ltdbtool.patch
new file mode 100644
index 000000000..1294fe41b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/02-link-rep_snprintf-for-ltdbtool.patch
@@ -0,0 +1,17 @@
+link rep_snprintf from lib/replace/snprintf.o for ltdbtool
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+Index: ctdb-2.5.6/Makefile.in
+===================================================================
+--- ctdb-2.5.6.orig/Makefile.in
++++ ctdb-2.5.6/Makefile.in
+@@ -176,7 +176,7 @@ bin/ctdb: $(CTDB_CLIENT_OBJ) tools/ctdb.
+ @echo Linking $@
+ $(WRAPPER) $(CC) $(CFLAGS) -o $@ tools/ctdb.o tools/ctdb_vacuum.o $(CTDB_CLIENT_OBJ) $(LIB_FLAGS)
+
+-bin/ltdbtool: tools/ltdbtool.o $(TDB_OBJ)
++bin/ltdbtool: tools/ltdbtool.o $(TDB_OBJ) lib/replace/snprintf.o
+ @echo Linking $@
+ $(WRAPPER) $(CC) $(CFLAGS) -o $@ $+ $(LIB_FLAGS)
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/service-ensure-the-PID-directory-is-created.patch b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/service-ensure-the-PID-directory-is-created.patch
new file mode 100644
index 000000000..a7e987b85
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb/service-ensure-the-PID-directory-is-created.patch
@@ -0,0 +1,25 @@
+From f02ff7383f1cc0c118732352ccbae476c7b3b3ba Mon Sep 17 00:00:00 2001
+From: Mark Asselstine <mark.asselstine@windriver.com>
+Date: Tue, 17 Nov 2015 16:17:00 -0500
+Subject: [PATCH] service: ensure the PID directory is created
+
+Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
+---
+ config/ctdb.service | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/config/ctdb.service b/config/ctdb.service
+index ea37c30..8537105 100644
+--- a/config/ctdb.service
++++ b/config/ctdb.service
+@@ -5,6 +5,7 @@ After=network.target
+ [Service]
+ Type=forking
+ LimitCORE=infinity
++RuntimeDirectory=/run/ctdb
+ PIDFile=/run/ctdb/ctdbd.pid
+ ExecStart=/usr/sbin/ctdbd_wrapper /run/ctdb/ctdbd.pid start
+ ExecStop=/usr/sbin/ctdbd_wrapper /run/ctdb/ctdbd.pid stop
+--
+2.1.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb_2.5.6.bb b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb_2.5.6.bb
new file mode 100644
index 000000000..b5a60645c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ctdb/ctdb_2.5.6.bb
@@ -0,0 +1,57 @@
+DESCRIPTION = "CTDB is a cluster implementation of the TDB database \
+used by Samba and other projects to store temporary data. If an \
+application is already using TDB for temporary data it is very easy \
+to convert that application to be cluster aware and use CTDB instead."
+HOMEPAGE = "https://ctdb.samba.org/"
+LICENSE = "GPL-2.0+ & LGPL-3.0+ & GPL-3.0+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://${COREBASE}/meta/files/common-licenses/LGPL-3.0;md5=bfccfe952269fff2b407dd11f2f3083b \
+ file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6 \
+ "
+
+SRC_URI = "https://ftp.samba.org/pub/${BPN}/${BP}.tar.gz \
+ file://01-support-cross-compile-for-linux-os.patch \
+ file://02-link-rep_snprintf-for-ltdbtool.patch \
+ file://service-ensure-the-PID-directory-is-created.patch \
+ "
+
+SRC_URI[md5sum] = "efc50109f90a4c790124c35e4ba234ad"
+SRC_URI[sha256sum] = "fc1cdd7efcc91afc629f21408281bba5da107b9c17e74bdee2f28a532d14f874"
+
+inherit autotools-brokensep pkgconfig systemd
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[libtdb] = "--without-included-tdb,--with-included-tdb,libtdb"
+
+PARALLEL_MAKE = ""
+
+DEPENDS += "popt libtevent libtalloc libldb"
+DEPENDS_append_libc-musl = " libtirpc"
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LDFLAGS_append_libc-musl = " -ltirpc"
+
+# ctdbd_wrapper requires pgrep, hence procps
+RDEPENDS_${PN} += "procps"
+
+do_configure() {
+ oe_runconf
+}
+
+do_install_append() {
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${S}/config/ctdb.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,/usr/sbin/,${sbindir}/,' ${D}${systemd_unitdir}/system/ctdb.service
+ sed -i -e 's,\([=\ ]\)/run/,\1${localstatedir}/run/,' ${D}${systemd_unitdir}/system/ctdb.service
+
+ rm -r ${D}/${localstatedir}/run
+}
+
+# The systemd service is disabled by default, as the service will fail to
+# start without /etc/ctdb/nodes. If the user supplies this, they can re-enable
+# the service.
+SYSTEMD_AUTO_ENABLE = "disable"
+SYSTEMD_SERVICE_${PN} = "ctdb.service"
+
+# onnode is a shell script with bashisms and bash #!
+RDEPENDS_${PN} += "bash"
diff --git a/meta-openembedded/meta-networking/recipes-support/curlpp/curlpp_0.8.1.bb b/meta-openembedded/meta-networking/recipes-support/curlpp/curlpp_0.8.1.bb
new file mode 100644
index 000000000..340f57dc7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/curlpp/curlpp_0.8.1.bb
@@ -0,0 +1,33 @@
+SUMMARY = "C++ library for client-side URL transfers"
+HOMEPAGE = "http://www.curlpp.org/"
+SECTION = "libdevel"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+DEPENDS = "curl"
+DEPENDS_class-native = "curl-native"
+
+SRC_URI = "git://github.com/jpbarrette/curlpp.git"
+
+SRCREV = "592552a165cc569dac7674cb7fc9de3dc829906f"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig binconfig
+
+do_install_append () {
+ sed -i 's,${STAGING_DIR_TARGET},,g' ${D}${libdir}/pkgconfig/curlpp.pc
+}
+
+PACKAGES =+ "libcurlpp libcurlpp-dev libcurlpp-staticdev"
+
+FILES_lib${BPN} = "${libdir}/lib*.so.*"
+
+FILES_lib${BPN}-dev = "${includedir} \
+ ${libdir}/pkgconfig \
+ ${bindir}/*-config \
+"
+
+FILES_lib${BPN}-staticdev = "${libdir}/lib*.a"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq.inc b/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq.inc
new file mode 100644
index 000000000..4f4bbf144
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq.inc
@@ -0,0 +1,83 @@
+SUMMARY = "Lightweight, easy to configure DNS forwarder and DHCP server"
+HOMEPAGE = "http://www.thekelleys.org.uk/dnsmasq/doc.html"
+SECTION = "net"
+# GPLv3 was added in version 2.41 as license option
+LICENSE = "GPLv2 | GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+ file://COPYING-v3;md5=d32239bcb673463ab874e80d47fae504"
+
+#at least versions 2.69 and prior are moved to the archive folder on the server
+SRC_URI = "http://www.thekelleys.org.uk/dnsmasq/${@['archive/', ''][float(d.getVar('PV').split('.')[1]) > 69]}dnsmasq-${PV}.tar.gz;name=dnsmasq-${PV} \
+ file://init \
+ file://dnsmasq.conf \
+ file://dnsmasq-resolvconf.service \
+ file://dnsmasq-noresolvconf.service \
+"
+
+inherit pkgconfig update-rc.d systemd
+
+INITSCRIPT_NAME = "dnsmasq"
+INITSCRIPT_PARAMS = "defaults"
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[dbus] = ",,dbus"
+PACKAGECONFIG[idn] = ",,libidn"
+PACKAGECONFIG[conntrack] = ",,libnetfilter-conntrack"
+PACKAGECONFIG[lua] = ",,lua"
+PACKAGECONFIG[resolvconf] = ",,,resolvconf"
+EXTRA_OEMAKE = "\
+ 'COPTS=${@bb.utils.contains('PACKAGECONFIG', 'dbus', '-DHAVE_DBUS', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'idn', '-DHAVE_IDN', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'conntrack', '-DHAVE_CONNTRACK', '', d)} \
+ ${@bb.utils.contains('PACKAGECONFIG', 'lua', '-DHAVE_LUASCRIPT', '', d)}' \
+ 'CFLAGS=${CFLAGS}' \
+ 'LDFLAGS=${LDFLAGS}' \
+"
+
+SRC_URI += "${@bb.utils.contains('PACKAGECONFIG', 'resolvconf', 'file://dnsmasq.resolvconf file://99_dnsmasq file://dnsmasq-resolvconf-helper', '', d)}"
+
+do_compile_append() {
+ # build dhcp_release
+ cd ${S}/contrib/lease-tools
+ oe_runmake
+}
+
+do_install () {
+ oe_runmake "PREFIX=${D}${prefix}" \
+ "BINDIR=${D}${bindir}" \
+ "MANDIR=${D}${mandir}" \
+ install
+ install -d ${D}${sysconfdir}/ ${D}${sysconfdir}/init.d ${D}${sysconfdir}/dnsmasq.d
+ install -m 644 ${WORKDIR}/dnsmasq.conf ${D}${sysconfdir}/
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/dnsmasq
+
+ install -d ${D}${systemd_unitdir}/system
+
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'resolvconf', d)}" ]; then
+ install -m 0644 ${WORKDIR}/dnsmasq-resolvconf.service ${D}${systemd_unitdir}/system/dnsmasq.service
+ else
+ install -m 0644 ${WORKDIR}/dnsmasq-noresolvconf.service ${D}${systemd_unitdir}/system/dnsmasq.service
+ fi
+
+ install -m 0755 ${S}/contrib/lease-tools/dhcp_release ${D}${bindir}
+
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'dbus', d)}" ]; then
+ install -d ${D}${sysconfdir}/dbus-1/system.d
+ install -m 644 dbus/dnsmasq.conf ${D}${sysconfdir}/dbus-1/system.d/
+ fi
+ if [ "${@bb.utils.filter('PACKAGECONFIG', 'resolvconf', d)}" ]; then
+ install -d ${D}${sysconfdir}/resolvconf/update.d/
+ install -m 0755 ${WORKDIR}/dnsmasq.resolvconf ${D}${sysconfdir}/resolvconf/update.d/dnsmasq
+
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/99_dnsmasq ${D}${sysconfdir}/default/volatiles
+ install -m 0755 ${WORKDIR}/dnsmasq-resolvconf-helper ${D}${bindir}
+ fi
+}
+
+CONFFILES_${PN} = "${sysconfdir}/dnsmasq.conf"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "dnsmasq.service"
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq/lua.patch b/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq/lua.patch
new file mode 100644
index 000000000..0991dd8b9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq/lua.patch
@@ -0,0 +1,30 @@
+From be1b3d2d0f1608cba5efee73d6aac5ad0709041b Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Tue, 9 Sep 2014 10:24:58 -0400
+Subject: [PATCH] Upstream-status: Inappropriate [OE specific]
+
+Signed-off-by: Christopher Larson <chris_larson@mentor.com>
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 73ea23e..ed3eeb9 100644
+--- a/Makefile
++++ b/Makefile
+@@ -59,8 +59,8 @@ idn2_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LIBIDN2 $(PKG_CONFI
+ idn2_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LIBIDN2 $(PKG_CONFIG) --libs libidn2`
+ ct_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_CONNTRACK $(PKG_CONFIG) --cflags libnetfilter_conntrack`
+ ct_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_CONNTRACK $(PKG_CONFIG) --libs libnetfilter_conntrack`
+-lua_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --cflags lua5.2`
+-lua_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --libs lua5.2`
++lua_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --cflags lua`
++lua_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_LUASCRIPT $(PKG_CONFIG) --libs lua`
+ nettle_cflags = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --cflags nettle hogweed`
+ nettle_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC $(PKG_CONFIG) --libs nettle hogweed`
+ gmp_libs = `echo $(COPTS) | $(top)/bld/pkg-wrapper HAVE_DNSSEC NO_GMP --copy -lgmp`
+--
+2.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq_2.78.bb b/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq_2.78.bb
new file mode 100644
index 000000000..4d1dc6e69
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/dnsmasq_2.78.bb
@@ -0,0 +1,8 @@
+require dnsmasq.inc
+
+SRC_URI += "\
+ file://lua.patch \
+"
+
+SRC_URI[dnsmasq-2.78.md5sum] = "3bb97f264c73853f802bf70610150788"
+SRC_URI[dnsmasq-2.78.sha256sum] = "c92e5d78aa6353354d02aabf74590d08980bb1385d8a00b80ef9bc80430aa1dc"
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/99_dnsmasq b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/99_dnsmasq
new file mode 100644
index 000000000..f52ce4e8f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/99_dnsmasq
@@ -0,0 +1 @@
+d root root 0755 /run/dnsmasq none
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-noresolvconf.service b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-noresolvconf.service
new file mode 100644
index 000000000..0c64fab00
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-noresolvconf.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=DNS forwarder and DHCP server
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/dnsmasq.pid
+ExecStartPre=/usr/bin/dnsmasq --test
+ExecStart=/usr/bin/dnsmasq -x /run/dnsmasq.pid -7 /etc/dnsmasq.d --local-service
+ExecStop=/bin/kill $MAINPID
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf-helper b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf-helper
new file mode 100644
index 000000000..db54d467e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf-helper
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Borrowing heavily from the dnsmasq initscript's version of support for
+# resolvconf, intended for use in systemd-only configurations.
+#
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/dnsmasq
+NAME=dnsmasq
+
+# Most configuration options in /etc/default/dnsmasq are deprecated
+# but still honoured.
+if [ -r /etc/default/$NAME ]; then
+ . /etc/default/$NAME
+fi
+
+start_resolvconf()
+{
+ # If interface "lo" is explicitly disabled in /etc/default/dnsmasq
+ # Then dnsmasq won't be providing local DNS, so don't add it to
+ # the resolvconf server set.
+ for interface in $DNSMASQ_EXCEPT
+ do
+ [ $interface = lo ] && return
+ done
+
+ if [ -x /sbin/resolvconf ] ; then
+ echo "nameserver 127.0.0.1" |
+ /sbin/resolvconf -a lo.$NAME
+ fi
+ return 0
+}
+
+stop_resolvconf()
+{
+ if [ -x /sbin/resolvconf ] ; then
+ /sbin/resolvconf -d lo.$NAME
+ fi
+ return 0
+}
+
+case "$1" in
+ start)
+ start_resolvconf
+ exit 0
+ ;;
+ stop)
+ stop_resolvconf
+ exit 0
+ ;;
+ restart)
+ stop_resolvconf
+ start_resolvconf
+ exit 0
+ ;;
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|restart}" >&2
+ exit 3
+ ;;
+esac
+
+exit 0
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf.service b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf.service
new file mode 100644
index 000000000..2980f7def
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq-resolvconf.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=DNS forwarder and DHCP server
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/dnsmasq.pid
+ExecStartPre=/usr/bin/dnsmasq --test
+ExecStart=/usr/bin/dnsmasq -x /run/dnsmasq.pid -7 /etc/dnsmasq.d --local-service
+ExecStartPost=/usr/bin/dnsmasq-resolvconf-helper start
+ExecStopPre=/usr/bin/dnsmasq-resolvconf-helper stop
+ExecStop=/bin/kill $MAINPID
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.conf b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.conf
new file mode 100755
index 000000000..9e5ab9f81
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.conf
@@ -0,0 +1,298 @@
+# Configuration file for dnsmasq.
+#
+# Format is one option per line, legal options are the same
+# as the long options legal on the command line. See
+# "/usr/sbin/dnsmasq --help" or "man 8 dnsmasq" for details.
+
+# Listen on this specific port instead of the standard DNS port
+# (53). Setting this to zero completely disables DNS function,
+# leaving only DHCP and/or TFTP.
+#port=5353
+
+# Change these lines if you want dnsmasq to serve MX records.
+# Only one of mx-host and mx-target need be set, the other defaults
+# to the name of the host running dnsmasq.
+#mx-host=
+#mx-target=
+#selfmx
+#localmx
+
+# The following two options make you a better netizen, since they
+# tell dnsmasq to filter out queries which the public DNS cannot
+# answer, and which load the servers (especially the root servers)
+# uneccessarily. If you have a dial-on-demand link they also stop
+# these requests from bringing up the link uneccessarily.
+
+# Never forward plain names (with a dot or domain part)
+domain-needed
+# Never forward addresses in the non-routed address spaces.
+bogus-priv
+
+
+# Uncomment this to filter useless windows-originated DNS requests
+# which can trigger dial-on-demand links needlessly.
+# Note that (amongst other things) this blocks all SRV requests,
+# so don't use it if you use eg Kerberos.
+#filterwin2k
+
+# Change this line if you want dns to get its upstream servers from
+# somewhere other that /etc/resolv.conf
+#resolv-file=
+
+# By default, dnsmasq will send queries to any of the upstream
+# servers it knows about and tries to favour servers to are known
+# to be up. Uncommenting this forces dnsmasq to try each query
+# with each server strictly in the order they appear in
+# /etc/resolv.conf
+#strict-order
+
+# If you don't want dnsmasq to read /etc/resolv.conf or any other
+# file, getting its servers for this file instead (see below), then
+# uncomment this
+#no-resolv
+
+# If you don't want dnsmasq to poll /etc/resolv.conf or other resolv
+# files for changes and re-read them then uncomment this.
+#no-poll
+
+# Add other name servers here, with domain specs if they are for
+# non-public domains.
+#server=/localnet/192.168.0.1
+
+# Add local-only domains here, queries in these domains are answered
+# from /etc/hosts or DHCP only.
+#local=/localnet/
+
+# Add domains which you want to force to an IP address here.
+# The example below send any host in doubleclick.net to a local
+# webserver.
+#address=/doubleclick.net/127.0.0.1
+
+# You no longer (as of version 1.7) need to set these to enable
+# dnsmasq to read /etc/ppp/resolv.conf since dnsmasq now uses the
+# "dip" group to achieve this.
+#user=
+#group=
+
+# If you want dnsmasq to listen for requests only on specified interfaces
+# (and the loopback) give the name of the interface (eg eth0) here.
+# Repeat the line for more than one interface.
+#interface=
+# Or you can specify which interface _not_ to listen on
+#except-interface=
+# Or which to listen on by address (remember to include 127.0.0.1 if
+# you use this.)
+#listen-address=127.0.0.1
+
+# On systems which support it, dnsmasq binds the wildcard address,
+# even when it is listening on only some interfaces. It then discards
+# requests that it shouldn't reply to. This has the advantage of
+# working even when interfaces come and go and change address. If you
+# want dnsmasq to really bind only the interfaces it is listening on,
+# uncomment this option. About the only time you may need this is when
+# running another nameserver on the same machine.
+#bind-interfaces
+
+# If you don't want dnsmasq to read /etc/hosts, uncomment the
+# following line.
+#no-hosts
+# or if you want it to read another file, as well as /etc/hosts, use
+# this.
+#addn-hosts=/etc/banner_add_hosts
+
+# Set this (and domain: see below) if you want to have a domain
+# automatically added to simple names in a hosts-file.
+#expand-hosts
+
+# Set the domain for dnsmasq. this is optional, but if it is set, it
+# does the following things.
+# 1) Allows DHCP hosts to have fully qualified domain names, as long
+# as the domain part matches this setting.
+# 2) Sets the "domain" DHCP option thereby potentially setting the
+# domain of all systems configured by DHCP
+# 3) Provides the domain part for "expand-hosts"
+#domain=thekelleys.org.uk
+
+# Uncomment this to enable the integrated DHCP server, you need
+# to supply the range of addresses available for lease and optionally
+# a lease time. If you have more than one network, you will need to
+# repeat this for each network on which you want to supply DHCP
+# service.
+#dhcp-range=192.168.0.50,192.168.0.150,12h
+#dhcp-range=10.0.0.10,10.0.0.200,2h
+
+# This is an example of a DHCP range where the netmask is given. This
+# is needed for networks we reach the dnsmasq DHCP server via a relay
+# agent. If you don't know what a DHCP relay agent is, you probably
+# don't need to worry about this.
+#dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h
+
+# This is an example of a DHCP range with a network-id, so that
+# some DHCP options may be set only for this network.
+#dhcp-range=red,192.168.0.50,192.168.0.150
+
+# Supply parameters for specified hosts using DHCP. There are lots
+# of valid alternatives, so we will give examples of each. Note that
+# IP addresses DO NOT have to be in the range given above, they just
+# need to be on the same network. The order of the parameters in these
+# do not matter, it's permissble to give name,adddress and MAC in any order
+
+# Always allocate the host with ethernet address 11:22:33:44:55:66
+# The IP address 192.168.0.60
+#dhcp-host=11:22:33:44:55:66,192.168.0.60
+
+# Always set the name of the host with hardware address
+# 11:22:33:44:55:66 to be "fred"
+#dhcp-host=11:22:33:44:55:66,fred
+
+# Always give the host with ethernet address 11:22:33:44:55:66
+# the name fred and IP address 192.168.0.60 and lease time 45 minutes
+#dhcp-host=11:22:33:44:55:66,fred,192.168.0.60,45m
+
+# Give the machine which says it's name is "bert" IP address
+# 192.168.0.70 and an infinite lease
+#dhcp-host=bert,192.168.0.70,infinite
+
+# Always give the host with client identifier 01:02:02:04
+# the IP address 192.168.0.60
+#dhcp-host=id:01:02:02:04,192.168.0.60
+
+# Always give the host with client identifier "marjorie"
+# the IP address 192.168.0.60
+#dhcp-host=id:marjorie,192.168.0.60
+
+# Enable the address given for "judge" in /etc/hosts
+# to be given to a machine presenting the name "judge" when
+# it asks for a DHCP lease.
+#dhcp-host=judge
+
+# Never offer DHCP service to a machine whose ethernet
+# address is 11:22:33:44:55:66
+#dhcp-host=11:22:33:44:55:66,ignore
+
+# Ignore any client-id presented by the machine with ethernet
+# address 11:22:33:44:55:66. This is useful to prevent a machine
+# being treated differently when running under different OS's or
+# between PXE boot and OS boot.
+#dhcp-host=11:22:33:44:55:66,id:*
+
+# Send extra options which are tagged as "red" to
+# the machine with ethernet address 11:22:33:44:55:66
+#dhcp-host=11:22:33:44:55:66,net:red
+
+# Send extra options which are tagged as "red" to any machine whose
+# DHCP vendorclass string includes the substring "Linux"
+#dhcp-vendorclass=red,Linux
+
+# Send extra options which are tagged as "red" to any machine one
+# of whose DHCP userclass strings includes the substring "accounts"
+#dhcp-userclass=red,accounts
+
+# If this line is uncommented, dnsmasq will read /etc/ethers and act
+# on the ethernet-address/IP pairs found there just as if they had
+# been given as --dhcp-host options. Useful if you keep
+# MAC-address/host mappings there for other purposes.
+#read-ethers
+
+# Send options to hosts which ask for a DHCP lease.
+# See RFC 2132 for details of available options.
+# Note that all the common settings, such as netmask and
+# broadcast address, DNS server and default route, are given
+# sane defaults by dnsmasq. You very likely will not need any
+# any dhcp-options. If you use Windows clients and Samba, there
+# are some options which are recommended, they are detailed at the
+# end of this section.
+# For reference, the common options are:
+# subnet mask - 1
+# default router - 3
+# DNS server - 6
+# broadcast address - 28
+
+# Set the NTP time server addresses to 192.168.0.4 and 10.10.0.5
+#dhcp-option=42,192.168.0.4,10.10.0.5
+
+# Set the NTP time server address to be the same machine as
+# is running dnsmasq
+#dhcp-option=42,0.0.0.0
+
+# Set the NIS domain name to "welly"
+#dhcp-option=40,welly
+
+# Set the default time-to-live to 50
+#dhcp-option=23,50
+
+# Set the "all subnets are local" flag
+#dhcp-option=27,1
+
+# Send the etherboot magic flag and then etherboot options (a string).
+#dhcp-option=128,e4:45:74:68:00:00
+#dhcp-option=129,NIC=eepro100
+
+# Specify an option which will only be sent to the "red" network
+# (see dhcp-range for the declaration of the "red" network)
+#dhcp-option=red,42,192.168.1.1
+
+# The following DHCP options set up dnsmasq in the same way as is specified
+# for the ISC dhcpcd in
+# http://www.samba.org/samba/ftp/docs/textdocs/DHCP-Server-Configuration.txt
+# adapted for a typical dnsmasq installation where the host running
+# dnsmasq is also the host running samba.
+# you may want to uncomment them if you use Windows clients and Samba.
+#dhcp-option=19,0 # option ip-forwarding off
+#dhcp-option=44,0.0.0.0 # set netbios-over-TCP/IP nameserver(s) aka WINS server(s)
+#dhcp-option=45,0.0.0.0 # netbios datagram distribution server
+#dhcp-option=46,8 # netbios node type
+#dhcp-option=47 # empty netbios scope.
+
+
+# Set the boot filename and tftpd server name and address
+# for BOOTP. You will only need this is you want to
+# boot machines over the network.
+#dhcp-boot=/var/ftpd/pxelinux.0,boothost,192.168.0.3
+
+# Set the limit on DHCP leases, the default is 150
+#dhcp-lease-max=150
+
+# The DHCP server needs somewhere on disk to keep its lease database.
+# This defaults to a sane location, but if you want to change it, use
+# the line below.
+#dhcp-leasefile=/var/lib/misc/dnsmasq.leases
+
+# Set the cachesize here.
+#cache-size=150
+
+# If you want to disable negative caching, uncomment this.
+#no-negcache
+
+# Normally responses which come form /etc/hosts and the DHCP lease
+# file have Time-To-Live set as zero, which conventionally means
+# do not cache further. If you are happy to trade lower load on the
+# server for potentially stale date, you can set a time-to-live (in
+# seconds) here.
+#local-ttl=
+
+# If you want dnsmasq to detect attempts by Verisign to send queries
+# to unregistered .com and .net hosts to its sitefinder service and
+# have dnsmasq instead return the correct NXDOMAIN response, uncomment
+# this line. You can add similar lines to do the same for other
+# registries which have implemented wildcard A records.
+#bogus-nxdomain=64.94.110.11
+
+# If you want to fix up DNS results from upstream servers, use the
+# alias option. This only works for IPv4.
+# This alias makes a result of 1.2.3.4 appear as 5.6.7.8
+#alias=1.2.3.4,5.6.7.8
+# and this maps 1.2.3.x to 5.6.7.x
+#alias=1.2.3.0,5.6.7.0,255.255.255.0
+
+# For debugging purposes, log each DNS query as it passes through
+# dnsmasq.
+#log-queries
+
+# Include a another lot of configuration options.
+#conf-file=/etc/dnsmasq.more.conf
+
+
+
+
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.resolvconf b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.resolvconf
new file mode 100755
index 000000000..06cd25cec
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/dnsmasq.resolvconf
@@ -0,0 +1,84 @@
+#!/bin/sh
+#
+# Script to update the resolver list for dnsmasq
+#
+# N.B. Resolvconf may run us even if dnsmasq is not (yet) running.
+# If dnsmasq is installed then we go ahead and update the resolver list
+# in case dnsmasq is started later.
+#
+# Assumption: On entry, PWD contains the resolv.conf-type files.
+#
+# This file is part of the dnsmasq package.
+#
+
+set -e
+
+RUN_DIR="/run/dnsmasq"
+RSLVRLIST_FILE="${RUN_DIR}/resolv.conf"
+TMP_FILE="${RSLVRLIST_FILE}_new.$$"
+MY_NAME_FOR_RESOLVCONF="dnsmasq"
+
+[ -x /usr/bin/dnsmasq ] || exit 0
+[ -x /lib/resolvconf/list-records ] || exit 1
+
+PATH=/bin:/sbin
+
+report_err() { echo "$0: Error: $*" >&2 ; }
+
+# Stores arguments (minus duplicates) in RSLT, separated by spaces
+# Doesn't work properly if an argument itself contains whitespace
+uniquify()
+{
+ RSLT=""
+ while [ "$1" ] ; do
+ for E in $RSLT ; do
+ [ "$1" = "$E" ] && { shift ; continue 2 ; }
+ done
+ RSLT="${RSLT:+$RSLT }$1"
+ shift
+ done
+}
+
+if [ ! -d "$RUN_DIR" ] && ! mkdir --parents --mode=0755 "$RUN_DIR" ; then
+ report_err "Failed trying to create directory $RUN_DIR"
+ exit 1
+fi
+
+RSLVCNFFILES=""
+for F in $(/lib/resolvconf/list-records --after "lo.$MY_NAME_FOR_RESOLVCONF") ; do
+ case "$F" in
+ "lo.$MY_NAME_FOR_RESOLVCONF")
+ # Omit own record
+ ;;
+ lo.*)
+ # Include no more records after one for a local nameserver
+ RSLVCNFFILES="${RSLVCNFFILES:+$RSLVCNFFILES }$F"
+ break
+ ;;
+ *)
+ RSLVCNFFILES="${RSLVCNFFILES:+$RSLVCNFFILES }$F"
+ ;;
+ esac
+done
+
+NMSRVRS=""
+if [ "$RSLVCNFFILES" ] ; then
+ uniquify $(sed -n -e 's/^[[:space:]]*nameserver[[:space:]]\+//p' $RSLVCNFFILES)
+ NMSRVRS="$RSLT"
+fi
+
+# Dnsmasq uses the mtime of $RSLVRLIST_FILE, with a resolution of one second,
+# to detect changes in the file. This means that if a resolvconf update occurs
+# within one second of the previous one then dnsmasq may fail to notice the
+# more recent change. To work around this problem we sleep one second here
+# if necessary in order to ensure that the new mtime is different.
+if [ -f "$RSLVRLIST_FILE" ] && [ "$(stat -c %X "$RSLVRLIST_FILE")" = "$(date +%s)" ] ; then
+ sleep 1
+fi
+
+clean_up() { rm -f "$TMP_FILE" ; }
+trap clean_up EXIT
+: >| "$TMP_FILE"
+for N in $NMSRVRS ; do echo "nameserver $N" >> "$TMP_FILE" ; done
+mv -f "$TMP_FILE" "$RSLVRLIST_FILE"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/init b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/init
new file mode 100644
index 000000000..51c95dfed
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnsmasq/files/init
@@ -0,0 +1,117 @@
+#!/bin/sh
+DAEMON=/usr/bin/dnsmasq
+NAME=dnsmasq
+DESC="DNS forwarder and DHCP server"
+ARGS="-7 /etc/dnsmasq.d"
+
+test -f $DAEMON || exit 0
+
+set -e
+
+if [ -r /etc/default/$NAME ]
+then
+ . /etc/default/$NAME
+fi
+
+DNSMASQ_CONF="/etc/dnsmasq.conf"
+test "/etc/dnsmasq.d/*" != '/etc/dnsmasq.d/*' && DNSMASQ_CONF="${DNSMASQ_CONF} /etc/dnsmasq.d/*"
+
+test -z "${PIDFILE}" && PIFILE="/run/dnsmasq.pid"
+
+if [ -z "$IGNORE_RESOLVCONF" ]
+then
+ egrep -h -q '^no-resolv' ${DNSMASQ_CONF} && IGNORE_RESOLVCONF="yes"
+fi
+
+# RESOLV_CONF:
+# If the resolvconf package is installed then use the resolv conf file
+# that it provides as the default. Otherwise use /etc/resolv.conf as
+# the default.
+#
+# If IGNORE_RESOLVCONF is set in /etc/default/dnsmasq or an explicit
+# filename is set there then this inhibits the use of the resolvconf-provided
+# information.
+#
+# Note that if the resolvconf package is installed it is not possible to
+# override it just by configuration in /etc/dnsmasq.conf, it is necessary
+# to set IGNORE_RESOLVCONF=yes in /etc/default/dnsmasq.
+
+test -z "$RESOLV_CONF" -a "$IGNORE_RESOLVCONF" != "yes" -a -x /sbin/resolvconf && \
+ RESOLV_CONF=/run/dnsmasq/resolv.conf
+
+start_resolvconf()
+{
+ if [ "$IGNORE_RESOLVCONF" != "yes" -a -x /sbin/resolvconf ]
+ then
+ echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.$NAME
+ fi
+ :
+}
+
+stop_resolvconf()
+{
+ if [ "$IGNORE_RESOLVCONF" != "yes" -a -x /sbin/resolvconf ]
+ then
+ /sbin/resolvconf -d lo.$NAME
+ fi
+ :
+}
+
+case "$1" in
+ start)
+ echo -n "starting $DESC: $NAME... "
+ test -d /var/lib/misc/ || mkdir /var/lib/misc/
+ start-stop-daemon -S -x $DAEMON -- $ARGS \
+ ${RESOLV_CONF:+ -r $RESOLV_CONF} \
+ ${PIDFILE:+ -x $PIDFILE}
+ test $? -eq 0 && start_resolvconf
+ echo "done."
+ ;;
+ stop)
+ echo -n "stopping $DESC: $NAME... "
+ stop_resolvconf
+ start-stop-daemon -K -x $DAEMON
+ echo "done."
+ ;;
+ status)
+ echo -n "dnsmasq "
+ start-stop-daemon -q -K -t -x $DAEMON
+ RET=$?
+ if [ "$RET" = "0" ]; then
+ PID=`cat ${PIDFILE}`
+ echo "($PID) is running"
+ else
+ echo "is not running"
+ exit $RET
+ fi
+ ;;
+ restart)
+ echo "restarting $DESC: $NAME... "
+ $0 stop
+ $0 start
+ echo "done."
+ ;;
+ reload)
+ echo -n "reloading $DESC: $NAME... "
+ killall -HUP $(basename ${DAEMON})
+ echo "done."
+ ;;
+ systemd-start-resolvconf)
+ start_resolvconf
+ ;;
+ systemd-stop-resolvconf)
+ stop_resolvconf
+ ;;
+ systemd-exec)
+ test -d /var/lib/misc/ || mkdir /var/lib/misc/
+ exec $DAEMON --keep-in-foreground $ARGS \
+ ${RESOLV_CONF:+ -r $RESOLV_CONF} \
+ ${PIDFILE:+ -x $PIDFILE}
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|status|restart|reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-support/dnssec-conf/dnssec-conf_2.02.bb b/meta-openembedded/meta-networking/recipes-support/dnssec-conf/dnssec-conf_2.02.bb
new file mode 100644
index 000000000..ca59bd217
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dnssec-conf/dnssec-conf_2.02.bb
@@ -0,0 +1,35 @@
+SUMMARY = "DNSSEC and DLV configuration and priming tool"
+DESCRIPTION = "\
+DNSSEC configuration and priming tool. Keys are required until the root \
+is signed, as well as for local unpublished DNSSEC keys to be preloaded \
+into the recursive nameserver. These DNSSEC configuration files can be \
+directly included in the bind or unbound nameserver configuration files. \
+dnssec-conf includes a commandline configuration client for Bind and \
+Unbound, known DNSSEC keys, URL's to official publication pages of keys, \
+and harvested keys, as well a script to harvest DNSKEY's from DNS. \
+See also: system-config-dnssec"
+HOMEPAGE = "https://github.com/xelerance/dnssec-conf"
+SECTION = "net"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0636e73ff0215e8d672dc4c32c317bb3"
+DEPENDS += "xmlto-native docbook-xml-dtd4-native \
+ docbook-xsl-stylesheets-native libxslt-native"
+
+SRC_URI = "git://github.com/xelerance/dnssec-conf.git"
+SRCREV = "8e799683736b4a7b5e5e78f98fba0a6f48393537"
+
+S = "${WORKDIR}/git"
+
+do_install () {
+ rm -rf ${D}
+ make PREFIX=${prefix} DESTDIR=${D} ETCDIR=${D}${sysconfdir} install
+ # We no longer ship trust anchors. Most of these are in the DLV Registry now.
+ # and it prevents the problem of shipping outdated trust anchors.
+ # For DLV, we ship the ISC DLV Registry key
+ rm -rf ${D}${sysconfdir}/pki/dnssec-keys/harvest/*
+ rm -rf ${D}${sysconfdir}/pki/dnssec-keys/production/reverse/*
+ install -d -m 0755 ${D}${sysconfdir}/sysconfig
+ install -m 0644 packaging/fedora/dnssec.sysconfig ${D}${sysconfdir}/sysconfig/dnssec
+}
+
+RDEPENDS_${PN} = "python"
diff --git a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-configure.ac-convert-AC_TRY_RUN-to-AC_TRY_LINK-state.patch b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-configure.ac-convert-AC_TRY_RUN-to-AC_TRY_LINK-state.patch
new file mode 100644
index 000000000..f86235076
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-configure.ac-convert-AC_TRY_RUN-to-AC_TRY_LINK-state.patch
@@ -0,0 +1,66 @@
+From 07150f3a27681e034f18ab2ed2b68914c1e10af6 Mon Sep 17 00:00:00 2001
+From: Li xin <lixin.fnst@cn.fujitsu.com>
+Date: Sat, 18 Jul 2015 05:03:57 +0900
+Subject: [PATCH] configure.ac: convert AC_TRY_RUN to AC_TRY_LINK statements
+
+This is not completely safe, but it's the least invasive fix.
+
+Upstream-Status: pending
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
+---
+ configure.ac | 15 +++++----------
+ 1 file changed, 5 insertions(+), 10 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 3b32614..94ec002 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -519,13 +519,10 @@ have_ioloop=no
+
+ if test "$ioloop" = "best" || test "$ioloop" = "epoll"; then
+ AC_CACHE_CHECK([whether we can use epoll],i_cv_epoll_works,[
+- AC_TRY_RUN([
++ AC_TRY_LINK([
+ #include <sys/epoll.h>
+-
+- int main()
+- {
+- return epoll_create(5) < 1;
+- }
++ ], [
++ epoll_create(5) < 1;
+ ], [
+ i_cv_epoll_works=yes
+ ], [
+@@ -653,7 +650,7 @@ fi
+ dnl * Old glibcs have broken posix_fallocate(). Make sure not to use it.
+ dnl * It may also be broken in AIX.
+ AC_CACHE_CHECK([whether posix_fallocate() works],i_cv_posix_fallocate_works,[
+- AC_TRY_RUN([
++ AC_TRY_LINK([
+ #define _XOPEN_SOURCE 600
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -662,7 +659,7 @@ AC_CACHE_CHECK([whether posix_fallocate() works],i_cv_posix_fallocate_works,[
+ #if defined(__GLIBC__) && (__GLIBC__ < 2 || __GLIBC_MINOR__ < 7)
+ possibly broken posix_fallocate
+ #endif
+- int main() {
++ ], [
+ int fd = creat("conftest.temp", 0600);
+ int ret;
+ if (fd == -1) {
+@@ -671,8 +668,6 @@ AC_CACHE_CHECK([whether posix_fallocate() works],i_cv_posix_fallocate_works,[
+ }
+ ret = posix_fallocate(fd, 1024, 1024) < 0 ? 1 : 0;
+ unlink("conftest.temp");
+- return ret;
+- }
+ ], [
+ i_cv_posix_fallocate_works=yes
+ ], [
+--
+1.8.4.2
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-doveadm-Fix-parallel-build.patch b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-doveadm-Fix-parallel-build.patch
new file mode 100644
index 000000000..65ae9bf91
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/0001-doveadm-Fix-parallel-build.patch
@@ -0,0 +1,38 @@
+From be9b3809b86fe593dbb16f0b981b3d315a27b799 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 22 Oct 2017 22:10:41 -0700
+Subject: [PATCH] doveadm: Fix parallel build
+
+Sometimes dovetail build fails with errors like
+
+doveadm-util.o: file not recognized: File truncated
+collect2: error: ld returned 1 exit status
+make[4]: *** [Makefile:812: test-doveadm-util] Error 1
+
+This is partial backport from
+
+https://github.com/dovecot/core/commit/b200bc3875fa06d42c8619865cc306c3297fcacc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/doveadm/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/doveadm/Makefile.am b/src/doveadm/Makefile.am
+index c644646..6ae9144 100644
+--- a/src/doveadm/Makefile.am
++++ b/src/doveadm/Makefile.am
+@@ -180,8 +180,8 @@ test_libs = \
+ ../lib/liblib.la
+ test_deps = $(noinst_LTLIBRARIES) $(test_libs)
+
+-test_doveadm_util_SOURCES = test-doveadm-util.c
+-test_doveadm_util_LDADD = doveadm-util.o $(test_libs) $(MODULE_LIBS)
++test_doveadm_util_SOURCES = doveadm-util.c test-doveadm-util.c
++test_doveadm_util_LDADD = $(test_libs) $(MODULE_LIBS)
+ test_doveadm_util_DEPENDENCIES = $(test_deps)
+
+ check: check-am check-test
+--
+2.14.2
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.service b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.service
new file mode 100644
index 000000000..ca250ea5d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Dovecot IMAP/POP3 email server
+After=local-fs.target network.target
+
+[Service]
+Type=simple
+EnvironmentFile=-@SYSCONFDIR@/sysconfig/dovecot
+ExecStart=@SBINDIR@/dovecot -F
+ExecReload=/bin/kill -HUP $MAINPID
+NonBlocking=yes
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.socket b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.socket
new file mode 100644
index 000000000..556e1a850
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot/dovecot.socket
@@ -0,0 +1,14 @@
+[Unit]
+Description=Dovecot IMAP/POP3 email server activation socket
+
+[Socket]
+#dovecot expects separate IPv4 and IPv6 sockets
+BindIPv6Only=ipv6-only
+ListenStream=0.0.0.0:143
+ListenStream=[::]:143
+ListenStream=0.0.0.0:993
+ListenStream=[::]:993
+KeepAlive=true
+
+[Install]
+WantedBy=sockets.target
diff --git a/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.2.33.bb b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.2.33.bb
new file mode 100644
index 000000000..5ebda19eb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/dovecot/dovecot_2.2.33.bb
@@ -0,0 +1,71 @@
+SUMMARY = "Dovecot is an open source IMAP and POP3 email server"
+HOMEPAGE = "https://www.dovecot.org/"
+DESCRIPTION = "Dovecot is an open source IMAP and POP3 email server for Linux/UNIX-like systems, written with security primarily in mind. Dovecot is an excellent choice for both small and large installations. It's fast, simple to set up, requires no special administration and it uses very little memory."
+SECTION = "mail"
+LICENSE = "LGPLv2.1 & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a981379bd0f1c362f8d1d21515e5b30b"
+
+SRC_URI = "http://dovecot.org/releases/2.2/dovecot-${PV}.tar.gz \
+ file://0001-configure.ac-convert-AC_TRY_RUN-to-AC_TRY_LINK-state.patch \
+ file://dovecot.service \
+ file://dovecot.socket \
+ file://0001-doveadm-Fix-parallel-build.patch \
+ "
+
+SRC_URI[md5sum] = "d61d1e923a22f9062cc9f47696882666"
+SRC_URI[sha256sum] = "e9483d68a7698d701bc06124fcf6e1b1f16380c2986c7ec0cf4e1475b9d0c218"
+
+DEPENDS = "openssl xz zlib bzip2 libcap icu"
+
+DEPENDS_append_libc-musl = " libtirpc"
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/tirpc"
+LDFLAGS_append_libc-musl = " -ltirpc"
+
+inherit autotools pkgconfig systemd useradd
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ldap pam', d)}"
+
+PACKAGECONFIG[pam] = "--with-pam,--without-pam,libpam,"
+PACKAGECONFIG[ldap] = "--with-ldap=plugin,--without-ldap,openldap,"
+PACKAGECONFIG[lz4] = "--with-lz4,--without-lz4,lz4,"
+
+# From native build in armv7a-hf/eglibc
+CACHED_CONFIGUREVARS += "i_cv_signed_size_t=no \
+ i_cv_gmtime_max_time_t=32 \
+ i_cv_signed_time_t=yes \
+ i_cv_mmap_plays_with_write=yes \
+ i_cv_fd_passing=yes \
+ i_cv_c99_vsnprintf=yes \
+ lib_cv___va_copy=yes \
+ lib_cv_va_copy=yes \
+ lib_cv_va_val_copy=yes \
+ "
+
+# hardcode epoll() to avoid running unsafe tests
+# BSD needs kqueue and uclibc poll()
+EXTRA_OECONF = " --with-ioloop=epoll \
+ --with-systemdsystemunitdir=${systemd_unitdir}/system"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "dovecot.service dovecot.socket"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+do_install_append () {
+ install -d 755 ${D}/etc/dovecot
+ touch 644 ${D}/etc/dovecot/dovecot.conf
+ install -m 0644 ${WORKDIR}/dovecot.service ${D}${systemd_unitdir}/system
+ sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' ${D}${systemd_unitdir}/system/dovecot.service
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/dovecot.service
+}
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "-r -d ${libexecdir} -M -s ${base_sbindir}/nologin -g dovecot dovecot; \
+ -r -d ${libexecdir} -M -s ${base_sbindir}/nologin -g dovenull dovenull"
+GROUPADD_PARAM_${PN} = "-f -r dovecot;-f -r dovenull"
+
+FILES_${PN} += "${libdir}/dovecot/*plugin.so \
+ ${libdir}/dovecot/libfs_compress.so \
+ ${libdir}/dovecot/libssl_iostream_openssl.so"
+FILES_${PN}-staticdev += "${libdir}/dovecot/*/*.a"
+FILES_${PN}-dev += "${libdir}/dovecot/libdovecot*.so"
+FILES_${PN}-dbg += "${libdir}/dovecot/*/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils/0001-Makefile.in-fix-permission-bits-for-drbd.service.patch b/meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils/0001-Makefile.in-fix-permission-bits-for-drbd.service.patch
new file mode 100644
index 000000000..90dd1f861
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils/0001-Makefile.in-fix-permission-bits-for-drbd.service.patch
@@ -0,0 +1,25 @@
+Upstream-Status: Pending
+
+Subject: Makefile.in: fix permission bits for drbd.service
+
+Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
+---
+ scripts/Makefile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/scripts/Makefile.in b/scripts/Makefile.in
+index 402b93b..4a45407 100644
+--- a/scripts/Makefile.in
++++ b/scripts/Makefile.in
+@@ -65,7 +65,7 @@ endif
+ # yes, debian apparently allows installing both types from the same package
+ ifneq ($(initscripttype),sysv) # "systemd" or "both"
+ install -d $(DESTDIR)$(systemdunitdir)
+- install -m 755 drbd.service $(DESTDIR)$(systemdunitdir)/
++ install -m 644 drbd.service $(DESTDIR)$(systemdunitdir)/
+ install -d $(DESTDIR)/lib/drbd/
+ install -m 755 drbd $(DESTDIR)/lib/drbd/
+ install -d $(DESTDIR)$(tmpfilesdir)/
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils_8.9.6.bb b/meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils_8.9.6.bb
new file mode 100644
index 000000000..81f1cfec5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/drbd/drbd-utils_8.9.6.bb
@@ -0,0 +1,46 @@
+SUMMARY = "Distributed block device driver for Linux"
+DESCRIPTION = "DRBD mirrors a block device over the network to another machine.\
+DRBD mirrors a block device over the network to another machine.\
+Think of it as networked raid 1. It is a building block for\
+setting up high availability (HA) clusters."
+HOMEPAGE = "http://www.drbd.org/"
+SECTION = "admin"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5574c6965ae5f583e55880e397fbb018"
+
+SRC_URI = "http://www.linbit.com/downloads/drbd/utils/archive/${BP}.tar.gz \
+ file://0001-Makefile.in-fix-permission-bits-for-drbd.service.patch \
+ "
+SRC_URI[md5sum] = "76ed6d3190cd77b00890f3365353124b"
+SRC_URI[sha256sum] = "297b77c9b3f88de2e7dae459234f2753ea4fc2805282b2d276e35cf51e292913"
+
+SYSTEMD_SERVICE_${PN} = "drbd.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+inherit autotools-brokensep systemd
+
+EXTRA_OECONF = " \
+ --with-initdir=/etc/init.d \
+ --without-pacemaker \
+ --without-rgmanager \
+ --without-bashcompletion \
+ --with-distro debian \
+ --with-initscripttype=both \
+ --with-systemdunitdir=${systemd_unitdir}/system \
+ --without-manual\
+ "
+
+do_install_append() {
+ # don't install empty /var/lock to avoid conflict with base-files
+ rm -rf ${D}${localstatedir}/lock
+}
+
+RDEPENDS_${PN} += "bash perl-module-getopt-long perl-module-exporter perl-module-constant perl-module-overloading perl-module-exporter-heavy"
+
+# The drbd items are explicitly put under /lib when installed.
+#
+FILES_${PN} += "/run"
+FILES_${PN} += "${nonarch_base_libdir}/drbd \
+ ${nonarch_libdir}/drbd \
+ ${nonarch_libdir}/tmpfiles.d"
+FILES_${PN}-dbg += "${nonarch_base_libdir}/drbd/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-support/drbd/drbd/check_existence_of_modules_before_installing.patch b/meta-openembedded/meta-networking/recipes-support/drbd/drbd/check_existence_of_modules_before_installing.patch
new file mode 100644
index 000000000..6414f7305
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/drbd/drbd/check_existence_of_modules_before_installing.patch
@@ -0,0 +1,24 @@
+If CONFIG_BLK_DEV_DRBD kernel config is enabled, then DRBD
+does not build drbd.ko here. Under this circumstance do_install
+task is going to fail with a below error:
+-- snip --
+| install: cannot stat ‘drbd.ko’: No such file or directory
+| make[1]: *** [install] Error 1
+-- snip --
+
+So, check for kernel module existence before installing.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
+--- drbd-9.0.1-1/drbd/Makefile 2016-07-03 06:54:19.421538690 -0700
++++ drbd-9.0.1-1/drbd/Makefile_mod 2016-07-03 06:53:18.938801628 -0700
+@@ -158,7 +158,7 @@ else
+ fi
+ install -d $(DESTDIR)/lib/modules/$(KERNELRELEASE)/$(MODSUBDIR)
+ set -e ; for ko in $(MODOBJS); do \
+- install -m 644 $$ko $(DESTDIR)/lib/modules/$(KERNELRELEASE)/$(MODSUBDIR); \
++ [ -e $$ko ] && install -m 644 $$ko $(DESTDIR)/lib/modules/$(KERNELRELEASE)/$(MODSUBDIR); \
+ done
+ ifeq ($(DESTDIR),/)
+ ifeq ($(shell uname -r),$(KERNELRELEASE))
diff --git a/meta-openembedded/meta-networking/recipes-support/drbd/drbd_9.0.8-1.bb b/meta-openembedded/meta-networking/recipes-support/drbd/drbd_9.0.8-1.bb
new file mode 100644
index 000000000..fa4d10b4c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/drbd/drbd_9.0.8-1.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Distributed block device driver for Linux"
+DESCRIPTION = "DRBD is a block device which is designed to build high \
+ availability clusters. This is done by mirroring a whole \
+ block device via (a dedicated) network. You could see \
+ it as a network raid-1."
+HOMEPAGE = "http://oss.linbit.com/drbd/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5574c6965ae5f583e55880e397fbb018"
+DEPENDS = "virtual/kernel"
+
+SRC_URI = "http://www.linbit.com/downloads/drbd/9.0/drbd-${PV}.tar.gz \
+ file://check_existence_of_modules_before_installing.patch"
+
+SRC_URI[md5sum] = "c1dd58043f46e9926b579aa65d4ea980"
+SRC_URI[sha256sum] = "87f72d46db9bad926415b3ab9f5f1397de8c581d2e2ec1addbdd5ce2604e6123"
+inherit module
+
+EXTRA_OEMAKE += "KDIR='${STAGING_KERNEL_DIR}'"
+
+do_install () {
+ oe_runmake install DESTDIR="${D}"
+}
+
+PNBLACKLIST[drbd] = "implicit declaration of function 'setup_timer'; 4.15 head file issue?"
diff --git a/meta-openembedded/meta-networking/recipes-support/esmtp/esmtp_1.2.bb b/meta-openembedded/meta-networking/recipes-support/esmtp/esmtp_1.2.bb
new file mode 100644
index 000000000..2da73e775
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/esmtp/esmtp_1.2.bb
@@ -0,0 +1,45 @@
+SUMMARY = "User configurable send-only Mail Transfer Agent"
+DESCRIPTION = "ESMTP is a user-configurable relay-only MTA \
+with a sendmail-compatible syntax, based on libESMTP and \
+supporting the AUTH (including the CRAM-MD5 and NTLM SASL \
+mechanisms) and StartTLS SMTP extensions."
+HOMEPAGE = "http://esmtp.sourceforge.net/"
+SECTION = "net"
+
+DEPENDS = "libesmtp"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${PV}/${BPN}-${PV}.tar.bz2"
+
+# Have to set this or we get -L/lib in LDFLAGS
+EXTRA_OECONF = "--with-libesmtp=${STAGING_EXECPREFIXDIR}"
+
+inherit autotools update-alternatives
+
+ALTERNATIVE_${PN} = "sendmail"
+
+ALTERNATIVE_LINK_NAME[sendmail] = "${sbindir}/sendmail"
+ALTERNATIVE_TARGET[sendmail] = "${bindir}/esmtp"
+ALTERNATIVE_PRIORITY = "10"
+
+ALTERNATIVE_${PN}-doc += "mailq.1 newaliases.1 sendmail.1"
+ALTERNATIVE_LINK_NAME[mailq.1] = "${mandir}/man1/mailq.1"
+ALTERNATIVE_LINK_NAME[newaliases.1] = "${mandir}/man1/newaliases.1"
+ALTERNATIVE_LINK_NAME[sendmail.1] = "${mandir}/man1/sendmail.1"
+
+SRC_URI[md5sum] = "79a9c1f9023d53f35bb82bf446150a72"
+SRC_URI[sha256sum] = "a0d26931bf731f97514da266d079d8bc7d73c65b3499ed080576ab606b21c0ce"
+
+do_install_append() {
+ # only one file /usr/lib/sendmail in ${D}${libdir}
+ rm -rf ${D}${libdir}
+}
+
+pkg_postinst_${PN}_linuxstdbase () {
+ # /usr/lib/sendmial is required by LSB core test
+ [ ! -L $D/usr/lib/sendmail ] && ln -sf ${sbindir}/sendmail $D/usr/lib/
+}
+
+FILES_${PN} += "${libdir}/"
diff --git a/meta-openembedded/meta-networking/recipes-support/fetchmail/fetchmail_6.3.26.bb b/meta-openembedded/meta-networking/recipes-support/fetchmail/fetchmail_6.3.26.bb
new file mode 100644
index 000000000..1d78288c8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/fetchmail/fetchmail_6.3.26.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Fetchmail retrieves mail from remote mail servers and forwards it via SMTP"
+HOMEPAGE = "http://www.fetchmail.info/"
+DESCRIPTION = "Fetchmail is a full-featured, robust, well-documented remote-mail retrieval and forwarding utility intended to be used over on-demand TCP/IP links (such as SLIP or PPP connections). It supports every remote-mail protocol now in use on the Internet: POP2, POP3, RPOP, APOP, KPOP, all flavors of IMAP, ETRN, and ODMR. It can even support IPv6 and IPSEC."
+SECTION = "mail"
+LICENSE = "GPLv2 & MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbb509e0303f5ded1cbfc0cc8705f28c"
+
+DEPENDS = "openssl"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "61b66faad044afa26e142bb1791aa2b3"
+SRC_URI[sha256sum] = "79b4c54cdbaf02c1a9a691d9948fcb1a77a1591a813e904283a8b614b757e850"
+
+inherit autotools gettext python-dir pythonnative
+
+EXTRA_OECONF = "--with-ssl=${STAGING_DIR_HOST}${prefix}"
+
+PACKAGES =+ "fetchmail-python"
+FILES_fetchmail-python = "${libdir}/${PYTHON_DIR}/*"
diff --git a/meta-openembedded/meta-networking/recipes-support/fping/fping_3.5.bb b/meta-openembedded/meta-networking/recipes-support/fping/fping_3.5.bb
new file mode 100644
index 000000000..82e3bf073
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/fping/fping_3.5.bb
@@ -0,0 +1,25 @@
+SUMMARY = "sends ICMP ECHO_REQUEST packets to network hosts"
+DESCRIPTION = "fping is a ping like program which uses the Internet Control \
+Message Protocol (ICMP) echo request to determine if a target host is \
+responding. fping differs from ping in that you can specify any number of \
+targets on the command line, or specify a file containing the lists of \
+targets to ping. Instead of sending to one target until it times out or \
+replies, fping will send out a ping packet and move on to the next target \
+in a round-robin fashion."
+HOMEPAGE = "http://www.fping.org/"
+SECTION = "net"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=09d77789fe32be35acde9637a5ee39b1"
+
+SRC_URI = "http://www.fping.org/dist/fping-${PV}.tar.gz"
+SRC_URI[md5sum] = "2e17cb655aa4eb59b5a4a38a89e746ed"
+SRC_URI[sha256sum] = "09b8960e235341bae6000085d38106357eae656a79e0119bd27e816c9003656a"
+
+S = "${WORKDIR}/fping-${PV}"
+
+inherit autotools
+
+EXTRA_OECONF = "--enable-ipv4"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-networking/recipes-support/fwknop/fwknop_2.6.9.bb b/meta-openembedded/meta-networking/recipes-support/fwknop/fwknop_2.6.9.bb
new file mode 100644
index 000000000..0fd5f6fed
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/fwknop/fwknop_2.6.9.bb
@@ -0,0 +1,37 @@
+SUMMARY = "fwknop - Single Packet Authorization"
+HOMEPAGE = "http://www.cipherdyne.org/fwknop/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552 \
+ "
+inherit autotools-brokensep
+
+SRC_URI = "http://www.cipherdyne.org/${BPN}/download/${BPN}-${PV}.tar.bz2 \
+ "
+
+SRC_URI[md5sum] = "e2c49e9674888a028bd443a55c3aaa22"
+SRC_URI[sha256sum] = "5bf47fe1fd30e862d29464f762c0b8bf89b5e298665c37624d6707826da956d4"
+
+DEPENDS = "libpcap gpgme"
+
+EXTRA_OECONF = " --with-iptables=/usr/sbin/iptables \
+ "
+
+do_configure () {
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/config
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/config
+
+ aclocal
+ libtoolize --automake --copy --force
+ autoconf
+ autoheader
+ automake -a
+ oe_runconf
+}
+
+PACKAGES =+ "${PN}-client ${PN}-daemon"
+
+FILES_${PN}-client = "${bindir}/fwknop"
+FILES_${PN}-daemon = "${sbindir}/fwknopd \
+ ${sysconfdir}/fwknop/access.conf \
+ ${sysconfdir}/fwknop/fwknopd.conf"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/geoip/files/run-ptest b/meta-openembedded/meta-networking/recipes-support/geoip/files/run-ptest
new file mode 100644
index 000000000..14e96191f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/geoip/files/run-ptest
@@ -0,0 +1,11 @@
+#!/bin/sh
+pdir=`dirname $0`
+cd ${pdir}/tests
+for i in ./benchmark ./test-geoip-city ; do
+ ${i} 1>/dev/null 2>&1;
+ if [ $? == 0 ]; then
+ echo PASS: $i;
+ else
+ echo FAIL: $i;
+ fi;
+done
diff --git a/meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl/run-ptest b/meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl/run-ptest
new file mode 100644
index 000000000..5404c247b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl/run-ptest
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# The tests contain hard-coded relative paths and must be
+# executed from $pdir.
+#
+pdir=`dirname $0`
+cd ${pdir}
+for i in t/*.t ; do
+ perl ${i} 1>/dev/null 2>&1;
+ if [ $? == 0 ]; then
+ echo PASS: $i;
+ else
+ echo FAIL: $i;
+ fi;
+done
diff --git a/meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl_1.50.bb b/meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl_1.50.bb
new file mode 100644
index 000000000..95147bdad
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/geoip/geoip-perl_1.50.bb
@@ -0,0 +1,35 @@
+#
+# Copyright (C) 2014, 2015 Wind River Systems, Inc.
+# Released under the MIT license (see COPYING.MIT for the terms)
+#
+SUMMARY = "GeoIP perl API library to access location database"
+DESCRIPTION = "perl library for country/city/organization to IP address or hostname mapping"
+HOMEPAGE = "http://www.maxmind.com/app/ip-location"
+SECTION = "libdevel"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b7a36f55e8ba62aadd74e4f0886a405e"
+
+S = "${WORKDIR}/git"
+SRCREV = "47f7d49bd15cfc2e5f8c0f5c4068dc8bb0e10e96"
+SRC_URI = "git://github.com/maxmind/geoip-api-perl.git;protocol=https; \
+ file://run-ptest \
+"
+
+DEPENDS += "geoip"
+
+inherit cpan ptest
+
+EXTRA_CPANFLAGS = "LIBS='-L${STAGING_LIBDIR}' INC='-I${STAGING_INCDIR}'"
+
+
+# perl scripts and some special small data files
+#
+do_install_ptest () {
+ install -d -m 0755 ${D}${PTEST_PATH}/t/data
+
+ install ${S}/t/*.t* ${D}${PTEST_PATH}/t
+ install ${S}/t/data/* ${D}${PTEST_PATH}/t/data
+}
+
+FILES_${PN}-dbg += "${libdir}/perl/vendor_perl/*/auto/Geo/IP/.debug"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/geoip/geoip_1.6.11.bb b/meta-openembedded/meta-networking/recipes-support/geoip/geoip_1.6.11.bb
new file mode 100644
index 000000000..3527d0cba
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/geoip/geoip_1.6.11.bb
@@ -0,0 +1,90 @@
+SUMMARY = "C library for country/city/organization to IP address or hostname mapping"
+DESCRIPTION = "GeoIP is a C library that enables the user to find the country that any IP \
+address or hostname originates from. It uses a file based database that is \
+accurate as of March 2003. This database simply contains IP blocks as keys, and \
+countries as values. This database should be more complete and accurate than \
+using reverse DNS lookups."
+
+HOMEPAGE = "http://dev.maxmind.com/geoip/"
+SECTION = "libdevel"
+
+SRC_URI = "git://github.com/maxmind/geoip-api-c.git \
+ http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz;apply=no;name=GeoIP-dat \
+ http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz;apply=no;name=GeoIPv6-dat \
+ http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz;apply=no;name=GeoLiteCity-dat \
+ http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz;apply=no;name=GeoLiteCityv6-dat \
+ file://run-ptest \
+"
+SRCREV = "3169a8a88808c8df862e0b0355f99c738cce9f7e"
+
+SRC_URI[GeoIP-dat.md5sum] = "37c84ead332dda0362a5ac7b049b72d4"
+SRC_URI[GeoIP-dat.sha256sum] = "79ff1099e96c2dc1c2539c9a18aaa13a9afd085cae477df60d95f1644d42bc07"
+
+SRC_URI[GeoIPv6-dat.md5sum] = "e75b84a4044e81d6d4484e33816bc762"
+SRC_URI[GeoIPv6-dat.sha256sum] = "a009b0f21968d2868e6dd19d14f3c3b8cd60ae84a4bfc2970df34d771a04811e"
+
+SRC_URI[GeoLiteCity-dat.md5sum] = "4b6588d0bfe1af22e267ac90aa97f769"
+SRC_URI[GeoLiteCity-dat.sha256sum] = "8a6467033a528f68b1a97de24d9d0ce86c8e8e83683820e16e433ddbd3f712f7"
+
+SRC_URI[GeoLiteCityv6-dat.md5sum] = "ad0cb42518af7f752499425dca0952bb"
+SRC_URI[GeoLiteCityv6-dat.sha256sum] = "eda67f4204ba9fa5204a53cdb629167cca9394c712f5378bc723a8c29c0b440f"
+
+LICENSE = "LGPL-2.1"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad \
+ file://LICENSE;md5=0388276749a542b0d611601fa7c1dcc8 "
+
+S = "${WORKDIR}/git"
+
+inherit autotools
+
+EXTRA_OECONF = "--disable-static \
+ --disable-dependency-tracking "
+
+do_install() {
+ make DESTDIR=${D} install
+ install -d ${D}/${datadir}/GeoIP
+ install ${WORKDIR}/GeoIP.dat ${D}/${datadir}/GeoIP/
+ install ${WORKDIR}/GeoIPv6.dat ${D}/${datadir}/GeoIP/
+ install ${WORKDIR}/GeoLiteCity.dat ${D}/${datadir}/GeoIP/
+ install ${WORKDIR}/GeoLiteCityv6.dat ${D}/${datadir}/GeoIP/
+ ln -s GeoLiteCity.dat ${D}${datadir}/GeoIP/GeoIPCity.dat
+}
+
+PACKAGES =+ "${PN}-database"
+FILES_${PN}-database = ""
+FILES_${PN}-database += "${datadir}/GeoIP/*"
+
+# We cannot do much looking up without databases.
+#
+RDEPENDS_${PN} += "${PN}-database"
+
+inherit ptest
+
+do_configure_ptest() {
+ sed -i -e "s/noinst_PROGRAMS = /test_PROGRAMS = /g" \
+ -e 's:SRCDIR=\\"$(top_srcdir)\\":SRCDIR=\\"$(testdir)\\":' \
+ ${S}/test/Makefile.am
+
+ if ! grep "^testdir = " ${S}/test/Makefile.am ; then
+ sed -e '/EXTRA_PROGRAMS = /itestdir = ${PTEST_PATH}/tests' \
+ -i ${S}/test/Makefile.am
+ fi
+
+ sed -i -e "s:/usr/local/share:/usr/share:g" \
+ ${S}/test/benchmark.c
+
+ sed -i -e 's:"../data/:"/usr/share/GeoIP/:g' \
+ ${S}/test/test-geoip-city.c \
+ ${S}/test/test-geoip-isp.c \
+ ${S}/test/test-geoip-asnum.c \
+ ${S}/test/test-geoip-netspeed.c \
+ ${S}/test/test-geoip-org.c \
+ ${S}/test/test-geoip-region.c
+}
+
+
+do_install_ptest() {
+ oe_runmake -C test DESTDIR=${D} install-testPROGRAMS
+ install ${S}/test/*.txt ${D}${PTEST_PATH}/tests
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/GeoIP.conf b/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/GeoIP.conf
new file mode 100644
index 000000000..134cfed1f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/GeoIP.conf
@@ -0,0 +1,11 @@
+# The following UserId and LicenseKey are required placeholders:
+UserId 999999
+LicenseKey 000000000000
+
+# Include one or more of the following ProductIds:
+# * GeoLite2-City - GeoLite 2 City
+# * GeoLite2-Country - GeoLite2 Country
+# * 506 - GeoLite Legacy Country
+# * 517 - GeoLite Legacy ASN
+# * 533 - GeoLite Legacy City
+ProductIds GeoLite2-City GeoLite2-Country 506 517 533
diff --git a/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/geoipupdate.cron b/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/geoipupdate.cron
new file mode 100644
index 000000000..40597a856
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate-2.5.0/geoipupdate.cron
@@ -0,0 +1,5 @@
+# top of crontab
+MAILTO=your@email.com
+
+32 11 * * 4 /usr/local/bin/geoipupdate
+# end of crontab
diff --git a/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate_2.5.0.bb b/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate_2.5.0.bb
new file mode 100644
index 000000000..f4eb2b799
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/geoip/geoipupdate_2.5.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Crontab entry to provide weekly updates of the GeoIP free databases."
+DESCRIPTION = "update databases for GeoIP"
+
+HOMEPAGE = "http://dev.maxmind.com/geoip/"
+SECTION = "net"
+
+DEPENDS = "zlib curl"
+
+SRC_URI = "https://github.com/maxmind/geoipupdate/releases/download/v2.5.0/geoipupdate-2.5.0.tar.gz \
+ file://GeoIP.conf \
+ file://geoipupdate.cron \
+ "
+SRC_URI[md5sum] = "28f633c49ec87ab01ad3c0fb0228a696"
+SRC_URI[sha256sum] = "5119fd0e338cd083e886228b26679c64bcbaade8a815be092aecf865a610ab26"
+
+LICENSE = "GPLv2"
+
+LIC_FILES_CHKSUM = "\
+file://ChangeLog.md;md5=11d2e31df0de2be3ccc3e2286c4dafcb \
+"
+FILES_${PN} = "/usr/share/GeoIP \
+ /etc/GeoIP.conf \
+ /etc/cron.d/geoipupdate.cron \
+ /usr/bin/geoipupdate \
+"
+inherit autotools
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}
+ install -d ${D}/${sysconfdir}/cron.d
+ install ${WORKDIR}/GeoIP.conf ${D}/${sysconfdir}/
+ install ${WORKDIR}/geoipupdate.cron ${D}/${sysconfdir}/cron.d/
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/ifenslave/ifenslave_2.9.bb b/meta-openembedded/meta-networking/recipes-support/ifenslave/ifenslave_2.9.bb
new file mode 100644
index 000000000..ea28b34aa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ifenslave/ifenslave_2.9.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Configure network interfaces for parallel routing"
+HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/networking/bonding"
+SECTION = "net"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=acc89812938cf9ad6b1debc37cea0253"
+
+
+SRCREV = "42bfbb9beb924672ca86b86e9679ac3d6b87d992"
+SRC_URI = "git://anonscm.debian.org/collab-maint/ifenslave.git"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${S}/ifenslave ${D}${sbindir}/
+
+ install -m 0755 -D ${S}/debian/ifenslave.if-pre-up ${D}${sysconfdir}/network/if-pre-up.d/ifenslave
+ install -m 0755 -D ${S}/debian/ifenslave.if-post-down ${D}${sysconfdir}/network/if-post-down.d/ifenslave
+ install -m 0755 -D ${S}/debian/ifenslave.if-up ${D}${sysconfdir}/network/if-up.d/ifenslave
+ install -m 0644 -D ${S}/debian/ifenslave.8 ${D}${mandir}/man8/ifenslave.8
+}
+
+FILES_${PN}-doc_remove = "${mandir}"
+FILES_${PN} += "${mandir}/man8/ifenslave.8"
+
+RDEPENDS_${PN} = "man"
diff --git a/meta-openembedded/meta-networking/recipes-support/iftop/iftop_1.0pre4.bb b/meta-openembedded/meta-networking/recipes-support/iftop/iftop_1.0pre4.bb
new file mode 100644
index 000000000..0c8e494c1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/iftop/iftop_1.0pre4.bb
@@ -0,0 +1,14 @@
+SUMMARY = "iftop does for network usage what top(1) does for CPU usage"
+HOMEPAGE = "http://www.ex-parrot.com/pdw/iftop/"
+SECTION = "net"
+DEPENDS = "libpcap ncurses"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=76498170798db0f4f0fb685a225f702f"
+
+SRC_URI = "http://www.ex-parrot.com/pdw/iftop/download/iftop-${PV}.tar.gz"
+SRC_URI[md5sum] = "7e6decb4958e8a4890cccac335239f24"
+SRC_URI[sha256sum] = "f733eeea371a7577f8fe353d86dd88d16f5b2a2e702bd96f5ffb2c197d9b4f97"
+
+inherit autotools-brokensep
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc/0001-Makefile-pass-extra-linker-flags.patch b/meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc/0001-Makefile-pass-extra-linker-flags.patch
new file mode 100644
index 000000000..38d306475
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc/0001-Makefile-pass-extra-linker-flags.patch
@@ -0,0 +1,31 @@
+From fd80c0599083013a1b583feba5d7473f52b35938 Mon Sep 17 00:00:00 2001
+From: Mariia Movchan <mmovchan@cisco.com>
+Date: Tue, 6 Mar 2018 16:03:39 +0200
+Subject: [PATCH] Makefile: pass extra linker flags
+
+Fixes
+ERROR: QA Issue: No GNU_HASH in the elf binary
+
+Upstream-Status: Pending
+
+Signed-off-by: Mariia Movchan <mmovchan@cisco.com>
+---
+ Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile b/Makefile
+index 8beff8f..047f02a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -8,7 +8,7 @@ LIBS?=
+ VERSION=0.2.2
+ CC?=gcc
+ CFLAGS?=-O2 -g -Wall
+-LDFLAGS=$(LIBS)
++LDFLAGS+=$(LIBS)
+
+ ifeq ($(USE_GEOIP),yes)
+ ifeq ($(USE_DYN_GEOIP),yes)
+--
+2.15.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc_0.2.2.bb b/meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc_0.2.2.bb
new file mode 100644
index 000000000..b45642404
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipcalc/ipcalc_0.2.2.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Tool to assist in network address calculations for IPv4 and IPv6."
+HOMEPAGE = "https://github.com/nmav/ipcalc"
+
+SECTION = "net"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+S = "${WORKDIR}/git"
+SRCREV = "8348808a7869ca8f25a5b5deeaa418c2f6d52758"
+SRC_URI = "\
+ git://github.com/nmav/ipcalc.git;protocol=https; \
+ file://0001-Makefile-pass-extra-linker-flags.patch \
+"
+
+export USE_GEOIP = "no"
+
+do_install() {
+ install -d ${D}/${bindir}
+ install -m 0755 ${S}/ipcalc ${D}/${bindir}
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-build-with-clang.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-build-with-clang.patch
new file mode 100644
index 000000000..5c0914745
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-build-with-clang.patch
@@ -0,0 +1,115 @@
+From 9135ca401186fb14e5e5110bbb04d1ccc480360a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 15 Nov 2016 04:15:44 +0000
+Subject: [PATCH] Fix build with clang
+
+Fixes for following errors found by clang
+
+src/racoon/eaytest.c:316:6: error: comparison of array 'dnstr_w1' not equal to a null pointer is always true
+ [-Werror,-Wtautological-pointer-compare]
+ if (dnstr_w1 != NULL) {
+ ^~~~~~~~ ~~~~
+src/racoon/eaytest.c:326:6: error: comparison of array 'dnstr_w1' not equal to a null pointer is always true
+ [-Werror,-Wtautological-pointer-compare]
+ if (dnstr_w1 != NULL) {
+ ^~~~~~~~ ~~~~
+
+src/racoon/isakmp.c:1134:11: error: promoted type 'int' of K&R function parameter is not compatible with the
+ parameter type 'u_int8_t' (aka 'unsigned char') declared in a previous prototype [-Werror,-Wknr-promoted-parameter]
+ u_int8_t etype;
+ ^
+src/racoon/isakmp.c:184:48: note: previous declaration is here
+ struct sockaddr *, struct sockaddr *, u_int8_t));
+ ^
+ 1 error generated.
+
+src/racoon/racoonctl.c:1457:15: error: incompatible pointer types passing 'struct evt_async *' to parameter of type
+ 'caddr_t' (aka 'char *') [-Werror,-Wincompatible-pointer-types]
+ print_cfg(ec, len);
+ ^~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/racoon/eaytest.c | 4 ++--
+ src/racoon/isakmp.c | 10 +++++-----
+ src/racoon/racoonctl.c | 7 +++----
+ 3 files changed, 10 insertions(+), 11 deletions(-)
+
+diff --git a/src/racoon/eaytest.c b/src/racoon/eaytest.c
+index 1474bdc..d609e4f 100644
+--- a/src/racoon/eaytest.c
++++ b/src/racoon/eaytest.c
+@@ -313,7 +313,7 @@ certtest(ac, av)
+
+ printf("exact match: succeed.\n");
+
+- if (dnstr_w1 != NULL) {
++ if (dnstr_w1[0] != '\0') {
+ asn1dn = eay_str2asn1dn(dnstr_w1, strlen(dnstr_w1));
+ if (asn1dn == NULL || asn1dn->l == asn1dn0.l)
+ errx(1, "asn1dn length wrong for wildcard 1\n");
+@@ -323,7 +323,7 @@ certtest(ac, av)
+ printf("wildcard 1 match: succeed.\n");
+ }
+
+- if (dnstr_w1 != NULL) {
++ if (dnstr_w1[0] != '\0') {
+ asn1dn = eay_str2asn1dn(dnstr_w2, strlen(dnstr_w2));
+ if (asn1dn == NULL || asn1dn->l == asn1dn0.l)
+ errx(1, "asn1dn length wrong for wildcard 2\n");
+diff --git a/src/racoon/isakmp.c b/src/racoon/isakmp.c
+index 2672f7a..da7ebe8 100644
+--- a/src/racoon/isakmp.c
++++ b/src/racoon/isakmp.c
+@@ -567,7 +567,7 @@ isakmp_main(msg, remote, local)
+
+ /* it must be responder's 1st exchange. */
+ if (isakmp_ph1begin_r(msg, remote, local,
+- isakmp->etype) < 0)
++ (u_int8_t)isakmp->etype) < 0)
+ return -1;
+ break;
+
+@@ -1128,10 +1128,10 @@ isakmp_ph1begin_i(rmconf, remote, local)
+
+ /* new negotiation of phase 1 for responder */
+ static int
+-isakmp_ph1begin_r(msg, remote, local, etype)
+- vchar_t *msg;
+- struct sockaddr *remote, *local;
+- u_int8_t etype;
++isakmp_ph1begin_r(vchar_t *msg,
++ struct sockaddr *remote,
++ struct sockaddr *local,
++ u_int8_t etype)
+ {
+ struct isakmp *isakmp = (struct isakmp *)msg->v;
+ struct ph1handle *iph1;
+diff --git a/src/racoon/racoonctl.c b/src/racoon/racoonctl.c
+index da28ecd..bbf068e 100644
+--- a/src/racoon/racoonctl.c
++++ b/src/racoon/racoonctl.c
+@@ -1299,9 +1299,8 @@ print_evt(evtdump)
+ * Print ISAKMP mode config info (IP and banner)
+ */
+ void
+-print_cfg(buf, len)
+- caddr_t buf;
+- int len;
++print_cfg(caddr_t buf,
++ int len)
+ {
+ struct evt_async *evtdump = (struct evt_async *)buf;
+ struct isakmp_data *attr;
+@@ -1454,7 +1453,7 @@ handle_recv(combuf)
+ else if (evt_quit_event == ec->ec_type) {
+ switch (ec->ec_type) {
+ case EVT_PHASE1_MODE_CFG:
+- print_cfg(ec, len);
++ print_cfg((caddr_t)ec, len);
+ break;
+ default:
+ print_evt(ec);
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-header-issues-found-with-musl-libc.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-header-issues-found-with-musl-libc.patch
new file mode 100644
index 000000000..630ecdb5f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-Fix-header-issues-found-with-musl-libc.patch
@@ -0,0 +1,249 @@
+From 7d9585be093c9cb2428b373c0b0088bb778942d0 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Mon, 20 Mar 2017 21:37:47 -0700
+Subject: [PATCH] Fix header issues found with musl libc
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/libipsec/ipsec_strerror.h | 3 +++
+ src/libipsec/libpfkey.h | 4 +++-
+ src/racoon/admin.c | 2 +-
+ src/racoon/backupsa.c | 6 +++---
+ src/racoon/cftoken.l | 4 ++++
+ src/racoon/logger.h | 3 +++
+ src/racoon/misc.h | 3 +++
+ src/racoon/missing/crypto/sha2/sha2.h | 3 +++
+ src/racoon/netdb_dnssec.h | 3 +++
+ src/racoon/pfkey.c | 1 -
+ src/racoon/plog.h | 2 ++
+ src/racoon/str2val.h | 3 +++
+ src/racoon/vmbuf.h | 3 +++
+ src/setkey/extern.h | 3 ++-
+ src/setkey/setkey.c | 1 -
+ 15 files changed, 36 insertions(+), 8 deletions(-)
+
+diff --git a/src/libipsec/ipsec_strerror.h b/src/libipsec/ipsec_strerror.h
+index 2b4264f..dac66a1 100644
+--- a/src/libipsec/ipsec_strerror.h
++++ b/src/libipsec/ipsec_strerror.h
+@@ -34,6 +34,9 @@
+ #ifndef _IPSEC_STRERROR_H
+ #define _IPSEC_STRERROR_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ extern int __ipsec_errcode;
+ extern void __ipsec_set_strerror __P((const char *));
+
+diff --git a/src/libipsec/libpfkey.h b/src/libipsec/libpfkey.h
+index 61d2f2a..f7991b7 100644
+--- a/src/libipsec/libpfkey.h
++++ b/src/libipsec/libpfkey.h
+@@ -34,6 +34,9 @@
+ #ifndef _LIBPFKEY_H
+ #define _LIBPFKEY_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ #ifndef KAME_LIBPFKEY_H
+ #define KAME_LIBPFKEY_H
+
+@@ -43,7 +46,6 @@
+
+ #define PRIORITY_OFFSET_POSITIVE_MAX 0x3fffffff
+ #define PRIORITY_OFFSET_NEGATIVE_MAX 0x40000000
+-
+ struct sadb_msg;
+ extern void pfkey_sadump __P((struct sadb_msg *));
+ extern void pfkey_sadump_withports __P((struct sadb_msg *));
+diff --git a/src/racoon/admin.c b/src/racoon/admin.c
+index 4b1875b..03ea3f8 100644
+--- a/src/racoon/admin.c
++++ b/src/racoon/admin.c
+@@ -36,7 +36,6 @@
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #include <sys/socket.h>
+-#include <sys/signal.h>
+ #include <sys/stat.h>
+ #include <sys/un.h>
+
+@@ -46,6 +45,7 @@
+ #include PATH_IPSEC_H
+
+
++#include <signal.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
+diff --git a/src/racoon/backupsa.c b/src/racoon/backupsa.c
+index 82d74ca..95307ca 100644
+--- a/src/racoon/backupsa.c
++++ b/src/racoon/backupsa.c
+@@ -276,9 +276,9 @@ do { \
+ GETNEXTNUM(sa_args.a_keylen, strtoul);
+ GETNEXTNUM(sa_args.flags, strtoul);
+ GETNEXTNUM(sa_args.l_alloc, strtoul);
+- GETNEXTNUM(sa_args.l_bytes, strtouq);
+- GETNEXTNUM(sa_args.l_addtime, strtouq);
+- GETNEXTNUM(sa_args.l_usetime, strtouq);
++ GETNEXTNUM(sa_args.l_bytes, strtoull);
++ GETNEXTNUM(sa_args.l_addtime, strtoull);
++ GETNEXTNUM(sa_args.l_usetime, strtoull);
+ GETNEXTNUM(sa_args.seq, strtoul);
+
+ #undef GETNEXTNUM
+diff --git a/src/racoon/cftoken.l b/src/racoon/cftoken.l
+index 1701922..787f4a9 100644
+--- a/src/racoon/cftoken.l
++++ b/src/racoon/cftoken.l
+@@ -77,6 +77,10 @@
+
+ #include "cfparse.h"
+
++#ifndef GLOB_TILDE
++#define GLOB_TILDE 0
++#endif
++
+ int yyerrorcount = 0;
+
+ #if defined(YIPS_DEBUG)
+diff --git a/src/racoon/logger.h b/src/racoon/logger.h
+index 3fd3e94..67af5f0 100644
+--- a/src/racoon/logger.h
++++ b/src/racoon/logger.h
+@@ -34,6 +34,9 @@
+ #ifndef _LOGGER_H
+ #define _LOGGER_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ struct log {
+ int head;
+ int siz;
+diff --git a/src/racoon/misc.h b/src/racoon/misc.h
+index 3e758d9..30d9825 100644
+--- a/src/racoon/misc.h
++++ b/src/racoon/misc.h
+@@ -34,6 +34,9 @@
+ #ifndef _MISC_H
+ #define _MISC_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ #define BIT2STR(b) bit2str(b, sizeof(b)<<3)
+
+ #ifdef HAVE_FUNC_MACRO
+diff --git a/src/racoon/missing/crypto/sha2/sha2.h b/src/racoon/missing/crypto/sha2/sha2.h
+index 42bcc2a..c043dfe 100644
+--- a/src/racoon/missing/crypto/sha2/sha2.h
++++ b/src/racoon/missing/crypto/sha2/sha2.h
+@@ -40,6 +40,9 @@
+ #ifndef __SHA2_H__
+ #define __SHA2_H__
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+diff --git a/src/racoon/netdb_dnssec.h b/src/racoon/netdb_dnssec.h
+index a11209d..98fd813 100644
+--- a/src/racoon/netdb_dnssec.h
++++ b/src/racoon/netdb_dnssec.h
+@@ -34,6 +34,9 @@
+ #ifndef _NETDB_DNSSEC_H
+ #define _NETDB_DNSSEC_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ #ifndef T_CERT
+ #define T_CERT 37 /* defined by RFC2538 section 2 */
+ #endif
+diff --git a/src/racoon/pfkey.c b/src/racoon/pfkey.c
+index 8f26c19..a06c30e 100644
+--- a/src/racoon/pfkey.c
++++ b/src/racoon/pfkey.c
+@@ -59,7 +59,6 @@
+ #include <sys/param.h>
+ #include <sys/socket.h>
+ #include <sys/queue.h>
+-#include <sys/sysctl.h>
+
+ #include <net/route.h>
+ #include <net/pfkeyv2.h>
+diff --git a/src/racoon/plog.h b/src/racoon/plog.h
+index ed43c8b..920c850 100644
+--- a/src/racoon/plog.h
++++ b/src/racoon/plog.h
+@@ -34,6 +34,8 @@
+ #ifndef _PLOG_H
+ #define _PLOG_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
+ #ifdef HAVE_STDARG_H
+ #include <stdarg.h>
+ #else
+diff --git a/src/racoon/str2val.h b/src/racoon/str2val.h
+index 4a7cec1..d3d698e 100644
+--- a/src/racoon/str2val.h
++++ b/src/racoon/str2val.h
+@@ -34,6 +34,9 @@
+ #ifndef _STR2VAL_H
+ #define _STR2VAL_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ extern caddr_t val2str __P((const char *, size_t));
+ extern char *str2val __P((const char *, int, size_t *));
+
+diff --git a/src/racoon/vmbuf.h b/src/racoon/vmbuf.h
+index 3f2f4ea..8287a00 100644
+--- a/src/racoon/vmbuf.h
++++ b/src/racoon/vmbuf.h
+@@ -34,6 +34,9 @@
+ #ifndef _VMBUF_H
+ #define _VMBUF_H
+
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
++
+ /*
+ * bp v
+ * v v
+diff --git a/src/setkey/extern.h b/src/setkey/extern.h
+index 6f439fa..a1d9d14 100644
+--- a/src/setkey/extern.h
++++ b/src/setkey/extern.h
+@@ -1,6 +1,7 @@
+ /* $NetBSD: extern.h,v 1.5 2009/03/06 11:45:03 tteras Exp $ */
+
+-
++#undef __P
++#define __P(protos) protos /* ANSI C prototypes */
+
+ void parse_init __P((void));
+ int parse __P((FILE **));
+diff --git a/src/setkey/setkey.c b/src/setkey/setkey.c
+index c400faa..51f8b75 100644
+--- a/src/setkey/setkey.c
++++ b/src/setkey/setkey.c
+@@ -40,7 +40,6 @@
+ #include <sys/socket.h>
+ #include <sys/time.h>
+ #include <sys/stat.h>
+-#include <sys/sysctl.h>
+ #include <err.h>
+ #include <netinet/in.h>
+ #include <net/pfkeyv2.h>
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-racoon-pfkey-avoid-potential-null-pointer-dereferenc.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-racoon-pfkey-avoid-potential-null-pointer-dereferenc.patch
new file mode 100644
index 000000000..d5602c03d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0001-racoon-pfkey-avoid-potential-null-pointer-dereferenc.patch
@@ -0,0 +1,33 @@
+From 738a9857be9c92ad2f70be88ccee238e3154a936 Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe.macdonald@windriver.com>
+Date: Wed, 2 Oct 2013 14:20:37 -0400
+Subject: [PATCH] racoon/pfkey: avoid potential null-pointer dereference
+
+Building with -Werror=maybe-uninitialized revealed that 'remote' from
+pk_recvmigrate() could be used with uninitialized data in
+migrate_sp_ike_addresses(). Ensure it is always at a minimum assigned
+NULL.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe MacDonald <joe.macdonald@windriver.com>
+---
+ src/racoon/pfkey.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/racoon/pfkey.c b/src/racoon/pfkey.c
+index d00b166..e0dc1db 100644
+--- a/src/racoon/pfkey.c
++++ b/src/racoon/pfkey.c
+@@ -3352,7 +3352,7 @@ pk_recvmigrate(mhp)
+ struct sockaddr *old_saddr, *new_saddr;
+ struct sockaddr *old_daddr, *new_daddr;
+ struct sockaddr *old_local, *old_remote;
+- struct sockaddr *local, *remote;
++ struct sockaddr *local, *remote = NULL;
+ struct sadb_x_kmaddress *kmaddr;
+ struct sadb_x_policy *xpl;
+ struct sadb_x_ipsecrequest *xisr_list;
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-Don-t-link-against-libfl.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-Don-t-link-against-libfl.patch
new file mode 100644
index 000000000..13e9d73fc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-Don-t-link-against-libfl.patch
@@ -0,0 +1,87 @@
+From e48b9097dce7bc2bfbb9e9c542124d3b5cebab39 Mon Sep 17 00:00:00 2001
+From: Paul Barker <paul@paulbarker.me.uk>
+Date: Wed, 5 Mar 2014 13:39:14 +0000
+Subject: [PATCH] Don't link against libfl
+
+We can remove all references to yywrap by adding "%option noyywrap" statements
+to each flex source file that doesn't override yywrap. After this, we no longer
+need to link against libfl and so no longer get errors about undefined
+references to yylex.
+
+Signed-off-by: Paul Barker <paul@paulbarker.me.uk>
+Upstream-status: Submitted 2014-03-11
+ see http://sourceforge.net/p/ipsec-tools/mailman/ipsec-tools-devel/thread/CANyK_8ewmxGA3vBVJW6s1APXPmxPR%2BDFWZ61EL8pCt288aKQ6w%40mail.gmail.com/#msg32088797
+---
+ src/libipsec/Makefile.am | 1 -
+ src/racoon/Makefile.am | 2 +-
+ src/racoon/cftoken.l | 2 ++
+ src/setkey/Makefile.am | 1 -
+ src/setkey/token.l | 2 ++
+ 5 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/libipsec/Makefile.am b/src/libipsec/Makefile.am
+index 6a4e3b3..df1e106 100644
+--- a/src/libipsec/Makefile.am
++++ b/src/libipsec/Makefile.am
+@@ -26,7 +26,6 @@ libipsec_la_SOURCES = \
+ # version is current:revision:age.
+ # See: http://www.gnu.org/manual/libtool-1.4.2/html_chapter/libtool_6.html#SEC32
+ libipsec_la_LDFLAGS = -version-info 0:1:0
+-libipsec_la_LIBADD = $(LEXLIB)
+
+ noinst_HEADERS = ipsec_strerror.h
+
+diff --git a/src/racoon/Makefile.am b/src/racoon/Makefile.am
+index dbaded9..0662957 100644
+--- a/src/racoon/Makefile.am
++++ b/src/racoon/Makefile.am
+@@ -38,7 +38,7 @@ racoon_SOURCES = \
+ cftoken.l cfparse.y prsa_tok.l prsa_par.y
+ EXTRA_racoon_SOURCES = isakmp_xauth.c isakmp_cfg.c isakmp_unity.c throttle.c \
+ isakmp_frag.c nattraversal.c security.c $(MISSING_ALGOS)
+-racoon_LDADD = $(CRYPTOBJS) $(HYBRID_OBJS) $(NATT_OBJS) $(FRAG_OBJS) $(LEXLIB) \
++racoon_LDADD = $(CRYPTOBJS) $(HYBRID_OBJS) $(NATT_OBJS) $(FRAG_OBJS) \
+ $(SECCTX_OBJS) vmbuf.o sockmisc.o misc.o ../libipsec/libipsec.la
+ racoon_DEPENDENCIES = \
+ $(CRYPTOBJS) $(HYBRID_OBJS) $(NATT_OBJS) $(FRAG_OBJS) $(SECCTX_OBJS) \
+diff --git a/src/racoon/cftoken.l b/src/racoon/cftoken.l
+index 490242c..1701922 100644
+--- a/src/racoon/cftoken.l
++++ b/src/racoon/cftoken.l
+@@ -106,6 +106,8 @@ static int incstackp = 0;
+ static int yy_first_time = 1;
+ %}
+
++%option noyywrap
++
+ /* common seciton */
+ nl \n
+ ws [ \t]+
+diff --git a/src/setkey/Makefile.am b/src/setkey/Makefile.am
+index 746c1f1..389e6cf 100644
+--- a/src/setkey/Makefile.am
++++ b/src/setkey/Makefile.am
+@@ -13,7 +13,6 @@ setkey_SOURCES = \
+
+ setkey_LDFLAGS = ../libipsec/libipsec.la
+ setkey_DEPENDENCIES = ../libipsec/libipsec.la
+-setkey_LDADD = $(LEXLIB)
+
+ noinst_HEADERS = vchar.h extern.h
+ man8_MANS = setkey.8
+diff --git a/src/setkey/token.l b/src/setkey/token.l
+index ad3d843..eb23b76 100644
+--- a/src/setkey/token.l
++++ b/src/setkey/token.l
+@@ -88,6 +88,8 @@
+ #endif
+ %}
+
++%option noyywrap
++
+ /* common section */
+ nl \n
+ ws [ \t]+
+--
+1.9.0
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-cfparse-clear-memory-equal-to-size-of-array.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-cfparse-clear-memory-equal-to-size-of-array.patch
new file mode 100644
index 000000000..e9dd84aaa
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/0002-cfparse-clear-memory-equal-to-size-of-array.patch
@@ -0,0 +1,30 @@
+From a5c59f6a1479947d33dba5191724cc5fc88a614b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 22 Apr 2017 10:39:57 -0700
+Subject: [PATCH 2/2] cfparse: clear memory equal to size of array
+
+Fixes compiler error
+cfparse.y: In function 'set_isakmp_proposal':
+cfparse.y:2567:3: error: 'memset' used with length equal to number of elements without multiplication by element size [-Werror=memset-elt-size]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/racoon/cfparse.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/racoon/cfparse.y b/src/racoon/cfparse.y
+index 0d9bd67..5d9c67b 100644
+--- a/src/racoon/cfparse.y
++++ b/src/racoon/cfparse.y
+@@ -2564,7 +2564,7 @@ set_isakmp_proposal(rmconf)
+ plog(LLV_DEBUG2, LOCATION, NULL,
+ "encklen=%d\n", s->encklen);
+
+- memset(types, 0, ARRAYLEN(types));
++ memset(types, 0, sizeof(types));
+ types[algclass_isakmp_enc] = s->algclass[algclass_isakmp_enc];
+ types[algclass_isakmp_hash] = s->algclass[algclass_isakmp_hash];
+ types[algclass_isakmp_dh] = s->algclass[algclass_isakmp_dh];
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/configure.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/configure.patch
new file mode 100644
index 000000000..8d270a62b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/configure.patch
@@ -0,0 +1,13 @@
+Index: ipsec-tools-0.8.1/configure.ac
+===================================================================
+--- ipsec-tools-0.8.1.orig/configure.ac 2013-01-08 12:43:29.000000000 +0000
++++ ipsec-tools-0.8.1/configure.ac 2014-07-18 07:51:30.045555880 +0000
+@@ -6,7 +6,7 @@
+ AC_CONFIG_SRCDIR([configure.ac])
+ AC_CONFIG_HEADERS(config.h)
+
+-AM_INIT_AUTOMAKE(dist-bzip2)
++AM_INIT_AUTOMAKE([foreign dist-bzip2])
+
+ AC_ENABLE_SHARED(no)
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2015-4047.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2015-4047.patch
new file mode 100644
index 000000000..5286376ac
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2015-4047.patch
@@ -0,0 +1,36 @@
+[PATCH] fix CVE-2015-4047
+
+Upstream-Status: Backport
+
+http://www.openwall.com/lists/oss-security/2015/05/20/1
+
+racoon/gssapi.c in IPsec-Tools 0.8.2 allows remote attackers to cause
+a denial of service (NULL pointer dereference and IKE daemon crash) via
+a series of crafted UDP requests.
+
+https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-4047
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ src/racoon/gssapi.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/racoon/gssapi.c b/src/racoon/gssapi.c
+index e64b201..1ad3b42 100644
+--- a/src/racoon/gssapi.c
++++ b/src/racoon/gssapi.c
+@@ -192,6 +192,11 @@ gssapi_init(struct ph1handle *iph1)
+ gss_name_t princ, canon_princ;
+ OM_uint32 maj_stat, min_stat;
+
++ if (iph1->rmconf == NULL) {
++ plog(LLV_ERROR, LOCATION, NULL, "no remote config\n");
++ return -1;
++ }
++
+ gps = racoon_calloc(1, sizeof (struct gssapi_ph1_state));
+ if (gps == NULL) {
+ plog(LLV_ERROR, LOCATION, NULL, "racoon_calloc failed\n");
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2016-10396.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2016-10396.patch
new file mode 100644
index 000000000..bd0796554
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/fix-CVE-2016-10396.patch
@@ -0,0 +1,207 @@
+Upstream-Status: Backport [https://anonscm.debian.org/cgit/pkg-ipsec-tools/pkg-ipsec-tools.git/plain/debian/patches/CVE-2016-10396.patch?id=62ac12648a4eb7c5ba5dba0f81998d1acf310d8b]
+
+Fix CVE-2016-10396.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+Description: Fix remotely exploitable DoS. http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10396
+Source: vendor; https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=51682
+Bug-debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=867986
+
+Index: pkg-ipsec-tools/src/racoon/isakmp_frag.c
+===================================================================
+--- pkg-ipsec-tools.orig/src/racoon/isakmp_frag.c
++++ pkg-ipsec-tools/src/racoon/isakmp_frag.c
+@@ -1,4 +1,4 @@
+-/* $NetBSD: isakmp_frag.c,v 1.5 2009/04/22 11:24:20 tteras Exp $ */
++/* $NetBSD: isakmp_frag.c,v 1.5.36.1 2017/04/21 16:50:42 bouyer Exp $ */
+
+ /* Id: isakmp_frag.c,v 1.4 2004/11/13 17:31:36 manubsd Exp */
+
+@@ -173,6 +173,43 @@ vendorid_frag_cap(gen)
+ return ntohl(hp[MD5_DIGEST_LENGTH / sizeof(*hp)]);
+ }
+
++static int
++isakmp_frag_insert(struct ph1handle *iph1, struct isakmp_frag_item *item)
++{
++ struct isakmp_frag_item *pitem = NULL;
++ struct isakmp_frag_item *citem = iph1->frag_chain;
++
++ /* no frag yet, just insert at beginning of list */
++ if (iph1->frag_chain == NULL) {
++ iph1->frag_chain = item;
++ return 0;
++ }
++
++ do {
++ /* duplicate fragment number, abort (CVE-2016-10396) */
++ if (citem->frag_num == item->frag_num)
++ return -1;
++
++ /* need to insert before current item */
++ if (citem->frag_num > item->frag_num) {
++ if (pitem != NULL)
++ pitem->frag_next = item;
++ else
++ /* insert at the beginning of the list */
++ iph1->frag_chain = item;
++ item->frag_next = citem;
++ return 0;
++ }
++
++ pitem = citem;
++ citem = citem->frag_next;
++ } while (citem != NULL);
++
++ /* we reached the end of the list, insert */
++ pitem->frag_next = item;
++ return 0;
++}
++
+ int
+ isakmp_frag_extract(iph1, msg)
+ struct ph1handle *iph1;
+@@ -224,39 +261,43 @@ isakmp_frag_extract(iph1, msg)
+ item->frag_next = NULL;
+ item->frag_packet = buf;
+
+- /* Look for the last frag while inserting the new item in the chain */
+- if (item->frag_last)
+- last_frag = item->frag_num;
++ /* Check for the last frag before inserting the new item in the chain */
++ if (item->frag_last) {
++ /* if we have the last fragment, indices must match */
++ if (iph1->frag_last_index != 0 &&
++ item->frag_last != iph1->frag_last_index) {
++ plog(LLV_ERROR, LOCATION, NULL,
++ "Repeated last fragment index mismatch\n");
++ racoon_free(item);
++ vfree(buf);
++ return -1;
++ }
+
+- if (iph1->frag_chain == NULL) {
+- iph1->frag_chain = item;
+- } else {
+- struct isakmp_frag_item *current;
++ last_frag = iph1->frag_last_index = item->frag_num;
++ }
+
+- current = iph1->frag_chain;
+- while (current->frag_next) {
+- if (current->frag_last)
+- last_frag = item->frag_num;
+- current = current->frag_next;
+- }
+- current->frag_next = item;
++ /* insert fragment into chain */
++ if (isakmp_frag_insert(iph1, item) == -1) {
++ plog(LLV_ERROR, LOCATION, NULL,
++ "Repeated fragment index mismatch\n");
++ racoon_free(item);
++ vfree(buf);
++ return -1;
+ }
+
+- /* If we saw the last frag, check if the chain is complete */
++ /* If we saw the last frag, check if the chain is complete
++ * we have a sorted list now, so just walk through */
+ if (last_frag != 0) {
++ item = iph1->frag_chain;
+ for (i = 1; i <= last_frag; i++) {
+- item = iph1->frag_chain;
+- do {
+- if (item->frag_num == i)
+- break;
+- item = item->frag_next;
+- } while (item != NULL);
+-
++ if (item->frag_num != i)
++ break;
++ item = item->frag_next;
+ if (item == NULL) /* Not found */
+ break;
+ }
+
+- if (item != NULL) /* It is complete */
++ if (i > last_frag) /* It is complete */
+ return 1;
+ }
+
+@@ -291,15 +332,9 @@ isakmp_frag_reassembly(iph1)
+ }
+ data = buf->v;
+
++ item = iph1->frag_chain;
+ for (i = 1; i <= frag_count; i++) {
+- item = iph1->frag_chain;
+- do {
+- if (item->frag_num == i)
+- break;
+- item = item->frag_next;
+- } while (item != NULL);
+-
+- if (item == NULL) {
++ if (item->frag_num != i) {
+ plog(LLV_ERROR, LOCATION, NULL,
+ "Missing fragment #%d\n", i);
+ vfree(buf);
+@@ -308,6 +343,7 @@ isakmp_frag_reassembly(iph1)
+ }
+ memcpy(data, item->frag_packet->v, item->frag_packet->l);
+ data += item->frag_packet->l;
++ item = item->frag_next;
+ }
+
+ out:
+Index: pkg-ipsec-tools/src/racoon/isakmp_inf.c
+===================================================================
+--- pkg-ipsec-tools.orig/src/racoon/isakmp_inf.c
++++ pkg-ipsec-tools/src/racoon/isakmp_inf.c
+@@ -720,6 +720,7 @@ isakmp_info_send_nx(isakmp, remote, loca
+ #endif
+ #ifdef ENABLE_FRAG
+ iph1->frag = 0;
++ iph1->frag_last_index = 0;
+ iph1->frag_chain = NULL;
+ #endif
+
+Index: pkg-ipsec-tools/src/racoon/isakmp.c
+===================================================================
+--- pkg-ipsec-tools.orig/src/racoon/isakmp.c
++++ pkg-ipsec-tools/src/racoon/isakmp.c
+@@ -1072,6 +1072,7 @@ isakmp_ph1begin_i(rmconf, remote, local)
+ iph1->frag = 1;
+ else
+ iph1->frag = 0;
++ iph1->frag_last_index = 0;
+ iph1->frag_chain = NULL;
+ #endif
+ iph1->approval = NULL;
+@@ -1176,6 +1177,7 @@ isakmp_ph1begin_r(msg, remote, local, et
+ #endif
+ #ifdef ENABLE_FRAG
+ iph1->frag = 0;
++ iph1->frag_last_index = 0;
+ iph1->frag_chain = NULL;
+ #endif
+ iph1->approval = NULL;
+Index: pkg-ipsec-tools/src/racoon/handler.h
+===================================================================
+--- pkg-ipsec-tools.orig/src/racoon/handler.h
++++ pkg-ipsec-tools/src/racoon/handler.h
+@@ -1,4 +1,4 @@
+-/* $NetBSD: handler.h,v 1.25 2010/11/17 10:40:41 tteras Exp $ */
++/* $NetBSD: handler.h,v 1.26 2017/01/24 19:23:56 christos Exp $ */
+
+ /* Id: handler.h,v 1.19 2006/02/25 08:25:12 manubsd Exp */
+
+@@ -141,6 +141,7 @@ struct ph1handle {
+ #endif
+ #ifdef ENABLE_FRAG
+ int frag; /* IKE phase 1 fragmentation */
++ int frag_last_index;
+ struct isakmp_frag_item *frag_chain; /* Received fragments */
+ #endif
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/glibc-2.20.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/glibc-2.20.patch
new file mode 100644
index 000000000..36efc4917
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/glibc-2.20.patch
@@ -0,0 +1,23 @@
+squahes below warning
+ warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
+
+Seen with glibc 2.20
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+Index: ipsec-tools-0.8.2/src/include-glibc/glibc-bugs.h
+===================================================================
+--- ipsec-tools-0.8.2.orig/src/include-glibc/glibc-bugs.h 2006-09-09 09:22:08.000000000 -0700
++++ ipsec-tools-0.8.2/src/include-glibc/glibc-bugs.h 2014-09-03 22:27:22.551563888 -0700
+@@ -4,7 +4,11 @@
+ #define __GLIBC_BUGS_H__ 1
+
+ #define _XOPEN_SOURCE 500
++/* Legacy feature macro.*/
+ #define _BSD_SOURCE
++/* New feature macro that provides everything _BSD_SOURCE and
++ * _SVID_SOURCE provided and possibly more. */
++#define _DEFAULT_SOURCE
+
+ #include <features.h>
+ #include <sys/types.h>
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-Resend-UPDATE-message-when-received-EINTR-message.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-Resend-UPDATE-message-when-received-EINTR-message.patch
new file mode 100644
index 000000000..e82db087c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-Resend-UPDATE-message-when-received-EINTR-message.patch
@@ -0,0 +1,220 @@
+racoon: Resend UPDATE message when received EINTR message
+
+Upstream-Status: Pending
+
+While kernel is processing the UPDATE message which is sent from racoon,
+it maybe interrupted by system signal and if this case happens,
+kernel responds with an EINTR message to racoon and kernel fails to
+establish the corresponding SA.
+Fix this problem by resend the UPDATE message when EINTR(Interrupted
+system call) error happens.
+
+Signed-off-by: Xufeng Zhang <xufeng.zhang@windriver.com>
+---
+--- a/src/libipsec/libpfkey.h
++++ b/src/libipsec/libpfkey.h
+@@ -92,6 +92,12 @@
+ u_int16_t ctxstrlen; /* length of security context string */
+ };
+
++struct update_msg_info {
++ struct sadb_msg *update_msg;
++ int so;
++ int len;
++};
++
+ /* The options built into libipsec */
+ extern int libipsec_opt;
+ #define LIBIPSEC_OPT_NATT 0x01
+--- a/src/libipsec/pfkey.c
++++ b/src/libipsec/pfkey.c
+@@ -1219,7 +1219,8 @@
+ }
+ #endif
+
+-
++struct update_msg_info update_msg_send = {NULL, 0, 0};
++
+ /* sending SADB_ADD or SADB_UPDATE message to the kernel */
+ static int
+ pfkey_send_x1(struct pfkey_send_sa_args *sa_parms)
+@@ -1483,10 +1484,24 @@
+
+ /* send message */
+ len = pfkey_send(sa_parms->so, newmsg, len);
+- free(newmsg);
+
+- if (len < 0)
+- return -1;
++ if (newmsg->sadb_msg_type == SADB_UPDATE) {
++ if (update_msg_send.update_msg)
++ free(update_msg_send.update_msg);
++ update_msg_send.update_msg = newmsg;
++ update_msg_send.so = sa_parms->so;
++ update_msg_send.len = len;
++
++ if (len < 0) {
++ free(update_msg_send.update_msg);
++ update_msg_send.update_msg = NULL;
++ return -1;
++ }
++ } else {
++ free(newmsg);
++ if (len < 0)
++ return -1;
++ }
+
+ __ipsec_errcode = EIPSEC_NO_ERROR;
+ return len;
+--- a/src/racoon/session.c
++++ b/src/racoon/session.c
+@@ -100,6 +100,8 @@
+
+ #include "sainfo.h"
+
++extern struct update_msg_info update_msg_send;
++
+ struct fd_monitor {
+ int (*callback)(void *ctx, int fd);
+ void *ctx;
+@@ -348,6 +350,11 @@
+ close_sockets();
+ backupsa_clean();
+
++ if (update_msg_send.update_msg) {
++ free(update_msg_send.update_msg);
++ update_msg_send.update_msg = NULL;
++ }
++
+ plog(LLV_INFO, LOCATION, NULL, "racoon process %d shutdown\n", getpid());
+
+ exit(0);
+--- a/src/racoon/pfkey.c
++++ b/src/racoon/pfkey.c
+@@ -103,10 +103,12 @@
+ #include "crypto_openssl.h"
+ #include "grabmyaddr.h"
++#include "../libipsec/libpfkey.h"
+
+ #if defined(SADB_X_EALG_RIJNDAELCBC) && !defined(SADB_X_EALG_AESCBC)
+ #define SADB_X_EALG_AESCBC SADB_X_EALG_RIJNDAELCBC
+ #endif
+
++extern struct update_msg_info update_msg_send;
+ /* prototype */
+ static u_int ipsecdoi2pfkey_aalg __P((u_int));
+ static u_int ipsecdoi2pfkey_ealg __P((u_int));
+@@ -253,6 +255,13 @@
+ s_pfkey_type(msg->sadb_msg_type),
+ strerror(msg->sadb_msg_errno));
+
++ if (msg->sadb_msg_errno == EINTR &&
++ update_msg_send.update_msg) {
++ plog(LLV_DEBUG, LOCATION, NULL,
++ "pfkey update resend\n");
++ send(update_msg_send.so, (void *)update_msg_send.update_msg, (socklen_t)update_msg_send.len, 0);
++ }
++
+ goto end;
+ }
+
+@@ -498,6 +507,11 @@
+ {
+ flushsp();
+
++ if (update_msg_send.update_msg) {
++ free(update_msg_send.update_msg);
++ update_msg_send.update_msg = NULL;
++ }
++
+ if (pfkey_send_spddump(lcconf->sock_pfkey) < 0) {
+ plog(LLV_ERROR, LOCATION, NULL,
+ "libipsec sending spddump failed: %s\n",
+@@ -1295,6 +1309,8 @@
+ return 0;
+ }
+
++int update_received = 0;
++
+ static int
+ pk_recvupdate(mhp)
+ caddr_t *mhp;
+@@ -1307,6 +1323,13 @@
+ int incomplete = 0;
+ struct saproto *pr;
+
++ update_received = 1;
++
++ if (update_msg_send.update_msg) {
++ free(update_msg_send.update_msg);
++ update_msg_send.update_msg = NULL;
++ }
++
+ /* ignore this message because of local test mode. */
+ if (f_local)
+ return 0;
+@@ -4163,3 +4186,8 @@
+
+ return buf;
+ }
++
++int receive_from_isakmp()
++{
++ return pfkey_handler(NULL, lcconf->sock_pfkey);
++}
+--- a/src/racoon/pfkey.h
++++ b/src/racoon/pfkey.h
+@@ -71,5 +71,6 @@
+ extern u_int32_t pk_getseq __P((void));
+ extern const char *sadbsecas2str
+ __P((struct sockaddr *, struct sockaddr *, int, u_int32_t, int));
++extern int receive_from_isakmp __P((void));
+
+ #endif /* _PFKEY_H */
+--- a/src/racoon/isakmp_quick.c
++++ b/src/racoon/isakmp_quick.c
+@@ -774,6 +774,8 @@
+ return error;
+ }
+
++extern int update_received;
++
+ /*
+ * send to responder
+ * HDR*, HASH(3)
+@@ -892,6 +894,11 @@
+ }
+ plog(LLV_DEBUG, LOCATION, NULL, "pfkey update sent.\n");
+
++ while (!update_received)
++ receive_from_isakmp();
++
++ update_received = 0;
++
+ /* Do ADD for responder */
+ if (pk_sendadd(iph2) < 0) {
+ plog(LLV_ERROR, LOCATION, NULL, "pfkey add failed.\n");
+@@ -1035,6 +1042,11 @@
+ }
+ plog(LLV_DEBUG, LOCATION, NULL, "pfkey update sent.\n");
+
++ while (!update_received)
++ receive_from_isakmp();
++
++ update_received = 0;
++
+ /* Do ADD for responder */
+ if (pk_sendadd(iph2) < 0) {
+ plog(LLV_ERROR, LOCATION, NULL, "pfkey add failed.\n");
+@@ -1989,6 +2001,11 @@
+ }
+ plog(LLV_DEBUG, LOCATION, NULL, "pfkey update sent.\n");
+
++ while (!update_received)
++ receive_from_isakmp();
++
++ update_received = 0;
++
+ /* Do ADD for responder */
+ if (pk_sendadd(iph2) < 0) {
+ plog(LLV_ERROR, LOCATION, NULL, "pfkey add failed.\n");
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-ivm.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-ivm.patch
new file mode 100644
index 000000000..e272bc20f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-ivm.patch
@@ -0,0 +1,26 @@
+Subject: [PATCH] ipsec-tools: racoon: check several invalid ivm
+
+Upstream-Status: Pending
+
+Add checking for invalid ivm, or it will crash racoon.
+
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+---
+ isakmp_cfg.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff -urpN a/src/racoon/isakmp_cfg.c b/src/racoon/isakmp_cfg.c
+--- a/src/racoon/isakmp_cfg.c
++++ b/src/racoon/isakmp_cfg.c
+@@ -171,6 +171,11 @@ isakmp_cfg_r(iph1, msg)
+ iph1->mode_cfg->last_msgid != packet->msgid )
+ iph1->mode_cfg->ivm =
+ isakmp_cfg_newiv(iph1, packet->msgid);
++ if(iph1->mode_cfg->ivm == NULL) {
++ plog(LLV_ERROR, LOCATION, NULL,
++ "failed to create new IV\n");
++ return;
++ }
+ ivm = iph1->mode_cfg->ivm;
+
+ dmsg = oakley_do_decrypt(iph1, msg, ivm->iv, ivm->ive);
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-pointers.patch b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-pointers.patch
new file mode 100644
index 000000000..de1bdb407
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon-check-invalid-pointers.patch
@@ -0,0 +1,61 @@
+Subject: [PATCH] ipsec-tools: racoon: check several invalid pointers
+
+Upstream-Status: Pending
+
+Add checking for invalid pointers, or it will crash racoon.
+
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+---
+ ipsec_doi.c | 5 +++--
+ isakmp_cfg.c | 7 +++++++
+ isakmp_quick.c | 6 ++++--
+ 3 files changed, 14 insertions(+), 4 deletions(-)
+
+diff -urpN a/src/racoon/ipsec_doi.c b/src/racoon/ipsec_doi.c
+--- a/src/racoon/ipsec_doi.c
++++ b/src/racoon/ipsec_doi.c
+@@ -3374,8 +3374,9 @@ ipsecdoi_chkcmpids( idt, ids, exact )
+
+ /* handle wildcard IDs */
+
+- if (idt == NULL || ids == NULL)
+- {
++ if (idt == NULL || ids == NULL ||
++ idt->v == NULL || idt->l == 0 ||
++ ids->v == NULL || ids->l == 0) {
+ if( !exact )
+ {
+ plog(LLV_DEBUG, LOCATION, NULL,
+diff -urpN a/src/racoon/isakmp_cfg.c b/src/racoon/isakmp_cfg.c
+--- a/src/racoon/isakmp_cfg.c
++++ b/src/racoon/isakmp_cfg.c
+@@ -1138,6 +1138,13 @@ isakmp_cfg_newiv(iph1, msgid)
+ return NULL;
+ }
+
++ if (iph1->ivm == NULL || iph1->ivm->iv == NULL ||
++ iph1->ivm->iv->v == NULL || iph1->ivm->iv->l == 0) {
++ plog(LLV_ERROR, LOCATION, NULL,
++ "isakmp_cfg_newiv called with invalid IV management\n");
++ return NULL;
++ }
++
+ if (ics->ivm != NULL)
+ oakley_delivm(ics->ivm);
+
+diff -urpN a/src/racoon/isakmp_quick.c b/src/racoon/isakmp_quick.c
+--- a/src/racoon/isakmp_quick.c
++++ b/src/racoon/isakmp_quick.c
+@@ -2243,8 +2243,10 @@ get_proposal_r(iph2)
+ int error = ISAKMP_INTERNAL_ERROR;
+
+ /* check the existence of ID payload */
+- if ((iph2->id_p != NULL && iph2->id == NULL)
+- || (iph2->id_p == NULL && iph2->id != NULL)) {
++ if ((iph2->id_p != NULL &&
++ (iph2->id == NULL || iph2->id->v == NULL || iph2->id->l == 0)) ||
++ (iph2->id != NULL &&
++ (iph2->id_p == NULL || iph2->id_p->v == NULL || iph2->id_p->l == 0))) {
+ plog(LLV_ERROR, LOCATION, NULL,
+ "Both IDs wasn't found in payload.\n");
+ return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf
new file mode 100644
index 000000000..6b507508b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf
@@ -0,0 +1,8 @@
+# Defaults for racoon service
+# sourced by racoon.service
+# installed at /etc/default/racoon by the maintainer scripts
+#
+# This is a POSIX shell fragment
+#
+# Arguments to pass to racoon
+RACOON_ARGS=""
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf.sample b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf.sample
new file mode 100644
index 000000000..2948a4a35
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.conf.sample
@@ -0,0 +1,40 @@
+#
+# NOTE: This file will not be used if you use racoon-tool(8) to manage your
+# IPsec connections. racoon-tool will process racoon-tool.conf(5) and
+# generate a configuration (/var/lib/racoon/racoon.conf) and use it, instead
+# of this file.
+#
+# Simple racoon.conf
+#
+#
+# Please look in /usr/share/doc/racoon/examples for
+# examples that come with the source.
+#
+# Please read racoon.conf(5) for details, and alsoread setkey(8).
+#
+#
+# Also read the Linux IPSEC Howto up at
+# http://www.ipsec-howto.org/t1.html
+#
+log notify;
+path pre_shared_key "/etc/racoon/psk.txt";
+path certificate "/etc/racoon/certs";
+
+#remote 172.31.1.1 {
+# exchange_mode main,aggressive;
+# proposal {
+# encryption_algorithm 3des;
+# hash_algorithm sha1;
+# authentication_method pre_shared_key;
+# dh_group modp1024;
+# }
+# generate_policy off;
+#}
+#
+#sainfo address 192.168.203.10[any] any address 192.168.22.0/24[any] any {
+# pfs_group modp768;
+# encryption_algorithm 3des;
+# authentication_algorithm hmac_md5;
+# compression_algorithm deflate;
+#}
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.service b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.service
new file mode 100644
index 000000000..a10e77027
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools/racoon.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Racoon IKEv1 key management daemon for IPSEC
+After=syslog.target network.target
+
+[Service]
+Type=forking
+EnvironmentFile=-@SYSCONFDIR@/default/racoon
+ExecStart=@SBINDIR@/racoon $RACOON_ARGS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools_0.8.2.bb b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools_0.8.2.bb
new file mode 100644
index 000000000..5cbeb15ad
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipsec-tools/ipsec-tools_0.8.2.bb
@@ -0,0 +1,96 @@
+DESCRIPTION = "IPsec-Tools is a port of KAME's IPsec utilities to the \
+Linux-2.6 IPsec implementation."
+HOMEPAGE = "http://ipsec-tools.sourceforge.net/"
+SECTION = "net"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://src/libipsec/pfkey.c;beginline=6;endline=31;md5=bc9b7ff40beff19fe6bc6aef26bd2b24"
+
+DEPENDS = "virtual/kernel openssl readline flex-native bison-native"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = "http://ftp.netbsd.org/pub/NetBSD/misc/ipsec-tools/0.8/ipsec-tools-${PV}.tar.bz2 \
+ file://0002-Don-t-link-against-libfl.patch \
+ file://configure.patch \
+ file://0001-racoon-pfkey-avoid-potential-null-pointer-dereferenc.patch \
+ file://racoon-check-invalid-pointers.patch \
+ file://racoon-check-invalid-ivm.patch \
+ file://glibc-2.20.patch \
+ file://racoon-Resend-UPDATE-message-when-received-EINTR-message.patch \
+ file://racoon.conf.sample \
+ file://racoon.conf \
+ file://racoon.service \
+ file://fix-CVE-2015-4047.patch \
+ file://0001-Fix-build-with-clang.patch \
+ file://0001-Fix-header-issues-found-with-musl-libc.patch \
+ file://0002-cfparse-clear-memory-equal-to-size-of-array.patch \
+ file://fix-CVE-2016-10396.patch \
+ "
+SRC_URI[md5sum] = "d53ec14a0a3ece64e09e5e34b3350b41"
+SRC_URI[sha256sum] = "8eb6b38716e2f3a8a72f1f549c9444c2bc28d52c9536792690564c74fe722f2d"
+
+inherit autotools systemd
+
+# Options:
+# --enable-adminport enable admin port
+# --enable-rc5 enable RC5 encryption (patented)
+# --enable-idea enable IDEA encryption (patented)
+# --enable-gssapi enable GSS-API authentication
+# --enable-hybrid enable hybrid, both mode-cfg and xauth support
+# --enable-frag enable IKE fragmentation payload support
+# --enable-stats enable statistics logging function
+# --enable-dpd enable dead peer detection
+# --enable-samode-unspec enable to use unspecified a mode of SA
+# --disable-ipv6 disable ipv6 support
+# --enable-natt enable NAT-Traversal (yes/no/kernel)
+# --enable-natt-versions=list list of supported NAT-T versions delimited by coma.
+# --with-kernel-headers=/lib/modules/<uname>/build/include
+# where your Linux Kernel headers are installed
+# --with-readline support readline input (yes by default)
+# --with-flex use directiory (default: no)
+# --with-flexlib=<LIB> specify flex library.
+# --with-openssl=DIR specify OpenSSL directory
+# --with-libradius=DIR specify libradius path (like/usr/pkg)
+# --with-libpam=DIR specify libpam path (like/usr/pkg)
+#
+# Note: if you give it the actual kernel headers it won't build, it actually
+# needs to point at the linux-libc-headers version of the kernel headers.
+#
+EXTRA_OECONF = "--with-kernel-headers=${STAGING_INCDIR} \
+ --with-readline \
+ --with-openssl=${STAGING_LIBDIR}/.. \
+ --without-libradius \
+ --disable-security-context \
+ --enable-shared \
+ --enable-dpd \
+ --enable-natt=yes \
+ --sysconfdir=${sysconfdir}/racoon \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', '--enable-ipv6=yes', '', d)}"
+
+# See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=530527
+CFLAGS += "-fno-strict-aliasing"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[pam] = "--with-libpam,--without-libpam,libpam,"
+PACKAGECONFIG[selinux] = "--enable-security-context,--disable-security-context,libselinux,"
+
+SYSTEMD_SERVICE_${PN} = "racoon.service"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/racoon
+ install -m 0644 ${WORKDIR}/racoon.conf.sample ${D}${sysconfdir}/racoon/racoon.conf
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/racoon.service ${D}${systemd_unitdir}/system
+
+ sed -i -e 's#@SYSCONFDIR@#${sysconfdir}#g' ${D}${systemd_unitdir}/system/racoon.service
+ sed -i -e 's#@SBINDIR@#${sbindir}#g' ${D}${systemd_unitdir}/system/racoon.service
+
+ install -d ${D}${sysconfdir}/default/
+ install -m 0644 ${WORKDIR}/racoon.conf ${D}${sysconfdir}/default/racoon
+ fi
+}
+
+FILES_${PN} += "${sysconfdir}/racoon/racoon.conf \
+ ${sysconfdir}/default/racoon"
diff --git a/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0001-Modify-the-Makefile-for-cross-compile.patch b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0001-Modify-the-Makefile-for-cross-compile.patch
new file mode 100644
index 000000000..7c3dfe4a8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0001-Modify-the-Makefile-for-cross-compile.patch
@@ -0,0 +1,97 @@
+From 58292175115bae7a4c3600d3022e59ea57213025 Mon Sep 17 00:00:00 2001
+From: Jianchuan Wang <jianchuan.wang@windriver.com>
+Date: Mon, 12 Jan 2015 15:53:23 +0800
+Subject: [PATCH] Modify the Makefile for cross compile.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Jianchuan Wang <jianchuan.wang@windriver.com>
+---
+ Makefile | 23 ++++++-----------------
+ libipvs/Makefile | 3 +--
+ 2 files changed, 7 insertions(+), 19 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index e4e03cc..461c021 100644
+--- a/Makefile
++++ b/Makefile
+@@ -35,10 +35,9 @@ ARCH = $(shell uname -m)
+ RPMSOURCEDIR = $(shell rpm --eval '%_sourcedir')
+ RPMSPECDIR = $(shell rpm --eval '%_specdir')
+
+-CC = gcc
+ INCLUDE =
+ SBIN = $(BUILD_ROOT)/sbin
+-MANDIR = usr/man
++MANDIR = usr/share/man
+ MAN = $(BUILD_ROOT)/$(MANDIR)/man8
+ INIT = $(BUILD_ROOT)/etc/rc.d/init.d
+ MKDIR = mkdir
+@@ -62,17 +61,7 @@ RPMBUILD = $(shell \
+ echo "/bin/rpm"; \
+ fi )
+
+-ifeq (,$(FORCE_GETOPT))
+-LIB_SEARCH = /lib64 /usr/lib64 /usr/local/lib64 /lib /usr/lib /usr/local/lib
+-POPT_LIB = $(shell for i in $(LIB_SEARCH); do \
+- if [ -f $$i/libpopt.a ]; then \
+- if nm $$i/libpopt.a | fgrep -q poptGetContext; then \
+- echo "-lpopt"; \
+- break; \
+- fi; \
+- fi; \
+-done)
+-endif
++POPT_LIB = -lpopt
+
+ ifneq (,$(POPT_LIB))
+ POPT_DEFINE = -DHAVE_POPT
+@@ -81,7 +70,7 @@ endif
+ OBJS = ipvsadm.o config_stream.o dynamic_array.o
+ LIBS = $(POPT_LIB)
+ ifneq (0,$(HAVE_NL))
+-LIBS += -lnl
++LIBS += -lnl-3 -lnl-genl-3
+ endif
+ DEFINES = -DVERSION=\"$(VERSION)\" -DSCHEDULERS=\"$(SCHEDULERS)\" \
+ -DPE_LIST=\"$(PE_LIST)\" $(POPT_DEFINE)
+@@ -91,13 +80,13 @@ DEFINES += $(shell if [ ! -f ../ip_vs.h ]; then \
+
+ .PHONY = all clean install dist distclean rpm rpms
+
+-all: libs ipvsadm
++all: ipvsadm
+
+ libs:
+ make -C libipvs
+
+-ipvsadm: $(OBJS) $(STATIC_LIBS)
+- $(CC) $(CFLAGS) -o $@ $^ $(LIBS)
++ipvsadm: $(OBJS) libs
++ $(CC) $(CFLAGS) -o $@ $(OBJS) $(STATIC_LIBS) $(LIBS)
+
+ install: all
+ if [ ! -d $(SBIN) ]; then $(MKDIR) -p $(SBIN); fi
+diff --git a/libipvs/Makefile b/libipvs/Makefile
+index a527a7f..b7300ec 100644
+--- a/libipvs/Makefile
++++ b/libipvs/Makefile
+@@ -1,6 +1,5 @@
+ # Makefile for libipvs
+
+-CC = gcc
+ CFLAGS = -Wall -Wunused -Wstrict-prototypes -g -fPIC
+ ifneq (0,$(HAVE_NL))
+ CFLAGS += -DLIBIPVS_USE_NL
+@@ -18,7 +17,7 @@ SHARED_LIB = libipvs.so
+ all: $(STATIC_LIB) $(SHARED_LIB)
+
+ $(STATIC_LIB): libipvs.o ip_vs_nl_policy.o
+- ar rv $@ $^
++ $(AR) rv $@ $^
+
+ $(SHARED_LIB): libipvs.o ip_vs_nl_policy.o
+ $(CC) -shared -Wl,-soname,$@ -o $@ $^
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0002-Replace-nl_handle-to-nl_sock.patch b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0002-Replace-nl_handle-to-nl_sock.patch
new file mode 100644
index 000000000..7896d6d1e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0002-Replace-nl_handle-to-nl_sock.patch
@@ -0,0 +1,63 @@
+From 2686213259b15df9cf1d969c5a14d62f14cfbaae Mon Sep 17 00:00:00 2001
+From: Jianchuan Wang <jianchuan.wang@windriver.com>
+Date: Thu, 8 Jan 2015 17:37:11 +0800
+Subject: [PATCH 2/2] Replace nl_handle to nl_sock.
+
+The nl_handle was replace with nl_sock in the libnl-3.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Jianchuan Wang <jianchuan.wang@windriver.com>
+---
+ libipvs/libipvs.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/libipvs/libipvs.c b/libipvs/libipvs.c
+index a157e18..21a9bfa 100644
+--- a/libipvs/libipvs.c
++++ b/libipvs/libipvs.c
+@@ -32,7 +32,7 @@ static void* ipvs_func = NULL;
+ struct ip_vs_getinfo ipvs_info;
+
+ #ifdef LIBIPVS_USE_NL
+-static struct nl_handle *sock = NULL;
++static struct nl_sock *sock = NULL;
+ static int family, try_nl = 1;
+ #endif
+
+@@ -73,7 +73,7 @@ int ipvs_nl_send_message(struct nl_msg *msg, nl_recvmsg_msg_cb_t func, void *arg
+ {
+ int err = EINVAL;
+
+- sock = nl_handle_alloc();
++ sock = nl_socket_alloc();
+ if (!sock) {
+ nlmsg_free(msg);
+ return -1;
+@@ -88,7 +88,7 @@ int ipvs_nl_send_message(struct nl_msg *msg, nl_recvmsg_msg_cb_t func, void *arg
+
+ /* To test connections and set the family */
+ if (msg == NULL) {
+- nl_handle_destroy(sock);
++ nl_socket_free(sock);
+ sock = NULL;
+ return 0;
+ }
+@@ -104,12 +104,12 @@ int ipvs_nl_send_message(struct nl_msg *msg, nl_recvmsg_msg_cb_t func, void *arg
+
+ nlmsg_free(msg);
+
+- nl_handle_destroy(sock);
++ nl_socket_free(sock);
+
+ return 0;
+
+ fail_genl:
+- nl_handle_destroy(sock);
++ nl_socket_free(sock);
+ sock = NULL;
+ nlmsg_free(msg);
+ errno = err;
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0003-ipvsadm-remove-dependency-on-bash.patch b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0003-ipvsadm-remove-dependency-on-bash.patch
new file mode 100644
index 000000000..800114f2c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/0003-ipvsadm-remove-dependency-on-bash.patch
@@ -0,0 +1,39 @@
+From 2f4cdf70cf92d3a9503d8ff045ba277db40bb4e7 Mon Sep 17 00:00:00 2001
+From: Joe MacDonald <joe_macdonald@mentor.com>
+Date: Monday, 13 Apr 2015 14:12:37 -0400
+Subject: [PATCH] ipvsadm: remove dependency on bash
+
+The save/restore scripts are very simple and don't depend on any BASH
+features at all, so switch the interpreter to /bin/sh.
+
+Upstream-Status: Pending
+
+Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
+---
+ ipvsadm-restore | 2 +-
+ ipvsadm-save | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/ipvsadm-restore b/ipvsadm-restore
+index f24e1b3..a9fa8bc 100644
+--- a/ipvsadm-restore
++++ b/ipvsadm-restore
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ # ipvsadm-restore - Restore IPVS rules
+ #
+ # A very simple wrapper to restore IPVS rules
+diff --git a/ipvsadm-save b/ipvsadm-save
+index f4d399e..af51638 100644
+--- a/ipvsadm-save
++++ b/ipvsadm-save
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ # ipvsadm-save - Save IPVS rules
+ #
+ # A very simple wrapper to save IPVS rules
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/makefile-add-ldflags.patch
new file mode 100644
index 000000000..1bf1eed4c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm/makefile-add-ldflags.patch
@@ -0,0 +1,19 @@
+Add LDFLAGS variable to Makefile, make sure the extra linker flags can be passed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index 461c021..8bc9cde 100644
+--- a/Makefile
++++ b/Makefile
+@@ -86,7 +86,7 @@ libs:
+ make -C libipvs
+
+ ipvsadm: $(OBJS) libs
+- $(CC) $(CFLAGS) -o $@ $(OBJS) $(STATIC_LIBS) $(LIBS)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJS) $(STATIC_LIBS) $(LIBS)
+
+ install: all
+ if [ ! -d $(SBIN) ]; then $(MKDIR) -p $(SBIN); fi
diff --git a/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm_1.26.bb b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm_1.26.bb
new file mode 100644
index 000000000..b35a9f4a4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ipvsadm/ipvsadm_1.26.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Linux Virtual Server administration Utility"
+HOMEPAGE = "http://www.linux-vs.org/software/index.html"
+DESCRIPTION = "Ipvsadm is used to set up, maintain or inspect the virtual server \
+table in the Linux kernel. The Linux Virtual Server can be used to \
+build scalable network services based on a cluster of two or more nodes. \
+The active node of the cluster redirects service requests to a \
+collection of server hosts that will actually perform the services. \
+Supported features include two protocols (TCP and UDP), three packet-forwarding \
+methods (NAT, tunneling, and direct routing), and eight load balancing algorithms \
+(round robin, weighted round robin, least-connec-tion, weighted least-connection, \
+locality-based least-connection, locality-based least-connection with replication, \
+destination-hashing, and source-hashing)."
+SECTION = "net"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://README;beginline=40;endline=56;md5=a54cba37b64924aa5008881607942892"
+
+DEPENDS += "libnl popt"
+
+SRC_URI = "http://www.linuxvirtualserver.org/software/kernel-2.6/${BP}.tar.gz \
+ file://0001-Modify-the-Makefile-for-cross-compile.patch \
+ file://0002-Replace-nl_handle-to-nl_sock.patch \
+ file://0003-ipvsadm-remove-dependency-on-bash.patch \
+ file://makefile-add-ldflags.patch \
+"
+
+SRC_URI[md5sum] = "eac3ba3f62cd4dea2da353aeddd353a8"
+SRC_URI[sha256sum] = "6d6c46fecb1c532a892616b4445c73b71730e8790d5630f60269fd9cbee0eb2d"
+
+do_compile() {
+ oe_runmake \
+ CC="${CC} -I${STAGING_INCDIR} -I${STAGING_INCDIR}/libnl3 -L${STAGING_LIBDIR}" \
+ all
+}
+
+do_install() {
+ oe_runmake 'BUILD_ROOT=${D}' install
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/include-topdir.patch b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/include-topdir.patch
new file mode 100644
index 000000000..90c4ce75e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/include-topdir.patch
@@ -0,0 +1,48 @@
+diff -Nurp libesmtp-1.0.6.org/crammd5/Makefile.am libesmtp-1.0.6/crammd5/Makefile.am
+--- libesmtp-1.0.6.org/crammd5/Makefile.am 2010-08-08 23:45:57.000000000 +0800
++++ libesmtp-1.0.6/crammd5/Makefile.am 2014-11-17 11:17:21.663624295 +0800
+@@ -2,7 +2,7 @@
+
+ libdir = @plugindir@
+
+-INCLUDES = -I@srcdir@
++INCLUDES = -I@srcdir@ -I@srcdir@/../
+ AM_CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
+
+ lib_LTLIBRARIES = sasl-cram-md5.la
+diff -Nurp libesmtp-1.0.6.org/login/Makefile.am libesmtp-1.0.6/login/Makefile.am
+--- libesmtp-1.0.6.org/login/Makefile.am 2010-08-08 23:45:56.000000000 +0800
++++ libesmtp-1.0.6/login/Makefile.am 2014-11-17 11:17:54.339623018 +0800
+@@ -2,7 +2,7 @@
+
+ libdir = @plugindir@
+
+-INCLUDES = -I@srcdir@
++INCLUDES = -I@srcdir@ -I@srcdir@/../
+
+ lib_LTLIBRARIES = sasl-login.la
+ AM_CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
+diff -Nurp libesmtp-1.0.6.org/ntlm/Makefile.am libesmtp-1.0.6/ntlm/Makefile.am
+--- libesmtp-1.0.6.org/ntlm/Makefile.am 2010-08-08 23:45:56.000000000 +0800
++++ libesmtp-1.0.6/ntlm/Makefile.am 2014-11-17 11:18:10.551622385 +0800
+@@ -2,7 +2,7 @@
+
+ libdir = @plugindir@
+
+-INCLUDES = -I@srcdir@
++INCLUDES = -I@srcdir@ -I@srcdir@/../
+ AM_CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
+
+ lib_LTLIBRARIES = sasl-ntlm.la
+diff -Nurp libesmtp-1.0.6.org/plain/Makefile.am libesmtp-1.0.6/plain/Makefile.am
+--- libesmtp-1.0.6.org/plain/Makefile.am 2010-08-08 23:45:54.000000000 +0800
++++ libesmtp-1.0.6/plain/Makefile.am 2014-11-17 11:18:33.355621494 +0800
+@@ -2,7 +2,7 @@
+
+ libdir = @plugindir@
+
+-INCLUDES = -I@srcdir@
++INCLUDES = -I@srcdir@ -I@srcdir@/../
+ AM_CFLAGS = @CFLAGS@ @EXTRA_CFLAGS@
+
+ lib_LTLIBRARIES = sasl-plain.la
diff --git a/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/snprintf.patch b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/snprintf.patch
new file mode 100644
index 000000000..d0d203ead
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp/snprintf.patch
@@ -0,0 +1,19 @@
+Use HAVE_WORKING_SNPRINTF to check for snprintf()
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: libesmtp-1.0.6/missing.h
+===================================================================
+--- libesmtp-1.0.6.orig/missing.h
++++ libesmtp-1.0.6/missing.h
+@@ -43,7 +43,7 @@ int strncasecmp (const char *a, const ch
+ void *memrchr (const void *a, int c, size_t len);
+ #endif
+
+-#ifndef HAVE_SNPRINTF
++#ifndef HAVE_WORKING_SNPRINTF
+ #include <sys/types.h>
+ int snprintf(char *s, size_t n, const char *format, ...);
+ #endif
diff --git a/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp_1.0.6.bb b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp_1.0.6.bb
new file mode 100644
index 000000000..71c5d940b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libesmtp/libesmtp_1.0.6.bb
@@ -0,0 +1,38 @@
+SUMMARY = "SMTP client library"
+DESCRIPTION = "LibESMTP is a library to manage posting \
+(or submission of) electronic mail using SMTP to a \
+preconfigured Mail Transport Agent (MTA) such as Exim or PostFix."
+HOMEPAGE = "http://www.stafford.uklinux.net/libesmtp/"
+LICENSE = "LGPLv2+"
+SECTION = "libs"
+
+DEPENDS = "openssl"
+
+SRC_URI = "http://www.stafford.uklinux.net/libesmtp/libesmtp-${PV}.tar.bz2 \
+ file://include-topdir.patch \
+ file://snprintf.patch \
+ "
+SRC_URI[md5sum] = "bf3915e627fd8f35524a8fdfeed979c8"
+SRC_URI[sha256sum] = "d0a61a5c52d99fa7ce7d00ed0a07e341dbda67101dbed1ab0cdae3f37db4eb0b"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://COPYING.LIB;md5=e3eda01d9815f8d24aae2dbd89b68b06"
+
+inherit autotools binconfig
+
+EXTRA_OECONF = " \
+ --with-auth-plugin-dir=${libdir}/esmtp-plugins \
+ --enable-pthreads \
+ --enable-debug \
+ --enable-etrn \
+ --disable-isoc \
+ --disable-more-warnings \
+ --disable-static \
+"
+
+FILES_${PN} = "${libdir}/lib*${SOLIBS} \
+ ${libdir}/esmtp-plugins/*${SOLIBSDEV}"
+
+FILES_${PN}-dev += "${libdir}/esmtp-plugins/*.la"
+FILES_${PN}-static += "${libdir}/esmtp-plugins/*.a"
+FILES_${PN}-dbg += "${libdir}/esmtp-plugins/.debug/"
diff --git a/meta-openembedded/meta-networking/recipes-support/libldb/libldb/avoid-openldap-unless-wanted.patch b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/avoid-openldap-unless-wanted.patch
new file mode 100644
index 000000000..8ab094fa7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/avoid-openldap-unless-wanted.patch
@@ -0,0 +1,13 @@
+--- a/wscript 2015-11-18 12:43:33.000000000 +0100
++++ b/wscript 2015-11-18 12:46:25.000000000 +0100
+@@ -58,9 +58,7 @@
+ if conf.env.standalone_ldb:
+ conf.CHECK_XSLTPROC_MANPAGES()
+
+- # we need this for the ldap backend
+- if conf.CHECK_FUNCS_IN('ber_flush ldap_open ldap_initialize', 'lber ldap', headers='lber.h ldap.h'):
+- conf.env.ENABLE_LDAP_BACKEND = True
++ conf.env.ENABLE_LDAP_BACKEND = False
+
+ # we don't want any libraries or modules to rely on runtime
+ # resolution of symbols
diff --git a/meta-openembedded/meta-networking/recipes-support/libldb/libldb/do-not-import-target-module-while-cross-compile.patch b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/do-not-import-target-module-while-cross-compile.patch
new file mode 100755
index 000000000..fdd312c0a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/do-not-import-target-module-while-cross-compile.patch
@@ -0,0 +1,58 @@
+Some modules such as dynamic library maybe cann't be imported while cross compile,
+we just check whether does the module exist.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+Index: ldb-1.1.26/buildtools/wafsamba/samba_bundled.py
+===================================================================
+--- ldb-1.1.26.orig/buildtools/wafsamba/samba_bundled.py
++++ ldb-1.1.26/buildtools/wafsamba/samba_bundled.py
+@@ -2,6 +2,7 @@
+
+ import sys
+ import Build, Options, Logs
++import imp, os
+ from Configure import conf
+ from samba_utils import TO_LIST
+
+@@ -230,17 +231,32 @@ def CHECK_BUNDLED_SYSTEM_PYTHON(conf, li
+ # versions
+ minversion = minimum_library_version(conf, libname, minversion)
+
+- try:
+- m = __import__(modulename)
+- except ImportError:
+- found = False
+- else:
++ # Find module in PYTHONPATH
++ stuff = imp.find_module(modulename, [os.environ["PYTHONPATH"]])
++ if stuff:
+ try:
+- version = m.__version__
+- except AttributeError:
++ m = imp.load_module(modulename, stuff[0], stuff[1], stuff[2])
++ except ImportError:
+ found = False
++
++ if conf.env.CROSS_COMPILE:
++ # Some modules such as dynamic library maybe cann't be imported
++ # while cross compile, we just check whether the module exist
++ Logs.warn('Cross module[%s] has been found, but can not be loaded.' % (stuff[1]))
++ found = True
+ else:
+- found = tuplize_version(version) >= tuplize_version(minversion)
++ try:
++ version = m.__version__
++ except AttributeError:
++ found = False
++ else:
++ found = tuplize_version(version) >= tuplize_version(minversion)
++ finally:
++ if stuff[0]:
++ stuff[0].close()
++ else:
++ found = False
++
+ if not found and not conf.LIB_MAY_BE_BUNDLED(libname):
+ Logs.error('ERROR: Python module %s of version %s not found, and bundling disabled' % (libname, minversion))
+ sys.exit(1)
diff --git a/meta-openembedded/meta-networking/recipes-support/libldb/libldb/options-1.3.1.patch b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/options-1.3.1.patch
new file mode 100644
index 000000000..ffe253b63
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libldb/libldb/options-1.3.1.patch
@@ -0,0 +1,193 @@
+From a4da3ab4d76013aaa731d43d52ccca1ebd37c395 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 21 Sep 2016 10:06:39 +0800
+Subject: [PATCH 1/1] ldb: Add configure options for packages
+
+Add configure options for the following packages:
+ - acl
+ - attr
+ - libaio
+ - libbsd
+ - libcap
+ - valgrind
+
+Upstream-Status: Inappropriate [oe deterministic build specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ lib/replace/system/wscript_configure | 6 ++-
+ lib/replace/wscript | 94 +++++++++++++++++++++++++++---------
+ wscript | 7 +++
+ 3 files changed, 83 insertions(+), 24 deletions(-)
+
+diff --git a/lib/replace/system/wscript_configure b/lib/replace/system/wscript_configure
+index 2035474..10f9ae7 100644
+--- a/lib/replace/system/wscript_configure
++++ b/lib/replace/system/wscript_configure
+@@ -1,6 +1,10 @@
+ #!/usr/bin/env python
+
+-conf.CHECK_HEADERS('sys/capability.h')
++import Options
++
++if Options.options.enable_libcap:
++ conf.CHECK_HEADERS('sys/capability.h')
++
+ conf.CHECK_FUNCS('getpwnam_r getpwuid_r getpwent_r')
+
+ # solaris varients of getXXent_r
+diff --git a/lib/replace/wscript b/lib/replace/wscript
+index 2f94d49..68b2d3a 100644
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -23,6 +23,41 @@ def set_options(opt):
+ opt.PRIVATE_EXTENSION_DEFAULT('')
+ opt.RECURSE('buildtools/wafsamba')
+
++ opt.add_option('--with-acl',
++ help=("Enable use of acl"),
++ action="store_true", dest='enable_acl')
++ opt.add_option('--without-acl',
++ help=("Disable use of acl"),
++ action="store_false", dest='enable_acl', default=False)
++
++ opt.add_option('--with-attr',
++ help=("Enable use of attr"),
++ action="store_true", dest='enable_attr')
++ opt.add_option('--without-attr',
++ help=("Disable use of attr"),
++ action="store_false", dest='enable_attr', default=False)
++
++ opt.add_option('--with-libaio',
++ help=("Enable use of libaio"),
++ action="store_true", dest='enable_libaio')
++ opt.add_option('--without-libaio',
++ help=("Disable use of libaio"),
++ action="store_false", dest='enable_libaio', default=False)
++
++ opt.add_option('--with-libbsd',
++ help=("Enable use of libbsd"),
++ action="store_true", dest='enable_libbsd')
++ opt.add_option('--without-libbsd',
++ help=("Disable use of libbsd"),
++ action="store_false", dest='enable_libbsd', default=False)
++
++ opt.add_option('--with-libcap',
++ help=("Enable use of libcap"),
++ action="store_true", dest='enable_libcap')
++ opt.add_option('--without-libcap',
++ help=("Disable use of libcap"),
++ action="store_false", dest='enable_libcap', default=False)
++
+ @Utils.run_once
+ def configure(conf):
+ conf.RECURSE('buildtools/wafsamba')
+@@ -32,12 +67,25 @@ def configure(conf):
+ conf.DEFINE('HAVE_LIBREPLACE', 1)
+ conf.DEFINE('LIBREPLACE_NETWORK_CHECKS', 1)
+
+- conf.CHECK_HEADERS('linux/types.h crypt.h locale.h acl/libacl.h compat.h')
+- conf.CHECK_HEADERS('acl/libacl.h attr/xattr.h compat.h ctype.h dustat.h')
++ conf.CHECK_HEADERS('linux/types.h crypt.h locale.h compat.h')
++ conf.CHECK_HEADERS('compat.h ctype.h dustat.h')
+ conf.CHECK_HEADERS('fcntl.h fnmatch.h glob.h history.h krb5.h langinfo.h')
+- conf.CHECK_HEADERS('libaio.h locale.h ndir.h pwd.h')
+- conf.CHECK_HEADERS('shadow.h sys/acl.h')
+- conf.CHECK_HEADERS('sys/attributes.h attr/attributes.h sys/capability.h sys/dir.h sys/epoll.h')
++ conf.CHECK_HEADERS('locale.h ndir.h pwd.h')
++ conf.CHECK_HEADERS('shadow.h')
++ conf.CHECK_HEADERS('sys/attributes.h sys/dir.h sys/epoll.h')
++
++ if Options.options.enable_acl:
++ conf.CHECK_HEADERS('acl/libacl.h sys/acl.h')
++
++ if Options.options.enable_attr:
++ conf.CHECK_HEADERS('attr/attributes.h attr/xattr.h')
++
++ if Options.options.enable_libaio:
++ conf.CHECK_HEADERS('libaio.h')
++
++ if Options.options.enable_libcap:
++ conf.CHECK_HEADERS('sys/capability.h')
++
+ conf.CHECK_HEADERS('port.h')
+ conf.CHECK_HEADERS('sys/fcntl.h sys/filio.h sys/filsys.h sys/fs/s5param.h sys/fs/vx/quota.h')
+ conf.CHECK_HEADERS('sys/id.h sys/ioctl.h sys/ipc.h sys/mman.h sys/mode.h sys/ndir.h sys/priv.h')
+@@ -73,7 +121,9 @@ def configure(conf):
+
+ conf.CHECK_CODE('', headers='rpc/rpc.h rpcsvc/yp_prot.h', define='HAVE_RPCSVC_YP_PROT_H')
+
+- conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++ if Options.options.enable_valgrind:
++ conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++
+ conf.CHECK_HEADERS('nss_common.h nsswitch.h ns_api.h')
+ conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h')
+ conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h')
+@@ -266,22 +316,20 @@ def configure(conf):
+
+ conf.CHECK_FUNCS('prctl dirname basename')
+
+- strlcpy_in_bsd = False
+-
+- # libbsd on some platforms provides strlcpy and strlcat
+- if not conf.CHECK_FUNCS('strlcpy strlcat'):
+- if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
+- checklibc=True):
+- strlcpy_in_bsd = True
+- if not conf.CHECK_FUNCS('getpeereid'):
+- conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
+- if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
+- conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+- if not conf.CHECK_FUNCS('setproctitle_init'):
+- conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
+-
+- if not conf.CHECK_FUNCS('closefrom'):
+- conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
++ if Options.options.enable_libbsd:
++ # libbsd on some platforms provides strlcpy and strlcat
++ if not conf.CHECK_FUNCS('strlcpy strlcat'):
++ conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
++ checklibc=True)
++ if not conf.CHECK_FUNCS('getpeereid'):
++ conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
++ if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
++ conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
++ if not conf.CHECK_FUNCS('setproctitle_init'):
++ conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
++
++ if not conf.CHECK_FUNCS('closefrom'):
++ conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
+
+ conf.CHECK_CODE('''
+ struct ucred cred;
+@@ -632,7 +680,7 @@ removeea setea
+ # look for a method of finding the list of network interfaces
+ for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
+ bsd_for_strlcpy = ''
+- if strlcpy_in_bsd:
++ if Options.options.enable_libbsd:
+ bsd_for_strlcpy = ' bsd'
+ if conf.CHECK_CODE('''
+ #define %s 1
+diff --git a/wscript b/wscript
+index 8ae5be3..a178cc4 100644
+--- a/wscript
++++ b/wscript
+@@ -31,6 +31,13 @@ def set_options(opt):
+ opt.RECURSE('lib/replace')
+ opt.tool_options('python') # options for disabling pyc or pyo compilation
+
++ opt.add_option('--with-valgrind',
++ help=("enable use of valgrind"),
++ action="store_true", dest='enable_valgrind')
++ opt.add_option('--without-valgrind',
++ help=("disable use of valgrind"),
++ action="store_false", dest='enable_valgrind', default=False)
++
+ def configure(conf):
+ conf.RECURSE('lib/tdb')
+ conf.RECURSE('lib/tevent')
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-networking/recipes-support/libldb/libldb_1.3.1.bb b/meta-openembedded/meta-networking/recipes-support/libldb/libldb_1.3.1.bb
new file mode 100644
index 000000000..7e14cde35
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libldb/libldb_1.3.1.bb
@@ -0,0 +1,63 @@
+SUMMARY = "Hierarchical, reference counted memory pool system with destructors"
+HOMEPAGE = "http://ldb.samba.org"
+SECTION = "libs"
+LICENSE = "LGPL-3.0+ & LGPL-2.1+ & GPL-3.0+"
+
+DEPENDS += "libtdb libtalloc libtevent popt"
+RDEPENDS_pyldb += "python"
+
+SRC_URI = "http://samba.org/ftp/ldb/ldb-${PV}.tar.gz \
+ file://do-not-import-target-module-while-cross-compile.patch \
+ file://options-1.3.1.patch \
+ "
+
+PACKAGECONFIG ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} \
+"
+PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
+PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
+PACKAGECONFIG[ldap] = ",,openldap"
+PACKAGECONFIG[libaio] = "--with-libaio,--without-libaio,libaio"
+PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
+PACKAGECONFIG[libcap] = "--with-libcap,--without-libcap,libcap"
+PACKAGECONFIG[valgrind] = "--with-valgrind,--without-valgrind,valgrind"
+
+SRC_URI += "${@bb.utils.contains('PACKAGECONFIG', 'ldap', '', 'file://avoid-openldap-unless-wanted.patch', d)}"
+
+LIC_FILES_CHKSUM = "file://pyldb.h;endline=24;md5=dfbd238cecad76957f7f860fbe9adade \
+ file://man/ldb.3.xml;beginline=261;endline=262;md5=137f9fd61040c1505d1aa1019663fd08 \
+ file://tools/ldbdump.c;endline=19;md5=a7d4fc5d1f75676b49df491575a86a42"
+
+SRC_URI[md5sum] = "e5233f202bca27f6ce8474fb8ae65983"
+SRC_URI[sha256sum] = "b19f2c9f55ae0f46aa5ebaea0bf1a47ec1ac135e1d78af0f6318cf50bf62cbd2"
+
+inherit waf-samba
+
+S = "${WORKDIR}/ldb-${PV}"
+
+EXTRA_OECONF += "--disable-rpath \
+ --disable-rpath-install \
+ --bundled-libraries=cmocka \
+ --builtin-libraries=replace \
+ --with-modulesdir=${libdir}/ldb/modules \
+ --with-privatelibdir=${libdir}/ldb \
+ --with-libiconv=${STAGING_DIR_HOST}${prefix}\
+ "
+
+PACKAGES =+ "pyldb pyldb-dbg pyldb-dev"
+
+NOAUTOPACKAGEDEBUG = "1"
+
+FILES_${PN} += "${libdir}/ldb/*"
+FILES_${PN}-dbg += "${bindir}/.debug/* \
+ ${libdir}/.debug/* \
+ ${libdir}/ldb/.debug/* \
+ ${libdir}/ldb/modules/ldb/.debug/*"
+
+FILES_pyldb = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/* \
+ ${libdir}/libpyldb-util.so.* \
+ "
+FILES_pyldb-dbg = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/.debug \
+ ${libdir}/.debug/libpyldb-util.so.*"
+FILES_pyldb-dev = "${libdir}/libpyldb-util.so"
diff --git a/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-Fix-comparison-types.patch b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-Fix-comparison-types.patch
new file mode 100644
index 000000000..26b5e250c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-Fix-comparison-types.patch
@@ -0,0 +1,38 @@
+From ed4422979b221c8613ca02eb5c57cb80009366d1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 10:13:24 -0700
+Subject: [PATCH 1/2] Fix comparison types
+
+Fixes
+error: comparison between pointer and integer ('char *' and 'int')
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ clients/memflush.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/clients/memflush.cc b/clients/memflush.cc
+index 8bd0dbf..71545ea 100644
+--- a/clients/memflush.cc
++++ b/clients/memflush.cc
+@@ -39,7 +39,7 @@ int main(int argc, char *argv[])
+ {
+ options_parse(argc, argv);
+
+- if (opt_servers == false)
++ if (opt_servers == NULL)
+ {
+ char *temp;
+
+@@ -48,7 +48,7 @@ int main(int argc, char *argv[])
+ opt_servers= strdup(temp);
+ }
+
+- if (opt_servers == false)
++ if (opt_servers == NULL)
+ {
+ std::cerr << "No Servers provided" << std::endl;
+ exit(EXIT_FAILURE);
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-configure.ac-Do-not-configure-build-aux.patch b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-configure.ac-Do-not-configure-build-aux.patch
new file mode 100644
index 000000000..06febc5b1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0001-configure.ac-Do-not-configure-build-aux.patch
@@ -0,0 +1,28 @@
+From fa0fe001a5373c1ef9ff2175555b14fc07399e1b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 10:01:44 -0700
+Subject: [PATCH] configure.ac: Do not configure build-aux
+
+Fixes
+configure: error: cannot find install-sh, install.sh, or shtool
+
+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 17b7351..0263112 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -17,7 +17,6 @@ AC_INIT([libmemcached],VERSION_NUMBER,[http://libmemcached.org/])
+ AC_PROG_CC([cc gcc clang])
+ AC_PROG_CXX([c++ g++ clang++])
+
+-AC_CONFIG_AUX_DIR([build-aux])
+ AC_CONFIG_MACRO_DIR([m4])
+
+ AC_CANONICAL_HOST
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0002-POSIX_SPAWN_USEVFORK-is-not-linux-specific-but-glibc.patch b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0002-POSIX_SPAWN_USEVFORK-is-not-linux-specific-but-glibc.patch
new file mode 100644
index 000000000..e1e1be8c6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/0002-POSIX_SPAWN_USEVFORK-is-not-linux-specific-but-glibc.patch
@@ -0,0 +1,30 @@
+From e95609e4ae40a794ed198924505fd22d7d86a124 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 18 Mar 2017 10:16:14 -0700
+Subject: [PATCH 2/2] POSIX_SPAWN_USEVFORK is not linux specific but glibc
+ specific
+
+Fixes
+cmdline.cc:206:12: error: use of undeclared identifier 'POSIX_SPAWN_USEVFORK'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ libtest/cmdline.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libtest/cmdline.cc b/libtest/cmdline.cc
+index 29a22de..34f0a89 100644
+--- a/libtest/cmdline.cc
++++ b/libtest/cmdline.cc
+@@ -201,7 +201,7 @@ Application::error_t Application::run(const char *args[])
+
+ fatal_assert(posix_spawnattr_setsigmask(&spawnattr, &mask) == 0);
+
+-#if defined(POSIX_SPAWN_USEVFORK) || defined(__linux__)
++#if defined(POSIX_SPAWN_USEVFORK) || defined(__GLIBC__)
+ // Use USEVFORK on linux
+ flags |= POSIX_SPAWN_USEVFORK;
+ #endif
+--
+2.12.0
+
diff --git a/meta-openembedded/meta-networking/recipes-support/libmemcached/files/crosscompile.patch b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/crosscompile.patch
new file mode 100644
index 000000000..63511bff5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libmemcached/files/crosscompile.patch
@@ -0,0 +1,30 @@
+ libmemcached/backtrace.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- libmemcached-1.0.15.orig/libmemcached/backtrace.cc
++++ libmemcached-1.0.15/libmemcached/backtrace.cc
+@@ -75,10 +75,11 @@ void custom_backtrace(void)
+ {
+ for (int x= 0; x < stack_frames; x++)
+ {
+ bool was_demangled= false;
+
++#if USE_DEMANGLE == 1
+ if (USE_DEMANGLE)
+ {
+ #ifdef HAVE_DLFCN_H
+ Dl_info dlinfo;
+ if (dladdr(backtrace_buffer[x], &dlinfo))
+@@ -107,11 +108,11 @@ void custom_backtrace(void)
+ dlinfo.dli_fname);
+ }
+ }
+ #endif
+ }
+-
++#endif
+ if (was_demangled == false)
+ {
+ fprintf(stderr, "?%d %p in %s\n", x, backtrace_buffer[x], symbollist[x]);
+ }
+ }
diff --git a/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached.inc b/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached.inc
new file mode 100644
index 000000000..e86f832f8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "open source C/C++ client library and tools for the memcached server"
+DEPENDS = "libevent util-linux"
+SECTION = "libdevel"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=865490941c91ba790f0ea78dec93bd60"
+
+SRC_URI = "http://launchpad.net/libmemcached/1.0/${PV}/+download/libmemcached-${PV}.tar.gz"
+
+TARGET_LDFLAGS += "-luuid"
+TARGET_CFLAGS += "-D__USE_GNU -D_GNU_SOURCE"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[sasl] = "--enable-sasl,--disable-sasl,cyrus-sasl"
+
+inherit autotools gettext pkgconfig
diff --git a/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.18.bb b/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.18.bb
new file mode 100644
index 000000000..56778c048
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.18.bb
@@ -0,0 +1,10 @@
+require libmemcached.inc
+
+SRC_URI += "\
+ file://crosscompile.patch \
+ file://0001-configure.ac-Do-not-configure-build-aux.patch \
+ file://0001-Fix-comparison-types.patch \
+ file://0002-POSIX_SPAWN_USEVFORK-is-not-linux-specific-but-glibc.patch \
+ "
+SRC_URI[md5sum] = "b3958716b4e53ddc5992e6c49d97e819"
+SRC_URI[sha256sum] = "e22c0bb032fde08f53de9ffbc5a128233041d9f33b5de022c0978a2149885f82"
diff --git a/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.7.bb b/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.7.bb
new file mode 100644
index 000000000..cdf8415ff
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libmemcached/libmemcached_1.0.7.bb
@@ -0,0 +1,4 @@
+require libmemcached.inc
+
+SRC_URI[md5sum] = "d59a462a92d296f76bff2d9bc72b2516"
+SRC_URI[sha256sum] = "3efa86c9733eaad55d7119cb16769424e2aa6c22b3392e8f973946fce6678d81"
diff --git a/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/avoid-attr-unless-wanted.patch b/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/avoid-attr-unless-wanted.patch
new file mode 100644
index 000000000..a3ee9ccd9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/avoid-attr-unless-wanted.patch
@@ -0,0 +1,20 @@
+--- a/lib/replace/wscript 2015-11-13 16:04:04.000000000 +0100
++++ b/lib/replace/wscript 2015-11-13 16:23:20.000000000 +0100
+@@ -636,8 +636,6 @@
+ if not bld.CONFIG_SET('HAVE_INET_ATON'): REPLACE_SOURCE += ' inet_aton.c'
+ if not bld.CONFIG_SET('HAVE_INET_NTOP'): REPLACE_SOURCE += ' inet_ntop.c'
+ if not bld.CONFIG_SET('HAVE_INET_PTON'): REPLACE_SOURCE += ' inet_pton.c'
+- if not bld.CONFIG_SET('HAVE_GETXATTR') or bld.CONFIG_SET('XATTR_ADDITIONAL_OPTIONS'):
+- REPLACE_SOURCE += ' xattr.c'
+
+ bld.SAMBA_LIBRARY('replace',
+ source=REPLACE_SOURCE,
+@@ -648,7 +646,7 @@
+ # at the moment:
+ # hide_symbols=bld.BUILTIN_LIBRARY('replace'),
+ private_library=True,
+- deps='crypt dl nsl socket rt attr' + extra_libs)
++ deps='crypt dl nsl socket rt ' + extra_libs)
+
+ bld.SAMBA_SUBSYSTEM('replace-test',
+ source='''test/testsuite.c test/strptime.c
diff --git a/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/options-2.1.10.patch b/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/options-2.1.10.patch
new file mode 100644
index 000000000..63f21e775
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc/options-2.1.10.patch
@@ -0,0 +1,184 @@
+From efc1b02144f23fdf84dbc5ff15307815e0f2a425 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 14 Sep 2016 11:11:35 +0800
+Subject: [PATCH] talloc: Add configure options for packages
+
+Add configure options for the following packages:
+ - acl
+ - attr
+ - libaio
+ - libbsd
+ - libcap
+ - valgrind
+
+Upstream-Status: Inappropriate [oe deterministic build specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+Modified to apply to version 2.1.10.
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+
+---
+ lib/replace/system/wscript_configure | 6 ++-
+ lib/replace/wscript | 85 ++++++++++++++++++++++++++++--------
+ wscript | 7 ++-
+ 3 files changed, 79 insertions(+), 19 deletions(-)
+
+Index: talloc-2.1.11/lib/replace/system/wscript_configure
+===================================================================
+--- talloc-2.1.11.orig/lib/replace/system/wscript_configure
++++ talloc-2.1.11/lib/replace/system/wscript_configure
+@@ -1,6 +1,10 @@
+ #!/usr/bin/env python
+
+-conf.CHECK_HEADERS('sys/capability.h')
++import Options
++
++if Options.options.enable_libcap:
++ conf.CHECK_HEADERS('sys/capability.h')
++
+ conf.CHECK_FUNCS('getpwnam_r getpwuid_r getpwent_r')
+
+ # solaris varients of getXXent_r
+Index: talloc-2.1.11/lib/replace/wscript
+===================================================================
+--- talloc-2.1.11.orig/lib/replace/wscript
++++ talloc-2.1.11/lib/replace/wscript
+@@ -23,6 +23,41 @@ def set_options(opt):
+ opt.PRIVATE_EXTENSION_DEFAULT('')
+ opt.RECURSE('buildtools/wafsamba')
+
++ opt.add_option('--with-acl',
++ help=("Enable use of acl"),
++ action="store_true", dest='enable_acl')
++ opt.add_option('--without-acl',
++ help=("Disable use of acl"),
++ action="store_false", dest='enable_acl', default=False)
++
++ opt.add_option('--with-attr',
++ help=("Enable use of attr"),
++ action="store_true", dest='enable_attr')
++ opt.add_option('--without-attr',
++ help=("Disable use of attr"),
++ action="store_false", dest='enable_attr', default=False)
++
++ opt.add_option('--with-libaio',
++ help=("Enable use of libaio"),
++ action="store_true", dest='enable_libaio')
++ opt.add_option('--without-libaio',
++ help=("Disable use of libaio"),
++ action="store_false", dest='enable_libaio', default=False)
++
++ opt.add_option('--with-libbsd',
++ help=("Enable use of libbsd"),
++ action="store_true", dest='enable_libbsd')
++ opt.add_option('--without-libbsd',
++ help=("Disable use of libbsd"),
++ action="store_false", dest='enable_libbsd', default=False)
++
++ opt.add_option('--with-libcap',
++ help=("Enable use of libcap"),
++ action="store_true", dest='enable_libcap')
++ opt.add_option('--without-libcap',
++ help=("Disable use of libcap"),
++ action="store_false", dest='enable_libcap', default=False)
++
+ @Utils.run_once
+ def configure(conf):
+ conf.RECURSE('buildtools/wafsamba')
+@@ -32,12 +67,25 @@ def configure(conf):
+ conf.DEFINE('HAVE_LIBREPLACE', 1)
+ conf.DEFINE('LIBREPLACE_NETWORK_CHECKS', 1)
+
+- conf.CHECK_HEADERS('linux/types.h crypt.h locale.h acl/libacl.h compat.h')
+- conf.CHECK_HEADERS('acl/libacl.h attr/xattr.h compat.h ctype.h dustat.h')
++ conf.CHECK_HEADERS('linux/types.h crypt.h locale.h compat.h')
++ conf.CHECK_HEADERS('compat.h ctype.h dustat.h')
+ conf.CHECK_HEADERS('fcntl.h fnmatch.h glob.h history.h krb5.h langinfo.h')
+- conf.CHECK_HEADERS('libaio.h locale.h ndir.h pwd.h')
+- conf.CHECK_HEADERS('shadow.h sys/acl.h')
+- conf.CHECK_HEADERS('sys/attributes.h attr/attributes.h sys/capability.h sys/dir.h sys/epoll.h')
++ conf.CHECK_HEADERS('locale.h ndir.h pwd.h')
++ conf.CHECK_HEADERS('shadow.h')
++ conf.CHECK_HEADERS('sys/attributes.h sys/dir.h sys/epoll.h')
++
++ if Options.options.enable_acl:
++ conf.CHECK_HEADERS('acl/libacl.h sys/acl.h')
++
++ if Options.options.enable_attr:
++ conf.CHECK_HEADERS('attr/attributes.h attr/xattr.h')
++
++ if Options.options.enable_libaio:
++ conf.CHECK_HEADERS('libaio.h')
++
++ if Options.options.enable_libcap:
++ conf.CHECK_HEADERS('sys/capability.h')
++
+ conf.CHECK_HEADERS('port.h')
+ conf.CHECK_HEADERS('sys/fcntl.h sys/filio.h sys/filsys.h sys/fs/s5param.h sys/fs/vx/quota.h')
+ conf.CHECK_HEADERS('sys/id.h sys/ioctl.h sys/ipc.h sys/mman.h sys/mode.h sys/ndir.h sys/priv.h')
+@@ -73,7 +121,9 @@ def configure(conf):
+
+ conf.CHECK_CODE('', headers='rpc/rpc.h rpcsvc/yp_prot.h', define='HAVE_RPCSVC_YP_PROT_H')
+
+- conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++ if Options.options.enable_valgrind:
++ conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++
+ conf.CHECK_HEADERS('nss_common.h nsswitch.h ns_api.h')
+ conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h')
+ conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h')
+@@ -267,21 +317,21 @@ def configure(conf):
+ conf.CHECK_FUNCS('prctl dirname basename')
+
+ strlcpy_in_bsd = False
+-
+- # libbsd on some platforms provides strlcpy and strlcat
+- if not conf.CHECK_FUNCS('strlcpy strlcat'):
+- if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
++ if Options.options.enable_libbsd:
++ # libbsd on some platforms provides strlcpy and strlcat
++ if not conf.CHECK_FUNCS('strlcpy strlcat'):
++ if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
+ checklibc=True):
+- strlcpy_in_bsd = True
+- if not conf.CHECK_FUNCS('getpeereid'):
+- conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
+- if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
+- conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+- if not conf.CHECK_FUNCS('setproctitle_init'):
+- conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
++ strlcpy_in_bsd = True
++ if not conf.CHECK_FUNCS('getpeereid'):
++ conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
++ if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
++ conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
++ if not conf.CHECK_FUNCS('setproctitle_init'):
++ conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
+
+- if not conf.CHECK_FUNCS('closefrom'):
+- conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
++ if not conf.CHECK_FUNCS('closefrom'):
++ conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
+
+ conf.CHECK_CODE('''
+ struct ucred cred;
+Index: talloc-2.1.11/wscript
+===================================================================
+--- talloc-2.1.11.orig/wscript
++++ talloc-2.1.11/wscript
+@@ -32,7 +32,12 @@ def set_options(opt):
+ opt.add_option('--enable-talloc-compat1',
+ help=("Build talloc 1.x.x compat library [False]"),
+ action="store_true", dest='TALLOC_COMPAT1', default=False)
+-
++ opt.add_option('--with-valgrind',
++ help=("enable use of valgrind"),
++ action="store_true", dest='enable_valgrind')
++ opt.add_option('--without-valgrind',
++ help=("disable use of valgrind"),
++ action="store_false", dest='enable_valgrind', default=False)
+
+ def configure(conf):
+ conf.RECURSE('lib/replace')
diff --git a/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc_2.1.11.bb b/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc_2.1.11.bb
new file mode 100644
index 000000000..848cf4d99
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtalloc/libtalloc_2.1.11.bb
@@ -0,0 +1,49 @@
+SUMMARY = "Hierarchical, reference counted memory pool system with destructors"
+HOMEPAGE = "http://talloc.samba.org"
+SECTION = "libs"
+LICENSE = "LGPL-3.0+ & GPL-3.0+"
+LIC_FILES_CHKSUM = "file://talloc.h;beginline=3;endline=27;md5=a301712782cad6dd6d5228bfa7825249 \
+ file://pytalloc.h;beginline=1;endline=18;md5=2c498cc6f2263672483237b20f46b43d"
+
+
+SRC_URI = "https://samba.org/ftp/talloc/talloc-${PV}.tar.gz \
+ file://options-2.1.10.patch \
+"
+SRC_URI[md5sum] = "452596f904ca2b10322bdaabf147a721"
+SRC_URI[sha256sum] = "639eb35556a0af999123c4d883e79be05ff9f00ab4f9e4ac2e5775f9c5eeeed3"
+
+inherit waf-samba
+
+PACKAGECONFIG ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} \
+"
+PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
+PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
+PACKAGECONFIG[libaio] = "--with-libaio,--without-libaio,libaio"
+PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
+PACKAGECONFIG[libcap] = "--with-libcap,--without-libcap,libcap"
+PACKAGECONFIG[valgrind] = "--with-valgrind,--without-valgrind,valgrind"
+
+SRC_URI += "${@bb.utils.contains('PACKAGECONFIG', 'attr', '', 'file://avoid-attr-unless-wanted.patch', d)}"
+
+S = "${WORKDIR}/talloc-${PV}"
+
+EXTRA_OECONF += "--disable-rpath \
+ --disable-rpath-install \
+ --bundled-libraries=NONE \
+ --builtin-libraries=replace \
+ --disable-silent-rules \
+ --with-libiconv=${STAGING_DIR_HOST}${prefix}\
+ "
+
+PACKAGES += "pytalloc pytalloc-dbg pytalloc-dev"
+
+FILES_pytalloc = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/* \
+ ${libdir}/libpytalloc-util.so.2 \
+ ${libdir}/libpytalloc-util.so.2.1.1 \
+ "
+FILES_pytalloc-dbg = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/.debug \
+ ${libdir}/.debug/libpytalloc-util.so.2.1.1"
+FILES_pytalloc-dev = "${libdir}/libpytalloc-util.so"
+RDEPENDS_pytalloc = "python"
diff --git a/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/do-not-check-xsltproc-manpages.patch b/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/do-not-check-xsltproc-manpages.patch
new file mode 100644
index 000000000..bcc45c9fc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/do-not-check-xsltproc-manpages.patch
@@ -0,0 +1,15 @@
+Don't check manpages for xsltproc.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+--- tdb-1.3.0.orig/wscript 2015-04-22 09:52:32.366000222 +0900
++++ tdb-1.3.0/wscript 2015-04-22 09:51:57.720000205 +0900
+@@ -90,7 +90,7 @@ def configure(conf):
+ not conf.env.disable_tdb_mutex_locking):
+ conf.define('USE_TDB_MUTEX_LOCKING', 1)
+
+- conf.CHECK_XSLTPROC_MANPAGES()
++ conf.find_program('xsltproc', var='XSLTPROC')
+
+ if not conf.env.disable_python:
+ # also disable if we don't have the python libs installed
diff --git a/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/tdb-Add-configure-options-for-packages.patch b/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/tdb-Add-configure-options-for-packages.patch
new file mode 100644
index 000000000..272921e56
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb/tdb-Add-configure-options-for-packages.patch
@@ -0,0 +1,184 @@
+From 24911f36bcb00412e5dc4cd11fda139e09d58798 Mon Sep 17 00:00:00 2001
+From: Huang Qiyu <huangqy.fnst@cn.fujitsu.com>
+Date: Tue, 1 Aug 2017 03:12:09 +0900
+Subject: [PATCH] From 10ac5e5fdda44adcc2a159b6f9a2d51a51361057 Mon Sep 17
+ 00:00:00 2001 From: Jackie Huang <jackie.huang@windriver.com> Date: Wed, 21
+ Sep 2016 10:46:19 +0800 Subject: [PATCH] tdb: Add configure options for
+ packages
+
+Add configure options for the following packages:
+ - acl
+ - attr
+ - libaio
+ - libbsd
+ - libcap
+ - valgrind
+
+Upstream-Status: Inappropriate [oe deterministic build specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+Update for libtdb_1.3.14.
+
+Signed-off-by: Huang Qiyu <huangqy.fnst@cn.fujitsu.com>
+---
+ lib/replace/system/wscript_configure | 6 ++-
+ lib/replace/wscript | 85 ++++++++++++++++++++++++++++--------
+ wscript | 7 ++-
+ 3 files changed, 79 insertions(+), 19 deletions(-)
+
+diff --git a/lib/replace/system/wscript_configure b/lib/replace/system/wscript_configure
+index 2035474..10f9ae7 100644
+--- a/lib/replace/system/wscript_configure
++++ b/lib/replace/system/wscript_configure
+@@ -1,6 +1,10 @@
+ #!/usr/bin/env python
+
+-conf.CHECK_HEADERS('sys/capability.h')
++import Options
++
++if Options.options.enable_libcap:
++ conf.CHECK_HEADERS('sys/capability.h')
++
+ conf.CHECK_FUNCS('getpwnam_r getpwuid_r getpwent_r')
+
+ # solaris varients of getXXent_r
+diff --git a/lib/replace/wscript b/lib/replace/wscript
+index 7c50e1d..15df5c3 100644
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -23,6 +23,41 @@ def set_options(opt):
+ opt.PRIVATE_EXTENSION_DEFAULT('')
+ opt.RECURSE('buildtools/wafsamba')
+
++ opt.add_option('--with-acl',
++ help=("Enable use of acl"),
++ action="store_true", dest='enable_acl')
++ opt.add_option('--without-acl',
++ help=("Disable use of acl"),
++ action="store_false", dest='enable_acl', default=False)
++
++ opt.add_option('--with-attr',
++ help=("Enable use of attr"),
++ action="store_true", dest='enable_attr')
++ opt.add_option('--without-attr',
++ help=("Disable use of attr"),
++ action="store_false", dest='enable_attr', default=False)
++
++ opt.add_option('--with-libaio',
++ help=("Enable use of libaio"),
++ action="store_true", dest='enable_libaio')
++ opt.add_option('--without-libaio',
++ help=("Disable use of libaio"),
++ action="store_false", dest='enable_libaio', default=False)
++
++ opt.add_option('--with-libbsd',
++ help=("Enable use of libbsd"),
++ action="store_true", dest='enable_libbsd')
++ opt.add_option('--without-libbsd',
++ help=("Disable use of libbsd"),
++ action="store_false", dest='enable_libbsd', default=False)
++
++ opt.add_option('--with-libcap',
++ help=("Enable use of libcap"),
++ action="store_true", dest='enable_libcap')
++ opt.add_option('--without-libcap',
++ help=("Disable use of libcap"),
++ action="store_false", dest='enable_libcap', default=False)
++
+ @Utils.run_once
+ def configure(conf):
+ conf.RECURSE('buildtools/wafsamba')
+@@ -32,12 +67,25 @@ def configure(conf):
+ conf.DEFINE('HAVE_LIBREPLACE', 1)
+ conf.DEFINE('LIBREPLACE_NETWORK_CHECKS', 1)
+
+- conf.CHECK_HEADERS('linux/types.h crypt.h locale.h acl/libacl.h compat.h')
+- conf.CHECK_HEADERS('acl/libacl.h attr/xattr.h compat.h ctype.h dustat.h')
++ conf.CHECK_HEADERS('linux/types.h crypt.h locale.h compat.h')
++ conf.CHECK_HEADERS('compat.h ctype.h dustat.h')
+ conf.CHECK_HEADERS('fcntl.h fnmatch.h glob.h history.h krb5.h langinfo.h')
+- conf.CHECK_HEADERS('libaio.h locale.h ndir.h pwd.h')
+- conf.CHECK_HEADERS('shadow.h sys/acl.h')
+- conf.CHECK_HEADERS('sys/attributes.h attr/attributes.h sys/capability.h sys/dir.h sys/epoll.h')
++ conf.CHECK_HEADERS('locale.h ndir.h pwd.h')
++ conf.CHECK_HEADERS('shadow.h')
++ conf.CHECK_HEADERS('sys/attributes.h sys/dir.h sys/epoll.h')
++
++ if Options.options.enable_acl:
++ conf.CHECK_HEADERS('acl/libacl.h sys/acl.h')
++
++ if Options.options.enable_attr:
++ conf.CHECK_HEADERS('attr/attributes.h attr/xattr.h')
++
++ if Options.options.enable_libaio:
++ conf.CHECK_HEADERS('libaio.h')
++
++ if Options.options.enable_libcap:
++ conf.CHECK_HEADERS('sys/capability.h')
++
+ conf.CHECK_HEADERS('port.h')
+ conf.CHECK_HEADERS('sys/fcntl.h sys/filio.h sys/filsys.h sys/fs/s5param.h sys/fs/vx/quota.h')
+ conf.CHECK_HEADERS('sys/id.h sys/ioctl.h sys/ipc.h sys/mman.h sys/mode.h sys/ndir.h sys/priv.h')
+@@ -73,7 +121,9 @@ def configure(conf):
+
+ conf.CHECK_CODE('', headers='rpc/rpc.h rpcsvc/yp_prot.h', define='HAVE_RPCSVC_YP_PROT_H')
+
+- conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++ if Options.options.enable_valgrind:
++ conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++
+ conf.CHECK_HEADERS('nss_common.h nsswitch.h ns_api.h')
+ conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h')
+ conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h')
+@@ -251,17 +301,18 @@ def configure(conf):
+
+ conf.CHECK_FUNCS('prctl dirname basename')
+
+- # libbsd on some platforms provides strlcpy and strlcat
+- if not conf.CHECK_FUNCS('strlcpy strlcat'):
+- conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
+- checklibc=True)
+- if not conf.CHECK_FUNCS('getpeereid'):
+- conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
+- if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
+- conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+-
+- if not conf.CHECK_FUNCS('closefrom'):
+- conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
++ if Options.options.enable_libbsd:
++ # libbsd on some platforms provides strlcpy and strlcat
++ if not conf.CHECK_FUNCS('strlcpy strlcat'):
++ conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
++ checklibc=True)
++ if not conf.CHECK_FUNCS('getpeereid'):
++ conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
++ if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
++ conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
++
++ if not conf.CHECK_FUNCS('closefrom'):
++ conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
+
+ conf.CHECK_CODE('''
+ struct ucred cred;
+diff --git a/wscript b/wscript
+index 1c9655a..8c20d3b 100644
+--- a/wscript
++++ b/wscript
+@@ -62,7 +62,12 @@ def set_options(opt):
+ help=("Disable the use of pthread robust mutexes"),
+ action="store_true", dest='disable_tdb_mutex_locking',
+ default=False)
+-
++ opt.add_option('--with-valgrind',
++ help=("enable use of valgrind"),
++ action="store_true", dest='enable_valgrind')
++ opt.add_option('--without-valgrind',
++ help=("disable use of valgrind"),
++ action="store_false", dest='enable_valgrind', default=False)
+
+ def configure(conf):
+ conf.env.disable_tdb_mutex_locking = getattr(Options.options,
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb_1.3.15.bb b/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb_1.3.15.bb
new file mode 100644
index 000000000..302a306b3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtdb/libtdb_1.3.15.bb
@@ -0,0 +1,44 @@
+SUMMARY = "The tdb library"
+HOMEPAGE = "http://tdb.samba.org/"
+SECTION = "libs"
+LICENSE = "LGPL-3.0+ & GPL-3.0+"
+
+LIC_FILES_CHKSUM = "file://tools/tdbdump.c;endline=18;md5=b59cd45aa8624578126a8c98f48018c4 \
+ file://include/tdb.h;endline=27;md5=f5bb544641d3081821bcc1dd58310be6"
+
+SRC_URI = "https://samba.org/ftp/tdb/tdb-${PV}.tar.gz \
+ file://do-not-check-xsltproc-manpages.patch \
+ file://tdb-Add-configure-options-for-packages.patch \
+"
+
+SRC_URI[md5sum] = "60ece3996acc8d85b6f713199da971a6"
+SRC_URI[sha256sum] = "b4a1bf3833601bd9f10aff363cb750860aef9ce5b4617989239923192f946728"
+
+PACKAGECONFIG ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} \
+"
+PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
+PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
+PACKAGECONFIG[libaio] = "--with-libaio,--without-libaio,libaio"
+PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
+PACKAGECONFIG[libcap] = "--with-libcap,--without-libcap,libcap"
+PACKAGECONFIG[valgrind] = "--with-valgrind,--without-valgrind,valgrind"
+
+S = "${WORKDIR}/tdb-${PV}"
+
+inherit waf-samba
+
+EXTRA_OECONF += "--disable-rpath \
+ --bundled-libraries=NONE \
+ --builtin-libraries=replace \
+ --with-libiconv=${STAGING_DIR_HOST}${prefix}\
+ "
+
+PACKAGES += "tdb-tools python-tdb python-tdb-dbg"
+
+FILES_${PN} = "${libdir}/*.so.*"
+FILES_tdb-tools = "${bindir}/*"
+FILES_python-tdb = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/*"
+FILES_python-tdb-dbg = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/.debug/*"
+RDEPENDS_python-tdb = "python"
diff --git a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/avoid-attr-unless-wanted.patch b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/avoid-attr-unless-wanted.patch
new file mode 100644
index 000000000..35890335a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/avoid-attr-unless-wanted.patch
@@ -0,0 +1,22 @@
+diff --git a/lib/replace/wscript b/lib/replace/wscript
+index 079761d..07e0104 100644
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -793,8 +793,6 @@ def build(bld):
+ if not bld.CONFIG_SET('HAVE_INET_ATON'): REPLACE_SOURCE += ' inet_aton.c'
+ if not bld.CONFIG_SET('HAVE_INET_NTOP'): REPLACE_SOURCE += ' inet_ntop.c'
+ if not bld.CONFIG_SET('HAVE_INET_PTON'): REPLACE_SOURCE += ' inet_pton.c'
+- if not bld.CONFIG_SET('HAVE_GETXATTR') or bld.CONFIG_SET('XATTR_ADDITIONAL_OPTIONS'):
+- REPLACE_SOURCE += ' xattr.c'
+
+ if not bld.CONFIG_SET('HAVE_CLOSEFROM'):
+ REPLACE_SOURCE += ' closefrom.c'
+@@ -808,7 +806,7 @@ def build(bld):
+ # at the moment:
+ # hide_symbols=bld.BUILTIN_LIBRARY('replace'),
+ private_library=True,
+- deps='crypt dl nsl socket rt attr' + extra_libs)
++ deps='crypt dl nsl socket rt ' + extra_libs)
+
+ replace_test_cflags="-Wno-format-zero-length"
+ if bld.CONFIG_SET('HAVE_WNO_FORMAT_TRUNCATION'):
diff --git a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/options-0.9.36.patch b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/options-0.9.36.patch
new file mode 100644
index 000000000..363c5867c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent/options-0.9.36.patch
@@ -0,0 +1,176 @@
+From c3e2e4f89cf37b27609fd02ad67eb02d0015cc1e Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Wed, 21 Sep 2016 09:57:49 +0800
+Subject: [PATCH 1/1] tevent: Add configure options for packages
+
+Add configure options for the following packages:
+ - acl
+ - attr
+ - libaio
+ - libbsd
+ - libcap
+ - valgrind
+
+Upstream-Status: Inappropriate [oe deterministic build specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+
+Modified to apply to version 0.9.33.
+
+Signed-off-by: Joe Slater <joe.slater@windriver.com>
+---
+ lib/replace/wscript | 89 ++++++++++++++++++++++++++++++++++++++++-------------
+ wscript | 7 ++++-
+ 2 files changed, 73 insertions(+), 23 deletions(-)
+
+diff --git a/lib/replace/wscript b/lib/replace/wscript
+index 2c638b7..079761d 100644
+--- a/lib/replace/wscript
++++ b/lib/replace/wscript
+@@ -23,6 +23,41 @@ def set_options(opt):
+ opt.PRIVATE_EXTENSION_DEFAULT('')
+ opt.RECURSE('buildtools/wafsamba')
+
++ opt.add_option('--with-acl',
++ help=("Enable use of acl"),
++ action="store_true", dest='enable_acl')
++ opt.add_option('--without-acl',
++ help=("Disable use of acl"),
++ action="store_false", dest='enable_acl', default=False)
++
++ opt.add_option('--with-attr',
++ help=("Enable use of attr"),
++ action="store_true", dest='enable_attr')
++ opt.add_option('--without-attr',
++ help=("Disable use of attr"),
++ action="store_false", dest='enable_attr', default=False)
++
++ opt.add_option('--with-libaio',
++ help=("Enable use of libaio"),
++ action="store_true", dest='enable_libaio')
++ opt.add_option('--without-libaio',
++ help=("Disable use of libaio"),
++ action="store_false", dest='enable_libaio', default=False)
++
++ opt.add_option('--with-libbsd',
++ help=("Enable use of libbsd"),
++ action="store_true", dest='enable_libbsd')
++ opt.add_option('--without-libbsd',
++ help=("Disable use of libbsd"),
++ action="store_false", dest='enable_libbsd', default=False)
++
++ opt.add_option('--with-libcap',
++ help=("Enable use of libcap"),
++ action="store_true", dest='enable_libcap')
++ opt.add_option('--without-libcap',
++ help=("Disable use of libcap"),
++ action="store_false", dest='enable_libcap', default=False)
++
+ @Utils.run_once
+ def configure(conf):
+ conf.RECURSE('buildtools/wafsamba')
+@@ -32,12 +67,25 @@ def configure(conf):
+ conf.DEFINE('HAVE_LIBREPLACE', 1)
+ conf.DEFINE('LIBREPLACE_NETWORK_CHECKS', 1)
+
+- conf.CHECK_HEADERS('linux/types.h crypt.h locale.h acl/libacl.h compat.h')
+- conf.CHECK_HEADERS('acl/libacl.h attr/xattr.h compat.h ctype.h dustat.h')
++ conf.CHECK_HEADERS('linux/types.h crypt.h locale.h compat.h')
++ conf.CHECK_HEADERS('compat.h ctype.h dustat.h')
+ conf.CHECK_HEADERS('fcntl.h fnmatch.h glob.h history.h krb5.h langinfo.h')
+- conf.CHECK_HEADERS('libaio.h locale.h ndir.h pwd.h')
+- conf.CHECK_HEADERS('shadow.h sys/acl.h')
+- conf.CHECK_HEADERS('sys/attributes.h attr/attributes.h sys/capability.h sys/dir.h sys/epoll.h')
++ conf.CHECK_HEADERS('locale.h ndir.h pwd.h')
++ conf.CHECK_HEADERS('shadow.h')
++ conf.CHECK_HEADERS('sys/attributes.h sys/dir.h sys/epoll.h')
++
++ if Options.options.enable_acl:
++ conf.CHECK_HEADERS('acl/libacl.h sys/acl.h')
++
++ if Options.options.enable_attr:
++ conf.CHECK_HEADERS('attr/attributes.h attr/xattr.h')
++
++ if Options.options.enable_libaio:
++ conf.CHECK_HEADERS('libaio.h')
++
++ if Options.options.enable_libcap:
++ conf.CHECK_HEADERS('sys/capability.h')
++
+ conf.CHECK_HEADERS('port.h')
+ conf.CHECK_HEADERS('sys/fcntl.h sys/filio.h sys/filsys.h sys/fs/s5param.h sys/fs/vx/quota.h')
+ conf.CHECK_HEADERS('sys/id.h sys/ioctl.h sys/ipc.h sys/mman.h sys/mode.h sys/ndir.h sys/priv.h')
+@@ -101,7 +149,8 @@ def configure(conf):
+ conf.CHECK_HEADERS('sys/fileio.h sys/filesys.h sys/dustat.h sys/sysmacros.h')
+ conf.CHECK_HEADERS('xfs/libxfs.h netgroup.h')
+
+- conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
++ if Options.options.enable_valgrind:
++ conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h')
+ conf.CHECK_HEADERS('nss_common.h nsswitch.h ns_api.h')
+ conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h')
+ conf.CHECK_HEADERS('utmp.h utmpx.h lastlog.h')
+@@ -294,22 +343,18 @@ def configure(conf):
+
+ conf.CHECK_FUNCS('prctl dirname basename')
+
+- strlcpy_in_bsd = False
+-
+- # libbsd on some platforms provides strlcpy and strlcat
+- if not conf.CHECK_FUNCS('strlcpy strlcat'):
+- if conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
+- checklibc=True):
+- strlcpy_in_bsd = True
+- if not conf.CHECK_FUNCS('getpeereid'):
+- conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
+- if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
+- conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+- if not conf.CHECK_FUNCS('setproctitle_init'):
+- conf.CHECK_FUNCS_IN('setproctitle_init', 'bsd', headers='sys/types.h bsd/unistd.h')
++ if Options.options.enable_libbsd:
++ # libbsd on some platforms provides strlcpy and strlcat
++ if not conf.CHECK_FUNCS('strlcpy strlcat'):
++ conf.CHECK_FUNCS_IN('strlcpy strlcat', 'bsd', headers='bsd/string.h',
++ checklibc=True)
++ if not conf.CHECK_FUNCS('getpeereid'):
++ conf.CHECK_FUNCS_IN('getpeereid', 'bsd', headers='sys/types.h bsd/unistd.h')
++ if not conf.CHECK_FUNCS_IN('setproctitle', 'setproctitle', headers='setproctitle.h'):
++ conf.CHECK_FUNCS_IN('setproctitle', 'bsd', headers='sys/types.h bsd/unistd.h')
+
+- if not conf.CHECK_FUNCS('closefrom'):
+- conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
++ if not conf.CHECK_FUNCS('closefrom'):
++ conf.CHECK_FUNCS_IN('closefrom', 'bsd', headers='bsd/unistd.h')
+
+ conf.CHECK_CODE('''
+ struct ucred cred;
+@@ -660,7 +705,7 @@ removeea setea
+ # look for a method of finding the list of network interfaces
+ for method in ['HAVE_IFACE_GETIFADDRS', 'HAVE_IFACE_AIX', 'HAVE_IFACE_IFCONF', 'HAVE_IFACE_IFREQ']:
+ bsd_for_strlcpy = ''
+- if strlcpy_in_bsd:
++ if Options.options.enable_libbsd:
+ bsd_for_strlcpy = ' bsd'
+ if conf.CHECK_CODE('''
+ #define %s 1
+diff --git a/wscript b/wscript
+index 94d190f..742f779 100644
+--- a/wscript
++++ b/wscript
+@@ -22,7 +22,12 @@ def set_options(opt):
+ opt.PRIVATE_EXTENSION_DEFAULT('tevent', noextension='tevent')
+ opt.RECURSE('lib/replace')
+ opt.RECURSE('lib/talloc')
+-
++ opt.add_option('--with-valgrind',
++ help=("enable use of valgrind"),
++ action="store_true", dest='enable_valgrind')
++ opt.add_option('--without-valgrind',
++ help=("disable use of valgrind"),
++ action="store_false", dest='enable_valgrind', default=False)
+
+ def configure(conf):
+ conf.RECURSE('lib/replace')
+--
+2.16.2
+
diff --git a/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.9.36.bb b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.9.36.bb
new file mode 100644
index 000000000..c91b221b1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/libtevent/libtevent_0.9.36.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Hierarchical, reference counted memory pool system with destructors"
+HOMEPAGE = "http://tevent.samba.org"
+SECTION = "libs"
+LICENSE = "LGPLv3+"
+
+DEPENDS += "libtalloc libtirpc"
+RDEPENDS_python-tevent = "python"
+
+SRC_URI = "https://samba.org/ftp/tevent/tevent-${PV}.tar.gz \
+ file://options-0.9.36.patch \
+"
+LIC_FILES_CHKSUM = "file://tevent.h;endline=26;md5=4e458d658cb25e21efc16f720e78b85a"
+
+SRC_URI[md5sum] = "87d67bca75b231814435c47bec0aff8a"
+SRC_URI[sha256sum] = "bd2b6be3fd1601ed7f176e99111e322c57d58e425cc149ee80c7dd4fed263b4c"
+
+inherit waf-samba
+
+PACKAGECONFIG ??= "\
+ ${@bb.utils.filter('DISTRO_FEATURES', 'acl', d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'xattr', 'attr', '', d)} \
+"
+PACKAGECONFIG[acl] = "--with-acl,--without-acl,acl"
+PACKAGECONFIG[attr] = "--with-attr,--without-attr,attr"
+PACKAGECONFIG[libaio] = "--with-libaio,--without-libaio,libaio"
+PACKAGECONFIG[libbsd] = "--with-libbsd,--without-libbsd,libbsd"
+PACKAGECONFIG[libcap] = "--with-libcap,--without-libcap,libcap"
+PACKAGECONFIG[valgrind] = "--with-valgrind,--without-valgrind,valgrind"
+
+SRC_URI += "${@bb.utils.contains('PACKAGECONFIG', 'attr', '', 'file://avoid-attr-unless-wanted.patch', d)}"
+
+S = "${WORKDIR}/tevent-${PV}"
+
+EXTRA_OECONF += "--disable-rpath \
+ --bundled-libraries=NONE \
+ --builtin-libraries=replace \
+ --with-libiconv=${STAGING_DIR_HOST}${prefix}\
+ --without-gettext \
+ "
+
+PACKAGES += "python-tevent python-tevent-dbg"
+
+FILES_python-tevent = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/*"
+FILES_python-tevent-dbg = "${libdir}/python${PYTHON_BASEVERSION}/site-packages/.debug"
diff --git a/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-fix-compile-error-with-linux-kernel-v4.8.patch b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-fix-compile-error-with-linux-kernel-v4.8.patch
new file mode 100644
index 000000000..583a6ca60
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-fix-compile-error-with-linux-kernel-v4.8.patch
@@ -0,0 +1,74 @@
+From 7cdafc0dee8054f82777ed3bf6d4c8b5582d09ad Mon Sep 17 00:00:00 2001
+From: Dengke Du <dengke.du@windriver.com>
+Date: Tue, 18 Oct 2016 07:56:02 +0000
+Subject: [PATCH] fix compile error with linux kernel v4.8
+
+In src/maint/zntune.c, the glibc time.h is included before linux
+time.h, so when compile the zntune.c, it break down by errors:
+
+ redefinition of 'struct timespec' 'struct timeval'
+ 'struct timezone' 'struct itimerval'
+
+We should exclude the linux time.h by disable linux/atm_zatm.h and
+move some useful definition in linux/atm_zatm.h to zntune.c to resolve
+it.
+
+Upstream-status: Pending
+
+Signed-off-by: Dengke Du <dengke.du@windriver.com>
+---
+ src/include/atm_zatm.h | 26 ++++++++++++++++++++++++++
+ src/maint/zntune.c | 3 +--
+ 2 files changed, 27 insertions(+), 2 deletions(-)
+ create mode 100644 src/include/atm_zatm.h
+
+diff --git a/src/include/atm_zatm.h b/src/include/atm_zatm.h
+new file mode 100644
+index 0000000..7d64f4d
+--- /dev/null
++++ b/src/include/atm_zatm.h
+@@ -0,0 +1,26 @@
++#include <linux/atmapi.h>
++#include <linux/atmioc.h>
++
++#define ZATM_GETPOOL _IOW('a',ATMIOC_SARPRV+1,struct atmif_sioc)
++ /* get pool statistics */
++#define ZATM_GETPOOLZ _IOW('a',ATMIOC_SARPRV+2,struct atmif_sioc)
++ /* get statistics and zero */
++#define ZATM_SETPOOL _IOW('a',ATMIOC_SARPRV+3,struct atmif_sioc)
++
++struct zatm_pool_info {
++ int ref_count; /* free buffer pool usage counters */
++ int low_water,high_water; /* refill parameters */
++ int rqa_count,rqu_count; /* queue condition counters */
++ int offset,next_off; /* alignment optimizations: offset */
++ int next_cnt,next_thres; /* repetition counter and threshold */
++}; /* set pool parameters */
++
++struct zatm_pool_req {
++ int pool_num; /* pool number */
++ struct zatm_pool_info info; /* actual information */
++};
++
++#define ZATM_OAM_POOL 0 /* free buffer pool for OAM cells */
++#define ZATM_AAL0_POOL 1 /* free buffer pool for AAL0 cells */
++#define ZATM_AAL5_POOL_BASE 2 /* first AAL5 free buffer pool */
++#define ZATM_LAST_POOL ZATM_AAL5_POOL_BASE+10 /* max. 64 kB */
+diff --git a/src/maint/zntune.c b/src/maint/zntune.c
+index 62d62ab..bb93eab 100644
+--- a/src/maint/zntune.c
++++ b/src/maint/zntune.c
+@@ -13,9 +13,8 @@
+ #include <sys/socket.h>
+ #include <sys/ioctl.h>
+ #include <atm.h>
++#include <atm_zatm.h>
+ #include <sys/time.h> /* for struct timeval, although it's not used */
+-#include <linux/atm_zatm.h>
+-
+
+ static void usage(const char *name)
+ {
+--
+2.9.0
+
diff --git a/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-ttcp-Add-printf-format-string.patch b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-ttcp-Add-printf-format-string.patch
new file mode 100644
index 000000000..87e7dc3c6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0001-ttcp-Add-printf-format-string.patch
@@ -0,0 +1,34 @@
+From b83fd54584fabd5d24f6645b4a3cf345c9d2020d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 16:11:59 -0700
+Subject: [PATCH 1/3] ttcp: Add printf format string
+
+Fixes compiler warnings when format security is enabled
+
+| ../../../linux-atm-2.5.2/src/test/ttcp.c:666:21: error: format not a string literal and no format arguments [-Werror=format-security]
+| fprintf(stderr, Usage);
+| ^~~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/test/ttcp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/test/ttcp.c b/src/test/ttcp.c
+index acb9185..337cee5 100644
+--- a/src/test/ttcp.c
++++ b/src/test/ttcp.c
+@@ -663,7 +663,7 @@ int no_check = 0;
+ exit(0);
+
+ usage:
+- fprintf(stderr, Usage);
++ fprintf(stderr, "%s", Usage);
+ exit(1);
+ }
+
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0002-sigd-Replace-on_exit-API-with-atexit.patch b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0002-sigd-Replace-on_exit-API-with-atexit.patch
new file mode 100644
index 000000000..ce061231c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0002-sigd-Replace-on_exit-API-with-atexit.patch
@@ -0,0 +1,30 @@
+From 27fa80dc8045e71c30dd2abea835206d5c8f6c71 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 16:18:56 -0700
+Subject: [PATCH 2/3] sigd: Replace on_exit() API with atexit()
+
+on_exit is not universally available
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/sigd/atmsigd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/sigd/atmsigd.c b/src/sigd/atmsigd.c
+index 52e41c7..b766606 100644
+--- a/src/sigd/atmsigd.c
++++ b/src/sigd/atmsigd.c
+@@ -517,7 +517,7 @@ int main(int argc,char **argv)
+ exit(0);
+ }
+ }
+- (void) on_exit(trace_on_exit,NULL);
++ atexit(trace_on_exit);
+ poll_loop();
+ close_all();
+ for (sig = entities; sig; sig = sig->next) stop_saal(&sig->saal);
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0003-mpoad-Drop-old-hack-to-compile-with-very-old-glibc.patch b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0003-mpoad-Drop-old-hack-to-compile-with-very-old-glibc.patch
new file mode 100644
index 000000000..0302286dc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/0003-mpoad-Drop-old-hack-to-compile-with-very-old-glibc.patch
@@ -0,0 +1,37 @@
+From fe954b2fb17d813aaab3e926cee76144314a115a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 16:22:55 -0700
+Subject: [PATCH 3/3] mpoad: Drop old hack to compile with very old glibc
+
+Use poll.h instead of sys/poll.h
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/mpoad/io.c | 9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+diff --git a/src/mpoad/io.c b/src/mpoad/io.c
+index 69900c2..8d1433f 100644
+--- a/src/mpoad/io.c
++++ b/src/mpoad/io.c
+@@ -10,14 +10,7 @@
+ #include <errno.h>
+ #include <sys/ioctl.h>
+ #include <sys/param.h> /* for OPEN_MAX */
+-#if __GLIBC__ >= 2
+-#include <sys/poll.h>
+-#else /* ugly hack to make it compile on RH 4.2 - WA */
+-#include <syscall.h>
+-#include <linux/poll.h>
+-#define SYS_poll 168
+-_syscall3(int,poll,struct pollfd *,ufds,unsigned int,nfds,int,timeout);
+-#endif
++#include <poll.h>
+ #include <atm.h>
+ #include <linux/types.h>
+ #include <linux/atmioc.h>
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/install-from-buildir.patch b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/install-from-buildir.patch
new file mode 100644
index 000000000..d1380eb2a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/install-from-buildir.patch
@@ -0,0 +1,19 @@
+install binaries from builddir not srcdir.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+--- linux-atm-2.5.2.orig/src/extra/Makefile.am 2010-12-21 05:07:22.000000000 +0800
++++ linux-atm-2.5.2/src/extra/Makefile.am 2014-12-22 10:56:04.458563269 +0800
+@@ -9,9 +9,9 @@ CLEANFILES = pca200e.bin pca200e_ecd.bin
+
+ install-exec-hook:
+ $(MKDIR_P) $(DESTDIR)/lib/firmware
+- $(INSTALL_DATA) $(srcdir)/pca200e.bin $(DESTDIR)/lib/firmware
+- $(INSTALL_DATA) $(srcdir)/pca200e_ecd.bin2 $(DESTDIR)/lib/firmware
+- $(INSTALL_DATA) $(srcdir)/sba200e_ecd.bin2 $(DESTDIR)/lib/firmware
++ $(INSTALL_DATA) $(builddir)/pca200e.bin $(DESTDIR)/lib/firmware
++ $(INSTALL_DATA) $(builddir)/pca200e_ecd.bin2 $(DESTDIR)/lib/firmware
++ $(INSTALL_DATA) $(builddir)/sba200e_ecd.bin2 $(DESTDIR)/lib/firmware
+
+ %.bin %.bin2: %.data
+ objcopy -Iihex $< -Obinary $@.gz
diff --git a/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/link-with-ldflags.patch b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/link-with-ldflags.patch
new file mode 100644
index 000000000..62fad2a54
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm/link-with-ldflags.patch
@@ -0,0 +1,38 @@
+LDFLAGS_FOR_BUILD should be required when doing link for qgen.
+
+Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
+
+diff -Nurp linux-atm-2.5.2.orig/configure.in linux-atm-2.5.2/configure.in
+--- linux-atm-2.5.2.orig/configure.in 2010-12-28 23:36:07.000000000 +0800
++++ linux-atm-2.5.2/configure.in 2014-12-22 10:25:23.830510932 +0800
+@@ -66,6 +66,7 @@ else
+ fi
+ AC_SUBST(CC_FOR_BUILD)
+ AC_SUBST(CFLAGS_FOR_BUILD)
++AC_SUBST(LDFLAGS_FOR_BUILD)
+ dnl Add -d flag to bison/yacc to create intermediate .h files
+ YACC="$YACC -d"
+
+diff -Nurp linux-atm-2.5.2.orig/src/qgen/Makefile.am linux-atm-2.5.2/src/qgen/Makefile.am
+--- linux-atm-2.5.2.orig/src/qgen/Makefile.am 2010-12-28 22:29:31.000000000 +0800
++++ linux-atm-2.5.2/src/qgen/Makefile.am 2014-12-22 10:23:51.914508318 +0800
+@@ -5,7 +5,7 @@ qgen_SOURCES = common.c common.h file.c
+ qgen_LDADD = -lfl
+
+ COMPILE = @CC_FOR_BUILD@ @CFLAGS_FOR_BUILD@
+-LINK = @CC_FOR_BUILD@ @CFLAGS_FOR_BUILD@ -o $@
++LINK = @CC_FOR_BUILD@ @CFLAGS_FOR_BUILD@ @LDFLAGS_FOR_BUILD@ -o $@
+
+ #TESTS = $(check_PROGRAMS)
+
+diff -Nurp linux-atm-2.5.2.orig/src/qgen/Makefile.in linux-atm-2.5.2/src/qgen/Makefile.in
+--- linux-atm-2.5.2.orig/src/qgen/Makefile.in 2010-12-29 00:06:11.000000000 +0800
++++ linux-atm-2.5.2/src/qgen/Makefile.in 2014-12-22 10:23:51.914508318 +0800
+@@ -106,6 +106,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ LD = @LD@
+ LDFLAGS = @LDFLAGS@
++LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
+ LEX = @LEX@
+ LEXLIB = @LEXLIB@
+ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
diff --git a/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm_2.5.2.bb b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm_2.5.2.bb
new file mode 100644
index 000000000..9fce4fba6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm_2.5.2.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Drivers and tools to support ATM networking under Linux"
+HOMEPAGE = "http://linux-atm.sourceforge.net/"
+SECTION = "libs"
+LICENSE = "GPL-2.0 & LGPL-2.0"
+
+DEPENDS = "virtual/kernel flex flex-native"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+SRC_URI = "http://nchc.dl.sourceforge.net/project/${BPN}/${BPN}/${PV}/${BPN}-${PV}.tar.gz \
+ file://link-with-ldflags.patch \
+ file://install-from-buildir.patch \
+ file://0001-fix-compile-error-with-linux-kernel-v4.8.patch \
+ file://0001-ttcp-Add-printf-format-string.patch \
+ file://0002-sigd-Replace-on_exit-API-with-atexit.patch \
+ file://0003-mpoad-Drop-old-hack-to-compile-with-very-old-glibc.patch \
+"
+
+SRC_URI[md5sum] = "d49499368c3cf15f73a05d9bce8824a8"
+SRC_URI[sha256sum] = "9645481a2b16476b59220aa2d6bc5bc41043f291326c9b37581018fbd16dd53a"
+
+LIC_FILES_CHKSUM = "\
+file://COPYING;md5=d928de9537d846935a98af3bbc6e6ee1 \
+file://COPYING.GPL;md5=ac2db169b9309e240555bc77be4f1a33 \
+file://COPYING.LGPL;md5=6e29c688d912da12b66b73e32b03d812"
+
+inherit autotools pkgconfig
+
+# The firmware is explicitly put under /lib when installed.
+#
+
+FILES_${PN} += "/lib/firmware"
diff --git a/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/run-ptest b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/run-ptest
new file mode 100644
index 000000000..e67f18e55
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/run-ptest
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+sh v4test.sh
+sh v6test.sh
+
diff --git a/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v4test.sh b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v4test.sh
new file mode 100644
index 000000000..513085699
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v4test.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+echo "v4test starting:"
+for t in $(find -maxdepth 1 -type f \! -name test\*_v6 -name test\*); do
+ echo "$t";
+ if $t; then
+ echo "PASS: $t"; echo "";
+ else
+ echo "FAIL: $t"; echo "";
+ fi
+ sleep 1;
+done
diff --git a/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v6test.sh b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v6test.sh
new file mode 100644
index 000000000..3a667df82
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools/v6test.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+echo "v6test starting:"
+for t in $(find -maxdepth 1 -name test\*_v6); do
+ echo "$t";
+ if $t; then
+ echo "PASS: $t"; echo "";
+ else
+ echo "FAIL: $t"; echo "";
+ fi
+ sleep 1;
+done
diff --git a/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools_1.0.17.bb b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools_1.0.17.bb
new file mode 100644
index 000000000..121cc9945
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lksctp-tools/lksctp-tools_1.0.17.bb
@@ -0,0 +1,62 @@
+SUMMARY = "The Linux Kernel Stream Control Transmission Protocol (lksctp) project"
+HOMEPAGE = "http://lksctp.org"
+SECTION = "net"
+LICENSE = "LGPLv2.1 & GPLv2"
+
+LIC_FILES_CHKSUM = " \
+ file://COPYING.lib;md5=0a1b79af951c42a9c8573533fbba9a92 \
+ file://COPYING;md5=0c56db0143f4f80c369ee3af7425af6e \
+"
+
+SRCREV = "736b91d340e3f2519714f2930ed63b164d363511"
+
+PV .= "+git${SRCPV}"
+LK_REL = "1.0.17"
+
+SRC_URI = " \
+ git://github.com/sctp/lksctp-tools.git \
+ file://run-ptest \
+ file://v4test.sh \
+ file://v6test.sh \
+"
+
+S = "${WORKDIR}/git"
+
+BBCLASSEXTEND = "native"
+
+inherit autotools pkgconfig binconfig ptest
+
+do_install_ptest () {
+ install -m 0755 ${WORKDIR}/v4test.sh ${D}${PTEST_PATH}
+ install -m 0755 ${WORKDIR}/v6test.sh ${D}${PTEST_PATH}
+ for testcase in `find ${B}/src/apps/.libs ${B}/src/func_tests/.libs -maxdepth 1 -type f -executable`; do
+ install $testcase ${D}${PTEST_PATH}
+ done
+}
+
+SOLIBVERSION="${LK_REL}"
+SOLIBMAJORVERSION="1"
+
+PACKAGES =+ "${PN}-withsctp ${PN}-utils"
+
+FILES_${PN} = " \
+ ${libdir}/libsctp.so.${SOLIBVERSION} \
+ ${libdir}/libsctp.so.${SOLIBMAJORVERSION} \
+"
+
+FILES_${PN}-withsctp = " \
+ ${libdir}/lksctp-tools/libwithsctp.so.${SOLIBVERSION} \
+ ${libdir}/lksctp-tools/libwithsctp.so.${SOLIBMAJORVERSION} \
+"
+
+FILES_${PN}-dev += " \
+ ${libdir}/libsctp.so \
+ ${libdir}/lksctp-tools/libwithsctp.so \
+ ${datadir}/lksctp-tools/*.c \
+ ${datadir}/lksctp-tools/*.h \
+"
+
+FILES_${PN}-utils = "${bindir}/*"
+
+RRECOMMENDS_${PN}-utils += "kernel-module-sctp"
+RRECOMMENDS_${PN}-ptest += "kernel-module-sctp"
diff --git a/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Fix-build-errors-with-clang.patch b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Fix-build-errors-with-clang.patch
new file mode 100644
index 000000000..8e906f7ce
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Fix-build-errors-with-clang.patch
@@ -0,0 +1,34 @@
+From 5f9e80acb0a1ac399839bf160e43f6120c4b5128 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 18 Oct 2016 23:49:09 +0000
+Subject: [PATCH] Fix build errors with clang
+
+| ../../../../../../../workspace/sources/lowpan-tools/src/coordinator.c:313:50: error: format specifies type 'unsigned char' but the argument has type 'int' [-Werror,-Wformat]
+| fprintf(stderr, "Opt: %c (%hhx)\n", (char)opt, opt);
+| ~~~~ ^~~
+| %x
+| 1 error generated.
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/coordinator.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/coordinator.c b/src/coordinator.c
+index c139aae..f0de6d2 100644
+--- a/src/coordinator.c
++++ b/src/coordinator.c
+@@ -310,7 +310,7 @@ int main(int argc, char **argv)
+ #else
+ opt = getopt(argc, argv, "l:f:d:m:n:i:s:p:c:hv");
+ #endif
+- fprintf(stderr, "Opt: %c (%hhx)\n", opt, opt);
++ fprintf(stderr, "Opt: %c (%hhx)\n", opt, (unsigned char)opt);
+ if (opt == -1)
+ break;
+
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Remove-newline-from-format-line.patch b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Remove-newline-from-format-line.patch
new file mode 100644
index 000000000..1453b75d5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-Remove-newline-from-format-line.patch
@@ -0,0 +1,32 @@
+From a36afac485745cf980fba1809526f2025cb4d101 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 23 Apr 2017 00:16:45 -0700
+Subject: [PATCH] Remove newline from format line
+
+Fixes
+
+error: '__builtin___snprintf_chk' output truncated before the last format character [-Werror=format-truncation=]
+ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
+ ^
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ addrdb/addrdb.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/addrdb/addrdb.c b/addrdb/addrdb.c
+index 4bb7f79..05d53f3 100644
+--- a/addrdb/addrdb.c
++++ b/addrdb/addrdb.c
+@@ -178,7 +178,7 @@ int addrdb_dump_leases(const char *lease_file)
+ continue;
+ }
+ snprintf(hwaddr_buf, sizeof(hwaddr_buf),
+- "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
++ "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
+ lease->hwaddr[0], lease->hwaddr[1],
+ lease->hwaddr[2], lease->hwaddr[3],
+ lease->hwaddr[4], lease->hwaddr[5],
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch
new file mode 100644
index 000000000..0a81a2252
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch
@@ -0,0 +1,44 @@
+From ab725a3faaeead90ae3c63cbcd370af087c413a5 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Mon, 27 Mar 2017 17:55:06 -0700
+Subject: [PATCH] addrdb/coord-config-parse.y: add missing <time.h> include
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The %union definition uses the time_t structure. In order to use this
+structure, the <time.h> header has to be included. Otherwise, the build
+breaks with some C libraries, such as musl:
+
+In file included from coord-config-lex.l:23:0:
+coord-config-parse.y:107:2: error: unknown type name ‘time_t’
+ time_t timestamp;
+ ^
+
+This patch includes <time.h> using the '%code requires' directive of
+Yacc.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ addrdb/coord-config-parse.y | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/addrdb/coord-config-parse.y b/addrdb/coord-config-parse.y
+index 2e10a88..85ee058 100644
+--- a/addrdb/coord-config-parse.y
++++ b/addrdb/coord-config-parse.y
+@@ -102,6 +102,10 @@
+
+ %}
+
++%code requires {
++#include <time.h>
++}
++
+ %union {
+ unsigned long number;
+ time_t timestamp;
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-coordinator-Fix-strncpy-range-warning.patch b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-coordinator-Fix-strncpy-range-warning.patch
new file mode 100644
index 000000000..493832bb8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-coordinator-Fix-strncpy-range-warning.patch
@@ -0,0 +1,30 @@
+From f017353b8f3170ce79e7addc127056c0142f087b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 1 Apr 2018 14:31:05 -0700
+Subject: [PATCH] coordinator: Fix strncpy range warning
+
+Fixes
+error: 'strncpy' specified bound 4096 equals destination size [-Werror=stringop-truncation]
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/coordinator.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/coordinator.c b/src/coordinator.c
+index c139aae..ca49418 100644
+--- a/src/coordinator.c
++++ b/src/coordinator.c
+@@ -296,7 +296,8 @@ int main(int argc, char **argv)
+ if(!lease_file)
+ lease_file = LEASE_FILE;
+
+- strncpy(pname, argv[0], PATH_MAX);
++ strncpy(pname, argv[0], PATH_MAX - 1);
++ pname[PATH_MAX - 1] = '\0';
+
+ pid_file = getenv("PID_FILE");
+ if (!pid_file)
+--
+2.16.3
+
diff --git a/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-src-iz.c-Undef-dprintf-before-redefining.patch b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-src-iz.c-Undef-dprintf-before-redefining.patch
new file mode 100644
index 000000000..68393067d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/0001-src-iz.c-Undef-dprintf-before-redefining.patch
@@ -0,0 +1,27 @@
+From ad088233608ba2205511da4f270f8ba29844b84c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 8 Apr 2017 09:02:02 -0700
+Subject: [PATCH] src/iz.c: Undef dprintf before redefining
+
+Clang is picky and warns about macros redefinition
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/iz.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/iz.c b/src/iz.c
+index 32be1a8..886f0a5 100644
+--- a/src/iz.c
++++ b/src/iz.c
+@@ -60,6 +60,7 @@ static int iz_seq = 0;
+ /* Parsed options */
+ static int iz_debug = 0;
+
++#undef dprintf
+ #define dprintf(lvl, fmt...) \
+ do { \
+ if (iz_debug >= lvl) \
+--
+2.12.2
+
diff --git a/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/no-help2man.patch b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/no-help2man.patch
new file mode 100644
index 000000000..9ecd707b4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools/no-help2man.patch
@@ -0,0 +1,41 @@
+Disable building manpages so that make install doesn't fail due to lack of help2man
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 46c4017..d6ed312 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -9,11 +9,6 @@ izcoordinator_DESC = "simple coordinator for IEEE 802.15.4 network"
+ iz_DESC = "configure an IEEE 802.15.4 interface"
+ izchat_DESC = "simple chat program using IEEE 802.15.4"
+
+-if MANPAGES
+-dist_man_MANS = $(manpages)
+-endif
+-EXTRA_DIST = $(manpages)
+-
+ izattach_SOURCES = serial.c
+
+ iz_SOURCES = iz.c iz-common.c iz-mac.c iz-phy.c
+@@ -27,18 +22,6 @@ izcoordinator_LDADD = ../addrdb/libaddrdb.la $(LDADD) $(NL_LIBS) $(LEXLIB)
+ iz_CFLAGS = $(AM_CFLAGS) $(NL_CFLAGS) -D_GNU_SOURCE
+ iz_LDADD = $(LDADD) $(NL_LIBS)
+
+-izattach.8: $(izattach_SOURCES) $(top_srcdir)/configure.ac
+- -$(HELP2MAN) -o $@ -s 8 -N -n $(izattach_DESC) $(builddir)/izattach
+-
+-izcoordinator.8: $(izcoordinator_SOURCES) $(top_srcdir)/configure.ac
+- -$(HELP2MAN) -o $@ -s 8 -N -n $(izcoordinator_DESC) $(builddir)/izcoordinator
+-
+-iz.8: $(iz_SOURCES) $(top_srcdir)/configure.ac
+- -$(HELP2MAN) -o $@ -s 8 -N -n $(iz_DESC) $(builddir)/iz
+-
+-izchat.1: $(izchat_SOURCES) $(top_srcdir)/configure.ac
+- -$(HELP2MAN) -o $@ -s 1 -N -n $(izchat_DESC) $(builddir)/izchat
+-
+ install-data-hook:
+ $(mkinstalldirs) $(DESTDIR)`dirname $(leasefile)`
+ $(mkinstalldirs) $(DESTDIR)`dirname $(pidfile)`
diff --git a/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools_git.bb b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools_git.bb
new file mode 100644
index 000000000..d0fe59c98
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/lowpan-tools/lowpan-tools_git.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Utilities for managing the Linux LoWPAN stack"
+DESCRIPTION = "This is a set of utils to manage the Linux LoWPAN stack. \
+The LoWPAN stack aims for IEEE 802.15.4-2003 (and for lesser extent IEEE 802.15.4-2006) compatibility."
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "flex-native bison-native libnl python"
+
+PV = "0.3.1+git${SRCPV}"
+SRC_URI = "git://github.com/linux-wpan/lowpan-tools \
+ file://no-help2man.patch \
+ file://0001-Fix-build-errors-with-clang.patch \
+ file://0001-addrdb-coord-config-parse.y-add-missing-time.h-inclu.patch \
+ file://0001-src-iz.c-Undef-dprintf-before-redefining.patch \
+ file://0001-Remove-newline-from-format-line.patch \
+ file://0001-coordinator-Fix-strncpy-range-warning.patch \
+ "
+SRCREV = "1c2d8674cc6f4b1166a066e8822e295c105ae7a2"
+
+S = "${WORKDIR}/git"
+
+inherit autotools python-dir pkgconfig
+
+CACHED_CONFIGUREVARS += "am_cv_python_pythondir=${PYTHON_SITEPACKAGES_DIR}/lowpan-tools"
+
+CFLAGS += "-Wno-initializer-overrides"
+
+do_install_append() {
+ rmdir ${D}${localstatedir}/run
+}
+
+FILES_${PN}-dbg += "${libexecdir}/lowpan-tools/.debug/"
+
+PACKAGES =+ "${PN}-python"
+FILES_${PN}-python = "${libdir}/python*"
diff --git a/meta-openembedded/meta-networking/recipes-support/macchanger/macchanger_1.5.0.bb b/meta-openembedded/meta-networking/recipes-support/macchanger/macchanger_1.5.0.bb
new file mode 100644
index 000000000..a90177f19
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/macchanger/macchanger_1.5.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Tool to view/change network interface MAC addresses"
+DESCRIPTION = "A GNU/Linux utility for viewing/manipulating the MAC address of network interfaces."
+HOMEPAGE = "http://www.alobbs.com/macchanger"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+SECTION = "net"
+
+SRC_URI = "${GNU_MIRROR}/macchanger/${BPN}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "79b7cdaeca3d8ebafa764c4b0dd03ab7"
+SRC_URI[sha256sum] = "d44bfa27cb29c5a718627cb3ef3aa42eb5130426545eb2031120826cd73fa8fe"
+
+FILES_${PN} = " \
+ ${bindir}/${BPN} \
+ ${datadir}/${BPN}/wireless.list \
+ ${datadir}/${BPN}/OUI.list \
+"
+
+FILES_${PN}-doc = " \
+ ${datadir}/info \
+ ${datadir}/man \
+"
+
+inherit autotools
diff --git a/meta-openembedded/meta-networking/recipes-support/memcached/memcached/memcached-add-hugetlbfs-check.patch b/meta-openembedded/meta-networking/recipes-support/memcached/memcached/memcached-add-hugetlbfs-check.patch
new file mode 100644
index 000000000..544b840fe
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/memcached/memcached/memcached-add-hugetlbfs-check.patch
@@ -0,0 +1,32 @@
+memcached: add knob to detect whether hugetlbfs are checked
+
+Add knob to detect whether hugetlbfs are checked or not.
+
+Upstream-Status: Pending
+
+Signed-off-by: Chong Lu <Chong.Lu@windriver.com>
+---
+ configure.ac | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 7f22f21..21691b9 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -314,7 +314,12 @@ fi
+ dnl ----------------------------------------------------------------------------
+
+ AC_SEARCH_LIBS(umem_cache_create, umem)
+-AC_SEARCH_LIBS(gethugepagesizes, hugetlbfs)
++AC_ARG_ENABLE(hugetlbfs,
++ [AS_HELP_STRING([--enable-hugetlbfs],[Enable hugetlbfs])])
++
++if test "x$enable_hugetlbfs" = "xyes"; then
++ AC_SEARCH_LIBS(gethugepagesizes, hugetlbfs)
++fi
+
+ AC_HEADER_STDBOOL
+ AH_BOTTOM([#if HAVE_STDBOOL_H
+--
+1.8.3.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/memcached/memcached_1.5.0.bb b/meta-openembedded/meta-networking/recipes-support/memcached/memcached_1.5.0.bb
new file mode 100644
index 000000000..fd3d171f0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/memcached/memcached_1.5.0.bb
@@ -0,0 +1,52 @@
+SUMMARY = "A high-performance memory object caching system"
+DESCRIPTION = "\
+ memcached optimizes specific high-load serving applications that are designed \
+ to take advantage of its versatile no-locking memory access system. Clients \
+ are available in several different programming languages, to suit the needs \
+ of the specific application. Traditionally this has been used in mod_perl \
+ apps to avoid storing large chunks of data in Apache memory, and to share \
+ this burden across several machines."
+SECTION = "web"
+HOMEPAGE = "http://memcached.org/"
+LICENSE = "BSD-3-Clause"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=7e5ded7363d335e1bb18013ca08046ff"
+
+inherit autotools
+
+DEPENDS += "libevent"
+RDEPENDS_${PN} += "perl perl-module-posix perl-module-autoloader \
+ perl-module-tie-hash bash \
+ "
+
+SRC_URI = "http://www.memcached.org/files/${BP}.tar.gz \
+ file://memcached-add-hugetlbfs-check.patch \
+ "
+SRC_URI[md5sum] = "81326513f60d7ba482f8131975cd55ae"
+SRC_URI[sha256sum] = "c001f812024bb461b5e4d7d0506daab63dff9614eea26f46536c3b7e1e601c32"
+
+# set the same COMPATIBLE_HOST as libhugetlbfs
+COMPATIBLE_HOST = '(i.86|x86_64|powerpc|powerpc64|arm).*-linux'
+
+python __anonymous () {
+ endianness = d.getVar('SITEINFO_ENDIANNESS')
+ if endianness == 'le':
+ d.appendVar('EXTRA_OECONF', " ac_cv_c_endian=little")
+ else:
+ d.appendVar('EXTRA_OECONF', " ac_cv_c_endian=big")
+}
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[hugetlbfs] = "--enable-hugetlbfs, --disable-hugetlbfs, libhugetlbfs"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "memcached"
+INITSCRIPT_PARAMS = "defaults"
+
+do_install_append() {
+ install -D -m 755 ${S}/scripts/memcached-init ${D}${sysconfdir}/init.d/memcached
+ mkdir -p ${D}/usr/share/memcached/scripts
+ install -m 755 ${S}/scripts/memcached-tool ${D}/usr/share/memcached/scripts
+ install -m 755 ${S}/scripts/start-memcached ${D}/usr/share/memcached/scripts
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/mtr/mtr_0.87.bb b/meta-openembedded/meta-networking/recipes-support/mtr/mtr_0.87.bb
new file mode 100644
index 000000000..9d3275e2d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/mtr/mtr_0.87.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Combined traceroute and ping utility"
+DESCRIPTION = "mtr combines the functionality of the 'traceroute' and 'ping' programs in a single network diagnostic tool."
+HOMEPAGE = "http://www.bitwizard.nl/mtr/"
+SECTION = "net"
+DEPENDS = "ncurses"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://ui/mtr.c;beginline=5;endline=16;md5=af1fafbbfa1bfd48af839f4bb3221106"
+
+PV .= "+git${SRCPV}"
+
+SRCREV = "e6d0a7e93129e8023654ebf58dfa8135d1b1af56"
+SRC_URI = "git://github.com/traviscross/mtr"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+EXTRA_OECONF = "--without-gtk"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+PACKAGES += "${PN}-bash-completions"
+
+FILES_${PN}-bash-completions = "${datadir}/bash-completion/"
diff --git a/meta-openembedded/meta-networking/recipes-support/nbd/nbd_3.11.bb b/meta-openembedded/meta-networking/recipes-support/nbd/nbd_3.11.bb
new file mode 100644
index 000000000..2ad75bda6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nbd/nbd_3.11.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Network Block Device"
+HOMEPAGE = "http://nbd.sourceforge.net"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "glib-2.0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "73d11644a28b9f335292cdb3bdc4b74b"
+SRC_URI[sha256sum] = "14420f74cb16dc609a9302ed1efd653064bed7a8357e9d73daabc33608e3f2a0"
+
+inherit autotools pkgconfig
+
+PACKAGES = "${PN}-client ${PN}-server ${PN}-dbg ${PN}-trdump ${PN}-doc"
+
+FILES_${PN}-client = "${sbindir}/${BPN}-client"
+FILES_${PN}-server = "${bindir}/${BPN}-server"
+FILES_${PN}-trdump = "${bindir}/${BPN}-trdump"
diff --git a/meta-openembedded/meta-networking/recipes-support/ncp/libowfat_0.31.bb b/meta-openembedded/meta-networking/recipes-support/ncp/libowfat_0.31.bb
new file mode 100644
index 000000000..4b072f7e7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ncp/libowfat_0.31.bb
@@ -0,0 +1,27 @@
+SUMMARY = "reimplement libdjb"
+DESCRIPTION = "libowfat is a library of general purpose APIs extracted from Dan \
+Bernstein's software (libdjb), reimplemented and covered by the GNU \
+General Public License Version 2 (no later versions)."
+HOMEPAGE = "http://www.fefe.de/libowfat"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+SRC_URI = "https://www.fefe.de/${BPN}/${BP}.tar.xz"
+SRC_URI[md5sum] = "120798fab86cfd72dc6b12284d248dd0"
+SRC_URI[sha256sum] = "d1e4ac1cfccbb7dc51d77d96398e6302d229ba7538158826c84cb4254c7e8a12"
+
+EXTRA_OEMAKE = "\
+ DIET= \
+ CC='${BUILD_CC} ${BUILD_CPPFLAGS} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}' \
+ CCC='${CC}' CFLAGS='${CFLAGS} -I.' CFLAGS_OPT='${CFLAGS} -I.' \
+"
+
+do_install() {
+ make install \
+ DESTDIR=${D} \
+ INCLUDEDIR=${includedir}/${BPN} \
+ LIBDIR=${libdir} \
+ MAN3DIR=${mandir}/man3
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-networking/recipes-support/ncp/ncp_1.2.4.bb b/meta-openembedded/meta-networking/recipes-support/ncp/ncp_1.2.4.bb
new file mode 100644
index 000000000..f42223b1f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ncp/ncp_1.2.4.bb
@@ -0,0 +1,31 @@
+SUMMARY = "a fast file copy tool for LANs"
+DESCRIPTION = "ncp is a utility for copying files in a LAN. It has absolutely no \
+security or integrity checking, no throttling, no features, except \
+one: you don't have to type the coordinates of your peer."
+HOMEPAGE = "http://www.fefe.de/ncp"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6"
+DEPENDS = "libowfat"
+
+SRC_URI = "https://dl.fefe.de/${BP}.tar.bz2"
+SRC_URI[md5sum] = "421c4855bd3148b7d0a4342942b4bf13"
+SRC_URI[sha256sum] = "6cfa72edd5f7717bf7a4a93ccc74c4abd89892360e2e0bb095a73c24b9359b88"
+
+EXTRA_OEMAKE = "\
+ DIET= \
+ DEBUG=nostrip \
+ CC='${CC}' CFLAGS='${CFLAGS} -I${STAGING_INCDIR}/libowfat' LDFLAGS='${LDFLAGS}' \
+"
+
+do_install() {
+ install -d -m0755 ${D}${bindir} ${D}${mandir}/man1
+
+ install -m0755 ncp ${D}${bindir}
+ ln -sf ncp ${D}${bindir}/npoll
+ ln -sf ncp ${D}${bindir}/npush
+
+ install -m0644 ncp.1 npush.1 ${D}${mandir}/man1
+ ln -sf npush.1 ${D}${mandir}/man1/npoll.1
+}
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-autogen-Do-not-symlink-gettext.h-from-build-host.patch b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-autogen-Do-not-symlink-gettext.h-from-build-host.patch
new file mode 100644
index 000000000..eeae5326d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-autogen-Do-not-symlink-gettext.h-from-build-host.patch
@@ -0,0 +1,34 @@
+From 1ee2c998933c4a3d7e7b386352cbdb12f270774c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 6 Sep 2017 20:50:48 -0700
+Subject: [PATCH] autogen: Do not symlink gettext.h from build host
+
+This will create a dependency on build host having gettext
+installed which may not always be the case.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Inappropriate [Cross-compile specific]
+ autogen.sh | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/autogen.sh b/autogen.sh
+index 3371011..bbc7add 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -25,12 +25,6 @@ echo "Running autoreconf ..."
+ autoreconf -sfi
+ unlink po/Makevars.template
+
+-for d in /usr /usr/local /opt/gettext /usr/pkg $HOME ; do
+- if test -f $d/share/gettext/gettext.h ; then
+- ln -sf $d/share/gettext/gettext.h include/gettext.h
+- fi
+-done
+-
+ test -f "include/gettext.h" || {
+ echo "Error: can't find <gettext.h> convenience C header."
+ echo "Please put a link to it by hand as include/gettext.h"
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-replace-VLAIS-with-malloc-free-pair.patch b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-replace-VLAIS-with-malloc-free-pair.patch
new file mode 100644
index 000000000..dc58b5b79
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0001-replace-VLAIS-with-malloc-free-pair.patch
@@ -0,0 +1,124 @@
+From 3a7d5396e633e6c02a4583be7faf3d79d0d33748 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 31 Aug 2017 11:14:41 -0700
+Subject: [PATCH 1/2] replace VLAIS with malloc/free pair
+
+Makes it compatible with non-gnu compilers
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/trace-icmp.c | 7 +++++--
+ src/trace-tcp.c | 14 ++++++++++----
+ src/trace-udp.c | 7 +++++--
+ 3 files changed, 20 insertions(+), 8 deletions(-)
+
+diff --git a/src/trace-icmp.c b/src/trace-icmp.c
+index 842938e..c76cb54 100644
+--- a/src/trace-icmp.c
++++ b/src/trace-icmp.c
+@@ -43,16 +43,19 @@ send_echo_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
+ struct
+ {
+ struct icmp6_hdr ih;
+- uint8_t payload[plen - sizeof (struct icmp6_hdr)];
++ uint8_t *payload;
+ } packet;
+ memset (&packet, 0, plen);
++ packet.payload = malloc(plen - sizeof (struct icmp6_hdr));
+
+ packet.ih.icmp6_type = ICMP6_ECHO_REQUEST;
+ packet.ih.icmp6_id = htons (getpid ());
+ packet.ih.icmp6_seq = htons ((ttl << 8) | (n & 0xff));
+ (void)port;
+
+- return send_payload (fd, &packet.ih, plen, ttl);
++ ssize_t ret = send_payload (fd, &packet.ih, plen, ttl);
++ free(packet.payload);
++ return ret;
+ }
+
+
+diff --git a/src/trace-tcp.c b/src/trace-tcp.c
+index 940f918..62d22ff 100644
+--- a/src/trace-tcp.c
++++ b/src/trace-tcp.c
+@@ -54,10 +54,11 @@ send_syn_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
+ struct
+ {
+ struct tcphdr th;
+- uint8_t payload[plen - sizeof (struct tcphdr)];
++ uint8_t *payload;
+ } packet;
+
+ memset (&packet, 0, sizeof (packet));
++ packet.payload = malloc(plen - sizeof (struct tcphdr));
+ packet.th.th_sport = sport;
+ packet.th.th_dport = port;
+ packet.th.th_seq = htonl ((ttl << 24) | (n << 16) | (uint16_t)getpid ());
+@@ -65,7 +66,9 @@ send_syn_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
+ packet.th.th_flags = TH_SYN | (ecn ? (TH_ECE | TH_CWR) : 0);
+ packet.th.th_win = htons (TCP_WINDOW);
+
+- return send_payload (fd, &packet, plen, ttl);
++ ssize_t ret = send_payload (fd, &packet, plen, ttl);
++ free(packet.payload);
++ return ret;
+ }
+
+
+@@ -131,10 +134,11 @@ send_ack_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
+ struct
+ {
+ struct tcphdr th;
+- uint8_t payload[plen - sizeof (struct tcphdr)];
++ uint8_t *payload;
+ } packet;
+
+ memset (&packet, 0, sizeof (packet));
++ packet.payload = malloc(plen - sizeof (struct tcphdr));
+ packet.th.th_sport = sport;
+ packet.th.th_dport = port;
+ packet.th.th_ack = htonl ((ttl << 24) | (n << 16) | (uint16_t)getpid ());
+@@ -142,7 +146,9 @@ send_ack_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
+ packet.th.th_flags = TH_ACK;
+ packet.th.th_win = htons (TCP_WINDOW);
+
+- return send_payload (fd, &packet, plen, ttl);
++ ssize_t ret = send_payload (fd, &packet, plen, ttl);
++ free(packet.payload);
++ return ret;
+ }
+
+
+diff --git a/src/trace-udp.c b/src/trace-udp.c
+index 4adde6b..a6cbb07 100644
+--- a/src/trace-udp.c
++++ b/src/trace-udp.c
+@@ -46,9 +46,10 @@ send_udp_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
+ struct
+ {
+ struct udphdr uh;
+- uint8_t payload[plen - sizeof (struct udphdr)];
++ uint8_t *payload;
+ } packet;
+ memset (&packet, 0, plen);
++ packet.payload = malloc(plen - sizeof (struct udphdr));
+
+ (void)n;
+ packet.uh.uh_sport = sport;
+@@ -61,7 +62,9 @@ send_udp_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
+ /*if (plen > sizeof (struct udphdr))
+ packet.payload[0] = (uint8_t)ttl;*/
+
+- return send_payload (fd, &packet, plen, ttl);
++ ssize_t ret = send_payload (fd, &packet, plen, ttl);
++ free(packet.payload);
++ return ret;
+ }
+
+
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0002-Do-not-undef-_GNU_SOURCE.patch b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0002-Do-not-undef-_GNU_SOURCE.patch
new file mode 100644
index 000000000..3cc2ba80c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6/0002-Do-not-undef-_GNU_SOURCE.patch
@@ -0,0 +1,30 @@
+From 2a50154fbce38fd36be7e14f5cd4a8b03c65c72f Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 31 Aug 2017 11:15:37 -0700
+Subject: [PATCH 2/2] Do not undef _GNU_SOURCE
+
+There are functions from tcp.h which are under _GNU_SOURCE
+in musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/trace-tcp.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/trace-tcp.c b/src/trace-tcp.c
+index 62d22ff..380008e 100644
+--- a/src/trace-tcp.c
++++ b/src/trace-tcp.c
+@@ -21,7 +21,6 @@
+ # include <config.h>
+ #endif
+
+-#undef _GNU_SOURCE
+ #define _DEFAULT_SOURCE 1
+
+ #include <string.h>
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6_git.bb b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6_git.bb
new file mode 100644
index 000000000..cebc1d9cd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ndisc6/ndisc6_git.bb
@@ -0,0 +1,76 @@
+DESCRIPTION = "This package includes some useful diagnostics tools for \
+IPv6 networks, including ndisc6, rdisc6, tcptraceroute6 and traceroute6."
+SECTION = "net"
+HOMEPAGE = "http://www.remlab.net/ndisc6/"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+PV = "1.0.4+git${SRCPV}"
+SRCREV = "4c794b5512d23c649def1f94a684225dcbb6ac3e"
+SRC_URI = "git://git.remlab.net/git/ndisc6.git;protocol=http \
+ file://0001-replace-VLAIS-with-malloc-free-pair.patch \
+ file://0002-Do-not-undef-_GNU_SOURCE.patch \
+ file://0001-autogen-Do-not-symlink-gettext.h-from-build-host.patch \
+ "
+
+S = "${WORKDIR}/git"
+
+inherit autotools gettext
+
+EXTRA_OECONF += "PERL=${USRBINPATH}/perl"
+
+LDFLAGS += "-fuse-ld=gold"
+LDFLAGS_remove_riscv64 = "-fuse-ld=gold"
+
+TOOLCHAIN = "gcc"
+
+USE_NLS = "yes"
+
+do_configure_prepend() {
+ cp ${STAGING_DATADIR_NATIVE}/gettext/gettext.h ${S}/include
+ ${S}/autogen.sh
+}
+
+do_install_append () {
+ rm -rf ${D}${localstatedir}
+ # Enable SUID bit for applications that need it
+ chmod 4555 ${D}${bindir}/rltraceroute6
+ chmod 4555 ${D}${bindir}/ndisc6
+ chmod 4555 ${D}${bindir}/rdisc6
+}
+ALLOW_EMPTY_${PN} = "1"
+
+# Split into seperate packages since we normal don't want them all
+# The main package is left empty and therefore not created.
+PACKAGES += "${PN}-ndisc6 ${PN}-tcpspray6 ${PN}-rdisc6 \
+ ${PN}-tcptraceroute6 ${PN}-rltraceroute6 \
+ ${PN}-tracert6 ${PN}-rdnssd ${PN}-misc"
+FILES_${PN} = ""
+FILES_${PN}-ndisc6 = "${bindir}/ndisc6"
+FILES_${PN}-tcpspray6 = "${bindir}/tcpspray6"
+FILES_${PN}-rdisc6 = "${bindir}/rdisc6"
+FILES_${PN}-tcptraceroute6 = "${bindir}/tcptraceroute6"
+FILES_${PN}-rltraceroute6 = "${bindir}/rltraceroute6"
+FILES_${PN}-tracert6 = "${bindir}/tracert6"
+FILES_${PN}-rdnssd = "${sbindir}/rdnssd ${sysconfdir}/rdnssd"
+FILES_${PN}-misc = "${bindir}/dnssort ${bindir}/name2addr ${bindir}/tcpspray ${bindir}/addr2name"
+
+DESCRIPTION_${PN}-ndisc6 = "ICMPv6 Neighbor Discovery tool. \
+Performs IPv6 neighbor discovery in userland. Replaces arping from the \
+IPv4 world."
+DESCRIPTION_${PN}-rdisc6 = "ICMPv6 Router Discovery tool. \
+Queries IPv6 routers on the network for advertised prefixes. Can be used \
+to detect rogue IPv6 routers, monitor legitimate IPv6 routers."
+DESCRITPION_${PN}-tcpspray6 = "Performs bandwidth measurements of TCP \
+sessions between the local system and a remote echo server in either IPv6 \
+or IPv4."
+
+DESCRITPION_${PN}-rdnssd = "Daemon to autoconfigure the list of DNS \
+servers through slateless IPv6 autoconfiguration."
+
+# The tcptraceroute6 and tracert6 commands depend on rltraceroute6 to
+# perform the actual trace operation.
+RDEPENDS_${PN}-tcptraceroute6 = "${PN}-rltraceroute6"
+RDEPENDS_${PN}-tracert6 = "${PN}-rltraceroute6"
+RDEPENDS_${PN}-misc += "perl"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd/0001-bundle-own-base64-encode-decode-functions.patch b/meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd/0001-bundle-own-base64-encode-decode-functions.patch
new file mode 100644
index 000000000..0966b6580
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd/0001-bundle-own-base64-encode-decode-functions.patch
@@ -0,0 +1,379 @@
+From ccd166b73eaae4dd1e1785c63ceb9b303568ed46 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 21 Mar 2017 11:30:49 -0700
+Subject: [PATCH] bundle own base64 encode/decode functions
+
+Not all libc implementations provide it.
+as an aside libresolv is no longer needed
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile | 4 +-
+ base64.c | 313 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ netcat.c | 2 +
+ socks.c | 3 +
+ 4 files changed, 320 insertions(+), 2 deletions(-)
+ create mode 100644 base64.c
+
+Index: netcat-openbsd-1.105/Makefile
+===================================================================
+--- netcat-openbsd-1.105.orig/Makefile
++++ netcat-openbsd-1.105/Makefile
+@@ -1,9 +1,9 @@
+ # $OpenBSD: Makefile,v 1.6 2001/09/02 18:45:41 jakob Exp $
+
+ PROG= nc
+-SRCS= netcat.c atomicio.c socks.c
++SRCS= netcat.c atomicio.c socks.c base64.c
+
+-LIBS= `pkg-config --libs libbsd` -lresolv
++LIBS= `pkg-config --libs libbsd`
+ OBJS= $(SRCS:.c=.o)
+ CFLAGS= -g -O2
+ LDFLAGS= -Wl,--no-add-needed
+Index: netcat-openbsd-1.105/base64.c
+===================================================================
+--- /dev/null
++++ netcat-openbsd-1.105/base64.c
+@@ -0,0 +1,313 @@
++/*
++ * 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 <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(u_char const *src, size_t srclength, char *target, size_t targsize) {
++ size_t datalength = 0;
++ u_char input[3];
++ u_char 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);
++}
++//libresolv_hidden_def (b64_ntop)
++
++/* 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(char const *src, u_char *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);
++}
+Index: netcat-openbsd-1.105/netcat.c
+===================================================================
+--- netcat-openbsd-1.105.orig/netcat.c
++++ netcat-openbsd-1.105/netcat.c
+@@ -169,6 +169,9 @@ static int connect_with_timeout(int fd,
+ socklen_t salen, int ctimeout);
+ static void quit();
+
++int b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize);
++int b64_pton(char const *src, u_char *target, size_t targsize);
++
+ int
+ main(int argc, char *argv[])
+ {
+Index: netcat-openbsd-1.105/socks.c
+===================================================================
+--- netcat-openbsd-1.105.orig/socks.c
++++ netcat-openbsd-1.105/socks.c
+@@ -53,6 +53,9 @@
+ #define SOCKS_DOMAIN 3
+ #define SOCKS_IPV6 4
+
++int b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize);
++int b64_pton(char const *src, u_char *target, size_t targsize);
++
+ int remote_connect(const char *, const char *, struct addrinfo);
+ int socks_connect(const char *, const char *, struct addrinfo,
+ const char *, const char *, struct addrinfo, int,
diff --git a/meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd_1.105.bb b/meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd_1.105.bb
new file mode 100644
index 000000000..9d7420f8c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcat/netcat-openbsd_1.105.bb
@@ -0,0 +1,56 @@
+require netcat.inc
+SUMMARY = "OpenBSD Netcat"
+HOMEPAGE = "http://ftp.debian.org"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=ee6bbaacb5db5f2973818f0902c3ae6f"
+
+DEPENDS += "glib-2.0 libbsd"
+do_patch[depends] = "quilt-native:do_populate_sysroot"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/n/netcat-openbsd/netcat-openbsd_${PV}.orig.tar.gz;name=netcat \
+ ${DEBIAN_MIRROR}/main/n/netcat-openbsd/netcat-openbsd_${PV}-7.debian.tar.gz;name=netcat-patch;subdir=${BP} \
+ file://0001-bundle-own-base64-encode-decode-functions.patch \
+ "
+
+SRC_URI[netcat.md5sum] = "7e67b22f1ad41a1b7effbb59ff28fca1"
+SRC_URI[netcat.sha256sum] = "40653fe66c1516876b61b07e093d826e2a5463c5d994f1b7e6ce328f3edb211e"
+SRC_URI[netcat-patch.md5sum] = "e914f8eb7eda5c75c679dd77787ac76b"
+SRC_URI[netcat-patch.sha256sum] = "eee759327ffea293e81d0dde67921b7fcfcad279ffd7a2c9d037bbc8f882b363"
+
+inherit pkgconfig
+
+EXTRA_OEMAKE += "'LDFLAGS=${LDFLAGS}'"
+
+do_configure[noexec] = "1"
+
+netcat_do_patch() {
+ cd ${S}
+ quilt pop -a || true
+ if [ -d ${S}/.pc-netcat ]; then
+ rm -rf ${S}/.pc
+ mv ${S}/.pc-netcat ${S}/.pc
+ QUILT_PATCHES=${S}/debian/patches quilt pop -a
+ rm -rf ${S}/.pc ${S}/debian
+ fi
+ QUILT_PATCHES=${S}/debian/patches quilt push -a
+ mv ${S}/.pc ${S}/.pc-netcat
+}
+
+do_unpack[cleandirs] += "${S}"
+
+python do_patch() {
+ bb.build.exec_func('netcat_do_patch', d)
+ bb.build.exec_func('patch_do_patch', d)
+}
+
+do_compile() {
+ cd ${S}
+ pkgrel=4
+ oe_runmake CFLAGS="$CFLAGS -DDEBIAN_VERSION=\"\\\"${pkgrel}\\\"\""
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 755 ${S}/nc ${D}${bindir}/nc.${BPN}
+}
+ALTERNATIVE_PRIORITY = "60"
diff --git a/meta-openembedded/meta-networking/recipes-support/netcat/netcat.inc b/meta-openembedded/meta-networking/recipes-support/netcat/netcat.inc
new file mode 100644
index 000000000..15441645b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcat/netcat.inc
@@ -0,0 +1,15 @@
+SUMMARY = "GNU Netcat"
+HOMEPAGE = "http://netcat.sourceforge.net"
+DESCRIPTION = "A simple Unix utility which reads and writes data across network \
+connections using TCP or UDP protocol. It is designed to be a reliable \
+'back-end' tool that can be used directly or easily driven by other \
+programs and scripts. At the same time it is a feature-rich network \
+debugging and exploration tool, since it can create almost any kind of \
+connection you would need and has several interesting built-in \
+capabilities."
+
+SECTION = "net"
+inherit update-alternatives gettext pkgconfig
+
+ALTERNATIVE_${PN} = "nc"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/netcat/netcat/make-netcat_flag_count_work.patch b/meta-openembedded/meta-networking/recipes-support/netcat/netcat/make-netcat_flag_count_work.patch
new file mode 100644
index 000000000..dd1938a99
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcat/netcat/make-netcat_flag_count_work.patch
@@ -0,0 +1,34 @@
+Make netcat_flag_count() return positive value
+
+C language has 3 distinct char types:
+ char
+ unsigned char
+ signed char
+A char has the same range of values as signed char on X86,
+but same as unsigned char on PPC which made netcat_flag_count
+return a negative value, now we force variable c as signed char
+to make netcat_flag_count return positive value.
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+---
+ src/flagset.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/flagset.c b/src/flagset.c
+index 442b634..54ac898 100644
+--- a/src/flagset.c
++++ b/src/flagset.c
+@@ -134,7 +134,7 @@ unsigned short netcat_flag_next(unsigned short port)
+
+ int netcat_flag_count(void)
+ {
+- register char c;
++ register signed char c;
+ register int i;
+ int ret = 0;
+
+--
+1.7.5.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/netcat/netcat/netcat-locale_h.patch b/meta-openembedded/meta-networking/recipes-support/netcat/netcat/netcat-locale_h.patch
new file mode 100644
index 000000000..5cbcb08e8
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcat/netcat/netcat-locale_h.patch
@@ -0,0 +1,25 @@
+Apparently somewhere along the line HAVE_LOCALE_H was changed to
+HAVE_LC_MESSAGES. Adjust netcat to match.
+
+Upstream-Status: Pending
+
+Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
+
+Index: netcat-0.7.1/src/intl.h
+===================================================================
+--- netcat-0.7.1.orig/src/intl.h
++++ netcat-0.7.1/src/intl.h
+@@ -25,11 +25,11 @@
+ #ifdef ENABLE_NLS
+ #include <libintl.h>
+
+-#ifdef HAVE_LOCALE_H
++#if defined(HAVE_LC_MESSAGES) || defined(HAVE_LOCALE_H)
+ #include <locale.h>
+ #else
+ #error You must have locale.h in your system
+-#endif /* HAVE_LOCALE_H */
++#endif /* HAVE_LC_MESSAGES || HAVE_LOCALE_H */
+
+ /* Our dear (and very common) gettext macros */
+ #define _(String) gettext(String)
diff --git a/meta-openembedded/meta-networking/recipes-support/netcat/netcat/obsolete_autoconf_macros.patch b/meta-openembedded/meta-networking/recipes-support/netcat/netcat/obsolete_autoconf_macros.patch
new file mode 100644
index 000000000..9b0ed58d6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcat/netcat/obsolete_autoconf_macros.patch
@@ -0,0 +1,32 @@
+Replace obsoleted AM_CONFIG_HEADER flagged by autoconf 2.69
+locale.h check was picked from old gettext macros but with new aclocal
+it picks the right 0.18 gettext.m4 and does not get the check
+therefore we explicitly add it to configure.ac
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: netcat-0.7.1/configure.ac
+===================================================================
+--- netcat-0.7.1.orig/configure.ac 2013-01-18 01:30:01.928069739 -0800
++++ netcat-0.7.1/configure.ac 2013-01-18 01:32:50.568073009 -0800
+@@ -26,8 +26,7 @@
+ AC_PREREQ(2.53)
+
+ dnl without this order in this file, automake will be confused!
+-AM_CONFIG_HEADER(config.h)
+-
++AC_CONFIG_HEADERS(config.h)
+ dnl check for programs. first the c compiler.
+ AC_PROG_CC
+ AC_PROG_CPP
+@@ -56,7 +55,7 @@
+ AC_LBL_LIBRARY_NET
+
+ dnl Fortunately we have Solaris...
+-AC_CHECK_HEADERS(sys/sockio.h)
++AC_CHECK_HEADERS(sys/sockio.h locale.h)
+
+ AC_CHECK_FUNCS(srandom random)
+ if test $ac_cv_func_srandom = no; then
diff --git a/meta-openembedded/meta-networking/recipes-support/netcat/netcat_0.7.1.bb b/meta-openembedded/meta-networking/recipes-support/netcat/netcat_0.7.1.bb
new file mode 100644
index 000000000..d961af542
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcat/netcat_0.7.1.bb
@@ -0,0 +1,22 @@
+require netcat.inc
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+PR = "r3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/netcat/netcat-${PV}.tar.bz2 \
+ file://obsolete_autoconf_macros.patch \
+ file://netcat-locale_h.patch \
+ file://make-netcat_flag_count_work.patch \
+"
+
+SRC_URI[md5sum] = "0a29eff1736ddb5effd0b1ec1f6fe0ef"
+SRC_URI[sha256sum] = "b55af0bbdf5acc02d1eb6ab18da2acd77a400bafd074489003f3df09676332bb"
+
+inherit autotools
+
+do_install_append() {
+ install -d ${D}${bindir}
+ mv ${D}${bindir}/nc ${D}${bindir}/nc.${BPN}
+}
+ALTERNATIVE_PRIORITY = "100"
diff --git a/meta-openembedded/meta-networking/recipes-support/netcf/netcf_0.2.8.bb b/meta-openembedded/meta-networking/recipes-support/netcf/netcf_0.2.8.bb
new file mode 100644
index 000000000..9a6f60ea2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netcf/netcf_0.2.8.bb
@@ -0,0 +1,71 @@
+SUMMARY = "netcf"
+DESCRIPTION = "netcf is a cross-platform network configuration library."
+HOMEPAGE = "https://pagure.io/netcf"
+SECTION = "libs"
+LICENSE = "LGPLv2.1"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=fb919cc88dbe06ec0b0bd50e001ccf1f"
+
+SRCREV = "2c5d4255857531bc09d91dcd02e86545f29004d4"
+PV .= "+git${SRCPV}"
+
+SRC_URI = "git://pagure.io/netcf.git;protocol=https \
+"
+
+DEPENDS += "augeas libnl libxslt libxml2 gnulib"
+
+S = "${WORKDIR}/git"
+
+inherit gettext autotools pkgconfig systemd
+
+EXTRA_OECONF_append_class-target = " --with-driver=redhat"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--with-sysinit=systemd,--with-sysinit=initscripts,"
+
+EXTRA_AUTORECONF += "-I ${S}/gnulib/m4"
+
+do_configure_prepend() {
+ currdir=`pwd`
+ cd ${S}
+
+ # avoid bootstrap cloning gnulib on every configure
+ # the dir starts out empty from the pkg, but unconditionally blow it
+ # away so if we reconfigure due to gnulib sysroot sig changes, we will
+ # get the newer gnulib content into the build here.
+ rm -rf ${S}/.gnulib
+ cp -rf ${STAGING_DATADIR}/gnulib ${S}/.gnulib
+
+ # --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 --no-git --gnulib-srcdir=.gnulib
+
+ cd $currdir
+}
+
+do_install_append() {
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ if [ -d "${D}${libdir}/systemd/system" ]; then
+ if [ "${systemd_unitdir}" != "${libdir}/systemd" ] ; then
+ mv ${D}${libdir}/systemd/system/* ${D}${systemd_unitdir}/system/
+ rm -rf ${D}${libdir}/systemd/
+ fi
+ elif [ "${systemd_unitdir}" != "${nonarch_libdir}/systemd" ] ; then
+ mv ${D}${nonarch_libdir}/systemd/system/* ${D}${systemd_unitdir}/system/
+ rm -rf ${D}${nonarch_libdir}/systemd/
+ fi
+ else
+ mv ${D}${sysconfdir}/rc.d/init.d/ ${D}${sysconfdir}
+ rm -rf ${D}${sysconfdir}/rc.d/
+ fi
+}
+
+FILES_${PN} += " \
+ ${libdir} \
+ ${nonarch_libdir} \
+ "
+
+SYSTEMD_SERVICE_${PN} = "netcf-transaction.service"
diff --git a/meta-openembedded/meta-networking/recipes-support/netperf/files/cpu_set.patch b/meta-openembedded/meta-networking/recipes-support/netperf/files/cpu_set.patch
new file mode 100644
index 000000000..434b79049
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netperf/files/cpu_set.patch
@@ -0,0 +1,30 @@
+Subject: [PATCH] netperf: fix CPU_SETSIZE to build with eglibc
+
+Upstream-Status: Pending
+
+Signed-off-by: Xin Ouyang <Xin.Ouyang@windriver.com>
+---
+ src/netlib.c | 7 ++++++-
+ 1 files changed, 6 insertions(+), 1 deletions(-)
+
+diff --git a/src/netlib.c b/src/netlib.c
+index 206e002..e33aae6 100644
+--- a/src/netlib.c
++++ b/src/netlib.c
+@@ -2265,7 +2265,12 @@ bind_to_specific_processor(int processor_affinity, int use_cpu_map)
+ fall-back on what we had before, which is to use just the size of
+ an unsigned long. raj 2006-09-14 */
+
+-#if defined(__CPU_SETSIZE)
++#if defined(CPU_SETSIZE)
++#define NETPERF_CPU_SETSIZE CPU_SETSIZE
++#define NETPERF_CPU_SET(cpu, cpusetp) CPU_SET(cpu, cpusetp)
++#define NETPERF_CPU_ZERO(cpusetp) CPU_ZERO (cpusetp)
++ typedef cpu_set_t netperf_cpu_set_t;
++#elif defined(__CPU_SETSIZE)
+ #define NETPERF_CPU_SETSIZE __CPU_SETSIZE
+ #if defined(__CPU_SET_S)
+ #define NETPERF_CPU_SET(cpu, cpusetp) __CPU_SET_S(cpu, sizeof (cpu_set_t), cpusetp)
+--
+1.7.1.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/netperf/files/init b/meta-openembedded/meta-networking/recipes-support/netperf/files/init
new file mode 100644
index 000000000..8ba2a6373
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netperf/files/init
@@ -0,0 +1,62 @@
+#!/bin/sh
+#
+#
+# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
+# Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.org>.
+# Modified for Debian by Christoph Lameter <clameter@debian.org>
+# Modified for openembedded by Bruno Randolf <bruno.randolf@4g-systems.biz>
+
+### BEGIN INIT INFO
+# Provides: netperf
+# Required-Start: $remote_fs $local_fs $time
+# Required-Stop: $remote_fs $local_fs $time
+# Should-Start: $network $named
+# Should-Stop: $network $named
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: network benchmark
+### END INIT INFO
+
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DAEMON=/usr/sbin/netserver
+
+test -f $DAEMON || exit 0
+
+case "$1" in
+ start)
+ echo -n "Starting network benchmark server: netserver"
+ start-stop-daemon -S -x $DAEMON > /dev/null 2>&1
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping network benchmark server: netserver"
+ start-stop-daemon -K -x $DAEMON
+ echo "."
+ ;;
+ #reload)
+ #
+ # If the daemon can reload its config files on the fly
+ # for example by sending it SIGHUP, do it here.
+ #
+ # If the daemon responds to changes in its config file
+ # directly anyway, make this a do-nothing entry.
+ #
+ # start-stop-daemon --stop --signal 1 --verbose --exec $DAEMON
+ # ;;
+ restart|force-reload)
+ #
+ # If the "reload" option is implemented, move the "force-reload"
+ # option to the "reload" entry above. If not, "force-reload" is
+ # just the same as "restart".
+ #
+ start-stop-daemon -K -x $DAEMON
+ sleep 1
+ start-stop-daemon -S -x $DAEMON
+ ;;
+ *)
+ echo "Usage: /etc/init.d/netperf {start|stop|restart|force-reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-support/netperf/files/vfork.patch b/meta-openembedded/meta-networking/recipes-support/netperf/files/vfork.patch
new file mode 100644
index 000000000..eff98bfde
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netperf/files/vfork.patch
@@ -0,0 +1,58 @@
+Subject: [PATCH] netperf: fix vfork/fork
+
+Upstream-Status: Pending
+
+Signed-off-by: Xin Ouyang <Xin.Ouyang@windriver.com>
+---
+ src/netserver.c | 12 ++++++++++--
+ 1 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/src/netserver.c b/src/netserver.c
+index 379a106..f6a8b09 100644
+--- a/src/netserver.c
++++ b/src/netserver.c
+@@ -1020,7 +1020,7 @@ process_requests()
+ void
+ spawn_child() {
+
+-#if defined(HAVE_FORK)
++#if defined(HAVE_FORK) || defined(HAVE_VFORK)
+
+ if (debug) {
+ fprintf(where,
+@@ -1038,7 +1038,11 @@ spawn_child() {
+
+ signal(SIGCLD,SIG_IGN);
+
++#if defined(HAVE_FORK)
+ switch (fork()) {
++#else
++ switch (vfork()) {
++#endif
+ case -1:
+ fprintf(where,
+ "%s: fork() error %s (errno %d)\n",
+@@ -1405,7 +1409,7 @@ scan_netserver_args(int argc, char *argv[]) {
+
+ void
+ daemonize() {
+-#if defined(HAVE_FORK)
++#if defined(HAVE_FORK) || defined(HAVE_VFORK)
+
+ if (debug) {
+ fprintf(where,
+@@ -1419,7 +1423,11 @@ daemonize() {
+ fflush(stdout);
+ fflush(stderr);
+
++#if defined(HAVE_FORK)
+ switch (fork()) {
++#else
++ switch (vfork()) {
++#endif
+ case -1:
+ fprintf(stderr,
+ "%s: fork() error %s (errno %d)\n",
+--
+1.7.1.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/netperf/netperf_git.bb b/meta-openembedded/meta-networking/recipes-support/netperf/netperf_git.bb
new file mode 100644
index 000000000..f0e0f9cf1
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/netperf/netperf_git.bb
@@ -0,0 +1,66 @@
+SUMMARY = "A networking benchmarking tool"
+DESCRIPTION = "Network performance benchmark including tests for TCP, UDP, sockets, ATM and more."
+SECTION = "net"
+HOMEPAGE = "http://www.netperf.org/"
+LICENSE = "netperf"
+LICENSE_FLAGS = "non-commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a0ab17253e7a3f318da85382c7d5d5d6"
+
+PV = "2.7.0+git${SRCPV}"
+
+SRC_URI="git://github.com/HewlettPackard/netperf.git \
+ file://cpu_set.patch \
+ file://vfork.patch \
+ file://init"
+
+SRCREV = "f482bab49fcedee46fc5b755da127f608325cd13"
+
+S = "${WORKDIR}/git"
+
+inherit update-rc.d autotools
+
+# cpu_set.patch plus _GNU_SOURCE makes src/netlib.c compile with CPU_ macros
+CFLAGS_append = " -DDO_UNIX -DDO_IPV6 -D_GNU_SOURCE"
+
+# set the "_FILE_OFFSET_BITS" preprocessor symbol to 64 to support files
+# larger than 2GB
+CFLAGS_append = "${@bb.utils.contains('DISTRO_FEATURES', 'largefile', \
+ ' -D_FILE_OFFSET_BITS=64', '', d)}"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[sctp] = "--enable-sctp,--disable-sctp,lksctp-tools,"
+
+# autotools.bbclass attends to include m4 files with path depth <= 2 by
+# "find ${S} -maxdepth 2 -name \*.m4", so move m4 files from m4/m4.
+do_configure_prepend() {
+ test -d ${S}/m4/m4 && mv -f ${S}/m4/m4 ${S}/m4-files
+}
+
+do_install() {
+ sed -e 's#/usr/sbin/#${sbindir}/#g' -i ${WORKDIR}/init
+
+ install -d ${D}${sbindir} ${D}${bindir} ${D}${sysconfdir}/init.d
+ install -m 4755 src/netperf ${D}${bindir}
+ install -m 4755 src/netserver ${D}${sbindir}
+ install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/netperf
+
+ # man
+ install -d ${D}${mandir}/man1/
+ install -m 0644 ${S}/doc/netserver.man ${D}${mandir}/man1/netserver.1
+ install -m 0644 ${S}/doc/netperf.man ${D}${mandir}/man1/netperf.1
+
+ # move scripts to examples directory
+ install -d ${D}${docdir}/netperf/examples
+ install -m 0644 ${S}/doc/examples/*_script ${D}${docdir}/netperf/examples/
+
+ # docs ..
+ install -m 0644 ${S}/COPYING ${D}${docdir}/netperf
+ install -m 0644 ${S}/Release_Notes ${D}${docdir}/netperf
+ install -m 0644 ${S}/README ${D}${docdir}/netperf
+ install -m 0644 ${S}/doc/netperf_old.ps ${D}${docdir}/netperf
+}
+
+RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'sctp', 'kernel-module-sctp', '', d)}"
+
+INITSCRIPT_NAME="netperf"
+INITSCRIPT_PARAMS="defaults"
diff --git a/meta-openembedded/meta-networking/recipes-support/nghttp2/nghttp2_1.26.0.bb b/meta-openembedded/meta-networking/recipes-support/nghttp2/nghttp2_1.26.0.bb
new file mode 100644
index 000000000..3ccd486be
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nghttp2/nghttp2_1.26.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "HTTP/2 C Library and tools"
+HOMEPAGE = "https://nghttp2.org/"
+SECTION = "libs"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=764abdf30b2eadd37ce47dcbce0ea1ec"
+
+SRC_URI = "https://github.com/nghttp2/nghttp2/releases/download/v${PV}/nghttp2-${PV}.tar.bz2"
+SRC_URI[md5sum] = "926f07ad3b50f38f7d8935ced04716cf"
+SRC_URI[sha256sum] = "0df4229f4123b5aa96e834ebcfdffe954e93d986f0252fd10123d50c6f010983"
+
+DEPENDS = "libxml2 openssl zlib jansson cunit c-ares"
+
+inherit cmake pythonnative python-dir
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/files/ypbind.init b/meta-openembedded/meta-networking/recipes-support/nis/files/ypbind.init
new file mode 100644
index 000000000..669c19ca0
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/files/ypbind.init
@@ -0,0 +1,107 @@
+#! /bin/sh
+# Copyright (c) 2004 Author: Thorsten Kukuk <kukuk@suse.de>
+#
+# /etc/init.d/ypbind
+#
+# and symbolic its link
+#
+# /usr/sbin/rcypbind
+#
+# System startup script for the ypbind daemon
+#
+### BEGIN INIT INFO
+# Provides: ypbind
+# Required-Start: $remote_fs $portmap
+# Should-Start: ypserv slpd
+# Required-Stop: portmap
+# Default-Start: 3 5
+# Default-Stop: 0 1 2 6
+# Short-Description: Start ypbind (necessary for a NIS client)
+# Description: ypbind finds the server for NIS domains and maintains
+# the NIS binding information.
+### END INIT INFO
+
+# Need to use status function
+. /etc/init.d/functions
+
+YPBIND_BIN=/usr/sbin/ypbind
+pidfile=/var/run/ypbind.pid
+YPDOMAINNAME_bin=/usr/bin/ypdomainname
+
+[ -f /etc/default/ypbind ] && . /etc/default/ypbind
+
+case "$1" in
+ start)
+ echo -n "Starting ypbind"
+ ## If the domainname is not set, skip starting of ypbind
+ ## and return with "program not configured"
+ $YPDOMAINNAME_bin >/dev/null 2>&1
+ if [ $? -ne 0 -o -z "`$YPDOMAINNAME_bin 2>/dev/null`" ]; then
+ if [ -f /etc/defaultdomain ]; then
+ XDOMAINNAME=`cat /etc/defaultdomain`
+ $YPDOMAINNAME_bin "$XDOMAINNAME"
+ fi
+ $YPDOMAINNAME_bin >/dev/null 2>&1
+ if [ $? -ne 0 -o -z "`$YPDOMAINNAME_bin 2>/dev/null`" ]; then
+ # Tell the user this has skipped
+ echo -n " . . . . . . . . . . No domainname set"
+ # service is not configured
+ exit 1
+ fi
+ fi
+
+ ## If we don't have a /etc/yp.conf file, skip starting of
+ ## ypbind and return with "program not configured"
+ ## if you add the -broadcast Option later, comment this out.
+ if [ ! -f /etc/yp.conf -a "$YPBIND_BROADCAST" != "yes" ] ; then
+ # Tell the user this has skipped
+ echo -n " . . . . . . . . . . ${attn}/etc/yp.conf not found${norm}"
+ # service is not configured
+ exit 1
+ fi
+
+ # evaluate the OPTIONS for ypbind-mt
+ OPTIONS=""
+ test "$YPBIND_LOCAL_ONLY" = "yes" && OPTIONS="-local-only $OPTIONS"
+ test "$YPBIND_BROADCAST" = "yes" && OPTIONS="-broadcast $OPTIONS"
+ test "$YPBIND_BROKEN_SERVER" = "yes" && OPTIONS="-broken-server $OPTIONS"
+
+ start-stop-daemon --start --quiet --pidfile $pidfile --exec $YPBIND_BIN -- $YPBIND_OPTIONS $OPTIONS
+ if [ $? -eq 0 ]; then
+ notfound=1
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
+ ypwhich >/dev/null 2>&1 && { notfound=0 ; break; };
+ echo -n " ."
+ sleep 1;
+ done
+ if [ $notfound -eq 1 ]; then
+ echo -n " ${warn}No NIS server found${norm}";
+ fi
+ else
+ exit 1
+ fi
+ ;;
+ stop)
+ echo -n "Shutting down ypbind"
+ start-stop-daemon --stop --quiet --pidfile $pidfile
+ # Remove static data, else glibc will continue to use NIS
+ rm -f /var/yp/binding/* /var/run/ypbind.pid
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ reload | force-reload)
+ echo -n "Reload service ypbind"
+ start-stop-daemon --stop --quiet --signal 1 --pidfile $pidfile
+ ;;
+ status)
+ echo -n "Checking for ypbind: "
+ status $YPBIND_BIN
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
+ exit 1
+ ;;
+esac
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/nis.inc b/meta-openembedded/meta-networking/recipes-support/nis/nis.inc
new file mode 100644
index 000000000..200eaf74d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/nis.inc
@@ -0,0 +1,31 @@
+# This include file contains global definitions for the
+# various NIS packages.
+#
+# These packages will only function correctly with glibc -
+# the rpcsvc functionality is not present in uclibc
+DESCRIPTION = "NIS Server and Tools"
+HOMEPAGE = "http://www.linux-nis.org/nis/"
+SECTION = "net"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+inherit autotools gettext pkgconfig
+
+# install is broken because src/Makefile heroically adds '-s'
+# to the install flags - passing -s to the build /usr/bin/install!
+# install-strip gets it right but installs ypbind -m <default>,
+# not -m 555. In an OE build this is not, so far as I can see,
+# a security problem (and this fix to the build problem is *much*
+# easier and more maintainable.)
+do_install() {
+ oe_runmake 'DESTDIR=${D}' install-strip
+}
+
+# An attempt to build on uclibc will fail, causing annoyance,
+# so force the package to be skipped here (this will cause a
+# 'nothing provides' error)
+python () {
+ os = d.getVar("TARGET_OS", True)
+ if os == "linux-uclibc":
+ raise bb.parse.SkipRecipe("NIS functionality requires rpcsvc/yp.h, uClibC does not provide this")
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/yp-tools/domainname.service b/meta-openembedded/meta-networking/recipes-support/nis/yp-tools/domainname.service
new file mode 100644
index 000000000..21aa92cb3
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/yp-tools/domainname.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=NIS Domainname
+
+[Service]
+Type=oneshot
+EnvironmentFile=/etc/nisdomainname
+ExecStart=/usr/bin/domainname $NISDOMAINNAME
+RemainAfterExit=true
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/yp-tools_2.14.bb b/meta-openembedded/meta-networking/recipes-support/nis/yp-tools_2.14.bb
new file mode 100644
index 000000000..8c6837bac
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/yp-tools_2.14.bb
@@ -0,0 +1,34 @@
+# This package builds tools to manage NIS
+# The source package is utils/net/NIS/yp-tools
+#
+require nis.inc
+
+SUMMARY = "NIS client programs"
+DESCRIPTION = " \
+Network Information Service tools. \
+This package contains ypcat, ypmatch, ypset, \
+ypwhich, yppasswd, domainname, nisdomainname \
+and ypdomainname. \
+\
+This is the final IPv4-only version of yp-tools. \
+"
+
+SRC_URI = "http://www.linux-nis.org/download/yp-tools/${BP}.tar.bz2 \
+ file://domainname.service \
+"
+SRC_URI[md5sum] = "ba1f121c17e3ad65368be173b977cd13"
+SRC_URI[sha256sum] = "d01f70fadc643a55107a0edc47c6be99d0306bcc4f66df56f65e74238b0124c9"
+
+inherit systemd
+SYSTEMD_SERVICE_${PN} = "domainname.service"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+
+CACHED_CONFIGUREVARS += "ac_cv_prog_STRIP=/bin/true"
+
+do_install_append() {
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/domainname.service ${D}${systemd_unitdir}/system
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/yp-tools_4.2.3.bb b/meta-openembedded/meta-networking/recipes-support/nis/yp-tools_4.2.3.bb
new file mode 100644
index 000000000..4e27e32d4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/yp-tools_4.2.3.bb
@@ -0,0 +1,47 @@
+# This package builds tools to manage NIS
+# The source package is utils/net/NIS/yp-tools
+#
+require nis.inc
+
+SUMMARY = "NIS client programs"
+DESCRIPTION = " \
+Network Information Service tools. \
+This package contains ypcat, ypmatch, ypset, \
+ypwhich, yppasswd, domainname, nisdomainname \
+and ypdomainname. \
+"
+
+# v4.2.3
+SRCREV = "1bfda29c342a81b97cb1995ffd9e8da5de63e7ab"
+
+SRC_URI = "git://github.com/thkukuk/yp-tools \
+ file://domainname.service \
+ "
+
+S = "${WORKDIR}/git"
+
+DEPENDS = "libtirpc libnsl2"
+
+inherit autotools systemd
+SYSTEMD_SERVICE_${PN} = "domainname.service"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+
+CACHED_CONFIGUREVARS += "ac_cv_prog_STRIP=/bin/true"
+
+EXTRA_OECONF = " \
+ --disable-rpath --disable-domainname \
+ "
+CFLAGS_append_libc-musl = " -Wno-error=cpp"
+
+FILES_${PN} += " ${libdir}/yp-nis/*.so.*.* ${libdir}/yp-nis/pkgconfig/"
+FILES_${PN}-dbg += " ${libdir}/yp-nis/.debug"
+FILES_${PN}-dev += " ${libdir}/yp-nis/*.so ${libdir}/yp-nis/*.so.[12] ${libdir}/yp-nis/*.la"
+FILES_${PN}-staticdev += " ${libdir}/yp-nis/*.a"
+
+do_install_append() {
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/domainname.service ${D}${systemd_unitdir}/system
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/0001-dns_hosts-Fix-build-with-musl.patch b/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/0001-dns_hosts-Fix-build-with-musl.patch
new file mode 100644
index 000000000..643b0a940
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/0001-dns_hosts-Fix-build-with-musl.patch
@@ -0,0 +1,67 @@
+From 5452961750275b1e3f7c95e9528338f0ee0357ad Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 14 Sep 2017 09:17:35 -0700
+Subject: [PATCH] dns_hosts: Fix build with musl
+
+Add NETDB_* defines which are not available in musl
+remove need for sys/cdefs.h by remove __P
+Add _GNU_SOURCE for missing u_char definition
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ lib/Makefile.am | 2 +-
+ lib/dns_hosts.c | 9 ++++++++-
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index 977a8db..35cb5b3 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -8,7 +8,7 @@
+ noinst_LIBRARIES = libcompat.a
+ noinst_HEADERS = ypbind3_binding.h
+
+-AM_CFLAGS = -D_REENTRANT=1 @WARNFLAGS@
++AM_CFLAGS = -D_GNU_SOURCE -D_REENTRANT=1 @WARNFLAGS@
+ AM_CPPFLAGS = -I$(srcdir) @TIRPC_CFLAGS@ @NSL_CFLAGS@ -DLOCALEDIR=\"$(localedir)\"
+
+ libcompat_a_SOURCES = dns_hosts.c res_options.h ypbind3_binding_dup.c \
+diff --git a/lib/dns_hosts.c b/lib/dns_hosts.c
+index fd421fd..6067879 100644
+--- a/lib/dns_hosts.c
++++ b/lib/dns_hosts.c
+@@ -64,6 +64,7 @@
+
+ #include <sys/param.h>
+ #include <sys/socket.h>
++#include <sys/types.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+ #include <arpa/nameser.h>
+@@ -84,6 +85,12 @@ extern struct hostent *_gethtbyaddr(const char *, int, int);
+ #ifndef LOG_AUTH
+ # define LOG_AUTH 0
+ #endif
++#ifndef NETDB_SUCCESS
++# define NETDB_SUCCESS 0
++#endif
++#ifndef NETDB_INTERNAL
++# define NETDB_INTERNAL -1
++#endif
+
+ #define MULTI_PTRS_ARE_ALIASES 1 /* XXX - experimental */
+
+@@ -101,7 +108,7 @@ static char hostbuf[8*1024];
+ static struct in_addr host_addr;
+
+ #ifdef RESOLVSORT
+-static void addrsort __P((char **, int));
++static void addrsort (char **, int);
+ #endif
+
+ #if PACKETSZ > 1024
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/ypbind.service b/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/ypbind.service
new file mode 100644
index 000000000..1f8df42af
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt/ypbind.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=YP Bind
+Requires=domainname.service
+After=domainname.service network.target
+Before=systemd-user-sessions.service
+
+[Service]
+Type=forking
+PIDFile=/var/run/ypbind.pid
+ExecStart=/usr/sbin/ypbind
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt_2.4.bb b/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt_2.4.bb
new file mode 100644
index 000000000..9822f455e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nis/ypbind-mt_2.4.bb
@@ -0,0 +1,62 @@
+# This package builds the NIS ypbind daemon
+# The source package is utils/net/NIS/ypbind-mt
+#
+require nis.inc
+
+DESCRIPTION = " \
+Multithreaded NIS bind service (ypbind-mt). \
+ypbind-mt is a complete new implementation of a NIS \
+binding daemon for Linux. It has the following \
+features. Supports ypbind protocol V1 and V2. \
+Uses threads for better response. Supports multiple \
+domain bindings. Supports /var/yp/binding/* file \
+for Linux libc 4/5 and glibc 2.x. Supports a list \
+of known secure NIS server (/etc/yp.conf) Binds to \
+the server which answered as first. \
+\
+This is the final IPv4-only version of ypbind-mt. \
+"
+HOMEPAGE = "http://www.linux-nis.org/nis/ypbind-mt/index.html"
+DEPENDS = " \
+ yp-tools \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)} \
+ "
+DEPENDS_append_libc-musl = " bsd-headers nss"
+RDEPENDS_${PN} += "yp-tools"
+
+# ypbind-mt now provides all the functionality of ypbind
+# and is used in place of it.
+PROVIDES += "ypbind"
+
+SRC_URI = "http://www.linux-nis.org/download/ypbind-mt/${BP}.tar.bz2 \
+ file://ypbind.init \
+ file://ypbind.service \
+ file://0001-dns_hosts-Fix-build-with-musl.patch \
+ "
+SRC_URI[md5sum] = "1aeccd0d11c064d5d59c56941bca682b"
+SRC_URI[sha256sum] = "a2e1fa8fc992a12b289c229e00e38c20d59070c3bcf08babf40c692515c340e0"
+
+inherit systemd update-rc.d
+
+SYSTEMD_SERVICE_${PN} = "ypbind.service"
+INITSCRIPT_NAME = "ypbind"
+INITSCRIPT_PARAMS = "start 44 3 5 . stop 70 0 1 2 6 ."
+
+CACHED_CONFIGUREVARS = "ac_cv_prog_STRIP=/bin/true"
+
+CFLAGS_append_libc-musl = " -I${STAGING_INCDIR}/nss3"
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/init.d
+ install -d ${D}${sysconfdir}/rcS.d
+
+ install -m 0755 ${WORKDIR}/ypbind.init ${D}${sysconfdir}/init.d/ypbind
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/ypbind.service ${D}${systemd_unitdir}/system
+}
+
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
diff --git a/meta-openembedded/meta-networking/recipes-support/ntimed/ntimed/use-ldflags.patch b/meta-openembedded/meta-networking/recipes-support/ntimed/ntimed/use-ldflags.patch
new file mode 100644
index 000000000..87a7778d9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntimed/ntimed/use-ldflags.patch
@@ -0,0 +1,16 @@
+Obey LDFLAGS.
+
+Signed-off-by: Christopher Larson <kergoth@gmail.com>
+Upstream-Status: Pending
+
+--- Ntimed.orig/configure 2015-05-30 11:57:59.927796993 -0700
++++ Ntimed/configure 2015-05-30 11:58:26.143948894 -0700
+@@ -142,7 +142,7 @@
+
+ echo
+ echo "ntimed-client: ${l}"
+- echo " \${CC} \${CFLAGS} -o ntimed-client ${l} -lm"
++ echo " \${CC} \${CFLAGS} -o ntimed-client ${l} \${LDFLAGS} -lm"
+ echo
+ echo "clean:"
+ echo " rm -f ${l} ntimed-client"
diff --git a/meta-openembedded/meta-networking/recipes-support/ntimed/ntimed_git.bb b/meta-openembedded/meta-networking/recipes-support/ntimed/ntimed_git.bb
new file mode 100644
index 000000000..a749b1659
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntimed/ntimed_git.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Network time synchronization software, NTPD replacement"
+DESCRIPTION = "This is a preview/early-access/alpha/buzzword-of-the-times \
+release of a new FOSS project written to gradually take over the world of \
+networked timekeeping."
+HOMEPAGE = "https://github.com/bsdphk/Ntimed"
+SECTION = "net"
+
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://main.c;beginline=2;endline=24;md5=89db8e76f2951f3fad167e7aa9718a44"
+
+SRC_URI = "git://github.com/bsdphk/Ntimed \
+ file://use-ldflags.patch"
+
+PV = "0.0+git${SRCPV}"
+SRCREV = "db0abbb4c80f2ecef6bc5d9639bca5bea28532a2"
+
+S = "${WORKDIR}/git"
+
+# use adjtimex on musl
+CFLAGS_append_libc-musl = " -Dntp_adjtime=adjtimex"
+
+EXTRA_OEMAKE = "\
+ 'CC=${CC}' \
+ 'CFLAGS=${CFLAGS}' \
+ 'LDFLAGS=${LDFLAGS}' \
+"
+
+do_configure () {
+ sh ${S}/configure
+}
+
+do_install () {
+ install -D -m 0755 ntimed-client ${D}${sbindir}/ntimed-client
+}
+
+ALLOW_EMPTY_${PN} = "1"
+RDEPENDS_${PN} += "ntimed-client"
+
+PACKAGE_BEFORE_PN += "ntimed-client"
+FILES_ntimed-client = "${sbindir}/ntimed-client"
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop/0001-nDPI-Include-sys-types.h.patch b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/0001-nDPI-Include-sys-types.h.patch
new file mode 100644
index 000000000..81ffeec21
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/0001-nDPI-Include-sys-types.h.patch
@@ -0,0 +1,26 @@
+From 6543f3e2d5fe214e2fc6c050289bf1ae73b18724 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 30 Aug 2017 13:56:24 -0700
+Subject: [PATCH] nDPI: Include sys/types.h
+
+Needed for uint_t types
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ nDPI/src/include/ipq_api.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: ntop-5.0.1/nDPI/src/include/ipq_api.h
+===================================================================
+--- ntop-5.0.1.orig/nDPI/src/include/ipq_api.h
++++ ntop-5.0.1/nDPI/src/include/ipq_api.h
+@@ -24,6 +24,7 @@
+ #ifndef __IPOQUE_API_INCLUDE_FILE__
+ #define __IPOQUE_API_INCLUDE_FILE__
+
++#include <sys/types.h>
+
+ #if defined(HAVE_NTOP) && defined(WIN32)
+ #include <winsock2.h>
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop.service b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop.service
new file mode 100644
index 000000000..1ead2a0c5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=A network traffic probe similar to the UNIX top command
+Requires=network.target
+
+ConditionPathExists=@SYSCONFDIR@/ntop.conf
+After=syslog.target network.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=@LIBEXECDIR@/ntop-helper start
+ExecStop=@LIBEXECDIR@/ntop-helper stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in.patch b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in.patch
new file mode 100644
index 000000000..392cb082b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in.patch
@@ -0,0 +1,164 @@
+1)add --with-pcap-config option to use libpcap's pcap-config
+2)add AC_CHECK_LIB if user didn't specify PCAP_ROOT and pcap-config
+ put it before host check to make cross-compiling easier.
+ pcap doesn't need extra include and libs so it is fine.
+3)remove old rrd configure code but use pkg-config to config rrd
+ rrdtool should have the pkg-config file installed.
+4)fix python-config
+5)change AC_TRY_RUN to AC_COMPILE_IFELSE for pthread_rwlock_t checking
+6)fix a net-snmp-config bug
+
+Upstream-Status: Pending
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+diff --git a/configure.in b/configure.in
+index 0c7c0a5..cad40be 100644
+--- a/configure.in
++++ b/configure.in
+@@ -230,14 +230,14 @@ dnl>
+ AC_ARG_WITH(void,
+ [ +-External-source-locations:-------------------------------------------------+])
+
+-AC_ARG_WITH( rrd-home,
+- [ --with-rrd-home=DIR Usually /usr/local/rrdtool-1.2.x],
+- RRD_HOME="$withval",
+- RRD_HOME=/usr/local/rrdtool-1.2.19)
+ AC_ARG_WITH( pcap-root,
+ [ --with-pcap-root=DIR LBNL pcap located in DIR],
+ PCAP_ROOT="$withval",
+ PCAP_ROOT=)
++AC_ARG_WITH( pcap-config,
++ [ --with-pcap-config=path/pcap-config where to find pcap-config],
++ PCAP_CONFIG="$withval",
++ PCAP_CONFIG=)
+ AC_ARG_WITH( gdbm-root,
+ [ --with-gdbm-root=DIR gdbm located in DIR],
+ GDBM_DIRECTORY="$withval",
+@@ -556,6 +556,7 @@ if test ".${PCAPRING_DIR}" != .; then
+ else
+
+ TMP_ROOT=${HOME}/PF_RING/userland/libpcap/
++FOUND_PCAP=1
+ if test ".${PCAP_ROOT}" == . &&
+ test -d ${TMP_ROOT} &&
+ test -r ${TMP_ROOT}/libpcap.a; then
+@@ -563,6 +564,18 @@ if test ".${PCAP_ROOT}" == . &&
+ CORELIBS="${CORELIBS} -L${TMP_ROOT} -L${HOME}/PF_RING/userland/lib -lpfring -lpcap "
+ INCS="${INCS} -I ${PCAP_ROOT}"
+ AC_MSG_RESULT([found in $PCAP_ROOT])
++elif test -n "${PCAP_CONFIG}" && test -x "${PCAP_CONFIG}"; then
++ CORELIBS="${CORELIBS} $(${PCAP_CONFIG} --libs)"
++ INCS="${INCS} $(${PCAP_CONFIG} --cflags)"
++ AC_DEFINE_UNQUOTED(HAVE_LIBPCAP, 1, [have libpcap ])
++ AC_MSG_RESULT([found pcap-config: $PCAP_CONFIG, libs:$(${PCAP_CONFIG} --libs) cflags:$(${PCAP_CONFIG} --cflags)])
++else
++ AC_CHECK_LIB(pcap, pcap_lookupdev, ,
++ [FOUND_PCAP=])
++fi
++
++if test -n "$FOUND_PCAP"; then
++ :
+ elif test ".${PCAP_ROOT}" != .; then
+ if test -d $PCAP_ROOT &&
+ test -r $PCAP_ROOT/lib/libpcap.a &&
+@@ -880,44 +893,11 @@ AC_CHECK_LIB([z], [zlibVersion], [], [
+ exit -1
+ ])
+
+-# RRD
+-if test -d "$RRD_HOME"; then
+- AC_MSG_RESULT(checking for RRD home... yes)
+-else
+- RRD_HOME=/usr/local/rrdtool
+- if test -d "$RRD_HOME"; then
+- AC_MSG_RESULT(Checking rrdtool in $RRD_HOME)
+- else
+- RRD_HOME=/usr/local
+- fi
+-fi
+-
+-RRD_LIB="-L${RRD_HOME}/lib -lrrd_th"
+-
+-if test -f "$RRD_HOME/lib/librrd_th.so"; then
+- AC_MSG_RESULT(checking for rrdtool... yes)
+-else
+- if test -f "$RRD_HOME/lib/librrd_th.dylib"; then # OSX
+- AC_MSG_RESULT(checking for rrdtool... yes)
+- else
+- if test -f "$RRD_HOME/lib/librrd_th.a"; then
+- AC_MSG_RESULT(checking for rrdtool... yes)
+- else
+- AC_CHECK_LIB([rrd_th], [main])
+- if test ".${ac_cv_lib_rrd_th_main}" != ".yes"; then
+- AC_MSG_ERROR(Unable to find RRD at $RRD_HOME: please use --with-rrd-home=DIR);
+- AC_MSG_ERROR(RRD source can be downloaded from http://www.rrdtool.org/);
+- else
+- RRD_LIB=
+- fi
+- fi
+- fi
+-fi
+-
+-RRD_INC=
+-if test -d "${RRD_HOME}/include"; then
+- RRD_INC="-I${RRD_HOME}/include"
+-fi
++PKG_CHECK_MODULES( [RRD], [librrd] )
++AC_SUBST(RRD_CFLAGS)
++AC_SUBST(RRD_LIBS)
++RRD_INC=$RRD_FLAGS
++RRD_LIB=$RRD_LIBS
+
+ dnl> The failed recheck stuff below is courtesy of Chris Turbeville [turbo@verio.net]
+ dnl> Chris developed this for Solaris 9, confirming work I had done earlier for FreeBSD
+@@ -1041,7 +1021,7 @@ AC_CHECK_HEADERS([sched.h sys/sched.h])
+ AC_CHECK_HEADERS([pthread.h])
+
+ AC_MSG_CHECKING([if r/w locks are supported])
+-AC_TRY_RUN([
++AC_COMPILE_IFELSE([
+ #include <pthread.h>
+
+ int main()
+@@ -1443,15 +1423,15 @@ dnl> NET-SNMP
+ dnl>
+ if test ".${ac_disable_snmp}" != ".yes"; then
+ AC_CHECK_TOOL(NETSNMP, net-snmp-config)
+- if test "x$ac_cv_prog_ac_ct_NETSNMP" = "xnet-snmp-config"; then
++ if test -n "$NETSNMP"; then
+ AC_DEFINE_UNQUOTED(HAVE_SNMP, 1, [SNMP is supported])
+- SNMPLIBS="`net-snmp-config --libs`"
++ SNMPLIBS="`$NETSNMP --libs`"
+ SNMPLIBS="`echo ${SNMPLIBS}|sed -e s,'-R../lib',,g`"
+ echo "net-snmp libs: ${SNMPLIBS}"
+ LIBS="${LIBS} ${SNMPLIBS}"
+ dnl remove unecessary path
+ LIBS=`echo ${LIBS}|sed -e s,'-R../lib',,g`
+- INCS="${INCS} `net-snmp-config --cflags`"
++ INCS="${INCS} `$NETSNMP --cflags`"
+ else
+ AC_MSG_RESULT(NETSNMP is not present: SNMP support is disabled)
+ fi
+@@ -1464,10 +1444,9 @@ SAVED_LIBS=$LIBS
+ dnl>
+ dnl> PYTHON
+ dnl>
+- AC_CHECK_TOOL(PYTHON, python-config)
+- PYTHON_CONFIG=""
++ AC_CHECK_TOOL(PYTHON_CONFIG, python-config)
+
+- if test "x$ac_cv_prog_ac_ct_PYTHON" != "xpython-config"; then
++ if test -z "$PYTHON_CONFIG"; then
+ if test -f "/etc/debian_version"; then
+ AC_MSG_RESULT(Please install python-dev and rerun configure)
+ exit 1
+@@ -1481,8 +1460,6 @@ dnl>
+ PYTHON_CONFIG="python-config"
+ fi
+ fi
+- else
+- PYTHON_CONFIG="python-config"
+ fi
+
+ if test "x$PYTHON_CONFIG" != "x"; then
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in_net_snmp_config_exist.patch b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in_net_snmp_config_exist.patch
new file mode 100644
index 000000000..269138df9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_configure_in_net_snmp_config_exist.patch
@@ -0,0 +1,21 @@
+Check net-snmp-config's existence in case user specified the
+ac_cv_prog_NETSNMP to avoid HAVE_SNMP defined if the specified
+net-snmp-config doesn't exist.
+
+Upstream-Status: Inappropriate [Embedded specific]
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+diff --git a/configure.in b/configure.in
+index 6f3e88f..8ddf017 100755
+--- a/configure.in
++++ b/configure.in
+@@ -1423,7 +1423,7 @@ dnl> NET-SNMP
+ dnl>
+ if test ".${ac_disable_snmp}" != ".yes"; then
+ AC_CHECK_TOOL(NETSNMP, net-snmp-config)
+- if test -n "$NETSNMP"; then
++ if test -n "$NETSNMP" -a -e "$NETSNMP"; then
+ AC_DEFINE_UNQUOTED(HAVE_SNMP, 1, [SNMP is supported])
+ SNMPLIBS="`$NETSNMP --libs`"
+ SNMPLIBS="`echo ${SNMPLIBS}|sed -e s,'-R../lib',,g`"
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_init.patch b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_init.patch
new file mode 100644
index 000000000..e7684c1b4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_init.patch
@@ -0,0 +1,228 @@
+Modify ntop.init to WRLinux 5.0 style.
+
+Fix a small problem that when ntop not running,
+/etc/init.d/ntop stop will return 1
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+ packages/RedHat/ntop.init | 102 +++++++++-----------------------------------
+ 1 files changed, 21 insertions(+), 81 deletions(-)
+
+diff --git a/packages/RedHat/ntop.init b/packages/RedHat/ntop.init
+index 40d49f1..a189c59 100755
+--- a/packages/RedHat/ntop.init
++++ b/packages/RedHat/ntop.init
+@@ -10,19 +10,9 @@
+ # You have set the admin password - read docs/1STRUN.txt
+ # You have created /etc/ntop.conf with appropriate parameters.
+
+-# To identify an interface to ntop, use the following flags
+-# in /etc/sysconfig/network-scripts/ifcfg-ethx
+-
+-# NTOP="yes" <--- means for ntop to use this interface
+-# NTOPCONFIG="yes" <--- means for ntop to configure this interface
+-
+ # Note that if you give a -i parameter in either /etc/ntop.conf or
+ # the command line, the scan is NOT performed.
+
+-# However, when it comes to the configuration step, with NTOPCONFIG="yes"
+-# the interface is configured regardless of how the interface list was
+-# specified.
+-
+ #
+ # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+ #
+@@ -107,11 +97,7 @@ ntopusesyslog="local3"
+ invoked=$0
+
+ # Source function library.
+-. /etc/rc.d/init.d/functions
+-
+-# Source networking configuration.
+-. /etc/sysconfig/network
+-
++. /etc/init.d/functions
+
+ # Basic sanity checks...
+ if ! [ -x $prog ]; then
+@@ -124,16 +110,6 @@ if ! [ -x $prog ]; then
+ exit 1
+ fi
+
+-if [ ${NETWORKING} = "no" ]; then
+- echo ""
+- echo "ERROR -"
+- echo " Networking is not up!"
+- echo ""
+- echo "Aborting..."
+- echo ""
+- exit 1
+-fi
+-
+ if ! [ -f ${conf} ]; then
+ echo ""
+ echo "ERROR -"
+@@ -180,8 +156,8 @@ fi
+ if [ "${debug}" = "y" ]; then echo "DEBUG: parm file temp is ${parmfile}"; fi
+
+ cmd=`echo \
+- @${conf} \
+ -i tbd \
++ @${conf} \
+ $extra $@`
+
+ echo ${cmd} | awk ' \
+@@ -305,42 +281,6 @@ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Configuration
+
+ # Build list of interfaces, e.g eth0 eth1 eth1:1
+ # (Yeah, we'll have to convert that to eth0,eth1,eth1:1 later
+-if [ ".${ntopinterface}" = ".tbd" ]; then
+-
+- ntopinterface=""
+- iflist=`ip link show | \
+- awk '/^[0-9]*:\ eth/ { printf("%s ", substr($2, 1, length($2)-1)) }'`
+- logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Scanning all interfaces $iflist"
+- if [ "${debug}" = "y" ]; then echo "DEBUG: Interface candidates are ${iflist}"; fi
+-
+- for eth in $iflist; do
+-
+- if ! LANG=C egrep -L "^[Nn][Tt][Oo][Pp]=['\"]?[Yy][Ee][Ss]['\"]?" \
+- /etc/sysconfig/network-scripts/ifcfg-$eth > /dev/null ; then
+- logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - $eth is not ntop=yes, skipping"
+- if [ "${debug}" = "y" ]; then echo "DEBUG: $eth not ntop=yes"; fi
+- continue
+- fi
+-
+- ntopinterface="${ntopinterface} $eth"
+-
+- ip=`ip addr show $eth | \
+- awk '/inet/ { printf("%s", substr($2, 1, index($2, "/")-1)) }'`
+-
+- if [ ".$ip" = "." ]; then
+- is="is unnumbered interface"
+- else
+- is="has IP address $ip"
+- fi
+- logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - $eth is ntop=yes, ${is}"
+- if [ "${debug}" = "y" ]; then echo "DEBUG: $eth ntop=yes, ${is}"; fi
+-
+- done
+-
+-else
+- logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Skipping interface scan - list in parms"
+-fi
+-
+ if [ "x${ntopinterface}" = "x" ]; then
+ ntopinterface="none"
+ fi
+@@ -462,12 +402,6 @@ config_interfaces () {
+ if="${if},${eth}"
+ fi
+
+- if ! LANG=C egrep -L "^[Nn][Tt][Oo][Pp][Cc].*=['\"]?[Yy][Ee][Ss]['\"]?" \
+- /etc/sysconfig/network-scripts/ifcfg-$eth > /dev/null ; then
+- logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - $eth is not ntopconfigure=yes, skipping"
+- continue
+- fi
+-
+ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Configuring $eth"
+ if [ "${debug}" = "y" ]; then echo "DEBUG: Configuring $eth"; fi
+
+@@ -527,7 +461,7 @@ start () {
+ show_extra
+ config_interfaces
+
+- cmd=`echo $prog \
++ cmd=`echo \
+ @${conf} \
+ -i $if \
+ $extra $@`
+@@ -541,7 +475,7 @@ start () {
+ if [ ".${ldlibpath}" != "." ]; then
+ export LD_LIBRARY_PATH="${ldlibpath}"
+ fi
+- daemon ${cmd}
++ start-stop-daemon --start --quiet --exec $prog -- ${cmd}
+ RETVAL=$?
+
+ [ $RETVAL = 0 ] && touch /var/lock/subsys/${name}${instance}
+@@ -551,6 +485,7 @@ start () {
+ stop () {
+ # stop daemon
+
++ NOT_RUNNING=1
+ RETVAL=1
+ echo -n $"Stopping ${name}${instance}: "
+ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Stopping: ${name}${instance}"
+@@ -563,13 +498,14 @@ stop () {
+ if [ $rc = 0 ]; then
+ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Sending SIGTERM to ${pid}"
+ if [ "${debug}" = "y" ]; then echo "Sending SIGTERM to ${pid}"; fi
+- kill -s SIGTERM ${pid}
++ kill -TERM ${pid} 2>&1 > /dev/null
+ RETVAL=$?
+ rm -f ${ntopdbfilepath}/ntop.pid
+ else
+ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Unable to find process ${pid} ... will kill by name"
+ if [ "${debug}" = "y" ]; then echo "Unable to find process ${pid} ... will kill by name"; fi
+ fi
++ NOT_RUNNING=0
+ else
+
+ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Unable to find ${ntopdbfilepath}/ntop.pid file ... will kill by name"
+@@ -577,15 +513,16 @@ stop () {
+
+ fi
+
+- echo
+-
+ if [ $RETVAL != 0 ]; then
+ pids=`ps axf | grep '\/usr\/bin\/ntop' | awk '{ printf(" %s", $1) }; END { print "" }'`
+- if [ "${pids}" != " " ]; then
++ if [ "${pids}" != "" ]; then
+ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Sending SIGTERM to ${prog}...${pids}"
+ if [ "${debug}" = "y" ]; then echo "Sending SIGTERM to ${prog}...${pids}"; fi
+- kill -INT ${pids}
++ kill -TERM ${pids} > /dev/null 2>&1
+ RETVAL=$?
++ NOT_RUNNING=0
++ else
++ NOT_RUNNING=1
+ fi
+ fi
+
+@@ -597,13 +534,9 @@ stop () {
+ if [ "${debug}" = "y" ]; then echo "DEBUG: Unconfiguring interfaces"; fi
+
+ for eth in ${ntopinterface}; do
+- if ! LANG=C egrep -L "^[Nn][Tt][Oo][Pp][Cc].*=['\"]?[Yy][Ee][Ss]['\"]?" \
+- /etc/sysconfig/network-scripts/ifcfg-$eth > /dev/null ; then
+- logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - $eth is not ntopconfigure=yes, skipping"
+- if [ "${debug}" = "y" ]; then echo "DEBUG: $eth is not ntopconfigure=yes"; fi
+- continue
++ if [ "$eth" = "none" ]; then
++ continue
+ fi
+-
+ logger -p ${ntopusesyslog} -t ${name}${instance} -- "INITD - Unconfiguring $eth"
+ if [ "${debug}" = "y" ]; then echo "DEBUG: Unconfiguring $eth"; fi
+
+@@ -623,6 +556,13 @@ stop () {
+ if [ "${debug}" = "y" ]; then echo "DEBUG: Interfaces are unconfigured"; fi
+ fi
+
++ if [ $NOT_RUNNING -eq 1 -o $RETVAL -eq 0 ]; then
++ echo " [ OK ]"
++ RETVAL=0
++ else
++ echo " [ FAILED ]"
++ fi
++
+ return $RETVAL
+ }
+
+--
+1.7.5.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_webInterface.patch b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_webInterface.patch
new file mode 100644
index 000000000..9f57ca425
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/ntop_webInterface.patch
@@ -0,0 +1,19 @@
+change osName to version as it prints out "ntop Version".
+
+Upstream-Status: Pending
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+---
+diff --git a/webInterface.c b/webInterface.c
+index 5622e69..8cb7a67 100644
+--- a/webInterface.c
++++ b/webInterface.c
+@@ -5816,7 +5816,7 @@ static void printNtopConfigInfoData(int textPrintFlag, UserPref *pref) {
+ printInfoSectionTitle(textPrintFlag, "Basic Information");
+
+ safe_snprintf(__FILE__, __LINE__, formatBuf, sizeof(formatBuf), "%s (%d bit)",
+- osName, sizeof(long) == 8 ? 64 : 32);
++ version, sizeof(long) == 8 ? 64 : 32);
+ printFeatureConfigInfo(textPrintFlag, "ntop Version", formatBuf);
+
+ #ifndef WIN32
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop/use-static-inline.patch b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/use-static-inline.patch
new file mode 100644
index 000000000..2b001c13e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop/use-static-inline.patch
@@ -0,0 +1,32 @@
+[PATCH] replace 'inline' with 'static inline' for gcc 5.x
+
+gcc 5.x defaults to -std=gnu11 instead of -std=gnu89 which change
+the semantics for inline functions and the standalone 'inline'
+causes error with "gcc5 -g -o0"
+
+Replace inline with static inline to be compatible with both gcc 4
+and 5.
+
+Upstream-status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ nDPI/src/lib/protocols/ssl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/nDPI/src/lib/protocols/ssl.c b/nDPI/src/lib/protocols/ssl.c
+index 245b8c3..72beda9 100644
+--- a/nDPI/src/lib/protocols/ssl.c
++++ b/nDPI/src/lib/protocols/ssl.c
+@@ -39,7 +39,7 @@ static void ipoque_int_ssl_add_connection(struct ipoque_detection_module_struct
+
+ #ifdef HAVE_NTOP
+ #ifndef WIN32
+-inline int min(int a, int b) { return(a < b ? a : b); }
++static inline int min(int a, int b) { return(a < b ? a : b); }
+ #endif
+
+ static void stripCertificateTrailer(char *buffer, int buffer_len) {
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ntop/ntop_5.0.1.bb b/meta-openembedded/meta-networking/recipes-support/ntop/ntop_5.0.1.bb
new file mode 100644
index 000000000..298fbec61
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntop/ntop_5.0.1.bb
@@ -0,0 +1,137 @@
+SUMMARY = "ntop is network top"
+DESCRIPTION = "ntop is a network traffic probe that shows the network usage, \
+similar to what the popular top Unix command does."
+
+SECTION = "console/network"
+
+LICENSE = "GPLv2+ & GPLv3 & OpenSSL"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ file://LICENSE-OpenSSL.txt;md5=a409f902e447ddd889cffa0c70e7c7c2 \
+ "
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/ntop/ntop-${PV}.tar.gz \
+ file://ntop_configure_in.patch \
+ file://ntop_init.patch \
+ file://ntop_webInterface.patch \
+ file://ntop_configure_in_net_snmp_config_exist.patch \
+ file://ntop.service \
+ file://use-static-inline.patch \
+ file://0001-nDPI-Include-sys-types.h.patch \
+ "
+SRC_URI[md5sum] = "01710b6925a8a5ffe1a41b8b512ebd69"
+SRC_URI[sha256sum] = "7e8e84cb14d2173beaca4d4cb991a14d84a4bef84ec37b2276bc363f45c52ef8"
+
+inherit autotools-brokensep useradd pythonnative pkgconfig systemd
+
+DEPENDS = "geoip rrdtool python zlib libpcap gdbm"
+
+PACKAGECONFIG ??= "openssl snmp plugins"
+PACKAGECONFIG[openssl] = "--with-ssl, --without-ssl, openssl, openssl"
+PACKAGECONFIG[snmp] = "--enable-snmp=yes NETSNMP=${STAGING_BINDIR_CROSS}/net-snmp-config, \
+--disable-snmp,net-snmp,"
+PACKAGECONFIG[plugins] = "--enable-plugins=yes, --disable-plugins, ,"
+
+EXTRA_OECONF += "ac_cv_file_aclocal_m4=yes ac_cv_file_depcomp=no"
+
+do_configure() {
+ cp ${STAGING_DATADIR_NATIVE}/aclocal/libtool.m4 libtool.m4.in
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.guess ${S}/nDPI
+ install -m 0755 ${STAGING_DATADIR_NATIVE}/gnu-config/config.sub ${S}/nDPI
+ cat acinclude.m4.in acinclude.m4.ntop libtool.m4.in > acinclude.m4
+ cp 3rd_party/* ./
+
+ # config nDPI
+ cd nDPI
+ ./configure ${CONFIGUREOPTS} --with-pic
+ cd ..
+
+ sed -i -e 's:^CFG_DBFILE_DIR=$localstatedir/ntop:CFG_DBFILE_DIR=$localstatedir/lib/ntop:' ${S}/configure.in
+
+ # fix the CFLAGS, CPPFLAGS, LDFLAGS, remove the host include
+ sed -i \
+ -e 's:\(^CFLAGS="\$.*\) -I/usr/local/include -I/opt/local/include":\1":' \
+ -e 's:\(^CPPFLAGS="\$.*\) -I/usr/local/include -I/opt/local/include":\1":' \
+ -e 's:\(^LDFLAGS="\$.*\) -L/usr/local/lib -L/opt/local/lib":\1":' \
+ ${S}/configure.in
+
+ # replace the DISTRO RELEASE in configure.in which are host's
+ # with our release, although those doesn't affect functionality
+ sed -i -e \
+ '/DEFINEOS="LINUX"/{N;s/DISTRO=.*/DISTRO="${DISTRO}"/;N;s/RELEASE=.*/RELEASE="${DISTRO_VERSION}"/;}' \
+ ${S}/configure.in
+
+ # osName in original configure.in should be ${TARGET_SYS}
+ # which will show in ntop's "show configuration"
+ sed -i -e \
+ 's:^osName=.*:osName=${TARGET_SYS}:' \
+ ${S}/configure.in
+
+ # rename configureextra to configureextra_rename to avoid
+ # configure.in to guess host OS and pull in more configure, non needed
+ # which will cause some cross-compiling failure on specific host
+ # e.g. SUSE(SLED...)
+ test ! -f configureextra || mv -f configureextra configureextra_rename
+
+ # make sure configure finds python includdirs/libs with these envs
+ export BUILD_SYS=${BUILD_SYS} HOST_SYS=${HOST_SYS} \
+ STAGING_INCDIR=${STAGING_INCDIR} \
+ STAGING_LIBDIR=${STAGING_LIBDIR}
+
+ autotools_do_configure
+}
+
+do_compile_prepend() {
+ cd nDPI
+ oe_runmake
+ cd ..
+}
+
+do_install_append() {
+ # remove the empty dirs
+ rm -rf ${D}${libdir}/plugins
+
+ install -D -m 0755 ${S}/packages/RedHat/ntop.init \
+ ${D}${sysconfdir}/init.d/ntop
+ install -D -m 0644 ${S}/packages/RedHat/ntop.conf.sample \
+ ${D}${sysconfdir}/ntop.conf
+
+ # change ntop dir in ntop.conf
+ # don't use the -P as the ntop.init didn't support it
+ sed -i -e "s:^--db-file-path /usr/share/ntop:--db-file-path /var/lib/ntop:" \
+ -e "s:^#? -P /var/ntop:#? -P /var/lib/ntop:" \
+ ${D}${sysconfdir}/ntop.conf
+
+ # For systemd
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -D -m 0755 ${S}/packages/RedHat/ntop.init ${D}${libexecdir}/ntop-helper
+ install -D -m 0644 ${WORKDIR}/ntop.service ${D}${systemd_system_unitdir}/ntop.service
+ sed -i -e 's,@LIBEXECDIR@,${libexecdir},g' \
+ -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ ${D}${systemd_system_unitdir}/ntop.service
+ fi
+
+ # Fix host-user-contaminated issue
+ chown -R root:root ${D}
+
+ chown -R ntop.ntop ${D}${datadir}/ntop
+ chown -R ntop:ntop ${D}${localstatedir}/lib/ntop
+}
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "-M -g ntop -r -d ${localstatedir}/lib/ntop \
+-s /usr/sbin/nologin -c 'ntop' ntop"
+GROUPADD_PARAM_${PN} = "-r ntop"
+
+SYSTEMD_SERVICE_${PN} = "ntop.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+FILES_${PN}_append = "${libdir}/ntop/plugins ${libdir}/libntop-*.so \
+ ${libdir}/libntopreport-*.so ${libdir}/lib*-${PV}.so"
+FILES_${PN}-dev = "${includedir} ${libdir}/libntop.so \
+ ${libdir}/libntopreport.so \
+ ${libdir}/libnetflowPlugin.so ${libdir}/libsflowPlugin.so \
+ ${libdir}/librrdPlugin.so \
+ ${libdir}/*.a ${libdir}/libntopreport.a ${libdir}/*.la"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp-4.2.4_p6-nano.patch b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp-4.2.4_p6-nano.patch
new file mode 100644
index 000000000..d45b7e38b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp-4.2.4_p6-nano.patch
@@ -0,0 +1,27 @@
+From 2310898533f059d875dcffd26ab6cf1b280292fd Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 12 Jan 2011 21:38:46 +0100
+
+---
+ include/ntp_syscall.h | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/include/ntp_syscall.h b/include/ntp_syscall.h
+index d1ce03e..9e18432 100644
+--- a/include/ntp_syscall.h
++++ b/include/ntp_syscall.h
+@@ -10,6 +10,14 @@
+ # include <sys/timex.h>
+ #endif
+
++#if defined(ADJ_NANO) && !defined(MOD_NANO)
++#define MOD_NANO ADJ_NANO
++#endif
++
++#if defined(ADJ_TAI) && !defined(MOD_TAI)
++#define MOD_TAI ADJ_TAI
++#endif
++
+ #ifndef NTP_SYSCALLS_LIBC
+ # ifdef NTP_SYSCALLS_STD
+ # define ntp_adjtime(t) syscall(SYS_ntp_adjtime, (t))
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp.conf b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp.conf
new file mode 100644
index 000000000..676e18645
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntp.conf
@@ -0,0 +1,17 @@
+# This is the most basic ntp configuration file
+# The driftfile must remain in a place specific to this
+# machine - it records the machine specific clock error
+driftfile /var/lib/ntp/drift
+# This should be a server that is close (in IP terms)
+# to the machine. Add other servers as required.
+# Unless you un-comment the line below ntpd will sync
+# only against the local system clock.
+#
+# server time.server.example.com
+#
+# Using local hardware clock as fallback
+# Disable this when using ntpd -q -g -x as ntpdate or it will sync to itself
+server 127.127.1.0
+fudge 127.127.1.0 stratum 14
+# Defining a default security setting
+restrict default
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd
new file mode 100755
index 000000000..d1b9c4907
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd
@@ -0,0 +1,84 @@
+#! /bin/sh
+
+### BEGIN INIT INFO
+# Provides: ntp
+# Required-Start: $network $remote_fs $syslog
+# Required-Stop: $network $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop:
+# Short-Description: Start NTP daemon
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin
+
+DAEMON=/usr/sbin/ntpd
+PIDFILE=/var/run/ntpd.pid
+
+# ntpd init.d script for ntpdc from ntp.isc.org
+test -x $DAEMON -a -r /etc/ntp.conf || exit 0
+
+# rcS contains TICKADJ
+test -r /etc/default/rcS && . /etc/default/rcS
+
+# Source function library.
+. /etc/init.d/functions
+
+# Functions to do individual actions
+settick(){
+ # If TICKADJ is set we *must* adjust it before we start, because the
+ # driftfile relies on the correct setting
+ test -n "$TICKADJ" -a -x /usr/sbin/tickadj && {
+ echo -n "Setting tick to $TICKADJ: "
+ /usr/sbin/tickadj "$TICKADJ"
+ echo "done"
+ }
+}
+startdaemon(){
+ # The -g option allows ntpd to step the time to correct it just
+ # once. The daemon will exit if the clock drifts too much after
+ # this. If ntpd seems to disappear after a while assume TICKADJ
+ # above is set to a totally incorrect value.
+ echo -n "Starting ntpd: "
+ start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --startas $DAEMON -- -u ntp:ntp -p $PIDFILE "$@"
+ echo "done"
+}
+stopdaemon(){
+ echo -n "Stopping ntpd: "
+ start-stop-daemon --stop --quiet --oknodo -p $PIDFILE
+ echo "done"
+}
+
+case "$1" in
+ start)
+ settick
+ startdaemon -g
+ ;;
+ stop)
+ stopdaemon
+ ;;
+ force-reload)
+ stopdaemon
+ settick
+ startdaemon -g
+ ;;
+ restart)
+ # Don't reset the tick here
+ stopdaemon
+ startdaemon -g
+ ;;
+ reload)
+ # Must do this by hand, but don't do -g
+ stopdaemon
+ startdaemon
+ ;;
+ status)
+ status /usr/sbin/ntpd;
+ exit $?
+ ;;
+ *)
+ echo "Usage: ntpd { start | stop | status | restart | reload }" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.list b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.list
new file mode 100644
index 000000000..d1fe6b7e2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.list
@@ -0,0 +1 @@
+ntpd.service
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.service b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.service
new file mode 100644
index 000000000..0e3d7cd37
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Network Time Service
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/ntpd.pid
+ExecStart=/usr/sbin/ntpd -u ntp:ntp -p /run/ntpd.pid -g
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate
new file mode 100755
index 000000000..17b64d133
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin
+
+test -x /usr/sbin/ntpdate || exit 0
+
+if test -f /etc/default/ntpdate ; then
+. /etc/default/ntpdate
+fi
+
+if [ "$NTPSERVERS" = "" ] ; then
+ if [ "$METHOD" = "" -a "$1" != "silent" ] ; then
+ echo "Please set NTPSERVERS in /etc/default/ntpdate"
+ exit 1
+ else
+ exit 0
+ fi
+fi
+
+# This is a heuristic: The idea is that if a static interface is brought
+# up, that is a major event, and we can put in some extra effort to fix
+# the system time. Feel free to change this, especially if you regularly
+# bring up new network interfaces.
+if [ "$METHOD" = static ]; then
+ OPTS="-b"
+fi
+
+if [ "$METHOD" = loopback ]; then
+ exit 0
+fi
+
+(
+
+LOCKFILE=/var/lock/ntpdate
+
+# Avoid running more than one at a time
+if [ -x /usr/bin/lockfile-create ]; then
+ lockfile-create $LOCKFILE
+ lockfile-touch $LOCKFILE &
+ LOCKTOUCHPID="$!"
+fi
+
+if /usr/sbin/ntpdate -s $OPTS $NTPSERVERS 2>/dev/null; then
+ if [ "$UPDATE_HWCLOCK" = "yes" ]; then
+ hwclock --systohc || :
+ fi
+fi
+
+if [ -x /usr/bin/lockfile-create ] ; then
+ kill $LOCKTOUCHPID
+ lockfile-remove $LOCKFILE
+fi
+
+) &
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.default b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.default
new file mode 100644
index 000000000..486b6e07d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.default
@@ -0,0 +1,7 @@
+# Configuration script used by ntpdate-sync script
+
+NTPSERVERS=""
+
+# Set to "yes" to write time to hardware clock on success
+UPDATE_HWCLOCK="no"
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.service b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.service
new file mode 100644
index 000000000..10cbd70f9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/ntpdate.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Network Time Service (one-shot ntpdate mode)
+Before=ntpd.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/ntpdate-sync silent
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp
new file mode 100644
index 000000000..f8c5895b7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp
@@ -0,0 +1 @@
+NTPSERVER="ntpserver.example.org"
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp.service b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp.service
new file mode 100644
index 000000000..4898b8a70
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp/sntp.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Simple Network Time Service Client
+After=network.target
+
+[Service]
+Type=oneshot
+EnvironmentFile=-/etc/default/sntp
+ExecStart=/usr/sbin/sntp -s $NTPSERVER
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/ntp/ntp_4.2.8p11.bb b/meta-openembedded/meta-networking/recipes-support/ntp/ntp_4.2.8p11.bb
new file mode 100644
index 000000000..c698fa049
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ntp/ntp_4.2.8p11.bb
@@ -0,0 +1,172 @@
+SUMMARY = "Network Time Protocol daemon and utilities"
+DESCRIPTION = "The Network Time Protocol (NTP) is used to \
+synchronize the time of a computer client or server to \
+another server or reference time source, such as a radio \
+or satellite receiver or modem."
+HOMEPAGE = "http://support.ntp.org"
+SECTION = "net"
+LICENSE = "NTP"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=e877a1d567a6a58996d2b66e3e387003"
+
+DEPENDS = "libevent"
+
+SRC_URI = "http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-${PV}.tar.gz \
+ file://ntp-4.2.4_p6-nano.patch \
+ file://ntpd \
+ file://ntp.conf \
+ file://ntpdate \
+ file://ntpdate.default \
+ file://ntpdate.service \
+ file://ntpd.service \
+ file://sntp.service \
+ file://sntp \
+ file://ntpd.list \
+"
+
+SRC_URI[md5sum] = "00950ca2855579541896513e78295361"
+SRC_URI[sha256sum] = "f14a39f753688252d683ff907035ffff106ba8d3db21309b742e09b5c3cd278e"
+
+inherit autotools update-rc.d useradd systemd pkgconfig
+
+# The ac_cv_header_readline_history is to stop ntpdc depending on either
+# readline or curses
+EXTRA_OECONF += "--with-net-snmp-config=no \
+ --without-ntpsnmpd \
+ ac_cv_header_readline_history_h=no \
+ --with-yielding_select=yes \
+ --with-locfile=redhat \
+ --without-rpath \
+ "
+CFLAGS_append = " -DPTYS_ARE_GETPT -DPTYS_ARE_SEARCHED"
+
+USERADD_PACKAGES = "${PN}"
+NTP_USER_HOME ?= "/var/lib/ntp"
+USERADD_PARAM_${PN} = "--system --home-dir ${NTP_USER_HOME} \
+ --no-create-home \
+ --shell /bin/false --user-group ntp"
+
+# NB: debug is default-enabled by NTP; keep it default-enabled here.
+PACKAGECONFIG ??= "cap debug refclocks openssl \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG[openssl] = "--with-openssl-libdir=${STAGING_LIBDIR} \
+ --with-openssl-incdir=${STAGING_INCDIR} \
+ --with-crypto, \
+ --without-openssl --without-crypto, \
+ openssl"
+PACKAGECONFIG[cap] = "--enable-linuxcaps,--disable-linuxcaps,libcap"
+PACKAGECONFIG[readline] = "--with-lineeditlibs,--without-lineeditlibs,readline"
+PACKAGECONFIG[refclocks] = "--enable-all-clocks,--disable-all-clocks,pps-tools"
+PACKAGECONFIG[debug] = "--enable-debugging,--disable-debugging"
+PACKAGECONFIG[mdns] = "ac_cv_header_dns_sd_h=yes,ac_cv_header_dns_sd_h=no,mdns"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+do_install_append() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 644 ${WORKDIR}/ntp.conf ${D}${sysconfdir}
+ install -m 755 ${WORKDIR}/ntpd ${D}${sysconfdir}/init.d
+ install -d ${D}${bindir}
+ install -m 755 ${WORKDIR}/ntpdate ${D}${bindir}/ntpdate-sync
+
+ install -m 755 -d ${D}${NTP_USER_HOME}
+ chown ntp:ntp ${D}${NTP_USER_HOME}
+
+ # Fix hardcoded paths in scripts
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/ntpd ${D}${bindir}/ntpdate-sync
+ sed -i 's!/usr/bin/!${bindir}/!g' ${D}${sysconfdir}/init.d/ntpd ${D}${bindir}/ntpdate-sync
+ sed -i 's!/etc/!${sysconfdir}/!g' ${D}${sysconfdir}/init.d/ntpd ${D}${bindir}/ntpdate-sync
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${sysconfdir}/init.d/ntpd ${D}${bindir}/ntpdate-sync
+ sed -i 's!^PATH=.*!PATH=${base_sbindir}:${base_bindir}:${sbindir}:${bindir}!' ${D}${bindir}/ntpdate-sync
+ sed -i '1s,#!.*perl -w,#! ${bindir}/env perl,' ${D}${sbindir}/ntptrace
+ sed -i '/use/i use warnings;' ${D}${sbindir}/ntptrace
+ sed -i '1s,#!.*perl,#! ${bindir}/env perl,' ${D}${sbindir}/ntp-wait
+ sed -i '/use/i use warnings;' ${D}${sbindir}/ntp-wait
+ sed -i '1s,#!.*perl -w,#! ${bindir}/env perl,' ${D}${sbindir}/calc_tickadj
+ sed -i '/use/i use warnings;' ${D}${sbindir}/calc_tickadj
+
+ install -d ${D}/${sysconfdir}/default
+ install -m 644 ${WORKDIR}/ntpdate.default ${D}${sysconfdir}/default/ntpdate
+ install -m 0644 ${WORKDIR}/sntp ${D}${sysconfdir}/default/
+
+ install -d ${D}/${sysconfdir}/network/if-up.d
+ ln -s ${bindir}/ntpdate-sync ${D}/${sysconfdir}/network/if-up.d
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/ntpdate.service ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/ntpd.service ${D}${systemd_unitdir}/system/
+ install -m 0644 ${WORKDIR}/sntp.service ${D}${systemd_unitdir}/system/
+
+ install -d ${D}${systemd_unitdir}/ntp-units.d
+ install -m 0644 ${WORKDIR}/ntpd.list ${D}${systemd_unitdir}/ntp-units.d/60-ntpd.list
+
+ # Remove an empty libexecdir.
+ rmdir --ignore-fail-on-non-empty ${D}${libexecdir}
+}
+
+PACKAGES += "ntpdate sntp ${PN}-tickadj ${PN}-utils"
+# NOTE: you don't need ntpdate, use "ntpd -q -g -x"
+
+# ntp originally includes tickadj. It's split off for inclusion in small firmware images on platforms
+# with wonky clocks (e.g. OpenSlug)
+RDEPENDS_${PN} = "${PN}-tickadj"
+# ntpd require libgcc for execution
+RDEPENDS_${PN} += "libgcc"
+# Handle move from bin to utils package
+RPROVIDES_${PN}-utils = "${PN}-bin"
+RREPLACES_${PN}-utils = "${PN}-bin"
+RCONFLICTS_${PN}-utils = "${PN}-bin"
+
+SYSTEMD_PACKAGES = "${PN} ntpdate sntp"
+SYSTEMD_SERVICE_${PN} = "ntpd.service"
+SYSTEMD_SERVICE_ntpdate = "ntpdate.service"
+SYSTEMD_SERVICE_sntp = "sntp.service"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+
+RPROVIDES_ntpdate += "ntpdate-systemd"
+RREPLACES_ntpdate += "ntpdate-systemd"
+RCONFLICTS_ntpdate += "ntpdate-systemd"
+
+RSUGGESTS_${PN} = "iana-etc"
+
+FILES_${PN} = "${sbindir}/ntpd.ntp ${sysconfdir}/ntp.conf ${sysconfdir}/init.d/ntpd ${libdir} \
+ ${NTP_USER_HOME} \
+ ${systemd_unitdir}/ntp-units.d/60-ntpd.list ${libexecdir}\
+"
+FILES_${PN}-tickadj = "${sbindir}/tickadj"
+FILES_${PN}-utils = "${sbindir} ${datadir}/ntp/lib"
+RDEPENDS_${PN}-utils += "perl"
+FILES_ntpdate = "${sbindir}/ntpdate \
+ ${sysconfdir}/network/if-up.d/ntpdate-sync \
+ ${bindir}/ntpdate-sync \
+ ${sysconfdir}/default/ntpdate \
+ ${systemd_unitdir}/system/ntpdate.service \
+"
+FILES_sntp = "${sbindir}/sntp \
+ ${sysconfdir}/default/sntp \
+ ${systemd_unitdir}/system/sntp.service \
+ "
+
+CONFFILES_${PN} = "${sysconfdir}/ntp.conf"
+CONFFILES_ntpdate = "${sysconfdir}/default/ntpdate"
+
+INITSCRIPT_NAME = "ntpd"
+# No dependencies, so just go in at the standard level (20)
+INITSCRIPT_PARAMS = "defaults"
+
+pkg_postinst_ntpdate() {
+ if ! grep -q -s ntpdate $D/var/spool/cron/root; then
+ echo "adding crontab"
+ test -d $D/var/spool/cron || mkdir -p $D/var/spool/cron
+ echo "30 * * * * ${bindir}/ntpdate-sync silent" >> $D/var/spool/cron/root
+ fi
+}
+
+inherit update-alternatives
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE_${PN} = "ntpd"
+ALTERNATIVE_LINK_NAME[ntpd] = "${sbindir}/ntpd"
diff --git a/meta-openembedded/meta-networking/recipes-support/nuttcp/nuttcp_7.2.1.bb b/meta-openembedded/meta-networking/recipes-support/nuttcp/nuttcp_7.2.1.bb
new file mode 100644
index 000000000..9430add48
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/nuttcp/nuttcp_7.2.1.bb
@@ -0,0 +1,29 @@
+# Copyright (C) 2013 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "network performance measurement tool"
+DESCRIPTION = "nuttcp is a network performance measurement tool intended for use by network \
+and system managers. Its most basic usage is to determine the raw TCP (or UDP) \
+network layer throughput by transferring memory buffers from a source system \
+across an interconnecting network to a destination system, either transferring \
+data for a specified time interval, or alternatively transferring a specified \
+number of bytes."
+HOMEPAGE = "http://www.nuttcp.net/Welcome%20Page.html"
+LICENSE = "GPL-2.0"
+SECTION = "net"
+LIC_FILES_CHKSUM = "file://${BP}.c;beginline=4;endline=30;md5=ae7045c3c3616092e07d87f04ba0d960"
+
+SRC_URI = "http://nuttcp.net/${BPN}/beta/${BP}.c"
+SRC_URI[md5sum] = "1ebf4a08bad2a295a8155f02995e8754"
+SRC_URI[sha256sum] = "c6e33810ccce67260f8d5d627f60e429d44f532365c58ed5673d035e2a59c4db"
+
+S = "${WORKDIR}"
+
+do_compile () {
+ ${CC} ${CFLAGS} ${LDFLAGS} -o nuttcp nuttcp-${PV}.c
+}
+
+do_install () {
+ install -d ${D}${bindir}
+ install -m 0755 nuttcp ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/open-isns/open-isns/0001-util.h-endian.h-is-available-on-musl-on-linux.patch b/meta-openembedded/meta-networking/recipes-support/open-isns/open-isns/0001-util.h-endian.h-is-available-on-musl-on-linux.patch
new file mode 100644
index 000000000..825e2bf6a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/open-isns/open-isns/0001-util.h-endian.h-is-available-on-musl-on-linux.patch
@@ -0,0 +1,38 @@
+From e0d86318227a23f00cf0f6639a6685bb9f5771a1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 12 Dec 2017 09:42:19 -0800
+Subject: [PATCH] util.h: endian.h is available on musl on linux
+
+just checking for glibc alone is not enough since
+it excludes musl, therefore check for platform
+being linux as well
+
+Fixes build issues
+
+include/libisns/util.h:114:12: fatal error: sys/endian.h: No such file or directory
+ # include <sys/endian.h>
+ ^~~~~~~~~~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Submitted
+
+ include/libisns/util.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/libisns/util.h b/include/libisns/util.h
+index 9a2bd13..6cc1a1b 100644
+--- a/include/libisns/util.h
++++ b/include/libisns/util.h
+@@ -100,7 +100,7 @@ enum {
+ * There's no htonll yet
+ */
+ #ifndef htonll
+-# ifdef __GLIBC__
++# if defined(__GLIBC__) || defined(__linux__)
+ # include <endian.h>
+ # include <byteswap.h>
+ # if __BYTE_ORDER == __BIG_ENDIAN
+--
+2.15.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/open-isns/open-isns_0.97.bb b/meta-openembedded/meta-networking/recipes-support/open-isns/open-isns_0.97.bb
new file mode 100644
index 000000000..abfa7510e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/open-isns/open-isns_0.97.bb
@@ -0,0 +1,40 @@
+# Copyright (C) 2016 Joe MacDonald <joe_macdonald@mentor.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+SUMMARY = "iSNS daemon and utility programs"
+DESCRIPTION = "This is a partial implementation of RFC4171, the Internet \
+Storage Name Service (iSNS). The distribution includes the iSNS server, \
+supporting persisten storage of registrations, isnsadm, a command line \
+utility for managing nodes, and isnsdd, a corresponding discovery daemon."
+HOMEPAGE = "http://github.com/gonzoleeman/open-isns/"
+LICENSE = "GPLv2+ & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=321bf41f280cf805086dd5a720b37785"
+SECTION = "net"
+
+DEPENDS = "openssl"
+
+SRC_URI = "git://github.com/open-iscsi/open-isns \
+ file://0001-util.h-endian.h-is-available-on-musl-on-linux.patch \
+ "
+
+SRCREV ?= "09954404e948e41eb0fce8e28836018b4ce3d20d"
+
+S = "${WORKDIR}/git"
+
+inherit systemd autotools-brokensep update-rc.d
+
+EXTRA_OECONF = " --prefix=${prefix} --enable-shared"
+EXTRA_OEMAKE += "SYSTEMDDIR=${D}${systemd_unitdir}/system"
+
+do_install_append () {
+ oe_runmake INCDIR=${D}${includedir}/libisns/ install_hdrs
+ oe_runmake LIBDIR=${D}${libdir} install_lib
+
+ install -D -m 755 ${S}/etc/openisns.init ${D}${sysconfdir}/init.d/openisns
+ sed -i 's|daemon isnsd|start-stop-daemon --start --quiet --oknodo --exec ${sbindir}/isnsd --|' \
+ ${D}${sysconfdir}/init.d/openisns
+}
+
+FILES_${PN} += "${libdir} ${systemd_unitdir}"
+
+INITSCRIPT_NAME = "openisns"
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/0001-lanserv-Rename-struct-parameter-printf-for-namespace.patch b/meta-openembedded/meta-networking/recipes-support/openipmi/files/0001-lanserv-Rename-struct-parameter-printf-for-namespace.patch
new file mode 100644
index 000000000..25057fbce
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/0001-lanserv-Rename-struct-parameter-printf-for-namespace.patch
@@ -0,0 +1,618 @@
+From 8b51a6bf5a4829d8add535a098c0c06a049a9958 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 26 Aug 2017 22:50:57 -0700
+Subject: [PATCH] lanserv: Rename struct parameter printf for namespace
+ collision
+
+This comes to fore when we use hardening flags where printf
+is treated as macro and gets replaced with printf_chk
+
+Fixes errors like
+
+error: no member named '__printf_chk' in 'struct emu_out_s'
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ lanserv/OpenIPMI/serv.h | 2 +-
+ lanserv/emu_cmd.c | 132 ++++++++++++++++++++++++------------------------
+ lanserv/ipmi_sim.c | 10 ++--
+ 3 files changed, 72 insertions(+), 72 deletions(-)
+
+diff --git a/lanserv/OpenIPMI/serv.h b/lanserv/OpenIPMI/serv.h
+index d12d63a..8555c85 100644
+--- a/lanserv/OpenIPMI/serv.h
++++ b/lanserv/OpenIPMI/serv.h
+@@ -522,7 +522,7 @@ uint8_t ipmb_checksum(uint8_t *data, int size, uint8_t start);
+ typedef struct emu_data_s emu_data_t;
+ typedef struct emu_out_s
+ {
+- void (*printf)(struct emu_out_s *out, char *format, ...);
++ void (*eprintf)(struct emu_out_s *out, char *format, ...);
+ void *data;
+ } emu_out_t;
+
+diff --git a/lanserv/emu_cmd.c b/lanserv/emu_cmd.c
+index ca44032..54b6f7b 100644
+--- a/lanserv/emu_cmd.c
++++ b/lanserv/emu_cmd.c
+@@ -76,7 +76,7 @@ emu_get_uchar(emu_out_t *out, char **toks, unsigned char *val, char *errstr,
+ if (empty_ok)
+ return ENOSPC;
+ if (errstr)
+- out->printf(out, "**No %s given\n", errstr);
++ out->eprintf(out, "**No %s given\n", errstr);
+ return EINVAL;
+ }
+ if (str[0] == '\'') {
+@@ -86,7 +86,7 @@ emu_get_uchar(emu_out_t *out, char **toks, unsigned char *val, char *errstr,
+ *val = strtoul(str, &tmpstr, 0);
+ if (*tmpstr != '\0') {
+ if (errstr)
+- out->printf(out, "**Invalid %s given\n", errstr);
++ out->eprintf(out, "**Invalid %s given\n", errstr);
+ return EINVAL;
+ }
+
+@@ -108,7 +108,7 @@ emu_get_uchar_with_vals(emu_out_t *out, char **toks,
+ if (empty_ok)
+ return ENOSPC;
+ if (errstr)
+- out->printf(out, "**No %s given\n", errstr);
++ out->eprintf(out, "**No %s given\n", errstr);
+ return EINVAL;
+ }
+ if (str[0] == '\'') {
+@@ -131,7 +131,7 @@ emu_get_uchar_with_vals(emu_out_t *out, char **toks,
+ *val = strtoul(str, &tmpstr, 0);
+ if (*tmpstr != '\0') {
+ if (errstr)
+- out->printf(out, "**Invalid %s given\n", errstr);
++ out->eprintf(out, "**Invalid %s given\n", errstr);
+ return EINVAL;
+ }
+ out:
+@@ -150,12 +150,12 @@ emu_get_bitmask(emu_out_t *out, char **toks, uint16_t *val, char *errstr,
+ if (empty_ok)
+ return ENOSPC;
+ if (errstr)
+- out->printf(out, "**No %s given\n", errstr);
++ out->eprintf(out, "**No %s given\n", errstr);
+ return EINVAL;
+ }
+ if (strlen(str) != size) {
+ if (errstr)
+- out->printf(out, "**invalid number of bits in %s\n", errstr);
++ out->eprintf(out, "**invalid number of bits in %s\n", errstr);
+ return EINVAL;
+ }
+ *val = 0;
+@@ -166,7 +166,7 @@ emu_get_bitmask(emu_out_t *out, char **toks, uint16_t *val, char *errstr,
+ *val |= 1 << i;
+ } else {
+ if (errstr)
+- out->printf(out, "**Invalid bit value '%c' in %s\n", str[j],
++ out->eprintf(out, "**Invalid bit value '%c' in %s\n", str[j],
+ errstr);
+ return EINVAL;
+ }
+@@ -184,13 +184,13 @@ emu_get_uint(emu_out_t *out, char **toks, unsigned int *val, char *errstr)
+ str = mystrtok(NULL, " \t\n", toks);
+ if (!str) {
+ if (errstr)
+- out->printf(out, "**No %s given\n", errstr);
++ out->eprintf(out, "**No %s given\n", errstr);
+ return EINVAL;
+ }
+ *val = strtoul(str, &tmpstr, 0);
+ if (*tmpstr != '\0') {
+ if (errstr)
+- out->printf(out, "**Invalid %s given\n", errstr);
++ out->eprintf(out, "**Invalid %s given\n", errstr);
+ return EINVAL;
+ }
+
+@@ -206,7 +206,7 @@ emu_get_bytes(emu_out_t *out, char **tokptr, unsigned char *data, char *errstr,
+
+ if (!tok) {
+ if (errstr)
+- out->printf(out, "**No %s given\n", errstr);
++ out->eprintf(out, "**No %s given\n", errstr);
+ return EINVAL;
+ }
+ if (*tok == '"') {
+@@ -215,7 +215,7 @@ emu_get_bytes(emu_out_t *out, char **tokptr, unsigned char *data, char *errstr,
+ tok++;
+ end = strlen(tok) - 1;
+ if (tok[end] != '"') {
+- out->printf(out, "**ASCII %s doesn't end in '\"'", errstr);
++ out->eprintf(out, "**ASCII %s doesn't end in '\"'", errstr);
+ return EINVAL;
+ }
+ if (end > (len - 1))
+@@ -228,7 +228,7 @@ emu_get_bytes(emu_out_t *out, char **tokptr, unsigned char *data, char *errstr,
+ char c[3];
+ /* HEX pw */
+ if (strlen(tok) != 32) {
+- out->printf(out, "**HEX %s not 32 HEX characters long", errstr);
++ out->eprintf(out, "**HEX %s not 32 HEX characters long", errstr);
+ return EINVAL;
+ }
+ c[2] = '\0';
+@@ -239,7 +239,7 @@ emu_get_bytes(emu_out_t *out, char **tokptr, unsigned char *data, char *errstr,
+ tok++;
+ data[i] = strtoul(c, &end, 16);
+ if (*end != '\0') {
+- out->printf(out, "**Invalid HEX character in %s", errstr);
++ out->eprintf(out, "**Invalid HEX character in %s", errstr);
+ return -1;
+ }
+ }
+@@ -263,12 +263,12 @@ read_command_file(emu_out_t *out, emu_data_t *emu, const char *command_file)
+
+ buffer = malloc(INPUT_BUFFER_SIZE);
+ if (!buffer) {
+- out->printf(out, "Could not allocate buffer memory\n");
++ out->eprintf(out, "Could not allocate buffer memory\n");
+ rv = ENOMEM;
+ goto out;
+ }
+ while (fgets(buffer+pos, INPUT_BUFFER_SIZE-pos, f)) {
+- out->printf(out, "%s", buffer+pos);
++ out->eprintf(out, "%s", buffer+pos);
+ if (buffer[pos] == '#')
+ continue;
+ pos = strlen(buffer);
+@@ -318,7 +318,7 @@ sel_enable(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_enable_sel(mc, max_records, flags);
+ if (rv)
+- out->printf(out, "**Unable to enable sel, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to enable sel, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -343,9 +343,9 @@ sel_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_add_to_sel(mc, record_type, data, &r);
+ if (rv)
+- out->printf(out, "**Unable to add to sel, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to add to sel, error 0x%x\n", rv);
+ else
+- out->printf(out, "Added record %d\n", r);
++ out->eprintf(out, "Added record %d\n", r);
+ return rv;
+ }
+
+@@ -361,14 +361,14 @@ main_sdr_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ if (rv == ENOSPC)
+ break;
+ if (rv) {
+- out->printf(out, "**Error 0x%x in data byte %d\n", rv, i);
++ out->eprintf(out, "**Error 0x%x in data byte %d\n", rv, i);
+ return rv;
+ }
+ }
+
+ rv = ipmi_mc_add_main_sdr(mc, data, i);
+ if (rv)
+- out->printf(out, "**Unable to add to sdr, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to add to sdr, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -389,14 +389,14 @@ device_sdr_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ if (rv == ENOSPC)
+ break;
+ if (rv) {
+- out->printf(out, "**Error 0x%x in data byte %d\n", rv, i);
++ out->eprintf(out, "**Error 0x%x in data byte %d\n", rv, i);
+ return rv;
+ }
+ }
+
+ rv = ipmi_mc_add_device_sdr(mc, lun, data, i);
+ if (rv)
+- out->printf(out, "**Unable to add to sdr, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to add to sdr, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -439,7 +439,7 @@ sensor_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ while (tok) {
+ if (strcmp(tok, "poll") == 0) {
+ if (handler) {
+- out->printf(out, "**poll given twice in sensor\n", tok);
++ out->eprintf(out, "**poll given twice in sensor\n", tok);
+ return -1;
+ }
+
+@@ -449,27 +449,27 @@ sensor_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ tok = mystrtok(NULL, " \t\n", toks);
+ if (!tok) {
+- out->printf(out, "**No polled sensor handler given\n", tok);
++ out->eprintf(out, "**No polled sensor handler given\n", tok);
+ return -1;
+ }
+
+ handler = ipmi_sensor_find_handler(tok);
+ if (!handler) {
+- out->printf(out, "**Invalid sensor handler: %s\n", tok);
++ out->eprintf(out, "**Invalid sensor handler: %s\n", tok);
+ return -1;
+ }
+
+ rv = handler->init(mc, lun, num, toks, handler->cb_data, &rcb_data,
+ &errstr);
+ if (rv) {
+- out->printf(out, "**Error initializing sensor handler: %s\n",
++ out->eprintf(out, "**Error initializing sensor handler: %s\n",
+ errstr);
+ return rv;
+ }
+ } else if (strcmp(tok, "event-only") == 0) {
+ event_only = 1;
+ } else {
+- out->printf(out, "**Unknown sensor option: %s\n", tok);
++ out->eprintf(out, "**Unknown sensor option: %s\n", tok);
+ return -1;
+ }
+
+@@ -477,7 +477,7 @@ sensor_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ }
+
+ if (handler && event_only) {
+- out->printf(out, "**An event-only sensor cannot be polled\n");
++ out->eprintf(out, "**An event-only sensor cannot be polled\n");
+ return -1;
+ }
+
+@@ -488,7 +488,7 @@ sensor_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ if (!rv && handler->postinit) {
+ rv = handler->postinit(rcb_data, &errstr);
+ if (rv) {
+- out->printf(out, "**Error in sensor handler postinit: %s\n",
++ out->eprintf(out, "**Error in sensor handler postinit: %s\n",
+ errstr);
+ }
+ }
+@@ -496,7 +496,7 @@ sensor_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ rv = ipmi_mc_add_sensor(mc, lun, num, type, code, event_only);
+ }
+ if (rv)
+- out->printf(out, "**Unable to add to sensor, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to add to sensor, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -532,7 +532,7 @@ sensor_set_bit(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_sensor_set_bit(mc, lun, num, bit, value, gen_event);
+ if (rv)
+- out->printf(out, "**Unable to set sensor bit, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set sensor bit, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -563,7 +563,7 @@ sensor_set_bit_clr_rest(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **
+
+ rv = ipmi_mc_sensor_set_bit_clr_rest(mc, lun, num, bit, gen_event);
+ if (rv)
+- out->printf(out, "**Unable to set sensor bit, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set sensor bit, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -594,7 +594,7 @@ sensor_set_value(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_sensor_set_value(mc, lun, num, value, gen_event);
+ if (rv)
+- out->printf(out, "**Unable to set sensor value, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set sensor value, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -637,7 +637,7 @@ sensor_set_hysteresis(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **to
+ rv = ipmi_mc_sensor_set_hysteresis(mc, lun, num, support, positive,
+ negative);
+ if (rv)
+- out->printf(out, "**Unable to set sensor hysteresis, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set sensor hysteresis, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -682,7 +682,7 @@ sensor_set_threshold(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **tok
+ rv = ipmi_mc_sensor_set_threshold(mc, lun, num, support,
+ enabled, 1, thresholds);
+ if (rv)
+- out->printf(out, "**Unable to set sensor thresholds, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set sensor thresholds, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -759,7 +759,7 @@ sensor_set_event_support(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char *
+ assert_support, deassert_support,
+ assert_enabled, deassert_enabled);
+ if (rv)
+- out->printf(out, "**Unable to set sensor thresholds, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set sensor thresholds, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -819,7 +819,7 @@ mc_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ else if (strcmp("persist_sdr", tok) == 0)
+ flags |= IPMI_MC_PERSIST_SDR;
+ else {
+- out->printf(out, "**Invalid MC flag: %s\n", tok);
++ out->eprintf(out, "**Invalid MC flag: %s\n", tok);
+ return -1;
+ }
+ }
+@@ -833,7 +833,7 @@ mc_add(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ device_revision, major_fw_rev, minor_fw_rev,
+ device_support, mfg_id, product_id, flags);
+ if (rv)
+- out->printf(out, "**Unable to add the MC, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to add the MC, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -890,7 +890,7 @@ mc_set_power(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_set_power(mc, power, gen_int);
+ if (rv)
+- out->printf(out, "**Unable to set power, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set power, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -916,7 +916,7 @@ mc_add_fru_data(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ tok = mystrtok(NULL, " \t\n", toks);
+ if (!tok) {
+- out->printf(out, "**No FRU data type given");
++ out->eprintf(out, "**No FRU data type given");
+ return -1;
+ }
+ if (strcmp(tok, "file") == 0) {
+@@ -929,13 +929,13 @@ mc_add_fru_data(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = get_delim_str(toks, &frufn, &errstr);
+ if (rv) {
+- out->printf(out, "**Error with FRU filename: %d", strerror(rv));
++ out->eprintf(out, "**Error with FRU filename: %d", strerror(rv));
+ return rv;
+ }
+ rv = ipmi_mc_add_fru_file(mc, devid, length, file_offset,
+ (void *) frufn);
+ if (rv)
+- out->printf(out, "**Unable to add FRU file, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to add FRU file, error 0x%x\n", rv);
+
+ } else if (strcmp(tok, "data") == 0) {
+ for (i=0; i<length; i++) {
+@@ -943,14 +943,14 @@ mc_add_fru_data(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ if (rv == ENOSPC)
+ break;
+ if (rv) {
+- out->printf(out, "**Error 0x%x in data byte %d\n", rv, i);
++ out->eprintf(out, "**Error 0x%x in data byte %d\n", rv, i);
+ return rv;
+ }
+ }
+
+ rv = emu_get_uchar(out, toks, &data[i], "data byte", 1);
+ if (rv != ENOSPC) {
+- out->printf(out, "**Error: input data too long for FRU\n", rv, i);
++ out->eprintf(out, "**Error: input data too long for FRU\n", rv, i);
+ return EINVAL;
+ }
+
+@@ -958,9 +958,9 @@ mc_add_fru_data(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_add_fru_data(mc, devid, length, NULL, data);
+ if (rv)
+- out->printf(out, "**Unable to add FRU data, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to add FRU data, error 0x%x\n", rv);
+ } else {
+- out->printf(out, "**FRU type not given, need file or data\n");
++ out->eprintf(out, "**FRU type not given, need file or data\n");
+ rv = EINVAL;
+ }
+ return rv;
+@@ -981,28 +981,28 @@ mc_dump_fru_data(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_get_fru_data_len(mc, devid, &length);
+ if (rv) {
+- out->printf(out, "**Unable to dump FRU data, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to dump FRU data, error 0x%x\n", rv);
+ goto out;
+ }
+
+ data = malloc(length);
+ if (!data) {
+- out->printf(out, "**Unable to dump FRU data, out of memory\n", rv);
++ out->eprintf(out, "**Unable to dump FRU data, out of memory\n", rv);
+ goto out;
+ }
+
+ rv = ipmi_mc_get_fru_data(mc, devid, length, data);
+ if (rv) {
+- out->printf(out, "**Unable to dump FRU data, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to dump FRU data, error 0x%x\n", rv);
+ goto out;
+ }
+
+ for (i=0; i<length; i++) {
+ if ((i > 0) && ((i % 8) == 0))
+- out->printf(out, "\n");
+- out->printf(out, " 0x%2.2x", data[i]);
++ out->eprintf(out, "\n");
++ out->eprintf(out, " 0x%2.2x", data[i]);
+ }
+- out->printf(out, "\n");
++ out->eprintf(out, "\n");
+
+ out:
+ if (data)
+@@ -1021,7 +1021,7 @@ mc_setbmc(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ return rv;
+ rv = ipmi_emu_set_bmc_mc(emu, ipmb);
+ if (rv)
+- out->printf(out, "**Invalid IPMB address\n");
++ out->eprintf(out, "**Invalid IPMB address\n");
+ return rv;
+ }
+
+@@ -1032,7 +1032,7 @@ atca_enable(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_emu_atca_enable(emu);
+ if (rv)
+- out->printf(out, "**Unable to enable ATCA mode, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to enable ATCA mode, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -1056,7 +1056,7 @@ atca_set_site(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_emu_atca_set_site(emu, hw_address, site_type, site_number);
+ if (rv)
+- out->printf(out, "**Unable to set site type, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set site type, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -1072,7 +1072,7 @@ mc_set_num_leds(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ rv = ipmi_mc_set_num_leds(mc, count);
+ if (rv)
+- out->printf(out, "**Unable to set number of LEDs, error 0x%x\n", rv);
++ out->eprintf(out, "**Unable to set number of LEDs, error 0x%x\n", rv);
+ return rv;
+ }
+
+@@ -1085,7 +1085,7 @@ read_cmds(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ err = get_delim_str(toks, &filename, &errstr);
+ if (err) {
+- out->printf(out, "Could not get include filename: %s\n", errstr);
++ out->eprintf(out, "Could not get include filename: %s\n", errstr);
+ return err;
+ }
+
+@@ -1097,7 +1097,7 @@ read_cmds(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ {
+ char *nf = malloc(strlen(BASE_CONF_STR) + strlen(filename) + 2);
+ if (!nf) {
+- out->printf(out, "Out of memory in include\n", errstr);
++ out->eprintf(out, "Out of memory in include\n", errstr);
+ goto out_err;
+ }
+ strcpy(nf, BASE_CONF_STR);
+@@ -1107,7 +1107,7 @@ read_cmds(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ filename = nf;
+ err = read_command_file(out, emu, filename);
+ if (err) {
+- out->printf(out, "Could not read include file %s\n", filename);
++ out->eprintf(out, "Could not read include file %s\n", filename);
+ }
+ }
+
+@@ -1147,7 +1147,7 @@ debug_cmd(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ } else if (strcmp(tok, "sol") == 0) {
+ level |= DEBUG_SOL;
+ } else {
+- out->printf(out, "Invalid debug level '%s', options are 'raw' and 'msg'\n",
++ out->eprintf(out, "Invalid debug level '%s', options are 'raw' and 'msg'\n",
+ tok);
+ return EINVAL;
+ }
+@@ -1168,7 +1168,7 @@ persist_cmd(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+ } else if (strcmp(tok, "off") == 0) {
+ persist_enable = 0;
+ } else {
+- out->printf(out, "Invalid persist vale '%s', options are 'on' and 'off'\n",
++ out->eprintf(out, "Invalid persist vale '%s', options are 'on' and 'off'\n",
+ tok);
+ return EINVAL;
+ }
+@@ -1194,18 +1194,18 @@ do_define(emu_out_t *out, emu_data_t *emu, lmc_data_t *mc, char **toks)
+
+ name = mystrtok(NULL, " \t\n", toks);
+ if (!name) {
+- out->printf(out, "No variable name given for define\n");
++ out->eprintf(out, "No variable name given for define\n");
+ return EINVAL;
+ }
+ err = get_delim_str(toks, &value, &errstr);
+ if (err) {
+- out->printf(out, "Could not get variable %s value: %s\n", name, errstr);
++ out->eprintf(out, "Could not get variable %s value: %s\n", name, errstr);
+ return err;
+ }
+ err = add_variable(name, value);
+ if (err) {
+ free(value);
+- out->printf(out, "Out of memory setting variable %s\n", name);
++ out->eprintf(out, "Out of memory setting variable %s\n", name);
+ return err;
+ }
+ return 0;
+@@ -1301,7 +1301,7 @@ ipmi_emu_cmd(emu_out_t *out, emu_data_t *emu, char *cmd_str)
+ return rv;
+ rv = ipmi_emu_get_mc_by_addr(emu, ipmb, &mc);
+ if (rv) {
+- out->printf(out, "**Invalid MC address\n");
++ out->eprintf(out, "**Invalid MC address\n");
+ return rv;
+ }
+ }
+@@ -1312,7 +1312,7 @@ ipmi_emu_cmd(emu_out_t *out, emu_data_t *emu, char *cmd_str)
+ }
+ }
+
+- out->printf(out, "**Unknown command: %s\n", cmd);
++ out->eprintf(out, "**Unknown command: %s\n", cmd);
+
+ out:
+ return rv;
+diff --git a/lanserv/ipmi_sim.c b/lanserv/ipmi_sim.c
+index 9472cce..30c4f27 100644
+--- a/lanserv/ipmi_sim.c
++++ b/lanserv/ipmi_sim.c
+@@ -607,8 +607,8 @@ isim_log(sys_data_t *sys, int logtype, msg_t *msg, const char *format,
+
+ con = data->consoles;
+ while (con) {
+- con->out.printf(&con->out, "%s", str);
+- con->out.printf(&con->out, "\n");
++ con->out.eprintf(&con->out, "%s", str);
++ con->out.eprintf(&con->out, "\n");
+ con = con->next;
+ }
+ #if HAVE_SYSLOG
+@@ -956,7 +956,7 @@ console_bind_ready(int fd, void *cb_data, os_hnd_fd_id_t *id)
+ newcon->shutdown_on_close = 0;
+ newcon->telnet = 1;
+ newcon->tn_pos = 0;
+- newcon->out.printf = emu_printf;
++ newcon->out.eprintf = emu_printf;
+ newcon->out.data = newcon;
+
+ setsockopt(rv, IPPROTO_TCP, TCP_NODELAY, (char *)&val, sizeof(val));
+@@ -1463,10 +1463,10 @@ main(int argc, const char *argv[])
+ stdio_console.telnet = 0;
+ stdio_console.tn_pos = 0;
+ if (nostdio) {
+- stdio_console.out.printf = dummy_printf;
++ stdio_console.out.eprintf = dummy_printf;
+ stdio_console.out.data = &stdio_console;
+ } else {
+- stdio_console.out.printf = emu_printf;
++ stdio_console.out.eprintf = emu_printf;
+ stdio_console.out.data = &stdio_console;
+ }
+ stdio_console.next = NULL;
+--
+2.14.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/do-not-install-pyc-and-pyo.patch b/meta-openembedded/meta-networking/recipes-support/openipmi/files/do-not-install-pyc-and-pyo.patch
new file mode 100644
index 000000000..d4e02be45
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/do-not-install-pyc-and-pyo.patch
@@ -0,0 +1,25 @@
+Do not install pyc and pyo for python module
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ swig/python/Makefile.am | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/swig/python/Makefile.am b/swig/python/Makefile.am
+index da95a81..97a62bf 100644
+--- a/swig/python/Makefile.am
++++ b/swig/python/Makefile.am
+@@ -33,8 +33,6 @@ CLEANFILES = OpenIPMI_wrap.c OpenIPMI.py OpenIPMI.pyo OpenIPMI.pyc
+ install-exec-local: _OpenIPMI.la OpenIPMI.py OpenIPMI.pyc OpenIPMI.pyo
+ $(INSTALL) -d $(DESTDIR)$(PYTHON_INSTALL_DIR)
+ $(INSTALL_DATA) OpenIPMI.py "$(DESTDIR)$(PYTHON_INSTALL_DIR)"
+- $(INSTALL_DATA) OpenIPMI.pyc "$(DESTDIR)$(PYTHON_INSTALL_DIR)"
+- $(INSTALL_DATA) OpenIPMI.pyo "$(DESTDIR)$(PYTHON_INSTALL_DIR)"
+ if test "x$(PYTHON_GUI_DIR)" = "xopenipmigui"; then \
+ $(INSTALL) -d $(DESTDIR)$(bindir); \
+ $(INSTALL_SCRIPT) $(srcdir)/openipmigui.py "$(DESTDIR)$(bindir)/openipmigui";\
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/fix-symlink-install-error-in-cmdlang.patch b/meta-openembedded/meta-networking/recipes-support/openipmi/files/fix-symlink-install-error-in-cmdlang.patch
new file mode 100644
index 000000000..449142fcf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/fix-symlink-install-error-in-cmdlang.patch
@@ -0,0 +1,22 @@
+Author: Aws Ismail <aws.ismail@windriver.com>
+Date: Thu Jun 7 16:00:13 2012 -0400
+
+ This patch fixes the error during the install stage when
+ creating a symbolic link for opeipmish in openipmi/cmdlang
+
+ Upstream-Status: Pending
+
+ Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+
+Index: OpenIPMI-2.0.24/cmdlang/Makefile.am
+===================================================================
+--- OpenIPMI-2.0.24.orig/cmdlang/Makefile.am
++++ OpenIPMI-2.0.24/cmdlang/Makefile.am
+@@ -35,6 +35,7 @@ openipmish_LDADD = libOpenIPMIcmdlang.l
+ # compatability.
+ install-data-local:
+ rm -f $(DESTDIR)$(bindir)/ipmish
++ mkdir -p $(DESTDIR)$(bindir)/
+ $(LN_S) openipmish $(DESTDIR)$(bindir)/ipmish
+
+ uninstall-local:
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/include_sys_types.patch b/meta-openembedded/meta-networking/recipes-support/openipmi/files/include_sys_types.patch
new file mode 100644
index 000000000..082511a67
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/include_sys_types.patch
@@ -0,0 +1,17 @@
+include sys/types.h for u_int32_t
+
+ui.c:340:5: error: unknown type name 'u_int32_t'; did you mean 'uint32_t'?
+ u_int32_t addr;
+ ^~~~~~~~~
+Index: OpenIPMI-2.0.24/ui/ui.c
+===================================================================
+--- OpenIPMI-2.0.24.orig/ui/ui.c
++++ OpenIPMI-2.0.24/ui/ui.c
+@@ -42,6 +42,7 @@
+ #include <fcntl.h>
+ #include <time.h>
+ #include <sys/time.h>
++#include <sys/types.h>
+ #include <ctype.h>
+
+ #include <OpenIPMI/ipmi_err.h>
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi-init-fix-the-arguments.patch b/meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi-init-fix-the-arguments.patch
new file mode 100644
index 000000000..51a398ba5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi-init-fix-the-arguments.patch
@@ -0,0 +1,41 @@
+Subject: [PATCH] ipmi-init: fix the arguments
+
+The functions success/failure/warning defined in /etc/init.d/functions
+(provided by initscripts) only accepts numeric argument as return code,
+not a string.
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ ipmi.init | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ipmi.init b/ipmi.init
+index 2ebcd94..d8161c5 100644
+--- a/ipmi.init
++++ b/ipmi.init
+@@ -45,17 +45,17 @@ elif [ -r /etc/init.d/functions ]; then
+ case "$ACTION" in
+ success)
+ echo -n $*
+- success "$*"
++ success 0
+ echo
+ ;;
+ failure)
+ echo -n $*
+- failure "$*"
++ failure 1
+ echo
+ ;;
+ warning)
+ echo -n $*
+- warning "$*"
++ warning 0
+ echo
+ ;;
+ *)
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi.service b/meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi.service
new file mode 100644
index 000000000..6fe137819
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/ipmi.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=IPMI Driver
+After=network.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=@LIBEXECDIR@/openipmi-helper start
+ExecStop=@LIBEXECDIR@/openipmi-helper stop-all
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-helper b/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-helper
new file mode 100755
index 000000000..4cebfb9c6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-helper
@@ -0,0 +1,512 @@
+#!/bin/sh
+#############################################################################
+#
+# ipmi: OpenIPMI Driver helper script
+#
+# Authors: Jan Safranek <jsafrane@redhat.com>
+#
+# Based on IPMI init script by:
+# Matt Domsch <Matt_Domsch@dell.com>
+# Chris Poblete <Chris_Poblete@dell.com>
+#
+# Status return code bits
+# no bits set = no errors
+# bit 0 set = minimum modules aren't loaded
+# bit 1 set = requested feature module isn't loaded
+# bit 2 set = /dev/ipmi0 (or /dev/imb if using that instead) doesn't exist
+# bit 3 set = /dev/watchdog doesn't exist
+# bit 4 set = lockfile doesn't exist
+# bit 5 set = modules are loaded even when asked to be unloaded
+
+CONFIGFILE=/etc/sysconfig/ipmi
+# source config info
+[ -r ${CONFIGFILE} ] && . ${CONFIGFILE}
+
+#############################################################################
+# GLOBALS
+#############################################################################
+MODULE_NAME="ipmi"
+INTF_NUM=0
+
+IPMI_SMB_MODULE_NAME="ipmi_smb"
+IPMI_SI_MODULE_NAME="ipmi_si"
+kernel=`uname -r | cut -d. -f1-2`
+if [ "${kernel}" == "2.4" ]; then
+ IPMI_SMB_MODULE_NAME="ipmi_smb_intf"
+ IPMI_SI_MODULE_NAME="ipmi_si_drv"
+fi
+
+MODULES_INTERFACES=""
+[ "${DEV_IPMI}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_devintf"
+[ "${IPMI_IMB}" = "yes" ] && MODULES_INTERFACES="${MODULES_INTERFACES} ipmi_imb"
+
+MODULES_FEATURES=""
+[ "${IPMI_WATCHDOG}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_watchdog"
+[ "${IPMI_POWEROFF}" = "yes" ] && MODULES_FEATURES="${MODULES_FEATURES} ipmi_poweroff"
+
+MODULES_HW=""
+[ "${IPMI_SI}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SI_MODULE_NAME}"
+[ "${IPMI_SMB}" = "yes" ] && MODULES_HW="${MODULES_HW} ${IPMI_SMB_MODULE_NAME}"
+
+MODULES_BASE="ipmi_msghandler"
+MODULES="${MODULES_INTERFACES} ${MODULES_FEATURES} ${MODULES_HW} ${MODULES_BASE}"
+
+RETVAL=0
+LOCKFILE=/var/lock/subsys/ipmi
+DEV_IPMI_TIMEOUT=150
+
+UDEV_EXISTS=0
+if [ -e /sbin/udev -o -e /sbin/udevd ]; then
+ UDEV_EXISTS=1
+fi
+
+#############################################################################
+# NOTES:
+# * /dev/ipmi0 is unconditionally deleted here on ipmi_devintf unload,
+# because SLES9 and RHEL4 kernels don't send a message for udev to delete
+# it for us.
+#
+#############################################################################
+
+modules_loaded_verbose()
+{
+ OnePlusLoaded=0
+ OnePlusUnloaded=0
+ for m in $@; do
+ if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
+ echo "$m module loaded."
+ OnePlusLoaded=1
+ else
+ echo "$m module not loaded."
+ OnePlusUnloaded=1
+ fi
+ done
+}
+
+modules_loaded()
+{
+ OnePlusLoaded=0
+ OnePlusUnloaded=0
+ for m in $@; do
+ if /sbin/lsmod | grep $m >/dev/null 2>&1 ; then
+ OnePlusLoaded=1
+ else
+ OnePlusUnloaded=1
+ fi
+ done
+}
+
+device_node_exists ()
+{
+ if [ -e "$1" ]; then
+ echo "$1 exists."
+ return 1
+ fi
+ echo "$1 does not exist."
+ return 0
+}
+
+minimum_modules_loaded()
+{
+ rc_base=1
+ rc_hw=1
+ modules_loaded_verbose "${MODULES_BASE}"
+ [ ${OnePlusLoaded} -eq 0 ] && rc_base=0
+
+ modules_loaded_verbose "${MODULES_HW}"
+ [ ${OnePlusLoaded} -eq 0 ] && rc_hw=0
+
+ return $((rc_base && rc_hw))
+}
+
+#############################################################################
+
+load_si()
+{
+ if [ "${IPMI_SI}" = "yes" ]; then
+ modprobe ${IPMI_SI_MODULE_NAME} > /dev/null 2>&1
+ modules_loaded ${IPMI_SI_MODULE_NAME}
+ [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
+ fi
+}
+
+load_smb()
+{
+ if [ "${IPMI_SMB}" = "yes" ]; then
+ modprobe ${IPMI_SMB_MODULE_NAME} > /dev/null 2>&1
+ modules_loaded ${IPMI_SMB_MODULE_NAME}
+ [ ${OnePlusLoaded} -ne 1 ] && RETVAL=$((RETVAL | 1))
+ fi
+}
+
+load_hw_modules()
+{
+ load_si
+ load_smb
+}
+
+start_watchdog_common()
+{
+ load_hw_modules
+ modprobe ipmi_watchdog ${IPMI_WATCHDOG_OPTIONS} > /dev/null 2>&1
+ modules_loaded ipmi_watchdog
+ [ ${OnePlusUnloaded} -ne 0 ] &&
+ RETVAL=$((RETVAL | 2)) &&
+ echo "Watchdog startup failed: cannot load ipmi_watchdog module" &&
+ return
+ if [ ${UDEV_EXISTS} -eq 0 -a ! -e /dev/watchdog ]; then
+ mknod -m 0600 /dev/watchdog c 10 130
+ [ $? -ne 0 ] &&
+ RETVAL=$((RETVAL | 8)) &&
+ echo "Watchdog startup failed: cannot create /dev/watchdog" &&
+ return
+ fi
+}
+
+start_watchdog_quiet()
+{
+ [ "${IPMI_WATCHDOG}" != "yes" ] &&
+ return
+ start_watchdog_common
+}
+
+start_watchdog()
+{
+ [ "${IPMI_WATCHDOG}" != "yes" ] &&
+ RETVAL=$((RETVAL | 2)) &&
+ echo "Watchdog not configured" &&
+ return
+ start_watchdog_common
+}
+
+stop_watchdog()
+{
+ modprobe -q -r ipmi_watchdog > /dev/null 2>&1
+ modules_loaded ipmi_watchdog
+ if [ ${OnePlusLoaded} -ne 0 ]; then
+ RETVAL=$((RETVAL | 32))
+ echo "Watchog shutdown failed: cannot unload ipmi_watchdog module"
+ else
+ if [ "${IPMI_WATCHDOG}" = "yes" ]; then
+ [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
+ fi
+ fi
+}
+
+stop_watchdog_quiet()
+{
+ modprobe -q -r ipmi_watchdog > /dev/null 2>&1
+ modules_loaded ipmi_watchdog
+ if [ ${OnePlusLoaded} -ne 0 ]; then
+ RETVAL=$((RETVAL | 32))
+ else
+ if [ "${IPMI_WATCHDOG}" = "yes" ]; then
+ [ ${UDEV_EXISTS} -eq 0 ] && rm -f /dev/watchdog
+ fi
+ fi
+}
+
+start_powercontrol_common()
+{
+ local poweroff_opts=""
+ load_hw_modules
+ if [ "${IPMI_POWERCYCLE}" == "yes" ]; then
+ modinfo ipmi_poweroff 2>/dev/null | grep poweroff_control > /dev/null 2>&1 && \
+ poweroff_opts="poweroff_control=2"
+ modinfo ipmi_poweroff 2>/dev/null | grep poweroff_powercycle > /dev/null 2>&1 && \
+ poweroff_opts="poweroff_powercycle=1"
+ fi
+ modprobe ipmi_poweroff "${poweroff_opts}" > /dev/null 2>&1
+ modules_loaded ipmi_poweroff
+ [ ${OnePlusUnloaded} -ne 0 ] &&
+ RETVAL=$((RETVAL | 2)) &&
+ echo "Powercontroll startup failed: cannot load ipmi_poweroff module" &&
+ return
+}
+
+start_powercontrol_quiet()
+{
+ [ "${IPMI_POWEROFF}" != "yes" ] &&
+ return
+ start_powercontrol_common
+}
+
+start_powercontrol()
+{
+ [ "${IPMI_POWEROFF}" != "yes" ] &&
+ RETVAL=$((RETVAL | 2)) &&
+ echo "Powercontroll not configured" &&
+ return
+ start_powercontrol_common
+}
+
+stop_powercontrol()
+{
+ modprobe -q -r ipmi_poweroff > /dev/null 2>&1
+ modules_loaded ipmi_poweroff
+ if [ ${OnePlusLoaded} -ne 0 ]; then
+ RETVAL=$((RETVAL | 32))
+ echo "Powercontroll shutdown failed: cannot unload ipmi_poweroff module"
+ fi
+}
+
+stop_powercontrol_quiet()
+{
+ modprobe -q -r ipmi_poweroff > /dev/null 2>&1
+ modules_loaded ipmi_poweroff
+ [ ${OnePlusLoaded} -ne 0 ] && RETVAL=$((RETVAL | 32))
+}
+
+#############################################################################
+unload_all_ipmi_modules()
+{
+ stop_watchdog_quiet
+ stop_powercontrol_quiet
+ for m in ${MODULES}; do
+ modprobe -q -r ${m} > /dev/null 2>&1
+ done
+ # delete interface node ONLY if ipmi_devintf is unloaded
+ [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
+ rm -f "/dev/ipmi${INTF_NUM}"
+}
+
+unload_ipmi_modules_leave_features()
+{
+ for m in ${MODULES_INTERFACES}; do
+ modprobe -q -r ${m} > /dev/null 2>&1
+ done
+ # delete interface node ONLY if ipmi_devintf is unloaded
+ [ `lsmod | grep -c "ipmi_devintf"` -eq 0 ] &&
+ rm -f "/dev/ipmi${INTF_NUM}"
+ lsmod | egrep -q "ipmi_(poweroff|watchdog)" > /dev/null 2>&1
+ if [ "$?" -ne "0" ]; then
+ stop_watchdog_quiet
+ stop_powercontrol_quiet
+ for m in ${MODULES}; do
+ modprobe -q -r ${m} > /dev/null 2>&1
+ done
+ fi
+}
+
+#############################################################################
+load_ipmi_modules ()
+{
+ local locdelay
+ modprobe ipmi_msghandler > /dev/null 2>&1
+ modules_loaded ipmi_msghandler
+ [ ${OnePlusLoaded} -ne 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return
+ load_hw_modules
+ [ $((RETVAL & 1)) -eq 1 ] && unload_all_ipmi_modules && RETVAL=$((RETVAL | 1)) && return
+
+ if [ "${DEV_IPMI}" = "yes" ]; then
+ modprobe ipmi_devintf > /dev/null 2>&1
+ modules_loaded ipmi_devintf
+ RETVAL=$((RETVAL & ~2))
+ [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+ if [ ${OnePlusLoaded} -eq 1 ]; then
+ if [ ${UDEV_EXISTS} -eq 0 ]; then
+ DEVMAJOR=`cat /proc/devices | awk '/ipmidev/{print $1}'`
+ rm -f /dev/ipmi${INTF_NUM}
+ mknod -m 0600 /dev/ipmi${INTF_NUM} c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
+ fi
+
+ # udev can take several seconds to create /dev/ipmi0,
+ # but it happens asynchronously, so delay here
+ locdelay=${DEV_IPMI_TIMEOUT}
+ while [ ! -e /dev/ipmi${INTF_NUM} -a ${locdelay} -gt 0 ]; do
+ locdelay=$((locdelay - 1))
+ sleep 0.1
+ done
+ fi
+ fi
+
+ if [ "${IPMI_IMB}" = "yes" ]; then
+ modprobe ipmi_imb > /dev/null 2>&1
+ modules_loaded ipmi_imb
+ RETVAL=$((RETVAL & ~2))
+ [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+ if [ ${OnePlusLoaded} -eq 1 ]; then
+ DEVMAJOR=`cat /proc/devices | awk '/imb/{print $1}'`
+ rm -f /dev/imb
+ mknod -m 0600 /dev/imb c ${DEVMAJOR} 0 || RETVAL=$((RETVAL | 4))
+ fi
+ fi
+
+ # Per Corey Minyard, essentially no one uses ipmi_radisys
+ # and we don't want to encourage its further use
+ # so it won't be handled here.
+ return
+}
+
+#############################################################################
+start()
+{
+ load_ipmi_modules
+ if [ ${RETVAL} -eq 0 ]; then
+ touch ${LOCKFILE}
+ else
+ if [ $((RETVAL & 1)) -eq 1 ]; then
+ echo "Startup failed."
+ else
+ touch ${LOCKFILE} && echo "Warning!?"
+ fi
+ fi
+ start_watchdog_quiet
+ start_powercontrol_quiet
+}
+
+#############################################################################
+stop()
+{
+ unload_ipmi_modules_leave_features
+ modules_loaded ${MODULES_INTERFACES}
+ if [ ${OnePlusLoaded} -ne 0 ]; then
+ RETVAL=$((RETVAL | 32))
+ echo "Shutdown failed, something may be in use"
+ else
+ rm -f ${LOCKFILE}
+ fi
+}
+
+stop_all()
+{
+ unload_all_ipmi_modules
+ modules_loaded ${MODULES}
+ if [ ${OnePlusLoaded} -ne 0 ]; then
+ RETVAL=$((RETVAL | 32))
+ echo "Shutdown failed, something may be in use"
+ else
+ rm -f ${LOCKFILE}
+ fi
+}
+
+#############################################################################
+restart()
+{
+ stop_all
+ RETVAL=0
+ start
+}
+
+#############################################################################
+
+reload()
+{
+ stop_all
+ RETVAL=0
+ start
+}
+
+#############################################################################
+
+status_all()
+{
+ minimum_modules_loaded
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+
+ modules_loaded_verbose ${MODULES_FEATURES} ${MODULES_INTERFACES}
+ [ ${OnePlusUnloaded} -ne 0 ] && RETVAL=$((RETVAL | 2))
+
+ if [ "${DEV_IPMI}" = "yes" ]; then
+ device_node_exists /dev/ipmi${INTF_NUM}
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+ fi
+
+ if [ "${IPMI_IMB}" = "yes" ]; then
+ device_node_exists /dev/imb
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+ fi
+
+ if [ "${IPMI_WATCHDOG}" = "yes" ]; then
+ device_node_exists /dev/watchdog
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
+ fi
+
+ [ ! -e ${LOCKFILE} ] && RETVAL=$((RETVAL | 16))
+}
+
+status()
+{
+ minimum_modules_loaded
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+
+ if [ "${DEV_IPMI}" = "yes" ]; then
+ modules_loaded_verbose ipmi_devintf
+ [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+
+ device_node_exists /dev/ipmi${INTF_NUM}
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+ fi
+
+ if [ "${IPMI_IMB}" = "yes" ]; then
+ device_node_exists /dev/imb
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 4))
+ fi
+}
+
+status_watchdog()
+{
+ minimum_modules_loaded
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+
+ modules_loaded_verbose ipmi_watchdog
+ [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+
+ device_node_exists /dev/watchdog
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 8))
+}
+
+status_powercontrol()
+{
+ minimum_modules_loaded
+ [ $? -eq 0 ] && RETVAL=$((RETVAL | 1))
+
+ modules_loaded_verbose ipmi_powercontrol
+ [ ${OnePlusLoaded} -eq 0 ] && RETVAL=$((RETVAL | 2))
+}
+
+#############################################################################
+usage ()
+{
+ echo $"Usage: $0 {start|stop|status" 1>&2
+ echo $" restart|condrestart|try-restart|reload|force-reload" 1>&2
+ echo $" start-watchdog|stop-watchdog|status-watchdog" 1>&2
+ echo $" start-powercontrol|stop-powercontrol|status-powercontrol" 1>&2
+ echo $" stop-all|status-all}" 1>&2
+ RETVAL=2
+}
+
+condrestart ()
+{
+ [ -e ${LOCKFILE} ] && restart
+}
+
+#############################################################################
+# MAIN
+#############################################################################
+case "$1" in
+ start) start ;;
+ stop) stop ;;
+ restart) restart ;;
+ force-reload) reload ;;
+ reload) reload ;;
+ status) status ;;
+ status-all) status_all ;;
+ condrestart) condrestart ;;
+ try-restart) condrestart ;;
+ start-watchdog) start_watchdog ;;
+ stop-watchdog) stop_watchdog ;;
+ status-watchdog) status_watchdog ;;
+ start-powercontrol) start_powercontrol ;;
+ stop-powercontrol) stop_powercontrol ;;
+ status-powercontrol) status_powercontrol ;;
+ stop-all) stop_all ;;
+ *) usage ;;
+esac
+
+exit ${RETVAL}
+
+#############################################################################
+# end of file
+#############################################################################
+
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-no-openipmigui-man.patch b/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-no-openipmigui-man.patch
new file mode 100644
index 000000000..1fa68f9ba
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-no-openipmigui-man.patch
@@ -0,0 +1,26 @@
+Author: Aws Ismail <aws.ismail@windriver.com>
+Date: Thu Jun 7 12:28:34 2012 -0400
+
+ This patch was carried over from WRL4.3 (openipmi v2.0.16)
+
+ It was updated for openipmi v2.0.19
+
+ Disable making openipmigui man page since we don't need it
+
+ Upstream-Status: Pending
+
+ Signed-off-by: Aws Ismail <aws.ismail@windriver.com>
+ Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/man/Makefile.am b/man/Makefile.am
+index 632f55b..5ce79f5 100644
+--- a/man/Makefile.am
++++ b/man/Makefile.am
+@@ -1,6 +1,6 @@
+
+ man_MANS = ipmi_ui.1 openipmicmd.1 openipmish.1 ipmi_cmdlang.7 \
+- openipmigui.1 openipmi_conparms.7 solterm.1 rmcp_ping.1 \
++ openipmi_conparms.7 solterm.1 rmcp_ping.1 \
+ openipmi_eventd.1
+
+ EXTRA_DIST = $(man_MANS)
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-remove-host-path-from-la_LDFLAGS.patch b/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-remove-host-path-from-la_LDFLAGS.patch
new file mode 100644
index 000000000..83485a9e6
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/files/openipmi-remove-host-path-from-la_LDFLAGS.patch
@@ -0,0 +1,50 @@
+From aa0dc0783a6ff5fb56c914b640836223e3c192bb Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Mon, 29 Dec 2014 18:16:04 +0800
+Subject: [PATCH] remove host path from la_LDFLAGS
+
+Upstream-Status: Inappropriate [ cross compile specific ]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ cmdlang/Makefile.am | 2 +-
+ glib/Makefile.am | 4 ++--
+ tcl/Makefile.am | 2 +-
+ unix/Makefile.am | 4 ++--
+ 4 files changed, 6 insertions(+), 6 deletions(-)
+
+Index: OpenIPMI-2.0.24/cmdlang/Makefile.am
+===================================================================
+--- OpenIPMI-2.0.24.orig/cmdlang/Makefile.am
++++ OpenIPMI-2.0.24/cmdlang/Makefile.am
+@@ -15,8 +15,7 @@ libOpenIPMIcmdlang_la_SOURCES = cmdlang.
+ libOpenIPMIcmdlang_la_LIBADD = -lm \
+ $(top_builddir)/utils/libOpenIPMIutils.la \
+ $(top_builddir)/lib/libOpenIPMI.la
+-libOpenIPMIcmdlang_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) \
+- -L$(libdir)
++libOpenIPMIcmdlang_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION)
+
+ bin_PROGRAMS = openipmish
+
+Index: OpenIPMI-2.0.24/unix/Makefile.am
+===================================================================
+--- OpenIPMI-2.0.24.orig/unix/Makefile.am
++++ OpenIPMI-2.0.24/unix/Makefile.am
+@@ -10,14 +10,12 @@ lib_LTLIBRARIES = libOpenIPMIposix.la li
+ libOpenIPMIpthread_la_SOURCES = posix_thread_os_hnd.c selector.c
+ libOpenIPMIpthread_la_LIBADD = -lpthread $(GDBM_LIB) \
+ $(top_builddir)/utils/libOpenIPMIutils.la $(RT_LIB)
+-libOpenIPMIpthread_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) \
+- -L$(libdir)
++libOpenIPMIpthread_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION)
+
+ libOpenIPMIposix_la_SOURCES = posix_os_hnd.c selector.c
+ libOpenIPMIposix_la_LIBADD = $(top_builddir)/utils/libOpenIPMIutils.la \
+ $(GDBM_LIB) $(RT_LIB)
+-libOpenIPMIposix_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION) \
+- -L$(libdir)
++libOpenIPMIposix_la_LDFLAGS = -rdynamic -version-info $(LD_VERSION)
+
+ noinst_HEADERS = heap.h
+
diff --git a/meta-openembedded/meta-networking/recipes-support/openipmi/openipmi_2.0.24.bb b/meta-openembedded/meta-networking/recipes-support/openipmi/openipmi_2.0.24.bb
new file mode 100644
index 000000000..a4f63c5f4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openipmi/openipmi_2.0.24.bb
@@ -0,0 +1,110 @@
+SUMMARY = "IPMI (Intelligent Platform Management Interface) library and tools"
+DESCRIPTION = "OpenIPMI is an effort to create a full-function IPMI system, \
+to allow full access to all IPMI information on a server \
+and to abstract it to a level that will make it easy to use"
+
+HOMEPAGE = "http://openipmi.sourceforge.net"
+
+DEPENDS = " \
+ glib-2.0 \
+ ncurses \
+ net-snmp \
+ openssl \
+ popt \
+ python \
+ swig-native \
+ "
+
+LICENSE = "GPLv2 & LGPLv2.1 & BSD"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://COPYING.LIB;md5=d8045f3b8f929c1cb29a1e3fd737b499 \
+ file://COPYING.BSD;md5=4b318d4160eb69c8ee53452feb1b4cdf \
+ "
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/openipmi/OpenIPMI-${PV}.tar.gz \
+ file://fix-symlink-install-error-in-cmdlang.patch \
+ file://openipmi-no-openipmigui-man.patch \
+ file://openipmi-remove-host-path-from-la_LDFLAGS.patch \
+ file://ipmi-init-fix-the-arguments.patch \
+ file://do-not-install-pyc-and-pyo.patch \
+ file://include_sys_types.patch \
+ file://openipmi-helper \
+ file://ipmi.service \
+ file://0001-lanserv-Rename-struct-parameter-printf-for-namespace.patch \
+ "
+
+S = "${WORKDIR}/OpenIPMI-${PV}"
+SRC_URI[md5sum] = "58f9542cbfcb5fe250b77cf88345e1ec"
+SRC_URI[sha256sum] = "bca39a27071278a8b74610181ede8df51e155e5e9031bc8eaa3699d1720292b4"
+
+inherit autotools-brokensep pkgconfig pythonnative perlnative update-rc.d systemd
+
+EXTRA_OECONF = "--disable-static \
+ --with-perl='${STAGING_BINDIR_NATIVE}/perl-native/perl' \
+ --with-python='${STAGING_BINDIR_NATIVE}/python-native/python' \
+ --with-pythoninstall='${PYTHON_SITEPACKAGES_DIR}' \
+ --with-glibver=2.0"
+
+PACKAGECONFIG ??= "gdbm"
+PACKAGECONFIG[gdbm] = "ac_cv_header_gdbm_h=yes,ac_cv_header_gdbm_h=no,gdbm,"
+
+PACKAGES += "${PN}-perl ${PN}-python"
+
+FILES_${PN}-perl = " \
+ ${libdir}/perl/vendor_perl/*/OpenIPMI.pm \
+ ${libdir}/perl/vendor_perl/*/auto/OpenIPMI/OpenIPMI.so \
+ "
+
+FILES_${PN}-python = "${PYTHON_SITEPACKAGES_DIR}"
+
+FILES_${PN}-dbg += " \
+ ${libdir}/perl/vendor_perl/*/auto/OpenIPMI/.debug \
+ ${PYTHON_SITEPACKAGES_DIR}/.debug \
+ "
+
+do_configure () {
+
+ # Let's perform regular configuration first then handle perl issues.
+ autotools_do_configure
+
+ perl_ver=`perl -V:version | cut -d\' -f 2`
+
+ # Force openipmi perl bindings to be compiled using perl-native instead of
+ # the host's perl. Set the proper install directory for the resulting
+ # openipmi.pm and openipmi.so
+ for i in ${S}/swig/Makefile ${S}/swig/perl/Makefile; do
+ echo "SAL: i = $i"
+ echo "SAL: STAGING_INCDIR_NATIVE = $STAGING_INCDIR_NATIVE"
+ echo "SAL: libdir = $libdir"
+ sed -i -e "/^PERL_CFLAGS/s:-I/usr/local/include:-I${STAGING_INCDIR_NATIVE}:g" $i
+ sed -i -e "/^PERL_INSTALL_DIR/s:^PERL_INSTALL_DIR = .*:PERL_INSTALL_DIR = ${libdir}/perl/vendor_perl/$perl_ver:g" $i
+ done
+}
+
+do_install_append () {
+ echo "SAL: D = $D"
+ echo "SAL: libdir = $libdir"
+ install -m 0755 -d ${D}${sysconfdir}/sysconfig ${D}${sysconfdir}/init.d
+ install -m 0755 ${S}/ipmi.init ${D}${sysconfdir}/init.d/ipmi
+ install -m 0644 ${S}/ipmi.sysconf ${D}${sysconfdir}/sysconfig/ipmi
+ # SAL: mv: cannot stat `/localdisk/loadbuild/slittle1/workspace/cgts_test_build/bitbake_build/tmp/work/x86_64-wrs-linux/openipmi-2.0.19-r4/image/usr/lib64/perl5': No such file or directory
+ # SAL: real path to perl is /localdisk/loadbuild/slittle1/workspace/cgts_test_build/bitbake_build/tmp/work/x86_64-wrs-linux/perl-5.14.2-r8.3/package/usr/lib64/perl5 and it is a symlink to perl so no need to mv.
+ if [ -d ${D}${libdir}/perl5 ]
+ then
+ mv ${D}${libdir}/perl5 ${D}${libdir}/perl
+ fi
+
+ # for systemd
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0664 ${WORKDIR}/ipmi.service ${D}${systemd_unitdir}/system
+ sed -i -e "s,@LIBEXECDIR@,${libexecdir},g" ${D}${systemd_unitdir}/system/ipmi.service
+ install -d ${D}${libexecdir}
+ install -m 0755 ${WORKDIR}/openipmi-helper ${D}${libexecdir}
+}
+
+INITSCRIPT_NAME = "ipmi"
+INITSCRIPT_PARAMS = "start 30 . stop 70 0 1 2 3 4 5 6 ."
+
+SYSTEMD_SERVICE_${PN} = "ipmi.service"
+SYSTEMD_AUTO_ENABLE = "disable"
diff --git a/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn
new file mode 100755
index 000000000..a3cd6a2f4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn
@@ -0,0 +1,104 @@
+#!/bin/sh -e
+#
+# Original version by Robert Leslie
+# <rob@mars.org>, edited by iwj and cs
+# Modified for openvpn by Alberto Gonzalez Iniesta <agi@agi.as>
+# Modified for restarting / starting / stopping single tunnels by Richard Mueller <mueller@teamix.net>
+
+test $DEBIAN_SCRIPT_DEBUG && set -v -x
+
+DAEMON=/usr/sbin/openvpn
+CONFIG_DIR=/etc/openvpn
+test -x $DAEMON || exit 0
+test -d $CONFIG_DIR || exit 0
+
+start_vpn () {
+ modprobe tun >/dev/null 2>&1 || true
+ $DAEMON --daemon --writepid /var/run/openvpn.$NAME.pid \
+ --config $CONFIG_DIR/$NAME.conf --cd $CONFIG_DIR || echo -n " FAILED->"
+ echo -n " $NAME"
+}
+stop_vpn () {
+ kill `cat $PIDFILE` || true
+ rm $PIDFILE
+}
+
+case "$1" in
+start)
+ echo -n "Starting openvpn:"
+
+ if test -z $2 ; then
+ for CONFIG in `cd $CONFIG_DIR; ls *.conf 2> /dev/null`; do
+ NAME=${CONFIG%%.conf}
+ start_vpn
+ done
+ else
+ if test -e $CONFIG_DIR/$2.conf ; then
+ NAME=$2
+ start_vpn
+ else
+ echo -n " No such VPN: $2"
+ fi
+ fi
+ echo "."
+
+ ;;
+stop)
+ echo -n "Stopping openvpn:"
+
+ if test -z $2 ; then
+ for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c18-`
+ NAME=${NAME%%.pid}
+ stop_vpn
+ echo -n " $NAME"
+ done
+ else
+ if test -e /var/run/openvpn.$2.pid ; then
+ PIDFILE=`ls /var/run/openvpn.$2.pid 2> /dev/null`
+ NAME=`echo $PIDFILE | cut -c18-`
+ NAME=${NAME%%.pid}
+ stop_vpn
+ echo -n " $NAME"
+ else
+ echo -n " No such VPN: $2"
+ fi
+ fi
+ echo "."
+ ;;
+# We only 'reload' for running VPNs. New ones will only start with 'start' or 'restart'.
+reload|force-reload)
+ echo -n "Reloading openvpn:"
+ for PIDFILE in `ls /var/run/openvpn.*.pid 2> /dev/null`; do
+ NAME=`echo $PIDFILE | cut -c18-`
+ NAME=${NAME%%.pid}
+# If openvpn if running under a different user than root we'll need to restart
+ if egrep '^( |\t)*user' $CONFIG_DIR/$NAME.conf > /dev/null 2>&1 ; then
+ stop_vpn
+ sleep 1
+ start_vpn
+ echo -n "(restarted)"
+ else
+ kill -HUP `cat $PIDFILE` || true
+# start-stop-daemon --stop --signal HUP --quiet --oknodo \
+# --exec $DAEMON --pidfile $PIDFILE
+ echo -n " $NAME"
+ fi
+ done
+ echo "."
+ ;;
+
+restart)
+ $0 stop $2
+ sleep 1
+ $0 start $2
+ ;;
+*)
+ echo "Usage: $0 {start|stop|reload|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# vim:set ai et sts=2 sw=2 tw=0:
diff --git a/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn-volatile.conf b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn-volatile.conf
new file mode 100644
index 000000000..1205806d5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn-volatile.conf
@@ -0,0 +1 @@
+d @LOCALSTATEDIR@/run/openvpn 0755 root root -
diff --git a/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn@.service b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn@.service
new file mode 100644
index 000000000..358dcb791
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn/openvpn@.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
+After=syslog.target network.target
+
+[Service]
+PrivateTmp=true
+Type=forking
+PIDFile=/var/run/openvpn/%i.pid
+ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.4.4.bb b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.4.4.bb
new file mode 100644
index 000000000..4cad99869
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/openvpn/openvpn_2.4.4.bb
@@ -0,0 +1,67 @@
+SUMMARY = "A full-featured SSL VPN solution via tun device."
+HOMEPAGE = "http://openvpn.sourceforge.net"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e9b64491ec98eb6c6493ac5e4118f107"
+DEPENDS = "lzo openssl iproute2 ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+
+inherit autotools systemd
+
+SRC_URI = "http://swupdate.openvpn.org/community/releases/${BP}.tar.gz \
+ file://openvpn \
+ file://openvpn@.service \
+ file://openvpn-volatile.conf"
+
+SRC_URI[md5sum] = "705a79d005558d94fa1e2b74e4413e97"
+SRC_URI[sha256sum] = "1ae883d9522c9fa6d189e5e4aaa058a93edd3d0b897e3c2664107c4785099fc3"
+
+SYSTEMD_SERVICE_${PN} += "openvpn@loopback-server.service openvpn@loopback-client.service"
+SYSTEMD_AUTO_ENABLE = "disable"
+
+CFLAGS += "-fno-inline"
+
+# I want openvpn to be able to read password from file (hrw)
+EXTRA_OECONF += "--enable-iproute2"
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'pam', '', '--disable-plugin-auth-pam', d)}"
+
+# Explicitly specify IPROUTE to bypass the configure-time check for /sbin/ip on the host.
+EXTRA_OECONF += "IPROUTE=${base_sbindir}/ip"
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/openvpn ${D}/${sysconfdir}/init.d
+
+ install -d ${D}/${sysconfdir}/openvpn
+ install -d ${D}/${sysconfdir}/openvpn/sample
+ install -m 755 ${S}/sample/sample-config-files/loopback-server ${D}${sysconfdir}/openvpn/sample/loopback-server.conf
+ install -m 755 ${S}/sample/sample-config-files/loopback-client ${D}${sysconfdir}/openvpn/sample/loopback-client.conf
+ install -dm 755 ${D}${sysconfdir}/openvpn/sample/sample-keys
+ install -m 644 ${S}/sample/sample-keys/* ${D}${sysconfdir}/openvpn/sample/sample-keys
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}/${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/openvpn@.service ${D}/${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/openvpn@.service ${D}/${systemd_unitdir}/system/openvpn@loopback-server.service
+ install -m 644 ${WORKDIR}/openvpn@.service ${D}/${systemd_unitdir}/system/openvpn@loopback-client.service
+
+ install -d ${D}/${localstatedir}
+ install -d ${D}/${localstatedir}/lib
+ install -d -m 710 ${D}/${localstatedir}/lib/openvpn
+
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ install -m 0644 ${WORKDIR}/openvpn-volatile.conf ${D}${sysconfdir}/tmpfiles.d/openvpn.conf
+ sed -i -e 's#@LOCALSTATEDIR@#${localstatedir}#g' ${D}${sysconfdir}/tmpfiles.d/openvpn.conf
+ fi
+}
+
+PACKAGES =+ " ${PN}-sample "
+
+RRECOMMENDS_${PN} = "kernel-module-tun"
+
+FILES_${PN}-dbg += "${libdir}/openvpn/plugins/.debug"
+FILES_${PN} += "${systemd_unitdir}/system/openvpn@.service \
+ ${sysconfdir}/tmpfiles.d \
+ "
+FILES_${PN}-sample += "${systemd_unitdir}/system/openvpn@loopback-server.service \
+ ${systemd_unitdir}/system/openvpn@loopback-client.service \
+ ${sysconfdir}/openvpn/sample/"
diff --git a/meta-openembedded/meta-networking/recipes-support/phytool/phytool.bb b/meta-openembedded/meta-networking/recipes-support/phytool/phytool.bb
new file mode 100644
index 000000000..4ed3ed1e4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/phytool/phytool.bb
@@ -0,0 +1,15 @@
+SUMMARY = "PHY interface tool for Linux"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=39bba7d2cf0ba1036f2a6e2be52fe3f0"
+
+PV = "1.0.1+git${SRCPV}"
+SRCREV = "3149bfdb4f513e2f0da0a7d0bc5d0873578696f2"
+SRC_URI = "git://github.com/wkz/phytool.git"
+
+S = "${WORKDIR}/git"
+
+# The Makefile has "$PREFIX/bin" hardcoded into it, hence not using $bindir here
+do_install() {
+ install -d ${D}${prefix}/bin
+ oe_runmake 'DESTDIR=${D}' 'PREFIX=${prefix}' install
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/pimd/pimd/0001-configure-Dont-use-uname-to-determine-target-OS.patch b/meta-openembedded/meta-networking/recipes-support/pimd/pimd/0001-configure-Dont-use-uname-to-determine-target-OS.patch
new file mode 100644
index 000000000..eb549ded9
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/pimd/pimd/0001-configure-Dont-use-uname-to-determine-target-OS.patch
@@ -0,0 +1,28 @@
+From f3e04281bad361249a8dad0cde150a801d720f67 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 18:46:52 -0700
+Subject: [PATCH] configure: Dont use uname to determine target OS
+
+Helps with cross-compiling
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure b/configure
+index 6c35a72..f9714e2 100755
+--- a/configure
++++ b/configure
+@@ -31,7 +31,7 @@
+ #DEFS += -DSCOPED_ACL
+ #
+
+-OS=`uname`
++OS="Linux"
+ CFG=config.mk
+ TMP=`mktemp /tmp/XXXXXX`
+ BUGREPORT_URL="https://github.com/troglobit/pimd/issues"
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb b/meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb
new file mode 100644
index 000000000..2faa7cb1c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/pimd/pimd_2.3.2.bb
@@ -0,0 +1,20 @@
+SUMMARY = "pimd is a lightweight stand-alone PIM-SM v2 multicast routing daemon."
+HOMEPAGE = "http://troglobit.com/pimd.html"
+SECTION = "net"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=94f108f91fab720d62425770b70dd790"
+
+SRC_URI = "ftp://ftp.troglobit.com/pimd/${BP}.tar.gz \
+ file://0001-configure-Dont-use-uname-to-determine-target-OS.patch \
+ "
+SRC_URI[md5sum] = "a3c03e40540980b2c06e265a17988e60"
+SRC_URI[sha256sum] = "c77a9812751f114490a28a6839b16aac8b020c8d9fd6aa22bf3880c054e19f1d"
+
+EXTRA_OECONF_append_libc-musl = " --embedded-libc"
+
+inherit autotools-brokensep
+
+do_configure() {
+ oe_runconf
+}
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ruli/files/0001-Fix-build-with-format-string-checks.patch b/meta-openembedded/meta-networking/recipes-support/ruli/files/0001-Fix-build-with-format-string-checks.patch
new file mode 100644
index 000000000..f8eb3ae67
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ruli/files/0001-Fix-build-with-format-string-checks.patch
@@ -0,0 +1,33 @@
+From 40848547abf592c8d29b85ef1346001514944435 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 17 Jun 2017 10:14:20 -0700
+Subject: [PATCH] Fix build with format string checks
+
+Fixes
+| ruli_addr.c:418:5: error: format not a string literal and no format arguments [-Werror=format-security]
+| return fprintf(out, inet_ntoa(addr->ipv4));
+| ^~~~~~
+
+Upstream-Status: Pending
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ src/ruli_addr.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/ruli_addr.c b/src/ruli_addr.c
+index 00d5d0d..f1eabae 100644
+--- a/src/ruli_addr.c
++++ b/src/ruli_addr.c
+@@ -415,7 +415,7 @@ int ruli_in_print(FILE *out, const _ruli_addr *addr, int family)
+ {
+ switch (family) {
+ case PF_INET:
+- return fprintf(out, inet_ntoa(addr->ipv4));
++ return fprintf(out, "%s", inet_ntoa(addr->ipv4));
+
+ case PF_INET6:
+ return ruli_inet6_print(out, &addr->ipv6);
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ruli/files/0001-src-ruli_addr.c-Add-missing-format-string.patch b/meta-openembedded/meta-networking/recipes-support/ruli/files/0001-src-ruli_addr.c-Add-missing-format-string.patch
new file mode 100644
index 000000000..9044415ff
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ruli/files/0001-src-ruli_addr.c-Add-missing-format-string.patch
@@ -0,0 +1,35 @@
+From d3fb471f53712e710fb5777b1b0851c46b7be64c Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 25 Jun 2017 01:23:03 -0700
+Subject: [PATCH] src/ruli_addr.c: Add missing format string
+
+fixes
+
+| ruli_addr.c: In function 'ruli_in_snprint':
+| ruli_addr.c:491:5: error: format not a string literal and no format arguments [-Werror=format-security]
+| return snprintf(buf, size, inet_ntoa(addr->ipv4));
+| ^~~~~~
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+Upstream-Status: Pending
+
+ src/ruli_addr.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/ruli_addr.c b/src/ruli_addr.c
+index f1eabae..5f1fd4f 100644
+--- a/src/ruli_addr.c
++++ b/src/ruli_addr.c
+@@ -488,7 +488,7 @@ int ruli_in_snprint(char *buf, size_t size, const _ruli_addr *addr, int family)
+ {
+ switch (family) {
+ case PF_INET:
+- return snprintf(buf, size, inet_ntoa(addr->ipv4));
++ return snprintf(buf, size, "%s", inet_ntoa(addr->ipv4));
+
+ case PF_INET6:
+ return ruli_inet6_snprint(buf, size, &addr->ipv6);
+--
+2.13.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ruli/files/Makefile.patch b/meta-openembedded/meta-networking/recipes-support/ruli/files/Makefile.patch
new file mode 100644
index 000000000..60789a3d5
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ruli/files/Makefile.patch
@@ -0,0 +1,122 @@
+diff -Naur patch.org/ruli-0.36/Makefile patch.new/ruli-0.36/Makefile
+--- ruli-0.36/Makefile 2015-09-10 15:14:13.952262350 -0400
++++ ruli-0.36/Makefile 2015-09-10 15:14:38.628261620 -0400
+@@ -7,17 +7,17 @@
+ .PHONY: default
+ default:
+ $(MAKE) -C src
+- $(MAKE) -C sample
++# $(MAKE) -C sample
+
+ .PHONY: clean
+ clean:
+ $(MAKE) -C src clean
+- $(MAKE) -C sample clean
++# $(MAKE) -C sample clean
+
+ .PHONY: install
+ install:
+ $(MAKE) -C src install
+- $(MAKE) -C sample install
++# $(MAKE) -C sample install
+
+ .PHONY: dpkg
+ dpkg:
+
+=====================================================================
+
+diff -Naur patch.org/git/src/Makefile patch.new/git/src/Makefile
+--- ruli-0.36/src/Makefile 2005-06-13 12:34:53.000000000 -0400
++++ ruli-0.36/src/Makefile 2015-09-11 09:46:06.290287347 -0400
+@@ -18,9 +18,9 @@
+ #
+ # Debian packaging likes this: OOP_BASE_DIR = /usr
+ #
+-OOP_BASE_DIR = /usr/local/oop
+-OOP_INCLUDE_DIR = $(OOP_BASE_DIR)/include
+-OOP_LIB_DIR = $(OOP_BASE_DIR)/lib
++#OOP_BASE_DIR = /usr/local/oop
++OOP_INCLUDE_DIR = ${PKG_CONFIG_SYSROOT_DIR}/$(includedir)/
++#OOP_LIB_DIR = $(OOP_BASE_DIR)/lib
+
+ #
+ # INSTALL_BASE_DIR indicates where RULI
+@@ -30,11 +30,11 @@
+ #
+ # Debian packaging likes this: INSTALL_BASE_DIR = $(DESTDIR)/usr
+ #
+-INSTALL_BASE_DIR = ../install/ruli
+-INSTALL_INCLUDE_DIR = $(INSTALL_BASE_DIR)/include
+-INSTALL_LIB_DIR = $(INSTALL_BASE_DIR)/lib
+-INSTALL_MAN_DIR = $(INSTALL_BASE_DIR)/share/man
+-INSTALL_MAN3_DIR = $(INSTALL_MAN_DIR)/man3
++#INSTALL_BASE_DIR = ../install/ruli
++#INSTALL_INCLUDE_DIR = $(INSTALL_BASE_DIR)/include
++#INSTALL_LIB_DIR = $(INSTALL_BASE_DIR)/lib
++#INSTALL_MAN_DIR = $(INSTALL_BASE_DIR)/share/man
++#INSTALL_MAN3_DIR = $(INSTALL_MAN_DIR)/man3
+
+ # SunOS, Linux
+ PLATFORM=$(shell uname)
+@@ -45,7 +45,7 @@
+
+ WARN = -pedantic -ansi -Wshadow -Wpointer-arith -Wcast-qual \
+ -Wcast-align -Wwrite-strings -Wredundant-decls
+-CC = gcc
++#CC = gcc
+
+ # gcc-specific options (not valid for g++)
+ ifeq ($(CC),gcc)
+@@ -58,7 +58,7 @@
+ FLAGS = $(DEBUG) -O2 -pipe -Wall -g -shared -D_REENTRANT \
+ $(DEFINE_SOLARIS) -I. -I$(OOP_INCLUDE_DIR)
+ SOFT_CFLAGS = $(WARN) $(FLAGS)
+-CFLAGS = $(WARN) -Werror $(FLAGS)
++CFLAGS = $(WARN) $(FLAGS)
+ LIBOBJ = ruli_isaac.o ruli_mem.o ruli_rand.o ruli_util.o ruli_list.o \
+ ruli_addr.o ruli_sock.o ruli_txt.o ruli_msg.o ruli_fsm.o \
+ ruli_res.o ruli_parse.o ruli_host.o ruli_srv.o ruli_conf.o \
+@@ -66,7 +66,7 @@
+ ruli_getaddrinfo.o
+ SHAREDOBJ = $(LIBOBJ:%.o=%.os)
+ SONAME = libruli.so.4
+-LDFLAGS = -L$(OOP_LIB_DIR)
++#LDFLAGS = -L$(OOP_LIB_DIR)
+
+ COMPILE = $(CC) $(ARCH) $(CPPFLAGS) $(CFLAGS) -c
+ SHARED_COMPILE = $(CC) $(ARCH) $(CPPFLAGS) $(SHARED) $(CFLAGS) -o $@ -c
+@@ -89,19 +89,19 @@
+ strip: ruli
+ strip $(SONAME) libruli.a
+
+-.PHONY: install
+-install: ruli
+- mkdir -p $(INSTALL_LIB_DIR) $(INSTALL_INCLUDE_DIR) $(INSTALL_MAN3_DIR)
+- cp $(SONAME) libruli.a $(INSTALL_LIB_DIR)
+- cp *.h $(INSTALL_INCLUDE_DIR)
+- cp ../doc/man/*.3 $(INSTALL_MAN3_DIR)
+- cd $(INSTALL_LIB_DIR) && ln -s $(SONAME) libruli.so
+- @echo
+- @echo "REMINDER:"
+- @echo "Add $(INSTALL_LIB_DIR) to your dynamic loader path:"
+- @echo "# echo $(INSTALL_LIB_DIR) >> /etc/ld.so.conf"
+- @echo "# ldconfig"
+- @echo
++#.PHONY: install
++#install: ruli
++# mkdir -p $(INSTALL_LIB_DIR) $(INSTALL_INCLUDE_DIR) $(INSTALL_MAN3_DIR)
++# cp $(SONAME) libruli.a $(INSTALL_LIB_DIR)
++# cp *.h $(INSTALL_INCLUDE_DIR)
++# cp ../doc/man/*.3 $(INSTALL_MAN3_DIR)
++# cd $(INSTALL_LIB_DIR) && ln -s $(SONAME) libruli.so
++# @echo
++# @echo "REMINDER:"
++# @echo "Add $(INSTALL_LIB_DIR) to your dynamic loader path:"
++# @echo "# echo $(INSTALL_LIB_DIR) >> /etc/ld.so.conf"
++# @echo "# ldconfig"
++# @echo
+
+ .PHONY: ruli
+ ruli: $(SONAME) libruli.a
+
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ruli/ruli_0.36.bb b/meta-openembedded/meta-networking/recipes-support/ruli/ruli_0.36.bb
new file mode 100644
index 000000000..885796d2a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ruli/ruli_0.36.bb
@@ -0,0 +1,25 @@
+SUMMARY = "RULI stands for Resolver User Layer Interface It's a library built on top of an asynchronous DNS stub resolver"
+
+HOMEPAGE = "http://www.nongnu.org/ruli/"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
+
+DEPENDS = "liboop"
+
+SRC_URI = "http://download.savannah.gnu.org/releases/ruli/ruli_${PV}.orig.tar.gz \
+ file://Makefile.patch \
+ file://0001-Fix-build-with-format-string-checks.patch \
+ file://0001-src-ruli_addr.c-Add-missing-format-string.patch \
+ "
+
+SRC_URI[md5sum] = "e73fbfdeadddb68a703a70cea5271468"
+SRC_URI[sha256sum] = "11d32def5b514748fbd9ea8c88049ae99e1bb358efc74eb91a4d268a3999dbfa"
+
+do_install1() {
+ install -d ${D}${includedir}/ruli
+ install -d ${D}${libdir}
+ install -m 0644 ${S}/src/ruli*.h ${D}${includedir}/ruli
+ install -m 0644 ${S}/src/libruli.so ${D}${libdir}
+ install -m 0644 ${S}/src/libruli.so.4 ${D}${libdir}
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/smcroute/smcroute_2.0.0.bb b/meta-openembedded/meta-networking/recipes-support/smcroute/smcroute_2.0.0.bb
new file mode 100644
index 000000000..9b6fc2f38
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/smcroute/smcroute_2.0.0.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Static Multicast Routing Daemon"
+DESCRIPTION = "SMCRoute is a daemon and command line tool to manipulate the multicast routing table in the UNIX kernel."
+HOMEPAGE = "http://troglobit.github.io/smcroute.html"
+SECTION = "net"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4"
+
+SRCREV = "d6280e64b27d5a4bd7f37dac36b455f4ae5f9ab3"
+SRC_URI = "git://github.com/troglobit/smcroute.git;branch=master;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools
diff --git a/meta-openembedded/meta-networking/recipes-support/ssmping/files/0001-Makefile-tweak-install-dir.patch b/meta-openembedded/meta-networking/recipes-support/ssmping/files/0001-Makefile-tweak-install-dir.patch
new file mode 100644
index 000000000..0cb981cf7
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ssmping/files/0001-Makefile-tweak-install-dir.patch
@@ -0,0 +1,35 @@
+From 693cfce5431e191a3955fd56fa822927d92c9e43 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 7 Nov 2014 14:27:00 +0800
+Subject: [PATCH] Makefile: tweak install dir
+
+For oe-core, the man doc should be installed to /usr/share/man
+rather than /usr/locale/man.
+
+Upstream-Status: inappropriate (oe specific)
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ Makefile | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index b5d12f8..9b2663c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -14,9 +14,9 @@ install: ssmping asmping ssmpingd mcfirst
+ install -D asmping $(DESTDIR)$(PREFIX)/bin/asmping
+ install -D ssmpingd $(DESTDIR)$(PREFIX)/bin/ssmpingd
+ install -D mcfirst $(DESTDIR)$(PREFIX)/bin/mcfirst
+- install -D ssmping.1 $(DESTDIR)$(PREFIX)/man/man1/ssmping.1
+- install -D asmping.1 $(DESTDIR)$(PREFIX)/man/man1/asmping.1
+- install -D mcfirst.1 $(DESTDIR)$(PREFIX)/man/man1/mcfirst.1
++ install -D ssmping.1 $(DESTDIR)$(PREFIX)/share/man/man1/ssmping.1
++ install -D asmping.1 $(DESTDIR)$(PREFIX)/share/man/man1/asmping.1
++ install -D mcfirst.1 $(DESTDIR)$(PREFIX)/share/man/man1/mcfirst.1
+
+ clean:
+ rm -f $(OBJ) joinch.o joingrp.o ssmping asmping ssmpingd mcfirst
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ssmping/ssmping_0.9.1.bb b/meta-openembedded/meta-networking/recipes-support/ssmping/ssmping_0.9.1.bb
new file mode 100644
index 000000000..0531ffe64
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ssmping/ssmping_0.9.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "ssmping is a tool for checking whether one can receive SSM from a given host"
+HOMEPAGE = "http://www.venaas.no/multicast/ssmping/"
+SECTION = "net"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://asmping.c;beginline=2;endline=11;md5=1ca8d1a1ca931e5cfe604ebf20a78b71"
+
+SRC_URI = "http://www.venaas.no/multicast/ssmping/${BP}.tar.gz \
+ file://0001-Makefile-tweak-install-dir.patch \
+"
+SRC_URI[md5sum] = "ad8e3d13f6d72918f73be7e7975d7fad"
+SRC_URI[sha256sum] = "22103a37eaa28489169a0927bc01e0596c3485fc4d29fc8456c07fd2c70fca6d"
+
+CFLAGS += "-D_GNU_SOURCE "
+
+do_install() {
+ oe_runmake 'DESTDIR=${D}' 'PREFIX=${prefix}' install
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/build-ouside_srcdir.patch b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/build-ouside_srcdir.patch
new file mode 100644
index 000000000..d53cff249
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/build-ouside_srcdir.patch
@@ -0,0 +1,17 @@
+help compile when S != B
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+Index: ssmtp-2.64/Makefile.in
+===================================================================
+--- ssmtp-2.64.orig/Makefile.in
++++ ssmtp-2.64/Makefile.in
+@@ -24,7 +24,7 @@ INSTALLED_REVALIASES_FILE=$(REVALIASES_F
+ # Programs
+ GEN_CONFIG=$(srcdir)/generate_config
+
+-SRCS=ssmtp.c arpadate.c base64.c xgethostname.c @SRCS@
++SRCS=$(srcdir)/ssmtp.c $(srcdir)/arpadate.c $(srcdir)/base64.c $(srcdir)/xgethostname.c @SRCS@
+
+ OBJS=$(SRCS:.c=.o)
+
diff --git a/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/ssmtp-bug584162-fix.patch b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/ssmtp-bug584162-fix.patch
new file mode 100644
index 000000000..e087bc752
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/ssmtp-bug584162-fix.patch
@@ -0,0 +1,126 @@
+Bug-Debian: http://bugs.debian.org/584162
+Reported-By: Christoph Biedl <debian.axhn@manchmal.in-ulm.de>
+Forwarded: not-needed
+Reviewed-By: Anibal Monsalve Salazar <anibal@debian.org>
+Last-Update: 2014-08-15
+
+From: "Daniel Richard G." <skunk@iSKUNK.ORG>
+Subject: Re: ssmtp: Partial loss of message body, sending message to wrong recipicients
+Date: Thu, 19 Jun 2014 14:44:30 -0400
+
+Attached is a patch against the original 2.64 source that should address
+this bug, and hopefully not break anything. An overview of my changes:
+
+* Added code to standarise() to drop the trailing '\r' if the line
+ originally ended with "\r\n".
+
+* Added a check to header_parse() that effectively converts an "\r\n" in
+ the input into '\n'.
+
+* Added a conditional so that header_parse() doesn't pass the empty
+ string to header_save()---a behavior I observed in testing, at the end
+ of a header block with "\r\n" line endings.
+
+* Simplified the last if(in_header) conditional in header_parse(),
+ because it erroneously assumes that if in_header == True, then c could
+ have some value other than EOF. (See the condition on the previous
+ "while" loop, and the lack of any other way to exit said loop.)
+
+ header_parse() will now properly grab a header if fed a message
+ without a body (i.e. no "\n\n" ending the header block), although this
+ code will still drop a header if there is no newline at the end.
+
+Christoph, thank you for your excellent analysis, and the test cases. I
+made use of them, and with my changes sSMTP appears to do the right
+thing.
+
+Debian patch from: https://sources.debian.net/patches/ssmtp/2.64-8/
+
+Upstream-Status: Backport [debian]
+
+Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
+
+Index: ssmtp-2.64/ssmtp.c
+===================================================================
+--- ssmtp-2.64.orig/ssmtp.c
++++ ssmtp-2.64/ssmtp.c
+@@ -375,6 +375,12 @@ bool_t standardise(char *str, bool_t *li
+ if((p = strchr(str, '\n'))) {
+ *p = (char)NULL;
+ *linestart = True;
++
++ /* If the line ended in "\r\n", then drop the '\r' too */
++ sl = strlen(str);
++ if(sl >= 1 && str[sl - 1] == '\r') {
++ str[sl - 1] = (char)NULL;
++ }
+ }
+ return(leadingdot);
+ }
+@@ -768,6 +774,14 @@ void header_parse(FILE *stream)
+ }
+ len++;
+
++ if(l == '\r' && c == '\n') {
++ /* Properly handle input that already has "\r\n"
++ line endings; see https://bugs.debian.org/584162 */
++ l = (len >= 2 ? *(q - 2) : '\n');
++ q--;
++ len--;
++ }
++
+ if(l == '\n') {
+ switch(c) {
+ case ' ':
+@@ -790,7 +804,9 @@ void header_parse(FILE *stream)
+ if((q = strrchr(p, '\n'))) {
+ *q = (char)NULL;
+ }
+- header_save(p);
++ if(len > 0) {
++ header_save(p);
++ }
+
+ q = p;
+ len = 0;
+@@ -800,35 +816,12 @@ void header_parse(FILE *stream)
+
+ l = c;
+ }
+- if(in_header) {
+- if(l == '\n') {
+- switch(c) {
+- case ' ':
+- case '\t':
+- /* Must insert '\r' before '\n's embedded in header
+- fields otherwise qmail won't accept our mail
+- because a bare '\n' violates some RFC */
+-
+- *(q - 1) = '\r'; /* Replace previous \n with \r */
+- *q++ = '\n'; /* Insert \n */
+- len++;
+-
+- break;
+-
+- case '\n':
+- in_header = False;
+-
+- default:
+- *q = (char)NULL;
+- if((q = strrchr(p, '\n'))) {
+- *q = (char)NULL;
+- }
+- header_save(p);
+-
+- q = p;
+- len = 0;
+- }
++ if(in_header && l == '\n') {
++ /* Got EOF while reading the header */
++ if((q = strrchr(p, '\n'))) {
++ *q = (char)NULL;
+ }
++ header_save(p);
+ }
+ (void)free(p);
+ }
diff --git a/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/use-DESTDIR.patch b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/use-DESTDIR.patch
new file mode 100644
index 000000000..26d852761
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp/use-DESTDIR.patch
@@ -0,0 +1,74 @@
+Use DESTDIR during install/uninstall, this helps
+with cross or staged builds. Additionally pass LDFLAGS
+during linking.
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Pending
+
+
+Index: ssmtp-2.64/Makefile.in
+===================================================================
+--- ssmtp-2.64.orig/Makefile.in
++++ ssmtp-2.64/Makefile.in
+@@ -46,40 +46,40 @@ all: ssmtp
+
+ .PHONY: install
+ install: ssmtp $(GEN_CONFIG)
+- $(INSTALL) -d -m 755 $(bindir)
+- $(INSTALL) -s -m 755 ssmtp $(bindir)/ssmtp
+- $(INSTALL) -d -m 755 $(mandir)
+- $(INSTALL) -m 644 $(srcdir)/ssmtp.8 $(mandir)/ssmtp.8
+- $(INSTALL) -d -m 755 $(SSMTPCONFDIR)
+- $(INSTALL) -m 644 $(srcdir)/revaliases $(INSTALLED_REVALIASES_FILE)
+- $(GEN_CONFIG) $(INSTALLED_CONFIGURATION_FILE)
++ $(INSTALL) -d -m 755 $(DESTDIR)$(bindir)
++ $(INSTALL) -m 755 ssmtp $(DESTDIR)$(bindir)/ssmtp
++ $(INSTALL) -d -m 755 $(DESTDIR)$(mandir)
++ $(INSTALL) -m 644 $(srcdir)/ssmtp.8 $(DESTDIR)$(mandir)/ssmtp.8
++ $(INSTALL) -d -m 755 $(DESTDIR)$(SSMTPCONFDIR)
++ $(INSTALL) -m 644 $(srcdir)/revaliases $(DESTDIR)$(INSTALLED_REVALIASES_FILE)
++ $(GEN_CONFIG) $(DESTDIR)$(INSTALLED_CONFIGURATION_FILE)
+
+
+ .PHONY: install-sendmail
+ install-sendmail: install
+- $(RM) $(bindir)/sendmail
+- $(LN_S) ssmtp $(bindir)/sendmail
+- $(INSTALL) -d -m 755 $(libexecdir)
+- $(RM) $(libexecdir)/sendmail
+- $(LN_S) sendmail /lib/sendmail
+- $(RM) $(mandir)/sendmail.8
+- $(LN_S) ssmtp.8 $(mandir)/sendmail.8
++ $(RM) $(DESTDIR)$(bindir)/sendmail
++ $(LN_S) ssmtp $(DESTDIR)$(bindir)/sendmail
++ $(INSTALL) -d -m 755 $(DESTDIR)$(libexecdir)
++ $(RM) $(DESTDIR)$(libexecdir)/sendmail
++ $(LN_S) sendmail $(DESTDIR)/lib/sendmail
++ $(RM) $(DESTDIR)$(mandir)/sendmail.8
++ $(LN_S) ssmtp.8 $(DESTDIR)$(mandir)/sendmail.8
+
+ .PHONY: uninstall
+ uninstall:
+- $(RM) $(bindir)/ssmtp
+- $(RM) $(mandir)/ssmtp.8
+- $(RM) $(CONFIGURATION_FILE) $(REVALIASES_FILE)
+- $(RM) -r $(SSMTPCONFDIR)
++ $(RM) $(DESTDIR)$(bindir)/ssmtp
++ $(RM) $(DESTDIR)$(mandir)/ssmtp.8
++ $(RM) $(DESTDIR)$(CONFIGURATION_FILE) $(DESTDIR)$(REVALIASES_FILE)
++ $(RM) -r $(DESTDIR)$(SSMTPCONFDIR)
+
+ .PHONY: uninstall-sendmail
+ uninstall-sendmail: uninstall
+- $(RM) $(bindir)/sendmail /lib/sendmail
+- $(RM) $(mandir)/sendmail.8
++ $(RM) $(DESTDIR)$(bindir)/sendmail $(DESTDIR)/lib/sendmail
++ $(RM) $(DESTDIR)$(mandir)/sendmail.8
+
+ # Binaries:
+ ssmtp: $(OBJS)
+- $(CC) -o ssmtp $(OBJS) @LIBS@ $(CFLAGS)
++ $(CC) -o ssmtp $(OBJS) @LIBS@ $(CFLAGS) $(LDFLAGS)
+
+ .PHONY: clean
+ clean:
diff --git a/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb
new file mode 100644
index 000000000..07e3ffed4
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/ssmtp/ssmtp_2.64.bb
@@ -0,0 +1,35 @@
+SUMMARY = "extremely simple MTA to get mail off the system to a mail hub"
+HOMEPAGE = "http://packages.qa.debian.org/s/ssmtp.html"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0c56db0143f4f80c369ee3af7425af6e"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/s/${BPN}/${BPN}_${PV}.orig.tar.bz2 \
+ file://ssmtp-bug584162-fix.patch \
+ file://build-ouside_srcdir.patch \
+ file://use-DESTDIR.patch \
+"
+
+SRC_URI[md5sum] = "65b4e0df4934a6cd08c506cabcbe584f"
+SRC_URI[sha256sum] = "22c37dc90c871e8e052b2cab0ad219d010fa938608cd66b21c8f3c759046fa36"
+
+inherit autotools
+
+PACKAGECONFIG ?= "ssl ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+
+PACKAGECONFIG[ssl] = "--enable-ssl,--disable-ssl,openssl"
+PACKAGECONFIG[ipv6] = "--enable-inet6,--disable-inet6"
+
+EXTRA_OECONF += "--mandir=${mandir}"
+
+EXTRA_OEMAKE = "GEN_CONFIG='/bin/true'"
+
+LDFLAGS += "${@bb.utils.contains('PACKAGECONFIG', 'ssl', '-lssl -lcrypto', '', d)}"
+
+do_install_append () {
+ install -d ${D}${mandir}/
+ mv ${D}${exec_prefix}/man/* ${D}${mandir}/
+ rmdir ${D}${exec_prefix}/man
+ ln -s ssmtp ${D}${sbindir}/sendmail
+ ln -s ssmtp ${D}${sbindir}/newaliases
+ ln -s ssmtp ${D}${sbindir}/mailq
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/strongswan/files/0001-memory.h-Include-stdint.h-for-uintptr_t.patch b/meta-openembedded/meta-networking/recipes-support/strongswan/files/0001-memory.h-Include-stdint.h-for-uintptr_t.patch
new file mode 100644
index 000000000..00178c84a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/strongswan/files/0001-memory.h-Include-stdint.h-for-uintptr_t.patch
@@ -0,0 +1,24 @@
+From 33a53dc13fd924949a582109b45fedd8d0bed59b Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 27 Jun 2017 07:42:11 -0700
+Subject: [PATCH] memory.h: Include stdint.h for uintptr_t
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+---
+ src/libstrongswan/utils/utils/memory.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/libstrongswan/utils/utils/memory.h b/src/libstrongswan/utils/utils/memory.h
+index e840330..8a356a8 100644
+--- a/src/libstrongswan/utils/utils/memory.h
++++ b/src/libstrongswan/utils/utils/memory.h
+@@ -22,6 +22,8 @@
+ #ifndef MEMORY_H_
+ #define MEMORY_H_
+
++#include <stdint.h>
++
+ /**
+ * Helper function that compares two binary blobs for equality
+ */
diff --git a/meta-openembedded/meta-networking/recipes-support/strongswan/files/fix-funtion-parameter.patch b/meta-openembedded/meta-networking/recipes-support/strongswan/files/fix-funtion-parameter.patch
new file mode 100644
index 000000000..be660d1fd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/strongswan/files/fix-funtion-parameter.patch
@@ -0,0 +1,99 @@
+From 9f97479373f3fceedc471074b81486d77a49618d Mon Sep 17 00:00:00 2001
+From: "Roy.Li" <rongqing.li@windriver.com>
+Date: Tue, 4 Mar 2014 14:38:42 +0800
+Subject: [PATCH] fix the function parameter
+
+Upstream-Status: pending
+
+Original openssl_diffie_hellman_create has three parameters, but
+it is reassigned a function pointer which has one parameter, and
+is called with one parameter, which will lead to segment fault
+on PPC, Now we simply correct the number of parameters.
+
+ #0 0x484d4aa0 in __GI_raise (sig=6)
+ at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
+ #1 0x484d9930 in __GI_abort () at abort.c:91
+ #2 0x10002064 in segv_handler (signal=11) at charon.c:224
+ #3 <signal handler called>
+ #4 0x48d89630 in openssl_diffie_hellman_create (group=MODP_1024_BIT, g=...,
+ p=<error reading variable: Cannot access memory at address 0x0>)
+ at openssl_diffie_hellman.c:143
+ #5 0x482c54f8 in create_dh (this=0x11ac6e68, group=MODP_1024_BIT)
+ at crypto/crypto_factory.c:358
+ #6 0x48375884 in create_dh (this=<optimized out>, group=<optimized out>)
+ at sa/keymat.c:132
+ #7 0x483843b8 in process_payloads (this=0x51400a78, message=<optimized
+ out>)
+ at sa/tasks/ike_init.c:200
+ #8 0x483844d0 in process_r (this=0x51400a78, message=0x51500778)
+ at sa/tasks/ike_init.c:319
+ #9 0x48374c9c in process_request (message=0x51500778, this=0x51400d20)
+ at sa/task_manager.c:870
+ #10 process_message (this=0x51400d20, msg=0x51500778) at
+ sa/task_manager.c:925
+ #11 0x4836c378 in process_message (this=0x514005f0, message=0x51500778)
+ at sa/ike_sa.c:1317
+ #12 0x48362270 in execute (this=0x515008d0)
+ at processing/jobs/process_message_job.c:74
+
+Signed-off-by: Roy.Li <rongqing.li@windriver.com>
+
+---
+ src/libstrongswan/plugins/openssl/openssl_diffie_hellman.c | 8 +++++++-
+ src/libstrongswan/plugins/openssl/openssl_diffie_hellman.h | 4 +++-
+ src/libstrongswan/plugins/openssl/openssl_plugin.c | 1 +
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.c b/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.c
+index 8e9c118..a73b038 100644
+--- a/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.c
++++ b/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.c
+@@ -192,7 +192,7 @@ METHOD(diffie_hellman_t, destroy, void,
+ /*
+ * Described in header.
+ */
+-openssl_diffie_hellman_t *openssl_diffie_hellman_create(
++openssl_diffie_hellman_t *openssl_diffie_hellman_create_custom(
+ diffie_hellman_group_t group, ...)
+ {
+ private_openssl_diffie_hellman_t *this;
+@@ -255,5 +255,11 @@ openssl_diffie_hellman_t *openssl_diffie_hellman_create(
+ DBG2(DBG_LIB, "size of DH secret exponent: %d bits", BN_num_bits(privkey));
+ return &this->public;
+ }
++openssl_diffie_hellman_t *openssl_diffie_hellman_create( diffie_hellman_group_t group)
++{
++ chunk_t g;
++ chunk_t p;
++ openssl_diffie_hellman_create_custom(group, g, p);
++}
+
+ #endif /* OPENSSL_NO_DH */
+diff --git a/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.h b/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.h
+index 5de5520..22586e0 100644
+--- a/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.h
++++ b/src/libstrongswan/plugins/openssl/openssl_diffie_hellman.h
+@@ -43,8 +43,10 @@ struct openssl_diffie_hellman_t {
+ * @param ... expects generator and prime as chunk_t if MODP_CUSTOM
+ * @return openssl_diffie_hellman_t object, NULL if not supported
+ */
+-openssl_diffie_hellman_t *openssl_diffie_hellman_create(
++openssl_diffie_hellman_t *openssl_diffie_hellman_create_custom(
+ diffie_hellman_group_t group, ...);
++openssl_diffie_hellman_t *openssl_diffie_hellman_create(
++ diffie_hellman_group_t group);
+
+ #endif /** OPENSSL_DIFFIE_HELLMAN_H_ @}*/
+
+diff --git a/src/libstrongswan/plugins/openssl/openssl_plugin.c b/src/libstrongswan/plugins/openssl/openssl_plugin.c
+index 8b0a7c5..114d575 100644
+--- a/src/libstrongswan/plugins/openssl/openssl_plugin.c
++++ b/src/libstrongswan/plugins/openssl/openssl_plugin.c
+@@ -609,6 +609,7 @@ METHOD(plugin_t, get_features, int,
+ PLUGIN_PROVIDE(DH, MODP_1024_BIT),
+ PLUGIN_PROVIDE(DH, MODP_1024_160),
+ PLUGIN_PROVIDE(DH, MODP_768_BIT),
++ PLUGIN_REGISTER(DH, openssl_diffie_hellman_create_custom),
+ PLUGIN_PROVIDE(DH, MODP_CUSTOM),
+ #endif
+ #ifndef OPENSSL_NO_RSA
diff --git a/meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.6.2.bb b/meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.6.2.bb
new file mode 100644
index 000000000..f2fe1f1cb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/strongswan/strongswan_5.6.2.bb
@@ -0,0 +1,132 @@
+DESCRIPTION = "strongSwan is an OpenSource IPsec implementation for the \
+Linux operating system."
+SUMMARY = "strongSwan is an OpenSource IPsec implementation"
+HOMEPAGE = "http://www.strongswan.org"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "gmp openssl flex-native flex bison-native"
+
+SRC_URI = "http://download.strongswan.org/strongswan-${PV}.tar.bz2 \
+ file://fix-funtion-parameter.patch \
+ file://0001-memory.h-Include-stdint.h-for-uintptr_t.patch \
+ "
+
+SRC_URI[md5sum] = "46aa3aa18fbc4bd528f9a0345ce79913"
+SRC_URI[sha256sum] = "e0a60a30ebf3c534c223559e1686497a21ded709a5d605c5123c2f52bcc22e92"
+
+EXTRA_OECONF = " \
+ --without-lib-prefix \
+"
+
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}"
+
+
+PACKAGECONFIG ??= "charon curl gmp openssl stroke sqlite3 \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ldap', d)} \
+"
+PACKAGECONFIG[aesni] = "--enable-aesni,--disable-aesni,,${PN}-plugin-aesni"
+PACKAGECONFIG[charon] = "--enable-charon,--disable-charon,"
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl,${PN}-plugin-curl"
+PACKAGECONFIG[gmp] = "--enable-gmp,--disable-gmp,gmp,${PN}-plugin-gmp"
+PACKAGECONFIG[ldap] = "--enable-ldap,--disable-ldap,openldap,${PN}-plugin-ldap"
+PACKAGECONFIG[mysql] = "--enable-mysql,--disable-mysql,mysql5,${PN}-plugin-mysql"
+PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl,${PN}-plugin-openssl"
+PACKAGECONFIG[scep] = "--enable-scepclient,--disable-scepclient,"
+PACKAGECONFIG[soup] = "--enable-soup,--disable-soup,libsoup-2.4,${PN}-plugin-soup"
+PACKAGECONFIG[sqlite3] = "--enable-sqlite,--disable-sqlite,sqlite3,${PN}-plugin-sqlite"
+PACKAGECONFIG[stroke] = "--enable-stroke,--disable-stroke,,${PN}-plugin-stroke"
+PACKAGECONFIG[swanctl] = "--enable-swanctl,--disable-swanctl,,libgcc"
+
+# requires swanctl
+PACKAGECONFIG[systemd-charon] = "--enable-systemd,--disable-systemd,systemd,"
+
+inherit autotools systemd pkgconfig
+
+RRECOMMENDS_${PN} = "kernel-module-ipsec"
+
+FILES_${PN} += "${libdir}/ipsec/lib*${SOLIBS}"
+FILES_${PN}-dbg += "${bindir}/.debug ${libdir}/ipsec/.debug ${libexecdir}/ipsec/.debug"
+FILES_${PN}-dev += "${libdir}/ipsec/lib*${SOLIBSDEV} ${libdir}/ipsec/*.la"
+FILES_${PN}-staticdev += "${libdir}/ipsec/*.a"
+
+CONFFILES_${PN} = "${sysconfdir}/*.conf ${sysconfdir}/ipsec.d/*.conf ${sysconfdir}/strongswan.d/*.conf"
+
+PACKAGES += "${PN}-plugins"
+ALLOW_EMPTY_${PN}-plugins = "1"
+
+PACKAGES_DYNAMIC += "^${PN}-plugin-.*$"
+NOAUTOPACKAGEDEBUG = "1"
+
+python split_strongswan_plugins () {
+ sysconfdir = d.expand('${sysconfdir}/strongswan.d/charon')
+ libdir = d.expand('${libdir}/ipsec/plugins')
+ dbglibdir = os.path.join(libdir, '.debug')
+
+ def add_plugin_conf(f, pkg, file_regex, output_pattern, modulename):
+ dvar = d.getVar('PKGD', True)
+ oldfiles = d.getVar('CONFFILES_' + pkg, True)
+ newfile = '/' + os.path.relpath(f, dvar)
+
+ if not oldfiles:
+ d.setVar('CONFFILES_' + pkg, newfile)
+ else:
+ d.setVar('CONFFILES_' + pkg, oldfiles + " " + newfile)
+
+ split_packages = do_split_packages(d, libdir, 'libstrongswan-(.*)\.so', '${PN}-plugin-%s', 'strongSwan %s plugin', prepend=True)
+ do_split_packages(d, sysconfdir, '(.*)\.conf', '${PN}-plugin-%s', 'strongSwan %s plugin', prepend=True, hook=add_plugin_conf)
+
+ split_dbg_packages = do_split_packages(d, dbglibdir, 'libstrongswan-(.*)\.so', '${PN}-plugin-%s-dbg', 'strongSwan %s plugin - Debugging files', prepend=True, extra_depends='${PN}-dbg')
+ split_dev_packages = do_split_packages(d, libdir, 'libstrongswan-(.*)\.la', '${PN}-plugin-%s-dev', 'strongSwan %s plugin - Development files', prepend=True, extra_depends='${PN}-dev')
+ split_staticdev_packages = do_split_packages(d, libdir, 'libstrongswan-(.*)\.a', '${PN}-plugin-%s-staticdev', 'strongSwan %s plugin - Development files (Static Libraries)', prepend=True, extra_depends='${PN}-staticdev')
+
+ if split_packages:
+ pn = d.getVar('PN', True)
+ d.setVar('RRECOMMENDS_' + pn + '-plugins', ' '.join(split_packages))
+ d.appendVar('RRECOMMENDS_' + pn + '-dbg', ' ' + ' '.join(split_dbg_packages))
+ d.appendVar('RRECOMMENDS_' + pn + '-dev', ' ' + ' '.join(split_dev_packages))
+ d.appendVar('RRECOMMENDS_' + pn + '-staticdev', ' ' + ' '.join(split_staticdev_packages))
+}
+
+PACKAGESPLITFUNCS_prepend = "split_strongswan_plugins "
+
+# Install some default plugins based on default strongSwan ./configure options
+# See https://wiki.strongswan.org/projects/strongswan/wiki/Pluginlist
+RDEPENDS_${PN} += "\
+ ${PN}-plugin-aes \
+ ${PN}-plugin-attr \
+ ${PN}-plugin-cmac \
+ ${PN}-plugin-constraints \
+ ${PN}-plugin-des \
+ ${PN}-plugin-dnskey \
+ ${PN}-plugin-hmac \
+ ${PN}-plugin-kernel-netlink \
+ ${PN}-plugin-md5 \
+ ${PN}-plugin-nonce \
+ ${PN}-plugin-pem \
+ ${PN}-plugin-pgp \
+ ${PN}-plugin-pkcs1 \
+ ${PN}-plugin-pkcs7 \
+ ${PN}-plugin-pkcs8 \
+ ${PN}-plugin-pkcs12 \
+ ${PN}-plugin-pubkey \
+ ${PN}-plugin-random \
+ ${PN}-plugin-rc2 \
+ ${PN}-plugin-resolve \
+ ${PN}-plugin-revocation \
+ ${PN}-plugin-sha1 \
+ ${PN}-plugin-sha2 \
+ ${PN}-plugin-socket-default \
+ ${PN}-plugin-sshkey \
+ ${PN}-plugin-updown \
+ ${PN}-plugin-vici \
+ ${PN}-plugin-x509 \
+ ${PN}-plugin-xauth-generic \
+ ${PN}-plugin-xcbc \
+ ${PN}-plugin-curve25519 \
+ "
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('PACKAGECONFIG', 'swanctl', '${BPN}-swanctl.service', '${BPN}.service', d)}"
diff --git a/meta-openembedded/meta-networking/recipes-support/stunnel/stunnel/fix-openssl-no-des.patch b/meta-openembedded/meta-networking/recipes-support/stunnel/stunnel/fix-openssl-no-des.patch
new file mode 100644
index 000000000..209b0dd40
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/stunnel/stunnel/fix-openssl-no-des.patch
@@ -0,0 +1,54 @@
+Upstream-Status: Pending
+
+When openssl disable des support with configure option 'no-des', it doesn't
+provide des related header file and functions. That causes stunnel compile
+failed. Fix it by checking macro OPENSSL_NO_DES to use openssl des related
+library conditionaly.
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+diff --git a/src/common.h b/src/common.h
+index f7d38b0..bf485af 100644
+--- a/src/common.h
++++ b/src/common.h
+@@ -471,7 +471,9 @@ extern char *sys_errlist[];
+ #ifndef OPENSSL_NO_MD4
+ #include <openssl/md4.h>
+ #endif /* !defined(OPENSSL_NO_MD4) */
++#ifndef OPENSSL_NO_DES
+ #include <openssl/des.h>
++#endif
+ #ifndef OPENSSL_NO_DH
+ #include <openssl/dh.h>
+ #if OPENSSL_VERSION_NUMBER<0x10100000L
+diff --git a/src/protocol.c b/src/protocol.c
+index 587df09..8198eb6 100644
+--- a/src/protocol.c
++++ b/src/protocol.c
+@@ -66,7 +66,7 @@ NOEXPORT char *imap_server(CLI *, SERVICE_OPTIONS *, const PHASE);
+ NOEXPORT char *nntp_client(CLI *, SERVICE_OPTIONS *, const PHASE);
+ NOEXPORT char *connect_server(CLI *, SERVICE_OPTIONS *, const PHASE);
+ NOEXPORT char *connect_client(CLI *, SERVICE_OPTIONS *, const PHASE);
+-#ifndef OPENSSL_NO_MD4
++#if !defined(OPENSSL_NO_MD4) && !defined(OPENSSL_NO_DES)
+ NOEXPORT void ntlm(CLI *, SERVICE_OPTIONS *);
+ NOEXPORT char *ntlm1();
+ NOEXPORT char *ntlm3(char *, char *, char *, char *);
+@@ -1175,7 +1175,7 @@ NOEXPORT char *connect_client(CLI *c, SERVICE_OPTIONS *opt, const PHASE phase) {
+ fd_printf(c, c->remote_fd.fd, "Host: %s", opt->protocol_host);
+ if(opt->protocol_username && opt->protocol_password) {
+ if(!strcasecmp(opt->protocol_authentication, "ntlm")) {
+-#ifndef OPENSSL_NO_MD4
++#if !defined(OPENSSL_NO_MD4) && !defined(OPENSSL_NO_DES)
+ ntlm(c, opt);
+ #else
+ s_log(LOG_ERR, "NTLM authentication is not available");
+@@ -1216,7 +1216,7 @@ NOEXPORT char *connect_client(CLI *c, SERVICE_OPTIONS *opt, const PHASE phase) {
+ return NULL;
+ }
+
+-#ifndef OPENSSL_NO_MD4
++#if !defined(OPENSSL_NO_MD4) && !defined(OPENSSL_NO_DES)
+
+ /*
+ * NTLM code is based on the following documentation:
diff --git a/meta-openembedded/meta-networking/recipes-support/stunnel/stunnel_5.35.bb b/meta-openembedded/meta-networking/recipes-support/stunnel/stunnel_5.35.bb
new file mode 100644
index 000000000..ec8478d6b
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/stunnel/stunnel_5.35.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Program for providing universal TLS/SSL tunneling service"
+HOMEPAGE = "http://www.stunnel.org/"
+DESCRIPTION = "SSL encryption wrapper between remote client and local (inetd-startable) or remote server."
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=866cdc7459d91e092b174388fab8d283"
+DEPENDS = "openssl zlib tcp-wrappers"
+
+RDEPENDS_${PN} += "perl"
+
+SRC_URI = "ftp://ftp.stunnel.org/stunnel/archive/5.x/${BP}.tar.gz \
+ file://fix-openssl-no-des.patch \
+"
+
+SRC_URI[md5sum] = "9079f5fafbccaf88b7d92b227d78249a"
+SRC_URI[sha256sum] = "ffa386ae4c825f35f35157c285e7402a6d58779ad8c3822f74a9d355b54aba1d"
+
+inherit autotools
+
+EXTRA_OECONF += "--with-ssl='${STAGING_EXECPREFIXDIR}' --disable-fips"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd', d)}"
+PACKAGECONFIG[systemd] = "--enable-systemd,--disable-systemd,systemd"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/add-ptest.patch b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/add-ptest.patch
new file mode 100644
index 000000000..b71435a04
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/add-ptest.patch
@@ -0,0 +1,36 @@
+From 8ee1ab1ac89557d48ac1ab7ddcc3c51be9b734ad Mon Sep 17 00:00:00 2001
+From: "Hongjun.Yang" <hongjun.yang@windriver.com>
+Date: Wed, 22 Oct 2014 10:02:48 +0800
+Subject: [PATCH] Add ptest for tcpdump
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongjun.Yang <hongjun.yang@windriver.com>
+
+---
+ Makefile.in | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 0941f0e..3ce40c6 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -437,9 +437,17 @@ distclean:
+ tests/failure-outputs.txt
+ rm -rf autom4te.cache tests/DIFF tests/NEW
+
+-check: tcpdump
++buildtest-TESTS: tcpdump
++
++runtest-PTEST:
+ (cd tests && ./TESTrun.sh)
+
++install-ptest:
++ cp -r tests $(DESTDIR)
++ cp -r config.h $(DESTDIR)
++ install -m 0755 Makefile $(DESTDIR)
++ ln -sf /usr/sbin/tcpdump $(DESTDIR)/tcpdump
++
+ extags: $(TAGFILES)
+ ctags $(TAGFILES)
+
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/run-ptest b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/run-ptest
new file mode 100755
index 000000000..c03a8b8ef
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/run-ptest
@@ -0,0 +1,5 @@
+#!/bin/sh
+make -k runtest-PTEST | sed -e '/: passed/ s/^/PASS: /g' \
+ -e '/: failed/ s/^/FAIL: /g' \
+ -e 's/: passed//g' \
+ -e 's/: failed//g'
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/unnecessary-to-check-libpcap.patch b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/unnecessary-to-check-libpcap.patch
new file mode 100644
index 000000000..8cefadf28
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump/unnecessary-to-check-libpcap.patch
@@ -0,0 +1,34 @@
+From 741d77e42fc4af49804f7ee43b7237e01633cbcd Mon Sep 17 00:00:00 2001
+From: Roy Li <rongqing.li@windriver.com>
+Date: Tue, 8 Jul 2014 13:20:47 +0800
+Subject: [PATCH] unnecessary to check libpcap
+
+Upstream-Status: Pending
+
+since the check of libpcap did not consider the cross-compile, lead to the
+below error:
+ This autoconf log indicates errors, it looked at host include and/or
+ library paths while determining system capabilities.
+
+In fact, the libpcap has been added into the tcpdump's DEPENDS, not need to
+check if libpcap existed.
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+---
+ configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.in b/configure.in
+index b2305a5..b3b5dbf 100644
+--- a/configure.in
++++ b/configure.in
+@@ -418,7 +418,7 @@ dnl Some platforms may need -lnsl for getrpcbynumber.
+ AC_SEARCH_LIBS(getrpcbynumber, nsl,
+ AC_DEFINE(HAVE_GETRPCBYNUMBER, 1, [define if you have getrpcbynumber()]))
+
+-AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
++#AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
+
+ #
+ # Check for these after AC_LBL_LIBPCAP, so we link with the appropriate
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump_4.9.2.bb b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump_4.9.2.bb
new file mode 100644
index 000000000..d38540e34
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpdump_4.9.2.bb
@@ -0,0 +1,51 @@
+SUMMARY = "A sophisticated network protocol analyzer"
+HOMEPAGE = "http://www.tcpdump.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1d4b0366557951c84a94fabe3529f867"
+SECTION = "net"
+DEPENDS = "libpcap"
+
+SRC_URI = " \
+ http://www.tcpdump.org/release/${BP}.tar.gz \
+ file://unnecessary-to-check-libpcap.patch \
+ file://add-ptest.patch \
+ file://run-ptest \
+"
+
+SRC_URI[md5sum] = "9bbc1ee33dab61302411b02dd0515576"
+SRC_URI[sha256sum] = "798b3536a29832ce0cbb07fafb1ce5097c95e308a6f592d14052e1ef1505fe79"
+
+export LIBS=" -lpcap"
+
+inherit autotools-brokensep ptest
+CACHED_CONFIGUREVARS = "ac_cv_linux_vers=${ac_cv_linux_vers=2}"
+
+PACKAGECONFIG ??= "openssl"
+PACKAGECONFIG[openssl] = "--with-crypto=yes, --without-openssl --without-crypto, openssl"
+PACKAGECONFIG[smi] = "--with-smi, --without-smi,libsmi"
+PACKAGECONFIG[libcap-ng] = "--with-cap-ng=yes,--with-cap-ng=no,libcap-ng"
+
+EXTRA_AUTORECONF += " -I m4"
+
+do_configure_prepend() {
+ mkdir -p ${S}/m4
+ if [ -f aclocal.m4 ]; then
+ mv aclocal.m4 ${S}/m4
+ fi
+ # AC_CHECK_LIB(dlpi.. was looking to host /lib
+ sed -i 's:-L/lib::g' ./configure.in
+}
+do_configure_append() {
+ sed -i 's:-L/usr/lib::' ./Makefile
+ sed -i 's:-Wl,-rpath,${STAGING_LIBDIR}::' ./Makefile
+ sed -i 's:-I/usr/include::' ./Makefile
+}
+
+do_install_append() {
+ # tcpdump 4.0.0 installs a copy to /usr/sbin/tcpdump.4.0.0
+ rm -f ${D}${sbindir}/tcpdump.${PV}
+}
+
+do_compile_ptest() {
+ oe_runmake buildtest-TESTS
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-1.2a3-time.patch b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-1.2a3-time.patch
new file mode 100644
index 000000000..386b7f83a
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-1.2a3-time.patch
@@ -0,0 +1,75 @@
+Upstream-Status: Pending [from tcpdump-4.1.1-1.fc14.src.rpm]
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+
+--- tcpslice-1.2a3.orig/search.c 2000-09-10 10:52:40.000000000 +0200
++++ tcpslice-1.2a3/search.c 2006-07-28 14:56:55.000000000 +0200
+@@ -53,7 +53,7 @@
+ /* Size of a packet header in bytes; easier than typing the sizeof() all
+ * the time ...
+ */
+-#define PACKET_HDR_LEN (sizeof( struct pcap_pkthdr ))
++#define PACKET_HDR_LEN (sizeof( struct pcap_sf_pkthdr ))
+
+ extern int snaplen;
+
+@@ -111,16 +111,24 @@
+ static void
+ extract_header( pcap_t *p, u_char *buf, struct pcap_pkthdr *hdr )
+ {
+- memcpy((char *) hdr, (char *) buf, sizeof(struct pcap_pkthdr));
++ struct pcap_sf_pkthdr hdri;
++
++ memcpy((char *) &hdri, (char *) buf, sizeof(struct pcap_sf_pkthdr));
+
+ if ( pcap_is_swapped( p ) )
+ {
+- hdr->ts.tv_sec = SWAPLONG(hdr->ts.tv_sec);
+- hdr->ts.tv_usec = SWAPLONG(hdr->ts.tv_usec);
+- hdr->len = SWAPLONG(hdr->len);
+- hdr->caplen = SWAPLONG(hdr->caplen);
++ hdr->ts.tv_sec = SWAPLONG(hdri.ts.tv_sec);
++ hdr->ts.tv_usec = SWAPLONG(hdri.ts.tv_usec);
++ hdr->len = SWAPLONG(hdri.len);
++ hdr->caplen = SWAPLONG(hdri.caplen);
++ }
++ else
++ {
++ hdr->ts.tv_sec = hdri.ts.tv_sec;
++ hdr->ts.tv_usec = hdri.ts.tv_usec;
++ hdr->len = hdri.len;
++ hdr->caplen = hdri.caplen;
+ }
+-
+ /*
+ * From bpf/libpcap/savefile.c:
+ *
+--- tcpslice-1.2a3.orig/tcpslice.h 1995-11-02 00:40:53.000000000 +0100
++++ tcpslice-1.2a3/tcpslice.h 2006-07-28 14:56:55.000000000 +0200
+@@ -20,6 +20,26 @@
+ */
+
+
++#include <time.h>
++/* #include <net/bpf.h> */
++
++/*
++ * This is a timeval as stored in disk in a dumpfile.
++ * It has to use the same types everywhere, independent of the actual
++ * `struct timeval'
++ */
++
++struct pcap_timeval {
++ bpf_int32 tv_sec; /* seconds */
++ bpf_int32 tv_usec; /* microseconds */
++};
++
++struct pcap_sf_pkthdr {
++ struct pcap_timeval ts; /* time stamp */
++ bpf_u_int32 caplen; /* length of portion present */
++ bpf_u_int32 len; /* length this packet (off wire) */
++};
++
+ time_t gwtm2secs( struct tm *tm );
+
+ int sf_find_end( struct pcap *p, struct timeval *first_timestamp,
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-CVS.20010207-bpf.patch b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-CVS.20010207-bpf.patch
new file mode 100644
index 000000000..0a7359311
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice/tcpslice-CVS.20010207-bpf.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Pending [from tcpdump-4.1.1-1.fc14.src.rpm]
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+diff -ur tcpdump-3.8.1/tcpslice/tcpslice.c tcpdump-3.8.1.new/tcpslice/tcpslice.c
+--- tcpslice/tcpslice.c 2004-01-15 17:35:53.000000000 +0100
++++ tcpslice/tcpslice.c 2004-01-15 16:12:57.000000000 +0100
+@@ -35,7 +35,7 @@
+ #include <sys/file.h>
+ #include <sys/stat.h>
+
+-#include <net/bpf.h>
++/* #include <net/bpf.h> */
+
+ #include <ctype.h>
+ #ifdef HAVE_FCNTL_H
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice_1.2a3.bb b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice_1.2a3.bb
new file mode 100644
index 000000000..e65739a5c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpdump/tcpslice_1.2a3.bb
@@ -0,0 +1,36 @@
+SUMMARY = "tcpslice"
+DESCRIPTION = "A tool for extracting parts of a tcpdump packet trace."
+HOMEPAGE = "http://www.tcpdump.org/related.html"
+SECTION = "net"
+
+LICENSE = "BSD-4-Clause"
+LIC_FILES_CHKSUM = "file://tcpslice.c;endline=20;md5=99519e2e5234d1662a4ce16baa62c64e"
+
+SRC_URI = "ftp://ftp.ee.lbl.gov/${BP}.tar.gz \
+ file://tcpslice-1.2a3-time.patch \
+ file://tcpslice-CVS.20010207-bpf.patch \
+ "
+SRC_URI[md5sum] = "e329cbeb7e589f132d92c3447c477190"
+SRC_URI[sha256sum] = "4096e8debc898cfaa16b5306f1c42f8d18b19e30e60da8d4deb781c8f684c840"
+
+inherit autotools-brokensep
+
+DEPENDS += "libpcap"
+
+# We do not want to autoreconf. We must specify srcdir as ".".
+# We have to set the ac_cv_* cache variables as well as pass the normal
+# cross-compilation options to configure!
+#
+do_configure () {
+ oe_runconf \
+ --srcdir="." \
+ ac_cv_build=${BUILD_SYS} \
+ ac_cv_host=${HOST_SYS} \
+ ac_cv_target=${HOST_SYS}
+}
+
+do_install () {
+ mkdir -p ${D}/usr/sbin
+ install -c -m 555 tcpslice ${D}/usr/sbin
+}
+
diff --git a/meta-openembedded/meta-networking/recipes-support/tcpreplay/tcpreplay_4.2.6.bb b/meta-openembedded/meta-networking/recipes-support/tcpreplay/tcpreplay_4.2.6.bb
new file mode 100644
index 000000000..681ef02bb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tcpreplay/tcpreplay_4.2.6.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Use previously captured traffic to test network devices"
+
+HOMEPAGE = "http://tcpreplay.synfin.net/"
+SECTION = "net"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://docs/LICENSE;md5=890b830b22fd632e9ffd996df20338f8"
+
+SRC_URI = "https://github.com/appneta/tcpreplay/releases/download/v${PV}/tcpreplay-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "3e65d5b872e441c6a0038191a3dc7ce9"
+SRC_URI[sha256sum] = "043756c532dab93e2be33a517ef46b1341f7239278a1045ae670041dd8a4531d"
+
+DEPENDS = "libpcap"
+
+EXTRA_OECONF += "--with-libpcap=${STAGING_DIR_HOST}/usr"
+
+inherit siteinfo autotools-brokensep
+
diff --git a/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/disable-documentation.patch b/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/disable-documentation.patch
new file mode 100644
index 000000000..01d0236be
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/disable-documentation.patch
@@ -0,0 +1,37 @@
+--- a/configure.ac 2016-01-01 17:42:27.000000000 +0100
++++ b/configure.ac 2017-04-20 14:03:37.238254471 +0200
+@@ -284,24 +284,12 @@
+ AC_SUBST(LIBS)
+ AC_SUBST(ADDITIONAL_OBJECTS)
+
+-# Check for asciidoc
+-AC_PATH_PROG(A2X, a2x, no)
+-AM_CONDITIONAL(HAVE_A2X, test "x$A2X" != "xno")
+-if test x"$A2X" = x"no"; then
+- AC_MSG_ERROR([Test for asciidoc failed. See the file 'INSTALL' for help.])
+-fi
+-
+ AC_CONFIG_FILES([
+ Makefile
+ src/Makefile
+ data/Makefile
+ data/templates/Makefile
+ etc/Makefile
+-docs/Makefile
+-docs/man5/Makefile
+-docs/man5/tinyproxy.conf.txt
+-docs/man8/Makefile
+-docs/man8/tinyproxy.txt
+ m4macros/Makefile
+ tests/Makefile
+ tests/scripts/Makefile
+--- a/Makefile.am 2016-01-01 17:42:27.000000000 +0100
++++ b/Makefile.am 2017-04-20 14:03:53.842822997 +0200
+@@ -2,7 +2,6 @@
+ src \
+ data \
+ etc \
+- docs \
+ m4macros \
+ tests
+
diff --git a/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/tinyproxy.service b/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/tinyproxy.service
new file mode 100644
index 000000000..ea079f955
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy/tinyproxy.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Tinyproxy, Lightweight http(s) proxy daemon
+RequiresMountsFor=/var
+
+[Service]
+Group=tinyproxy
+ExecStartPre=/bin/mkdir -p /var/log/tinyproxy
+ExecStartPre=/bin/chown -R nobody.tinyproxy /var/log/tinyproxy
+ExecStartPre=/bin/mkdir -p /var/run/tinyproxy
+ExecStartPre=/bin/chown -R nobody.tinyproxy /var/run/tinyproxy
+ExecStart=/usr/sbin/tinyproxy -d
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy_1.8.4.bb b/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy_1.8.4.bb
new file mode 100644
index 000000000..98192dc99
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tinyproxy/tinyproxy_1.8.4.bb
@@ -0,0 +1,38 @@
+SUMMARY = "Lightweight http(s) proxy daemon"
+HOMEPAGE = "https://tinyproxy.github.io/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI = "https://github.com/${BPN}/${BPN}/releases/download/${PV}/${BP}.tar.gz \
+ file://disable-documentation.patch \
+ file://tinyproxy.service"
+
+SRC_URI[md5sum] = "3b60f7d08e0821ed1a3e2cf1e5778cac"
+SRC_URI[sha256sum] = "8234c879a129feee61efa98bac14a1a3e46e5cf08f01696a216940872aa70faf"
+
+EXTRA_OECONF += " \
+ --enable-filter \
+ --enable-transparent \
+ --disable-regexcheck \
+ --enable-reverse \
+ --enable-upstream \
+ --enable-xtinyproxy \
+ "
+
+inherit autotools systemd useradd
+
+#User specific
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "--system --home /dev/null \
+ --no-user-group --gid nogroup tinypoxy"
+
+SYSTEMD_PACKAGES += "${BPN}"
+SYSTEMD_SERVICE_${PN} = "tinyproxy.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "enable"
+
+do_install_append() {
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/tinyproxy.service ${D}${systemd_system_unitdir}
+ fi
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp/tnftp-autotools.patch b/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp/tnftp-autotools.patch
new file mode 100644
index 000000000..1bda576bc
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp/tnftp-autotools.patch
@@ -0,0 +1,42 @@
+[PATCH] Update configure.ac and Makefile.am to resolve warnings/errors
+
+Upstream-Status: Pending
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ configure.ac | 2 ++
+ libnetbsd/Makefile.am | 2 +-
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index a96d2ab..b3b3069 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -71,9 +71,11 @@ AH_TEMPLATE([WITH_SSL],
+ #
+ # Checks for programs.
+ #
++AM_PROG_AR()
+ AC_PROG_CC()
+ AC_PROG_AWK()
+ AC_PROG_LIBTOOL()
++AM_PROG_CC_C_O()
+
+ #
+ # Checks for tool features.
+diff --git a/libnetbsd/Makefile.am b/libnetbsd/Makefile.am
+index 3e5c3ce..39bb12d 100644
+--- a/libnetbsd/Makefile.am
++++ b/libnetbsd/Makefile.am
+@@ -5,7 +5,7 @@ noinst_LTLIBRARIES = libnetbsd.la
+ libnetbsd_la_SOURCES =
+
+
+-CPPFLAGS = \
++AM_CPPFLAGS = \
+ -I$(srcdir) \
+ -I$(top_srcdir) \
+ -I$(top_builddir)
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20151004.bb b/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20151004.bb
new file mode 100644
index 000000000..83ad11b0e
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tnftp/tnftp_20151004.bb
@@ -0,0 +1,39 @@
+SUMMARY = "Enhanced NetBSD ftp client"
+DESCRIPTION = "tnftp (formerly known as lukemftp) is a port of the NetBSD FTP client \
+to other systems. It offers many enhancements over the traditional \
+BSD FTP client, including command-line editing, command-line fetches \
+of FTP and HTTP URLs (including via proxies), command-line uploads of \
+FTP URLs, context-sensitive word completion, dynamic progress bar, \
+IPv6 support, modification time preservation, paging of local and \
+remote files, passive mode support (with fallback to active mode), \
+SOCKS support, TIS FWTK gate-ftp server support, and transfer rate \
+throttling."
+
+SECTION = "net"
+LICENSE = "BSD-4-Clause"
+
+DEPENDS = "ncurses"
+
+SRC_URI = "ftp://ftp.netbsd.org/pub/NetBSD/misc/tnftp/${BPN}-${PV}.tar.gz \
+ file://tnftp-autotools.patch \
+"
+
+inherit autotools update-alternatives pkgconfig
+
+ALTERNATIVE_PRIORITY = "100"
+
+ALTERNATIVE_${PN} = "ftp"
+ALTERNATIVE_LINK_NAME_${PN} = "${bindir}/ftp"
+ALTERNATIVE_TARGET_${PN} = "${bindir}/tnftp"
+
+FILES_${PN} = "${bindir}/tnftp"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=6d6796cb166a9bb050958241dad9479e"
+SRC_URI[md5sum] = "a49fbe752318d5a7893f900046ea00d5"
+SRC_URI[sha256sum] = "c94a8a49d3f4aec1965feea831d4d5bf6f90c65fd8381ee0863d11a5029a43a0"
+
+PACKAGECONFIG ?= "openssl \
+ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)} \
+"
+PACKAGECONFIG[openssl] = "--enable-ssl, --disable-ssl --with-ssl=no, openssl"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-networking/recipes-support/traceroute/traceroute/filter-out-the-patches-from-subdirs.patch b/meta-openembedded/meta-networking/recipes-support/traceroute/traceroute/filter-out-the-patches-from-subdirs.patch
new file mode 100644
index 000000000..2c030b55d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/traceroute/traceroute/filter-out-the-patches-from-subdirs.patch
@@ -0,0 +1,47 @@
+From e273e0ebc753645555909bcc4874c72458b17891 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Fri, 17 Jan 2014 03:17:44 -0500
+Subject: [PATCH] Make.rules: filter-out the patches from subdirs
+
+The $(subdirs) contains all the dirs under the ${B}, and this one:
+
+do_unpack[cleandirs] = "${S}/patches"
+
+will create a "patches" dir, then there will be compile errors, filter
+out the patches will fix the problem.
+
+Note: poky doesn't have this problem since it separates the ${S} and
+${B}
+
+Upstream-Status: Inappropriate [OE specific]
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ Make.rules | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Make.rules b/Make.rules
+index b077cd5..0bfce2d 100644
+--- a/Make.rules
++++ b/Make.rules
+@@ -97,7 +97,7 @@ endif
+ subdirs := $(filter-out $(SKIPDIRS), $(subdirs))
+ endif
+
+-install install-%: subdirs := $(filter-out $(SKIPINSTALL), $(subdirs))
++install install-%: subdirs := $(filter-out $(SKIPINSTALL) patches, $(subdirs))
+
+
+ override MAKE += srcdir=$(srcdir) subdirs="$(subdirs)" shared=$(shared)
+@@ -106,7 +106,7 @@ override MAKE += srcdir=$(srcdir) subdirs="$(subdirs)" shared=$(shared)
+ INCLUDEDIRS := $(filter $(INCLUDEDIRS), $(subdirs))
+ LIBDIRS := $(filter $(LIBDIRS), $(subdirs))
+ MODDIRS := $(filter $(MODDIRS), $(subdirs))
+-EXEDIRS := $(filter-out $(INCLUDEDIRS) $(LIBDIRS) $(MODDIRS), $(subdirs))
++EXEDIRS := $(filter-out $(INCLUDEDIRS) $(LIBDIRS) $(MODDIRS) patches, $(subdirs))
+ MODUSERS := $(filter $(MODUSERS), $(subdirs))
+ SBINUSERS := $(filter $(SBINUSERS), $(subdirs))
+
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-networking/recipes-support/traceroute/traceroute_2.1.0.bb b/meta-openembedded/meta-networking/recipes-support/traceroute/traceroute_2.1.0.bb
new file mode 100644
index 000000000..8f17d3fdb
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/traceroute/traceroute_2.1.0.bb
@@ -0,0 +1,45 @@
+SUMMARY = "A new modern implementation of traceroute(8) utility for Linux systems"
+DESCRIPTION = "The traceroute utility displays the route used by IP packets on \
+their way to a specified network (or Internet) host. Traceroute displays \
+the IP number and host name (if possible) of the machines along the \
+route taken by the packets. Traceroute is used as a network debugging \
+tool. If you're having network connectivity problems, traceroute will \
+show you where the trouble is coming from along the route."
+SECTION = "net"
+HOMEPAGE = "http://traceroute.sourceforge.net/"
+LICENSE = "GPL-2.0+ & LGPL-2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
+
+inherit update-alternatives
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/traceroute/traceroute/${BP}/${BP}.tar.gz \
+ file://filter-out-the-patches-from-subdirs.patch \
+"
+
+SRC_URI[md5sum] = "84d329d67abc3fb83fc8cb12aeaddaba"
+SRC_URI[sha256sum] = "3669d22a34d3f38ed50caba18cd525ba55c5c00d5465f2d20d7472e5d81603b6"
+
+EXTRA_OEMAKE = "VPATH=${STAGING_LIBDIR}"
+
+do_compile() {
+ export LDFLAGS="${TARGET_LDFLAGS} -L${S}/libsupp"
+ oe_runmake "env=yes"
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m755 ${BPN}/${BPN} ${D}${bindir}
+
+ install -m755 wrappers/tcptraceroute ${D}${bindir}
+
+ install -d ${D}${mandir}/man8
+ install -p -m644 ${BPN}/${BPN}.8 ${D}${mandir}/man8
+ ln -s ${BPN}.8 ${D}${mandir}/man8/${BPN}6.8
+ ln -s ${BPN}.8 ${D}${mandir}/man8/tcptraceroute.8
+
+}
+
+ALTERNATIVE_PRIORITY = "60"
+ALTERNATIVE_${PN} = "traceroute"
+ALTERNATIVE_LINK_NAME[traceroute] = "${bindir}/traceroute"
diff --git a/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl.inc b/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl.inc
new file mode 100644
index 000000000..1c11823dd
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Tool for controlling the Linux TUN/TAP driver"
+SECTION = "net"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://tunctl.c;beginline=1;endline=4;md5=ff3a09996bc5fff6bc5d4e0b4c28f999"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/tunctl/tunctl-${PV}.tar.gz \
+ file://makefile-add-ldflags.patch \
+ "
+
+do_compile() {
+ oe_runmake tunctl
+}
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install -m 755 tunctl ${D}/${sbindir}
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl/makefile-add-ldflags.patch b/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl/makefile-add-ldflags.patch
new file mode 100644
index 000000000..c96f538d2
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl/makefile-add-ldflags.patch
@@ -0,0 +1,19 @@
+Add LDFLAGS variable to Makefile, make sure the extra linker flags can be passed.
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+
+diff --git a/Makefile b/Makefile
+index a0aa7f6..d6ce2c7 100644
+--- a/Makefile
++++ b/Makefile
+@@ -14,7 +14,7 @@ MAN_DIR ?= /usr/share/man/man$(MANS)
+ all : $(BIN) $(MAN)
+
+ $(BIN) : $(BIN).c
+- $(CC) $(CFLAGS) -o $(BIN) $(BIN).c
++ $(CC) $(CFLAGS) ${LDFLAGS} -o $(BIN) $(BIN).c
+
+ $(MAN) : $(PACKAGE).sgml
+ docbook2man $(PACKAGE).sgml
diff --git a/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl_1.5.bb b/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl_1.5.bb
new file mode 100644
index 000000000..dd265612f
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/tunctl/tunctl_1.5.bb
@@ -0,0 +1,4 @@
+require tunctl.inc
+
+SRC_URI[md5sum] = "fdbedc263b3e85bb0e087cd567414607"
+SRC_URI[sha256sum] = "aa2a6c4cc6bfacb11e0d9f62334a6638a0d435475c61230116f00b6af8b14fff"
diff --git a/meta-openembedded/meta-networking/recipes-support/uftp/uftp_4.9.3.bb b/meta-openembedded/meta-networking/recipes-support/uftp/uftp_4.9.3.bb
new file mode 100644
index 000000000..1166f9a8d
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/uftp/uftp_4.9.3.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Encrypted UDP based FTP with multicast"
+HOMEPAGE = "https://sourceforge.net/projects/uftp-multicast"
+SECTION = "libs/network"
+
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d32239bcb673463ab874e80d47fae504"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/uftp-multicast/source-tar/uftp-${PV}.tar.gz"
+SRC_URI[md5sum] = "231d6ba7820d89a712fe7d727ab0f8e6"
+SRC_URI[sha256sum] = "9e9215af0315257c6cc4f40fbc6161057e861be1fff10a38a5564f699e99c78f"
+
+DEPENDS = "openssl"
+
+do_install () {
+ oe_runmake install DESTDIR=${D}
+}
diff --git a/meta-openembedded/meta-networking/recipes-support/wireshark/README b/meta-openembedded/meta-networking/recipes-support/wireshark/README
new file mode 100644
index 000000000..63b5b7263
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/wireshark/README
@@ -0,0 +1,45 @@
+#
+Wireshark - Notes
+
+URL: http://www.wireshark.org/
+User Guide: http://www.wireshark.org/docs/wsug_html_chunked/
+Secruity advisories: http://www.wireshark.org/security/
+
+Wireshark is slowly moving away from gtk and towards QT as their graphical stack.
+Currently gtk is supported with this release and I plan on integrating QT.
+
+
+
+Adding the wireshark to your build
+========================================
+
+via local.conf
+IMAGE_INSTALL_append = " wireshark"
+
+Adding the wireshark to your graphical build
+========================================
+via local.conf
+IMAGE_INSTALL_append = " wireshark"
+
+and one of:
+
+EXTRA_IMAGE_FEATURES += "x11-base"
+
+or use the "core-image-x11"
+
+
+Maintenance
+-----------
+
+Send patches, comments or questions to openembedded-devel@lists.openembedded.org
+
+When sending single patches, please use something like:
+
+ git send-email -1 -M \
+ --to openembedded-devel@lists.openembedded.org \
+ --cc akuster@mvista.com \
+ --subject-prefix=meta-networking][PATCH
+
+Maintainer: Armin Kuster <akuster@mvista.com>
+
+
diff --git a/meta-openembedded/meta-networking/recipes-support/wireshark/files/libgcrypt.patch b/meta-openembedded/meta-networking/recipes-support/wireshark/files/libgcrypt.patch
new file mode 100644
index 000000000..2aa58f73c
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/wireshark/files/libgcrypt.patch
@@ -0,0 +1,53 @@
+use OR PKG_CONFIG scheme for libgcrypt
+
+Upstream-Status: Inappropriate OE specific
+
+Signed-off-by: Armin Kuster <akuster808@gmail.com>
+
+Index: wireshark-2.4.4/m4/libgcrypt.m4
+===================================================================
+--- wireshark-2.4.4.orig/m4/libgcrypt.m4
++++ wireshark-2.4.4/m4/libgcrypt.m4
+@@ -27,11 +27,11 @@ AC_DEFUN([AM_PATH_LIBGCRYPT],
+ libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
+ if test x$libgcrypt_config_prefix != x ; then
+ if test x${LIBGCRYPT_CONFIG+set} != xset ; then
+- LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
++ LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/libgcrypt.pc
+ fi
+ fi
+
+- AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no)
++ AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt.pc, no)
+ tmp=ifelse([$1], ,1:1.2.0,$1)
+ if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
+ req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
+@@ -50,7 +50,7 @@ AC_DEFUN([AM_PATH_LIBGCRYPT],
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
+ req_micro=`echo $min_libgcrypt_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
+- libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
++ libgcrypt_config_version=`$PKG_CONFIG --modversion libgcrypt`
+ major=`echo $libgcrypt_config_version | \
+ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
+ minor=`echo $libgcrypt_config_version | \
+@@ -82,7 +82,7 @@ AC_DEFUN([AM_PATH_LIBGCRYPT],
+ # If we have a recent libgcrypt, we should also check that the
+ # API is compatible
+ if test "$req_libgcrypt_api" -gt 0 ; then
+- tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
++ tmp=`$PKG_CONFIG --api-version libgcrypt 2>/dev/null || echo 0`
+ if test "$tmp" -gt 0 ; then
+ AC_MSG_CHECKING([LIBGCRYPT API version])
+ if test "$req_libgcrypt_api" -eq "$tmp" ; then
+@@ -95,8 +95,8 @@ AC_DEFUN([AM_PATH_LIBGCRYPT],
+ fi
+ fi
+ if test $ok = yes; then
+- LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
+- LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
++ LIBGCRYPT_CFLAGS=`$PKG_CONFIG --cflags libgcrypt`
++ LIBGCRYPT_LIBS=`$PKG_CONFIG --libs libgcrypt`
+ ifelse([$2], , :, [$2])
+ else
+ LIBGCRYPT_CFLAGS=""
diff --git a/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_2.4.6.bb b/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_2.4.6.bb
new file mode 100644
index 000000000..3da0a7baf
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/wireshark/wireshark_2.4.6.bb
@@ -0,0 +1,73 @@
+DESCRIPTION = "wireshark - a popular network protocol analyzer"
+HOMEPAGE = "http://www.wireshark.org"
+SECTION = "net"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=6e271234ba1a13c6e512e76b94ac2f77"
+
+DEPENDS = "pcre expat glib-2.0 glib-2.0-native libgcrypt libgpg-error"
+
+SRC_URI = "https://1.as.dl.wireshark.org/src/${BP}.tar.xz"
+SRC_URI += "file://libgcrypt.patch"
+
+UPSTREAM_CHECK_URI = "https://1.as.dl.wireshark.org/src"
+
+SRC_URI[md5sum] = "8cfb73e286dd6427ca4405e6e802d13e"
+SRC_URI[sha256sum] = "8e965fd282bc0c09e7c4eba5f08a555d0ccf40a7d1544b939e01b90bc893d5fe"
+
+PE = "1"
+
+inherit autotools pkgconfig perlnative upstream-version-is-even
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGECONFIG ?= "libpcap gnutls libnl libcap sbc"
+PACKAGECONFIG += " ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk2 graphics", "", d)}"
+
+PACKAGECONFIG[libcap] = "--with-libcap=${STAGING_DIR_HOST}/usr, --with-libcap=no --enable-pcap-ng-default , libcap"
+PACKAGECONFIG[libpcap] = "--with-pcap=${STAGING_DIR_HOST}/usr --with-pcap-remote, --with-pcap=no --enable-pcap-ng-default , libpcap"
+PACKAGECONFIG[libsmi] = "--with-libsmi=yes, --with-libsmi=no, libsmi"
+PACKAGECONFIG[libnl] = "--with-libnl=yes, --with-libnl=no, libnl"
+PACKAGECONFIG[portaudio] = "--with-portaudio=yes, --with-portaudio=no, portaudio-v19"
+PACKAGECONFIG[gtk2] = "--with-gtk=2, , gtk+"
+PACKAGECONFIG[gtk3] = "--with-gtk=3, , gtk+3"
+PACKAGECONFIG[graphics] = "--enable-wireshark, --with-gtk=no --disable-wireshark,"
+PACKAGECONFIG[gnutls] = "--with-gnutls=yes, --with-gnutls=no, gnutls"
+PACKAGECONFIG[ssl] = "--with-ssl=yes, --with-ssl=no, openssl"
+PACKAGECONFIG[krb5] = "--with-krb5=yes, --with-krb5=no, krb5"
+PACKAGECONFIG[lua] = "--with-lua=yes, --with-lua=no, lua"
+PACKAGECONFIG[zlib] = "--with-zlib=yes, --with-zlib=no, zlib"
+PACKAGECONFIG[geoip] = "--with-geoip=yes, --with-geoip=no, geoip"
+PACKAGECONFIG[plugins] = "--with-plugins=yes, --with-plugins=no"
+PACKAGECONFIG[sbc] = "--with-sbc=yes, --with-sbc=no, sbc"
+PACKAGECONFIG[libssh] = "--with-libssh=${STAGING_DIR_HOST}/usr, --with-libssh=no, libssh2"
+PACKAGECONFIG[lz4] = "--with-lz4=${STAGING_DIR_HOST}/usr, --with-lz4=no, lz4"
+
+# these next two options require addional layers
+PACKAGECONFIG[c-ares] = "--with-c-ares=yes, --with-c-ares=no, c-ares"
+
+EXTRA_OECONF += "--with-libgcrypt-prefix=${PKG_CONFIG_DIR} --with-qt=no --enable-tshark --enable-rawshark"
+
+LDFLAGS_append = " -lgpg-error"
+
+# Currently wireshark does not install header files
+do_install_append () {
+
+ install -d ${D}/${includedir}/${BPN}
+ install -d ${D}/${includedir}/${BPN}/epan
+ install -d ${D}/${includedir}/${BPN}/epan/crypt
+ install -d ${D}/${includedir}/${BPN}/epan/dfilter
+ install -d ${D}/${includedir}/${BPN}/epan/dissectors
+ install -d ${D}/${includedir}/${BPN}/epan/ftypes
+ install -d ${D}/${includedir}/${BPN}/epan/wmem
+
+ install config.h ${D}/${includedir}/${BPN}
+ install ${S}/register.h ${D}/${includedir}/${BPN}
+ install -D ${S}/epan/*.h ${D}/${includedir}/${BPN}/epan
+ install -D ${S}/epan/crypt/*.h ${D}/${includedir}/${BPN}/epan/crypt
+ install -D ${S}/epan/dfilter/*.h ${D}/${includedir}/${BPN}/epan/dfilter
+ install -D ${S}/epan/dissectors/*.h ${D}/${includedir}/${BPN}/epan/dissectors
+ install -D ${S}/epan/ftypes/*.h ${D}/${includedir}/${BPN}/epan/ftypes
+ install -D ${S}/epan/wmem/*.h ${D}/${includedir}/${BPN}/epan/wmem
+}
+
+FILES_${PN} += "${datadir}*"
diff --git a/meta-openembedded/meta-networking/recipes-support/wpan-tools/wpan-tools_git.bb b/meta-openembedded/meta-networking/recipes-support/wpan-tools/wpan-tools_git.bb
new file mode 100644
index 000000000..b6d2f6923
--- /dev/null
+++ b/meta-openembedded/meta-networking/recipes-support/wpan-tools/wpan-tools_git.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Userspace tools for Linux IEEE 802.15.4 stack"
+HOMEPAGE = "http://wpan.cakelab.org/releases/"
+DESCRIPTION = "This is a set of utils to manage the Linux WPAN stack via \
+netlink interface. This requires recent kernel with nl802154 interface."
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4cfd939b1d7e6aba9fcefb7f6e2fd45d"
+
+DEPENDS = "libnl"
+
+PV = "0.8+git${SRCPV}"
+SRC_URI = "git://github.com/linux-wpan/wpan-tools \
+ "
+SRCREV = "3f473f5136f89773997cb4fff2d8ed647734e2f5"
+
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/meta-openembedded/meta-networking/site/endian-big b/meta-openembedded/meta-networking/site/endian-big
new file mode 100644
index 000000000..3a968e326
--- /dev/null
+++ b/meta-openembedded/meta-networking/site/endian-big
@@ -0,0 +1,2 @@
+# rp-pppoe
+rpppoe_cv_pack_bitfields=${rpppoe_cv_pack_bitfields=normal}
diff --git a/meta-openembedded/meta-networking/site/endian-little b/meta-openembedded/meta-networking/site/endian-little
new file mode 100644
index 000000000..0bcd966ea
--- /dev/null
+++ b/meta-openembedded/meta-networking/site/endian-little
@@ -0,0 +1,2 @@
+# rp-pppoe
+rpppoe_cv_pack_bitfields=${rpppoe_cv_pack_bitfields=rev}
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 i2ͤ
++Τ #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 915
++夦Ƥ󤭤夦Ԥ󤯤ؤ #T35 99pink
++夦ˤΤ礦󤾤 #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 SALAage
++餷 #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 JAL
++󤬤ꤢϤह #JN 󥬥ꥢϥॹ
++󤯤ää㡼 #JN 󥯡åå㡼
++󤰤ݤäȤΤϤդ #CJ 󥰥ݥåȤϥե
++夦礯 #JN
++夦礯 #T35
++夦ʤʤפ #T35 17ץ
++夦ˤ #T35
++夦Ϥˤ夦 #T35 1820
++夦դ #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 FINALFANTAZY
++դä桼 #JN եå桼
++դä椦֤ #CJ FuchYou֤
++դӤ #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
+# 10C 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 ""
+ "Modle: %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 donnes des "
+-"lecteurs supports\n"
+-"ATTENTION : Mais en utilisant une valeur courante, il renvoie quelque "
+-"chose.\n"
+-"ATTENTION : Notez que la temprature renvoye peut tre errone.\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 possde pas de capteur de temprature.\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 : sparateur invalide.\n"
+
+-#: src/hddtemp.c:319
++#: src/hddtemp.c:349
+ #, c-format
+ msgid "ERROR: invalid port number.\n"
+ msgstr "ERREUR : numro 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 temprature des lecteurs passs 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 donne "
+ "qui \n"
+ " permet hddtemp de reconnatre les lecteurs "
+@@ -172,6 +147,7 @@ msgstr ""
+ "dfaut).\n"
+ " -f --file=FILE : specifie le fichier utiliser comme base de "
+ "donnes.\n"
++" -F --foreground : ne pas dmoniser, rester au premier plan.\n"
+ " -l --listen=addr : coute sur une interface spcifique (en mode dmon "
+ "TCP/IP).\n"
+ " -n --numeric : affiche seulement la temprature.\n"
+@@ -180,6 +156,8 @@ msgstr ""
+ "dmon TCP/IP).\n"
+ " -S --syslog=s : enregistre la temprature dans syslog tous les s "
+ "secondes.\n"
++" -u --unit=[C|F] : affiche la temprature en degrs Celsius ou "
++"Fahrenheit.\n"
+ " -q --quiet : ne vrifie pas si le lecteur est support.\n"
+ " -v --version : affiche la version de hddtemp.\n"
+ " -w --wake-up : rveiller le lecteur si ncessaire.\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 spcifier 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 "
+ "mme 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 dterminer 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 excdant %1$d caractres 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 donnes des "
++#~ "lecteurs supports\n"
++#~ "ATTENTION : Mais en utilisant une valeur courante, il renvoie quelque "
++#~ "chose.\n"
++#~ "ATTENTION : Notez que la temprature renvoye peut tre errone.\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| Vrde | 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 stds\n"
+-"VARNING: Men anvnder man ett vanligt vrde rapporterar den ngot.\n"
+-"VARNING: Notera att temperaturen som visas kan vara felaktig.\n"
+-"VARNING: Se --help, --debug och --drivebase flaggorna.\n"
+-"VARNING: Och glm inte att du kan lgga 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: knd 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: oknd 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 fltvrdena verkar matcha temperaturen, var sker p att du\n"
+ "lst manualsidan fr hddtemp fre 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 hrddiskar 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 "Fr f argument: du mste 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 anvnda --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 faststlla busstyp (eller s r denna busstyp oknd)\n"
+
+-#: src/ata.c:66 src/scsi.c:68
++#: src/ata.c:66 src/scsi.c:64
+ msgid "unknown"
+ msgstr "oknd"
+
+-#: 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 "flt(%d)\t = %d\n"
+-
+-#: src/ata.c:167
+ msgid "S.M.A.R.T. not available"
+ msgstr "S.M.A.R.T. r inte tillgnglig"
+
+-#: src/db.c:180
++#: src/db.c:115
++#, c-format
++msgid ""
++"\n"
++"Regexp%s| Value | Description\n"
++"------%s---------------------\n"
++msgstr ""
++"\n"
++"Regexp%s| Vrde | 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 "igenknning 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 stds\n"
++#~ "VARNING: Men anvnder man ett vanligt vrde rapporterar den ngot.\n"
++#~ "VARNING: Notera att temperaturen som visas kan vara felaktig.\n"
++#~ "VARNING: Se --help, --debug och --drivebase flaggorna.\n"
++#~ "VARNING: Och glm inte att du kan lgga till din disk till hddtemp.db\n"
++
++#~ msgid "field(%d)\t = %d\n"
++#~ msgstr "flt(%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}
+}
diff --git a/meta-openembedded/meta-perl/COPYING.MIT b/meta-openembedded/meta-perl/COPYING.MIT
new file mode 100644
index 000000000..89de35479
--- /dev/null
+++ b/meta-openembedded/meta-perl/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-perl/README b/meta-openembedded/meta-perl/README
new file mode 100644
index 000000000..67f291079
--- /dev/null
+++ b/meta-openembedded/meta-perl/README
@@ -0,0 +1,93 @@
+meta-perl
+=========
+This layer provides commonly-used perl related recipes such as perl libraries
+in the Comprehensive Perl Archive Network.
+
+Contents and Help
+-----------------
+
+In this section the contents of the layer is listed, along with a short
+help for each package.
+
+ -- libdbi-perl --
+ The DBI is a database access module for the Perl programming language.
+ It defines a set of methods, variables, and conventions that provide
+ a consistent database interface, independent of the actual database
+ being used.
+ |<- Scope of DBI ->|
+ .-. .--------------. .-------------.
+ .-------. | |---| XYZ Driver |---| XYZ Engine |
+ | Perl | | | `--------------' `-------------'
+ | script| |A| |D| .--------------. .-------------.
+ | using |--|P|--|B|---|Oracle Driver |---|Oracle Engine|
+ | DBI | |I| |I| `--------------' `-------------'
+ | API | | |...
+ |methods| | |... Other drivers
+ `-------' | |...
+ `-'
+
+ -- libdbd-sqlite-perl --
+ DBD::SQLite is a Perl DBI driver for SQLite, that includes the entire
+ thing in the distribution. So in order to get a fast transaction capable
+ RDBMS working for your perl project you simply have to install this
+ module, and nothing else.
+
+ usage: there is a test case to show you how it works
+
+ 1) vim local.conf:
+ ...
+ IMAGE_INSTALL_append = " libdbd-sqlite-perl"
+ PERL_DBM_TEST = "1"
+ ...
+ 2) build core-image-sato and boot the target
+
+ 3) run "sqlite-perl-test.pl" on target. This script includes five
+ operations create/insert/update/delete/select to do with a table.
+
+ More information can be found in the recipe's git log.
+
+Dependencies
+------------
+
+This layer depends on:
+
+ URI: git://git.openembedded.org/openembedded-core
+ branch: master
+ revision: HEAD
+ prio: default
+
+Adding the meta-perl layer to your build
+---------------------------------------
+
+In order to use this layer, you need to make the build system aware of
+it.
+
+Assuming the meta-perl layer exists at the top-level of your
+yocto build tree, you can add it to the build system by adding the
+location of the meta-perl layer to bblayers.conf, along with any
+other layers needed. e.g.:
+
+ BBLAYERS ?= " \
+ /path/to/oe-core/meta \
+ /path/to/layer/meta-perl \
+
+Maintenance
+-----------
+
+Send patches / pull requests to openembedded-devel@lists.openembedded.org with
+'[meta-perl]' in the subject.
+
+When sending single patches, please using something like:
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-perl][PATCH'
+
+Layer maintainers:
+ Hongxu Jia <hongxu.jia@windriver.com>
+ Tim "moto-timo" Orling <ticotimo@gmail.com>
+
+License
+-------
+
+All metadata is MIT licensed unless otherwise stated. Source code included
+in tree for individual recipes is under the LICENSE stated in each recipe
+(.bb file) unless otherwise stated.
+
diff --git a/meta-openembedded/meta-perl/conf/layer.conf b/meta-openembedded/meta-perl/conf/layer.conf
new file mode 100644
index 000000000..ece6dd05e
--- /dev/null
+++ b/meta-openembedded/meta-perl/conf/layer.conf
@@ -0,0 +1,18 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+ ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "perl-layer"
+BBFILE_PATTERN_perl-layer := "^${LAYERDIR}/"
+BBFILE_PRIORITY_perl-layer = "6"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_perl-layer = "1"
+
+LAYERDEPENDS_perl-layer = "core openembedded-layer"
+
+LAYERSERIES_COMPAT_perl-layer = "sumo"
diff --git a/meta-openembedded/meta-perl/recipes-extended/logcheck/files/99_logcheck b/meta-openembedded/meta-perl/recipes-extended/logcheck/files/99_logcheck
new file mode 100644
index 000000000..4de33aca3
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-extended/logcheck/files/99_logcheck
@@ -0,0 +1,2 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d logcheck logcheck 0755 /var/lock/logcheck none
diff --git a/meta-openembedded/meta-perl/recipes-extended/logcheck/logcheck_1.3.18.bb b/meta-openembedded/meta-perl/recipes-extended/logcheck/logcheck_1.3.18.bb
new file mode 100644
index 000000000..b8766a7c7
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-extended/logcheck/logcheck_1.3.18.bb
@@ -0,0 +1,79 @@
+SUMMARY = "Analyzes log files and sends noticeable events as email"
+DESCRIPTION = "\
+Logcheck is a simple utility which is designed to allow a system administrator \
+to view the log-files which are produced upon hosts under their control. \
+It does this by mailing summaries of the log-files to them, after first \
+filtering out "normal" entries. \
+Normal entries are entries which match one of the many included regular \
+expression files contain in the database."
+SECTION = "Applications/System"
+HOMEPAGE = "http://logcheck.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c93c0550bd3173f4504b2cbd8991e50b"
+
+SRC_URI = "git://git.debian.org/git/logcheck/logcheck.git \
+ file://99_logcheck \
+"
+SRCREV = "0a5865d80fa34c55387a1917a3e6f885bcff7f1d"
+
+S = "${WORKDIR}/git"
+
+inherit useradd
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "-m -g ${BPN} -G adm -r -d ${localstatedir}/lib/${BPN} \
+ -s /bin/false -c 'logcheck account' ${BPN}"
+GROUPADD_PARAM_${PN} = "-r ${BPN}"
+
+do_install() {
+ # Fix QA Issue
+ sed -i '/install -d $(DESTDIR)\/var\/lock\/logcheck/s/^/#/' Makefile
+
+ # "make install" do not install the manpages. Install them manually.
+ install -m 755 -d ${D}${mandir}/man1
+ install -m 755 -d ${D}${mandir}/man8
+ install -m 644 docs/logcheck-test.1 ${D}${mandir}/man1/
+ install -m 644 docs/logtail.8 ${D}${mandir}/man8/
+ install -m 644 docs/logtail2.8 ${D}${mandir}/man8/
+
+ install -m 755 -d ${D}${sysconfdir}/cron.d
+ install -m 644 debian/logcheck.cron.d ${D}${sysconfdir}/cron.d/logcheck
+ install -m 755 -d ${D}/var/lib/logcheck
+
+ oe_runmake install DESTDIR=${D}
+
+ # install header.txt for generated mails
+ install -m 0644 ${S}/debian/header.txt ${D}${sysconfdir}/${BPN}
+
+ chown -R ${BPN}:${BPN} ${D}${localstatedir}/lib/${BPN}
+ chown -R root:${BPN} ${D}${sysconfdir}/${BPN}
+
+ # Don't install /var/lock when populating rootfs. Do it through volatile
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/99_logcheck ${D}${sysconfdir}/default/volatiles
+ fi
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /var/lock/logcheck 0755 logcheck logcheck -" \
+ > ${D}${sysconfdir}/tmpfiles.d/logcheck.conf
+ fi
+}
+
+VIRTUAL-RUNTIME_syslog ??= "rsyslog"
+
+RDEPENDS_${PN} = "\
+ bash \
+ cronie \
+ debianutils-run-parts \
+ grep \
+ lockfile-progs \
+ mime-construct \
+ perl \
+ perl-module-file-basename \
+ perl-module-getopt-std \
+ perl-module-file-glob \
+ ${VIRTUAL-RUNTIME_syslog} \
+"
+
+FILES_${PN} += "${datadir}/logtail"
diff --git a/meta-openembedded/meta-perl/recipes-extended/mime-construct/files/fix-mime-construct-help-return-value.patch b/meta-openembedded/meta-perl/recipes-extended/mime-construct/files/fix-mime-construct-help-return-value.patch
new file mode 100644
index 000000000..5e4281d4e
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-extended/mime-construct/files/fix-mime-construct-help-return-value.patch
@@ -0,0 +1,39 @@
+From 2b9ed06850410d70371b31de5f131e484ba1c851 Mon Sep 17 00:00:00 2001
+From: Lu Chong <Chong.Lu@windriver.com>
+Date: Thu, 17 Oct 2013 16:06:04 +0800
+Subject: [PATCH] fix mime-construct --help return value
+
+Upstream-Status: Pending
+
+Signed-off-by: Lu Chong <Chong.Lu@windriver.com>
+
+---
+ mime-construct | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/mime-construct b/mime-construct
+index cad7d0e..707ed19 100755
+--- a/mime-construct
++++ b/mime-construct
+@@ -39,7 +39,7 @@ usage: $Me switch...
+
+ Global settings:
+ --debug turn debugging on
+- --help show this and then die
++ --help show this
+ --output don\'t mail, output to stdout (loses bcc info)
+ --subpart generate subpart rather than whole message (turns
+ on --output, changes other semantics a bit)
+@@ -150,7 +150,8 @@ sub xwarn {
+
+ sub usage {
+ xwarn @_ if @_;
+- die $Usage;
++ print $Usage;
++ exit 0;
+ }
+
+ sub init {
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-perl/recipes-extended/mime-construct/mime-construct_1.11.bb b/meta-openembedded/meta-perl/recipes-extended/mime-construct/mime-construct_1.11.bb
new file mode 100644
index 000000000..501f3bf14
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-extended/mime-construct/mime-construct_1.11.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Construct and optionally mail MIME messages"
+DESCRIPTION = "Constructs and (by default) mails MIME messages. \
+ It is entirely driven from the command line, it is \
+ designed to be used by other programs, or people who act \
+ like programs."
+HOMEPAGE = "http://search.cpan.org/~rosch/mime-construct/mime-construct"
+SECTION = "mail"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=5e2e5da619ac8ef8c84767ccc4656e96"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/R/RO/ROSCH/mime-construct-${PV}.tar.gz \
+ file://fix-mime-construct-help-return-value.patch \
+"
+
+SRC_URI[md5sum] = "73834ea780fbea81b89dbd9b2fb54f58"
+SRC_URI[sha256sum] = "4cd7bb61b51d41192d1498c1051aa6a4ccd75aeb09b71d2ec706a7084a4a9303"
+
+inherit cpan
+
+RDEPENDS_${PN} = "libmime-types-perl libproc-waitstat-perl msmtp \
+ perl-module-filehandle perl-module-mime-base64 perl-module-mime-quotedprint perl-module-posix \
+"
+
+do_install_append() {
+ #change the interpreter in file
+ sed -i -e "s|${STAGING_BINDIR_NATIVE}/perl-native/perl -w|${bindir}/env perl|g" \
+ ${D}/${bindir}/mime-construct
+}
diff --git a/meta-openembedded/meta-perl/recipes-perl/adduser/adduser_3.116.bb b/meta-openembedded/meta-perl/recipes-perl/adduser/adduser_3.116.bb
new file mode 100644
index 000000000..112a5f022
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/adduser/adduser_3.116.bb
@@ -0,0 +1,54 @@
+SUMMARY = "a utility to add users/groups to the system"
+DESCRIPTION = "adduser, addgroup - add a user or group to the system"
+HOMEPAGE = "http://alioth.debian.org/projects/adduser/"
+SECTION = "base/utils"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=caed49ab166f22ef31bf1127f558d0ef"
+
+SRC_URI = "http://ftp.de.debian.org/debian/pool/main/a/${BPN}/${BPN}_${PV}.tar.xz \
+ file://adduser-add-M-option-for-useradd.patch \
+"
+
+SRC_URI[md5sum] = "e042a5842b8f24312d6f5a99a1af8f2c"
+SRC_URI[sha256sum] = "72d811ad3ba17d2794b14d19acd1d6b57f9dd31d9250d51e786895dee2daeac0"
+
+inherit cpan-base update-alternatives
+
+S = "${WORKDIR}/${BPN}"
+
+do_install() {
+ install -d ${D}${sbindir}
+ install -m 0755 ${S}/adduser ${D}${sbindir}
+ install -m 0755 ${S}/deluser ${D}${sbindir}
+
+ install -D -m 0644 ${S}/AdduserCommon.pm ${D}${libdir}/perl/${@get_perl_version(d)}/Debian/AdduserCommon.pm
+ sed -i -e "s/VERSION/${PV}/" ${D}${sbindir}/*
+
+ install -d ${D}/${sysconfdir}
+ install -m 0644 ${S}/*.conf ${D}/${sysconfdir}
+
+ install -d ${D}${mandir}/man5
+ install -m 0644 ${S}/doc/*.conf.5 ${D}${mandir}/man5
+ install -d ${D}${mandir}/man8
+ install -m 0644 ${S}/doc/*.8 ${D}${mandir}/man8
+ install -d ${D}${docdir}/${BPN}
+ cp -rf ${S}/examples ${D}${docdir}/${BPN}
+}
+
+RDEPENDS_${PN} += "\
+ shadow \
+ perl-module-getopt-long \
+ perl-module-overloading \
+ perl-module-file-find \
+ perl-module-file-temp \
+"
+
+ALTERNATIVE_${PN} = "adduser deluser addgroup delgroup"
+ALTERNATIVE_PRIORITY = "60"
+ALTERNATIVE_LINK_NAME[adduser] = "${sbindir}/adduser"
+ALTERNATIVE_LINK_NAME[deluser] = "${sbindir}/deluser"
+ALTERNATIVE_LINK_NAME[addgroup] = "${sbindir}/addgroup"
+ALTERNATIVE_LINK_NAME[delgroup] = "${sbindir}/delgroup"
+ALTERNATIVE_TARGET[addgroup] = "${sbindir}/adduser.${BPN}"
+ALTERNATIVE_TARGET[delgroup] = "${sbindir}/deluser.${BPN}"
diff --git a/meta-openembedded/meta-perl/recipes-perl/adduser/files/adduser-add-M-option-for-useradd.patch b/meta-openembedded/meta-perl/recipes-perl/adduser/files/adduser-add-M-option-for-useradd.patch
new file mode 100644
index 000000000..2ecec512f
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/adduser/files/adduser-add-M-option-for-useradd.patch
@@ -0,0 +1,45 @@
+From 55a0adfc416ad85dbc440eaa667d98c200a8ce62 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Thu, 18 Dec 2014 17:23:37 +0800
+Subject: [PATCH] adduser: add -M option for useradd
+
+The useradd (from package passwd) in debian based system sets -M (--no-create-home) by default,
+but the one we are using (from package shadow) sets -m (--create-home) by default, so we
+need to explicitly add -M option for useradd call or it will try to create home twice and
+throw a confused message:
+"The home directory `/home/newuser' already exists. Not copying from `/etc/skel'"
+
+Upstream-Status: Submitted [1]
+
+[1] https://lists.alioth.debian.org/pipermail/adduser-devel/2016-October/005478.html
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ adduser | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/adduser b/adduser
+index a5f83f3..f6cb52c 100755
+--- a/adduser
++++ b/adduser
+@@ -435,7 +435,7 @@ if ($action eq "addsysuser") {
+ $undouser = $new_name;
+ my $useradd = &which('useradd');
+ &systemcall($useradd, '-d', $home_dir, '-g', $ingroup_name, '-s',
+- $shell, '-u', $new_uid, $new_name);
++ $shell, '-u', $new_uid, '-M', $new_name);
+ if(!$disabled_login) {
+ my $usermod = &which('usermod');
+ &systemcall($usermod, '-p', '*', $new_name);
+@@ -525,7 +525,7 @@ if ($action eq "adduser") {
+ $undouser = $new_name;
+ my $useradd = &which('useradd');
+ &systemcall($useradd, '-d', $home_dir, '-g', $ingroup_name, '-s',
+- $shell, '-u', $new_uid, $new_name);
++ $shell, '-u', $new_uid, '-M', $new_name);
+ &invalidate_nscd();
+
+ create_homedir (1); # copy skeleton data
+--
+1.8.5.2
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libalgorithm/libalgorithm-diff-perl_1.15.bb b/meta-openembedded/meta-perl/recipes-perl/libalgorithm/libalgorithm-diff-perl_1.15.bb
new file mode 100644
index 000000000..4155fade9
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libalgorithm/libalgorithm-diff-perl_1.15.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Algorithm::Diff - Compute 'intelligent' differences between two \
+files/lists"
+DESCRIPTION = "This is a module for computing the difference between two files, \
+two strings, or any other two lists of things. It uses an intelligent \
+algorithm similar to (or identical to) the one used by the Unix `diff' \
+program. It is guaranteed to find the *smallest possible* set of \
+differences. \
+"
+SECTION = "libs"
+HOMEPAGE = "http://search.cpan.org/~nedkonz/Algorithm-Diff/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://lib/Algorithm/Diff.pm;beginline=406;endline=409;md5=d393b8ad3b8994b9d0ae9299b8a8a1ee"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/N/NE/NEDKONZ/Algorithm-Diff-${PV}.tar.gz"
+SRC_URI[md5sum] = "457cd497a0411a88b47d3741eb176071"
+SRC_URI[sha256sum] = "aa848b75ad3ecc32d31e8651909551e851cceef74a32822c7a3cb35c259f5190"
+
+S = "${WORKDIR}/Algorithm-Diff-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libauthen/files/run-ptest b/meta-openembedded/meta-perl/recipes-perl/libauthen/files/run-ptest
new file mode 100644
index 000000000..c9f9ca94d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libauthen/files/run-ptest
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+for case in `find t -type f -name '*.t'`; do
+ perl $case >$case.output 2>&1
+ ret=$?
+ cat $case.output
+ if [ $ret -ne 0 ]; then
+ echo "FAIL: ${case%.t}"
+ elif grep -i 'SKIP' $case.output; then
+ echo "SKIP: ${case%.t}"
+ else
+ echo "PASS: ${case%.t}"
+ fi
+
+ rm -f $case.output
+done
diff --git a/meta-openembedded/meta-perl/recipes-perl/libauthen/libauthen-sasl-perl_2.16.bb b/meta-openembedded/meta-perl/recipes-perl/libauthen/libauthen-sasl-perl_2.16.bb
new file mode 100644
index 000000000..e658a5ff1
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libauthen/libauthen-sasl-perl_2.16.bb
@@ -0,0 +1,28 @@
+SUMMARY = "SASL Authentication framework for Perl"
+DESCRIPTION = "SASL is a generic mechanism for authentication used by several network \
+protocols. Authen::SASL provides an implementation framework that all \
+protocols should be able to share."
+HOMEPAGE = "http://search.cpan.org/dist/Authen-SASL/"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0|GPL-1.0+"
+LIC_FILES_CHKSUM = "file://lib/Authen/SASL/Perl.pm;beginline=1;endline=3;md5=17123315bbcda19f484c07227594a609"
+
+DEPENDS = "perl"
+RDEPENDS_${PN} = "libdigest-hmac-perl"
+
+SRC_URI = "http://www.cpan.org/authors/id/G/GB/GBARR/Authen-SASL-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[md5sum] = "7c03a689d4c689e5a9e2f18a1c586b2f"
+SRC_URI[sha256sum] = "6614fa7518f094f853741b63c73f3627168c5d3aca89b1d02b1016dc32854e09"
+
+S = "${WORKDIR}/Authen-SASL-${PV}"
+
+inherit cpan ptest
+
+do_install_ptest () {
+ cp -r ${B}/t ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libcapture/libcapture-tiny-perl_0.46.bb b/meta-openembedded/meta-perl/recipes-perl/libcapture/libcapture-tiny-perl_0.46.bb
new file mode 100644
index 000000000..2719811ce
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libcapture/libcapture-tiny-perl_0.46.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Capture::Tiny - Capture STDOUT and STDERR from Perl, XS or external programs."
+DESCRIPTION = "Capture::Tiny provies a simple, portable way to capture \
+almost anything sent to STDOUT or STDERR, regardless of whether it comes \
+from Perl, from XS code or from an external program. Optionally, output can \
+be teed so that it is captured while being passed through to the original \
+filehandles. Yes, it even works on Windows (usually). Stop guessing which of \
+a dozen capturing modules to use in any particular situation and just use \
+this one."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~dagolden/Capture-Tiny/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=37a4918a30ace24395020e5b8c03b83f"
+
+SRCNAME = "Capture-Tiny"
+SRC_URI = "${CPAN_MIRROR}/authors/id/D/DA/DAGOLDEN/${SRCNAME}-${PV}.tar.gz"
+SRC_URI[md5sum] = "d718af07729d26a793949ca6ba2580a7"
+SRC_URI[sha256sum] = "5d7a6a830cf7f2b2960bf8b8afaac16a537ede64f3023827acea5bd24ca77015"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-scalar-util \
+ perl-module-io-file \
+ perl-module-extutils-makemaker \
+ perl-module-file-spec \
+ perl-module-exporter \
+ perl-module-carp \
+ perl-module-test-more \
+ perl-module-file-temp \
+ perl-module-lib \
+ perl-module-overloading \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.38.bb b/meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.38.bb
new file mode 100644
index 000000000..db16d8307
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libcgi/libcgi-perl_4.38.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "CGI.pm is a stable, complete and mature solution for processing and preparing \
+HTTP requests and responses. Major features including processing form \
+submissions, file uploads, reading and writing cookies, query string generation \
+and manipulation, and processing and preparing HTTP headers."
+HOMEPAGE = "http://search.cpan.org/~leejo/CGI-4.28/lib/CGI.pod"
+SECTION = "libs"
+LICENSE = "Artistic-2.0 | GPL-2.0"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2e9769f0a2613a98bc7fce15dee0c533"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/L/LE/LEEJO/CGI-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "0aeb8563d533e7f83724ed068b5bfc37"
+SRC_URI[sha256sum] = "8c58f4a529bb92a914b22b7e64c5e31185c9854a4070a6dfad44fe5cc248e7d4"
+
+S = "${WORKDIR}/CGI-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} += "\
+ perl-module-deprecate \
+ perl-module-if \
+"
+
+RPROVIDES_${PN} += "perl-module-cgi"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libclass/libclass-method-modifiers-perl_2.12.bb b/meta-openembedded/meta-perl/recipes-perl/libclass/libclass-method-modifiers-perl_2.12.bb
new file mode 100644
index 000000000..3979b3142
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libclass/libclass-method-modifiers-perl_2.12.bb
@@ -0,0 +1,28 @@
+SUMMARY = "Class::Method::Modifiers - provides Moose-like method modifiers"
+DESCRIPTION = "Method modifiers are a convenient feature from the CLOS \
+(Common Lisp Object System) world."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://github.com/moose/Class-Method-Modifiers/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=16fd0ec7b73c0e158426f753943f1058"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/E/ET/ETHER/Class-Method-Modifiers-${PV}.tar.gz"
+SRC_URI[md5sum] = "f55400c7a8134acf3657f8af89bdd7af"
+SRC_URI[sha256sum] = "e44c1073020bf55b8c97975ed77235fd7e2a6a56f29b5c702301721184e27ac8"
+
+S = "${WORKDIR}/Class-Method-Modifiers-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-b \
+ perl-module-base \
+ perl-module-carp \
+ perl-module-exporter \
+ perl-module-strict \
+ perl-module-warnings \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-random-perl_0.11.bb b/meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-random-perl_0.11.bb
new file mode 100644
index 000000000..8456e313d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-random-perl_0.11.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Crypt Openssl Random cpan module"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=089c18d635ae273e1727ec385e64063b"
+
+SRC_URI = "http://www.cpan.org/modules/by-module/Crypt/Crypt-OpenSSL-Random-${PV}.tar.gz "
+SRC_URI[md5sum] = "5d71337503e0356ce1ce1481504e5885"
+SRC_URI[sha256sum] = "bb8c81c6a39b9b13a22d818ee9a746242f136f0fadceb6b9776ae615e7524c7a"
+
+S = "${WORKDIR}/Crypt-OpenSSL-Random-${PV}"
+
+DEPENDS += " openssl \
+"
+inherit cpan
diff --git a/meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-rsa-perl_0.28.bb b/meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-rsa-perl_0.28.bb
new file mode 100644
index 000000000..f0c610f3a
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libcrypt/libcrypt-openssl-rsa-perl_0.28.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Crypt Openssl RSA cpan module"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=385c55653886acac3821999a3ccd17b3"
+
+SRC_URI = "http://www.cpan.org/modules/by-module/Crypt/Crypt-OpenSSL-RSA-${PV}.tar.gz "
+
+SRC_URI[md5sum] = "86217a5036fc63779c30420b5fd84129"
+SRC_URI[sha256sum] = "5357f977464bb3a8184cf2d3341851a10d5515b4b2b0dfb88bf78995c0ded7be"
+
+DEPENDS += "openssl"
+
+RDEPENDS_${PN}="libcrypt-openssl-random-perl"
+
+EXTRA_CPANFLAGS = "INC='-I${STAGING_INCDIR}' LIBS='-L${STAGING_LIBDIR} -lssl -L${STAGING_DIR_TARGET}${base_libdir} -lcrypto'"
+
+S = "${WORKDIR}/Crypt-OpenSSL-RSA-${PV}"
+
+inherit cpan
+
+do_compile() {
+ export OTHERLDFLAGS='-Wl,-rpath'
+ cpan_do_compile
+}
diff --git a/meta-openembedded/meta-perl/recipes-perl/libcurses/libcurses-perl_1.36.bb b/meta-openembedded/meta-perl/recipes-perl/libcurses/libcurses-perl_1.36.bb
new file mode 100644
index 000000000..782b973b5
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libcurses/libcurses-perl_1.36.bb
@@ -0,0 +1,26 @@
+DESCRIPTION = "lib-curses provides an interface between Perl programs and \
+the curses library."
+
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+
+LIC_FILES_CHKSUM = "file://README;beginline=26;endline=30;md5=0b37356c5e9e28080a3422d82af8af09"
+
+DEPENDS += "perl ncurses "
+
+SRC_URI = "http://www.cpan.org/authors/id/G/GI/GIRAFFED/Curses-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "389c70ee5530b887f8e5dc1303cb5294"
+SRC_URI[sha256sum] = "a414795ba031c5918c70279fe534fee594a96ec4b0c78f44ce453090796add64"
+
+S = "${WORKDIR}/Curses-${PV}"
+
+EXTRA_CPANFLAGS = "INC=-I${STAGING_INCDIR} LIBS=-L${STAGING_LIBDIR}"
+
+inherit cpan
+
+do_compile() {
+ export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+ cpan_do_compile
+}
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdata/files/run-ptest b/meta-openembedded/meta-perl/recipes-perl/libdata/files/run-ptest
new file mode 100644
index 000000000..c9f9ca94d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdata/files/run-ptest
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+for case in `find t -type f -name '*.t'`; do
+ perl $case >$case.output 2>&1
+ ret=$?
+ cat $case.output
+ if [ $ret -ne 0 ]; then
+ echo "FAIL: ${case%.t}"
+ elif grep -i 'SKIP' $case.output; then
+ echo "SKIP: ${case%.t}"
+ else
+ echo "PASS: ${case%.t}"
+ fi
+
+ rm -f $case.output
+done
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb b/meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb
new file mode 100644
index 000000000..6ab5a4204
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdata/libdata-hexdump-perl_0.02.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Data::HexDump - Hexadecial Dumper"
+DESCRIPTION = "Dump in hexadecimal the content of a scalar. The result \
+is returned in a string. Each line of the result consists of the offset \
+in the source in the leftmost column of each line, followed by one or \
+more columns of data from the source in hexadecimal. The rightmost column \
+of each line shows the printable characters \
+(all others are shown as single dots).\
+"
+
+HOMEPAGE = "http://search.cpan.org/~ftassin/Data-HexDump-0.02/lib/Data/HexDump.pm"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0"
+LIC_FILES_CHKSUM = "file://lib/Data/HexDump.pm;beginline=215;endline=217;md5=bf1cd9373f8d1f85fe091ee069a480e9"
+
+DEPENDS = "perl"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/F/FT/FTASSIN/Data-HexDump-${PV}.tar.gz \
+ file://run-ptest \
+"
+SRC_URI[md5sum] = "467b7183d1062ab4a502b50c34e7d67f"
+SRC_URI[sha256sum] = "1a9d843e7f667c1c6f77c67af5d77e7462ff23b41937cb17454d03535cd9be70"
+
+S = "${WORKDIR}/Data-HexDump-${PV}"
+
+inherit cpan ptest
+
+do_install_ptest () {
+ install -d ${D}${PTEST_PATH}/t
+ install -m 0755 ${B}/t/* ${D}${PTEST_PATH}/t
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl/sqlite-perl-test.pl b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl/sqlite-perl-test.pl
new file mode 100755
index 000000000..40f5916f5
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl/sqlite-perl-test.pl
@@ -0,0 +1,69 @@
+#! /usr/bin/env perl
+#
+# 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.
+#
+# Copyright (C) 2013 Wind River Systems, Inc.
+#
+# - It tests DBI and DBD::SQLite could work correctly which means one could
+# manipulate sqlite database in perl
+# - The test includes create/insert/update/delete/select, the five important
+# things one can do with a table
+use DBI;
+
+sub execute_sql {
+ my $dbh = $_[0];
+ my $sql = $_[1];
+ my $sth = $dbh->prepare($sql)
+ or die "Couldn't prepare statement: " . $dbh->errstr;
+ $sth->execute();
+ print "$sql\n";
+ return $sth;
+}
+
+sub select_all {
+ my $dbh = $_[0];
+ my $table = $_[1];
+ my $sth = &execute_sql($dbh, "Select * from $table");
+
+ print "-----------------------------------\n";
+ while (@data = $sth->fetchrow_array()) {
+ my $name = $data[0];
+ my $id = $data[1];
+ print "$name: $id\n";
+ }
+ print "\n";
+
+ $sth->finish;
+ return $sth;
+}
+
+# A private, temporary in-memory database is created for the connection.
+# This in-memory database will vanish when the database connection is
+# closed. It is handy for your library tests.
+my $dbfile = ":memory:";
+my $dbh = DBI->connect("DBI:SQLite:dbname=$dbfile","","")
+ or die "Couldn't connect to database: " . DBI->errstr;
+print "Connect to SQLite's in-memory database\n";
+
+&execute_sql($dbh, "Create table tbl1(name varchar(10), id smallint)");
+&execute_sql($dbh, "Insert into tbl1 values('yocto',10)");
+&execute_sql($dbh, "Insert into tbl1 values('windriver', 20)");
+&select_all($dbh, "tbl1");
+
+&execute_sql($dbh, "Update tbl1 set name = 'oe-core' where id = 10");
+&execute_sql($dbh, "Delete from tbl1 where id = 20");
+&select_all($dbh, "tbl1");
+
+$dbh->disconnect;
+print "Test Success\n"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.54.bb b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.54.bb
new file mode 100644
index 000000000..c72e536de
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdb/libdbd-sqlite-perl_1.54.bb
@@ -0,0 +1,41 @@
+SUMMARY = "A Perl DBI driver for SQLite"
+DESCRIPTION = "DBD::SQLite is a Perl DBI driver for SQLite, that includes the entire \
+thing in the distribution. So in order to get a fast transaction capable \
+RDBMS working for your perl project you simply have to install this \
+module, and nothing else. \
+"
+HOMEPAGE = "http://search.cpan.org/~ishigaki/DBD-SQLite/"
+
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+DEPENDS += "libdbi-perl-native"
+RDEPENDS_${PN} += "libdbi-perl \
+ sqlite3 \
+ perl-module-constant \
+ perl-module-locale \
+ perl-module-tie-hash \
+"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1726e2117494ba3e13e1c3d93f795360"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/I/IS/ISHIGAKI/DBD-SQLite-${PV}.tar.gz \
+ file://sqlite-perl-test.pl \
+"
+
+SRC_URI[md5sum] = "8f835ddacb9a4a92a52bbe2d24d18a8e"
+SRC_URI[sha256sum] = "3929a6dbd8d71630f0cb57f85dcef9588cd7ac4c9fa12db79df77b9d3a4d7269"
+
+UPSTREAM_CHECK_REGEX = "DBD\-SQLite\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
+
+S = "${WORKDIR}/DBD-SQLite-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
+
+do_install_append() {
+ if [ ${PERL_DBM_TEST} = "1" ]; then
+ install -m 755 -D ${WORKDIR}/sqlite-perl-test.pl ${D}/${bindir}/sqlite-perl-test.pl
+ fi
+}
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdevel/libdevel-globaldestruction-perl_0.14.bb b/meta-openembedded/meta-perl/recipes-perl/libdevel/libdevel-globaldestruction-perl_0.14.bb
new file mode 100644
index 000000000..0ce242454
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdevel/libdevel-globaldestruction-perl_0.14.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Function returning \"${^GLOBAL_PHASE} eq \'DESTRUCT\'\""
+DESCRIPTION = "Perl's global destruction is a little trick to deal with \
+WRT finalizers because it's not ordered and objects can sometimes disappear."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://metacpan.org/pod/Devel-GlobalDestruction/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=53;endline=55;md5=935dadb9423774f53548e5cd5055d41a"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/H/HA/HAARG/Devel-GlobalDestruction-${PV}.tar.gz"
+SRC_URI[md5sum] = "24221ba322cf2dc46a1fc99b53e2380b"
+SRC_URI[sha256sum] = "34b8a5f29991311468fe6913cadaba75fd5d2b0b3ee3bb41fe5b53efab9154ab"
+
+S = "${WORKDIR}/Devel-GlobalDestruction-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " libsub-exporter-progressive-perl \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdigest/files/run-ptest b/meta-openembedded/meta-perl/recipes-perl/libdigest/files/run-ptest
new file mode 100644
index 000000000..c9f9ca94d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdigest/files/run-ptest
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+for case in `find t -type f -name '*.t'`; do
+ perl $case >$case.output 2>&1
+ ret=$?
+ cat $case.output
+ if [ $ret -ne 0 ]; then
+ echo "FAIL: ${case%.t}"
+ elif grep -i 'SKIP' $case.output; then
+ echo "SKIP: ${case%.t}"
+ else
+ echo "PASS: ${case%.t}"
+ fi
+
+ rm -f $case.output
+done
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-hmac-perl_1.03.bb b/meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-hmac-perl_1.03.bb
new file mode 100644
index 000000000..8f1c98c67
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-hmac-perl_1.03.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Keyed-Hashing for Message Authentication"
+DESCRIPTION = "Keyed-Hashing for Message Authentication"
+HOMEPAGE = "http://search.cpan.org/~gaas/Digest-HMAC-1.03/"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://README;beginline=13;endline=17;md5=da980cdc026faa065e5d5004115334e6"
+
+RDEPENDS_${PN} = "libdigest-sha1-perl perl-module-extutils-makemaker perl-module-digest-md5"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-HMAC-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[md5sum] = "e6a5d6f552da16eacb5157ea4369ff9d"
+SRC_URI[sha256sum] = "3bc72c6d3ff144d73aefb90e9a78d33612d58cf1cd1631ecfb8985ba96da4a59"
+
+S = "${WORKDIR}/Digest-HMAC-${PV}"
+
+inherit cpan ptest
+
+do_install_ptest () {
+ cp -r ${B}/t ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-sha1-perl_2.13.bb b/meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-sha1-perl_2.13.bb
new file mode 100644
index 000000000..0371ea68c
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libdigest/libdigest-sha1-perl_2.13.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Perl interface to the SHA-1 algorithm "
+DESCRIPTION = "Digest::SHA1 - Perl interface to the SHA-1 algorithm"
+HOMEPAGE = "http://search.cpan.org/~gaas/Digest-SHA1-2.13/"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://README;beginline=10;endline=14;md5=ff5867ebb4bc1103a7a416aef2fce00a"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-SHA1-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[md5sum] = "bd22388f268434f2b24f64e28bf1aa35"
+SRC_URI[sha256sum] = "68c1dac2187421f0eb7abf71452a06f190181b8fc4b28ededf5b90296fb943cc"
+
+S = "${WORKDIR}/Digest-SHA1-${PV}"
+
+inherit cpan ptest
+
+do_install_ptest () {
+ cp -r ${B}/t ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND="native"
+
+FILES_${PN}-dbg =+ "${libdir}/perl/vendor_perl/*/auto/Digest/SHA1/.debug/"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-locale-perl_1.05.bb b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-locale-perl_1.05.bb
new file mode 100644
index 000000000..748f746a0
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-locale-perl_1.05.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Encode::Locale - Determine the locale encoding"
+AUTHOR = "Gisle Aas <gisle@activestate.com>"
+HOMEPAGE = "https://metacpan.org/module/Encode::Locale"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;md5=14e8006c2134045725fd81292a323d24"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/G/GA/GAAS/Encode-Locale-${PV}.tar.gz"
+SRC_URI[md5sum] = "fcfdb8e4ee34bcf62aed429b4a23db27"
+SRC_URI[sha256sum] = "176fa02771f542a4efb1dbc2a4c928e8f4391bf4078473bd6040d8f11adb0ec1"
+
+S = "${WORKDIR}/Encode-Locale-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} += "libencode-perl \
+ libencode-alias-perl \
+ perl-module-base \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_2.94.bb b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_2.94.bb
new file mode 100644
index 000000000..9861c56e0
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libencode/libencode-perl_2.94.bb
@@ -0,0 +1,68 @@
+# NOTE:
+# You should use perl-module-encode rather than this package
+# unless you specifically need a version newer than what is
+# provided by perl.
+
+SUMMARY = "Encode - character encodings"
+DESCRIPTION = "The \"Encode\" module provides the interfaces between \
+Perl's strings and the rest of the system. Perl strings are sequences \
+of characters."
+
+AUTHOR = "Dan Kogai <dankogai+cpan@gmail.com>"
+HOMEPAGE = "https://metacpan.org/release/Encode"
+SECTION = "lib"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://META.json;md5=d8e909447b983532b2b460c830e7a7e4"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/D/DA/DANKOGAI/Encode-${PV}.tar.gz"
+SRC_URI[md5sum] = "f995e0eb9e52d01ed57abe835bf3ccb6"
+SRC_URI[sha256sum] = "acb3a4af5e3ee38f94de8baa7454e0b836a0649e7ac4180f28dfca439ad60cff"
+
+UPSTREAM_CHECK_REGEX = "Encode\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
+
+S = "${WORKDIR}/Encode-${PV}"
+
+inherit cpan
+
+# file /usr/bin/enc2xs from install of perl-misc-5.24.1-r0.i586 conflicts with file from package libencode-perl-2.94-r0.i586
+# file /usr/bin/encguess from install of perl-misc-5.24.1-r0.i586 conflicts with file from package libencode-perl-2.94-r0.i586
+# file /usr/bin/piconv from install of perl-misc-5.24.1-r0.i586 conflicts with file from package libencode-perl-2.94-r0.i586
+RCONFLICTS_${PN} = "perl-misc"
+
+RDEPENDS_${PN} += " perl-module-bytes \
+ perl-module-constant \
+ perl-module-parent \
+ perl-module-storable \
+ perl-module-xsloader \
+"
+
+RPROVIDES_${PN} += "libencode-alias-perl \
+ libencode-byte-perl \
+ libencode-cjkconstants-perl \
+ libencode-cn-perl \
+ libencode-cn-hz-perl \
+ libencode-config-perl \
+ libencode-ebcdic-perl \
+ libencode-encoder-perl \
+ libencode-encoding-perl \
+ libencode-gsm0338-perl \
+ libencode-guess-perl \
+ libencode-jp-perl \
+ libencode-jp-h2z-perl \
+ libencode-jp-jis7-perl \
+ libencode-kr-perl \
+ libencode-kr-2022_kr-perl \
+ libencode-mime-header-perl \
+ libencode-mime-name-perl \
+ libencode-symbol-perl \
+ libencode-tw-perl \
+ libencode-unicode-perl \
+ libencode-unicode-utf7-perl \
+ libencoding-perl \
+ libencode-internal-perl \
+ libencode-mime-header-iso_2022_jp-perl \
+ libencode-utf8-perl \
+ libencode-utf_ebcdic-perl \
+ "
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-config-perl_0.008.bb b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-config-perl_0.008.bb
new file mode 100644
index 000000000..e93d388e9
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-config-perl_0.008.bb
@@ -0,0 +1,24 @@
+SUMMARY = "ExtUtils::Config - A wrapper for perl's configuration"
+DESCRIPTION = "ExtUtils::Config is an abstraction around the %Config hash."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~leont/ExtUtils-Config/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1932ab4d8b84c25fd7967aa18088e57e"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/ExtUtils-Config-${PV}.tar.gz"
+SRC_URI[md5sum] = "565a7b09c7cac5907a25bbe2c959a717"
+SRC_URI[sha256sum] = "ae5104f634650dce8a79b7ed13fb59d67a39c213a6776cfdaa3ee749e62f1a8c"
+
+S = "${WORKDIR}/ExtUtils-Config-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-extutils-makemaker \
+ perl-module-data-dumper \
+ perl-module-test-more \
+ perl-module-file-temp \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.12.bb b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.12.bb
new file mode 100644
index 000000000..99df6f33f
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-cppguess-perl_0.12.bb
@@ -0,0 +1,37 @@
+SUMMARY = "ExtUtils::CppGuess - guess C++ compiler and flags"
+DESCRIPTION = "ExtUtils::CppGuess attempts to guess the system's C++ \
+compiler that is compatible with the C compiler that your perl was built \
+with. \
+It can generate the necessary options to the Module::Build constructor or \
+to ExtUtils::MakeMaker's WriteMakefile function."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~smueller/ExtUtils-CppGuess/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=81;endline=84;md5=84c0390b90ea8c6702ce659b67bed699"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/E/ET/ETJ/ExtUtils-CppGuess-${PV}.tar.gz"
+SRC_URI[md5sum] = "28be49072585b25df87e54180f741a4d"
+SRC_URI[sha256sum] = "31c47b5b15e3e9fd5ae7b35881a0fffd26a2983b241e7e3a1bc340d6d446186b"
+
+S = "${WORKDIR}/ExtUtils-CppGuess-${PV}"
+
+inherit cpan
+
+do_install () {
+ cpan_do_install
+}
+
+RDEPENDS_${PN} = " libcapture-tiny-perl \
+ perl-module-scalar-util \
+ perl-module-io-file \
+ perl-module-extutils-makemaker \
+ perl-module-file-spec \
+ perl-module-exporter \
+ perl-module-carp \
+ perl-module-file-temp \
+ perl-module-lib \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-helpers-perl_0.026.bb b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-helpers-perl_0.026.bb
new file mode 100644
index 000000000..c027250b0
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-helpers-perl_0.026.bb
@@ -0,0 +1,29 @@
+SUMMARY = "ExtUtils::Helpers - Various portability utilities for module builders"
+DESCRIPTION = "This module provides various portable helper function for module building modules."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~leont/ExtUtils-Helpers/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=223c04045664f72c3a6556462612bddd"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/ExtUtils-Helpers-${PV}.tar.gz"
+SRC_URI[md5sum] = "83b00c1e401321c425ae5db6b2b2fd12"
+SRC_URI[sha256sum] = "de901b6790a4557cf4ec908149e035783b125bf115eb9640feb1bc1c24c33416"
+
+S = "${WORKDIR}/ExtUtils-Helpers-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-file-copy \
+ perl-module-extutils-makemaker \
+ perl-module-exporter \
+ perl-module-carp \
+ perl-module-test-more \
+ perl-module-text-parsewords \
+ perl-module-load \
+ perl-module-file-temp \
+ perl-module-file-spec-functions \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-installpaths-perl_0.011.bb b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-installpaths-perl_0.011.bb
new file mode 100644
index 000000000..6eb434a95
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-installpaths-perl_0.011.bb
@@ -0,0 +1,25 @@
+SUMMARY = "ExtUtils::InstallPaths - Build.PL install path logic made easy"
+DESCRIPTION = "This module tries to make install path resolution as easy \
+as possible."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~leont/ExtUtils-InstallPaths/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b6fa54d873ce6bcf4809ea88bdf97769"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/ExtUtils-InstallPaths-${PV}.tar.gz"
+SRC_URI[md5sum] = "9c75894c3c8c899ab6bfafc5eaa97999"
+SRC_URI[sha256sum] = "7609fa048cdcf1451cad5b1d7d494f30e3d5bad0672d15404f1ea60e1df0067c"
+
+S = "${WORKDIR}/ExtUtils-InstallPaths-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-extutils-makemaker \
+ perl-module-data-dumper \
+ perl-module-test-more \
+ perl-module-file-temp \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-parsexs-perl_3.35.bb b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-parsexs-perl_3.35.bb
new file mode 100644
index 000000000..33707a0af
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libextutils/libextutils-parsexs-perl_3.35.bb
@@ -0,0 +1,47 @@
+SUMMARY = "ExtUtils::ParseXS - converts Perl XS code into C code"
+DESCRIPTION = "\"ExtUtils::ParseXS\" will compile XS code into C code by \
+embedding the constructs necessary to let C functions manipulate Perl \
+values and creates the glue necessary to let Perl access those functions. \
+The compiler uses typesmapes to determine how to map C function parameters \
+and variables to Perl values."
+
+SECTION = "libs"
+
+HOMEPAGE = "http://metapan.org/release/ExtUtils-ParseXS/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=120;endline=129;md5=eb858f0e3b1b0bee0c05b86a474ae2b6"
+
+SRCNAME = "ExtUtils-ParseXS"
+SRC_URI = "${CPAN_MIRROR}/authors/id/S/SM/SMUELLER/${SRCNAME}-${PV}.tar.gz"
+SRC_URI[md5sum] = "2ae41036d85e98e1369645724962dd16"
+SRC_URI[sha256sum] = "41def0511278a2a8ba9afa25ccab45b0453f75e7fd774e8644b5f9a57cc4ee1c"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-carp \
+ perl-module-cwd \
+ perl-module-dynaloader \
+ perl-module-extutils-cbuilder \
+ perl-module-extutils-makemaker \
+ perl-module-file-basename \
+ perl-module-file-spec \
+ perl-module-lib \
+ perl-module-symbol \
+ perl-module-test-more \
+"
+
+RPROVIDES_${PN} += " libextutils-parsexs-constants-perl \
+ libextutils-parsexs-countlines-perl \
+ libextutils-parsexs-eval-perl \
+ libextutils-parsexs-utilities-perl \
+ libextutils-typemaps-perl \
+ libextutils-typemaps-cmd-perl \
+ libextutils-typemaps-inputmap-perl \
+ libextutils-typemaps-outputmap-perl \
+ libextutils-typemaps-type-perl \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libfile/libfile-slurp-perl_9999.19.bb b/meta-openembedded/meta-perl/recipes-perl/libfile/libfile-slurp-perl_9999.19.bb
new file mode 100644
index 000000000..945b4c1c8
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libfile/libfile-slurp-perl_9999.19.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Slurp entire files into variables."
+DESCRIPTION = "This module provides subroutines to read or write \
+ entire files with a simple call. It also has a subroutine for \
+ reading the list of filenames in a directory. \
+"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+
+LIC_FILES_CHKSUM = "file://README;beginline=37;endline=41;md5=255fbd5f98a90d51d9908d31271ae4d4"
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/U/UR/URI/File-Slurp-${PV}.tar.gz"
+
+S = "${WORKDIR}/File-Slurp-${PV}"
+
+inherit cpan
+
+SRC_URI[md5sum] = "7d584cd15c4f8b9547765eff8c4ef078"
+SRC_URI[sha256sum] = "ce29ebe995097ebd6e9bc03284714cdfa0c46dc94f6b14a56980747ea3253643"
+
+BBCLASSEXTEND="native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libhtml/files/bin-htmltree-fix-shebang.patch b/meta-openembedded/meta-perl/recipes-perl/libhtml/files/bin-htmltree-fix-shebang.patch
new file mode 100644
index 000000000..4266f059d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libhtml/files/bin-htmltree-fix-shebang.patch
@@ -0,0 +1,25 @@
+From 28ee994780459c3552d3cbbd6b011d054a41c439 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Sun, 8 Nov 2015 23:33:31 -0500
+Subject: [PATCH] bin/htmltree: fix shebang
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ bin/htmltree | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/bin/htmltree b/bin/htmltree
+index 8bf3db2..f9927e5 100755
+--- a/bin/htmltree
++++ b/bin/htmltree
+@@ -1,4 +1,4 @@
+-#!/usr/bin/perl
++#!/usr/bin/env perl
+ # Time-stamp: "2000-10-02 14:48:15 MDT"
+ #
+ # Parse the given HTML file(s) and dump the parse tree
+--
+1.9.1
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-parser-perl_3.72.bb b/meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-parser-perl_3.72.bb
new file mode 100644
index 000000000..e202de05a
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-parser-perl_3.72.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "This package contains the Parser.pm module with friends."
+HOMEPAGE = "https://metacpan.org/release/HTML-Parser"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+
+LIC_FILES_CHKSUM = "file://README;md5=b0459e4426b94753b9a9b8a15f1223b8"
+
+DEPENDS += "perl"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/HTML-Parser-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "eb7505e5f626913350df9dd4a03d54a8"
+SRC_URI[sha256sum] = "ec28c7e1d9e67c45eca197077f7cdc41ead1bb4c538c7f02a3296a4bb92f608b"
+
+S = "${WORKDIR}/HTML-Parser-${PV}"
+
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
+
+inherit cpan
+
+do_compile() {
+ export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+ cpan_do_compile
+}
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-tree-perl_5.03.bb b/meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-tree-perl_5.03.bb
new file mode 100644
index 000000000..56dc19c85
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libhtml/libhtml-tree-perl_5.03.bb
@@ -0,0 +1,42 @@
+SUMMARY = "HTML::TreeBuilder - Parser that builds a HTML syntax tree"
+DESCRIPTION = "This distribution contains a suite of modules for representing, \
+creating, and extracting information from HTML syntax trees; there is \
+also relevent documentation. These modules used to be part of the \
+libwww-perl distribution, but are now unbundled in order to facilitate \
+a separate development track."
+SECTION = "libs"
+
+HOMEPAGE = "http://www.cpan.org/authors/id/C/CJ/CJM/HTML-Tree-${PV}.readme"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3eb57a8958cae73cb65e7d0c26339242"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/C/CJ/CJM/HTML-Tree-${PV}.tar.gz \
+ file://bin-htmltree-fix-shebang.patch \
+"
+SRC_URI[md5sum] = "d9271d60b872ed6fbe68b2d0fe8c450e"
+SRC_URI[sha256sum] = "7d6d73fca622aa74855a8b088faa39454a0f91b7af83c9ec0387f01eefc2148f"
+
+S = "${WORKDIR}/HTML-Tree-${PV}"
+
+inherit cpan_build
+
+DEPENDS += "libmodule-build-perl-native \
+"
+
+RPROVIDES_${PN} = " libhtml-element-perl \
+ libhtml-tree-assubs-perl \
+ libhtml-tree-perl \
+ libhtml-treebuilder-perl \
+"
+
+RDEPENDS_${PN} = " perl-module-b \
+ perl-module-base \
+ perl-module-strict \
+ perl-module-warnings \
+ perl-module-exporter \
+ perl-module-carp \
+"
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libimport/libimport-into-perl_1.002004.bb b/meta-openembedded/meta-perl/recipes-perl/libimport/libimport-into-perl_1.002004.bb
new file mode 100644
index 000000000..af08d630a
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libimport/libimport-into-perl_1.002004.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Import::Into - import packages into other packages"
+DESCRIPTION = "Writing exporters is a pain. Some use \"Exporter\", some use \
+\"Sub::Exporter\", some use \"Moose::Exporter\", some use \
+\"Exporter::Declare\"... and some things are pragmas.\
+\
+Exporting on someone else's behalf is harder. The exporters don't provide a \
+consistent API for this, and pragmas need to have their import method called \
+directly, since they effect the current unit of compilation. \
+\
+\"Import::Into\" provides global methods to make this painless."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://metacpan.org/pod/Import-Into/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=209;endline=223;md5=3cf363f1e405dea6db2c6cd0ef23680c"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/E/ET/ETHER/Import-Into-${PV}.tar.gz"
+SRC_URI[md5sum] = "70f2f3b08a5b706ee382a8448c346cb1"
+SRC_URI[sha256sum] = "decb259bc2ff015fe3dac85e4a287d4128e9b0506a0b2c5fa7244836a68b1084"
+
+S = "${WORKDIR}/Import-Into-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " libmodule-runtime-perl \
+ perl-module-strict \
+ perl-module-warnings \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libio/files/run-ptest b/meta-openembedded/meta-perl/recipes-perl/libio/files/run-ptest
new file mode 100644
index 000000000..c9f9ca94d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libio/files/run-ptest
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+for case in `find t -type f -name '*.t'`; do
+ perl $case >$case.output 2>&1
+ ret=$?
+ cat $case.output
+ if [ $ret -ne 0 ]; then
+ echo "FAIL: ${case%.t}"
+ elif grep -i 'SKIP' $case.output; then
+ echo "SKIP: ${case%.t}"
+ else
+ echo "PASS: ${case%.t}"
+ fi
+
+ rm -f $case.output
+done
diff --git a/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.054.bb b/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.054.bb
new file mode 100644
index 000000000..ea78bc4e0
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libio/libio-socket-ssl-perl_2.054.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Perl library for transparent SSL"
+DESCRIPTION = "This module is a true drop-in replacement for IO::Socket::INET that \
+uses SSL to encrypt data before it is transferred to a remote server \
+or client. IO::Socket::SSL supports all the extra features that one \
+needs to write a full-featured SSL client or server application: \
+multiple SSL contexts, cipher selection, certificate verification, and \
+SSL version selection. As an extra bonus, it works perfectly with \
+mod_perl."
+HOMEPAGE = "http://search.cpan.org/dist/IO-Socket-SSL/"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://META.yml;beginline=11;endline=11;md5=963ce28228347875ace682de56eef8e8"
+
+RDEPENDS_${PN} += "\
+ libnet-ssleay-perl \
+ perl-module-autoloader \
+ perl-module-scalar-util \
+ perl-module-io-socket \
+"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/S/SU/SULLR/IO-Socket-SSL-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[md5sum] = "e1b412e28d107c716e7ca637e2b7f8bd"
+SRC_URI[sha256sum] = "02ea04e9a336a7d3ca9aa604c0c5b5aaf3efa513cefecfc73cc79ceeb5131e4b"
+
+S = "${WORKDIR}/IO-Socket-SSL-${PV}"
+
+inherit cpan ptest
+
+do_install_append () {
+ mkdir -p ${D}${docdir}/${PN}/
+ cp ${S}/BUGS ${D}${docdir}/${PN}/
+ cp ${S}/Changes ${D}${docdir}/${PN}/
+ cp ${S}/README ${D}${docdir}/${PN}/
+ cp -pRP ${S}/docs ${D}${docdir}/${PN}/
+ cp -pRP ${S}/certs ${D}${docdir}/${PN}/
+ cp -pRP ${S}/example ${D}${docdir}/${PN}/
+}
+
+do_install_ptest () {
+ cp -r ${B}/t ${D}${PTEST_PATH}
+ cp -r ${B}/certs ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libio/libio-stringy-perl_2.111.bb b/meta-openembedded/meta-perl/recipes-perl/libio/libio-stringy-perl_2.111.bb
new file mode 100644
index 000000000..0e566c0f2
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libio/libio-stringy-perl_2.111.bb
@@ -0,0 +1,31 @@
+SUMMARY = "IO-stringy - I/O on in-core objects like strings and arrays"
+DESCRIPTION = "This toolkit primarily provides modules for performing both \
+traditional and object-oriented i/o on things *other* than normal \
+filehandles; in particular, IO::Scalar, IO::ScalarArray, and IO::Lines."
+
+HOMEPAGE = "http://www.zeegee.com/products/IO-stringy/"
+SECTION = "devel"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=01406e4ff2e60d88d42ef1caebdd0011"
+
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/D/DS/DSKOLL/IO-stringy-${PV}.tar.gz"
+SRC_URI[md5sum] = "e91acf0a800b190d13585a47de775bdd"
+SRC_URI[sha256sum] = "8c67fd6608c3c4e74f7324f1404a856c331dbf48d9deda6aaa8296ea41bf199d"
+
+S = "${WORKDIR}/IO-stringy-${PV}"
+
+inherit cpan
+
+RPROVIDES_${PN} += " libio-atomicfile-perl \
+ libio-innerfile-perl \
+ libio-lines-perl \
+ libio-scalar-perl \
+ libio-scalararray-perl \
+ libio-wrap-perl \
+ libio-wraptie-perl \
+ libio-wraptie-master-perl \
+ libio-wraptie-slave-perl \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libipc/libipc-signal-perl_1.00.bb b/meta-openembedded/meta-perl/recipes-perl/libipc/libipc-signal-perl_1.00.bb
new file mode 100644
index 000000000..b518164df
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libipc/libipc-signal-perl_1.00.bb
@@ -0,0 +1,18 @@
+SUMMARY = "IPC::Signal - Utility functions dealing with signals"
+DESCRIPTION = "IPC::Signal - This module contains utility functions for \
+dealing with signals."
+
+HOMEPAGE = "http://search.cpan.org/~rosch/IPC-Signal-1.00/"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://README;beginline=16;endline=18;md5=f36550f59a0ae5e6e3b0be6a4da60d26"
+
+S = "${WORKDIR}/IPC-Signal-${PV}"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RO/ROSCH/IPC-Signal-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "4cebf17fdf1785eaf8c151bf2e8c360a"
+SRC_URI[sha256sum] = "7c21f9c8c2d0c0f0f0f46e77de7c3d879dd562668ddf0525875c38cef2076fd0"
+
+inherit cpan
diff --git a/meta-openembedded/meta-perl/recipes-perl/liblocale/liblocale-gettext-perl_1.07.bb b/meta-openembedded/meta-perl/recipes-perl/liblocale/liblocale-gettext-perl_1.07.bb
new file mode 100644
index 000000000..fdc72a2b9
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/liblocale/liblocale-gettext-perl_1.07.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Locale::gettext - message handling functions."
+DESCRIPTION = "The gettext module permits access from perl to the gettext() family of \
+functions for retrieving message strings from databases constructed to \
+internationalize software."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~pvandry/Locale-gettext-${PV}/"
+
+LICENSE = "Artistic-1.0 | GPLv1+"
+LIC_FILES_CHKSUM = "file://README;md5=d028249c2d08dca6ca6c5bb43b56d926"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/P/PV/PVANDRY/Locale-gettext-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "bc652758af65c24500f1d06a77415019"
+SRC_URI[sha256sum] = "909d47954697e7c04218f972915b787bd1244d75e3bd01620bc167d5bbc49c15"
+
+S = "${WORKDIR}/Locale-gettext-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmime/files/run-ptest b/meta-openembedded/meta-perl/recipes-perl/libmime/files/run-ptest
new file mode 100644
index 000000000..c9f9ca94d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmime/files/run-ptest
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+for case in `find t -type f -name '*.t'`; do
+ perl $case >$case.output 2>&1
+ ret=$?
+ cat $case.output
+ if [ $ret -ne 0 ]; then
+ echo "FAIL: ${case%.t}"
+ elif grep -i 'SKIP' $case.output; then
+ echo "SKIP: ${case%.t}"
+ else
+ echo "PASS: ${case%.t}"
+ fi
+
+ rm -f $case.output
+done
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmime/libmime-charset-perl_1.012.2.bb b/meta-openembedded/meta-perl/recipes-perl/libmime/libmime-charset-perl_1.012.2.bb
new file mode 100644
index 000000000..79b4681a6
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmime/libmime-charset-perl_1.012.2.bb
@@ -0,0 +1,19 @@
+SUMMARY = "MIME::Charset - Charset Information for MIME."
+DESCRIPTION = "MIME::Charset provides information about character sets used for MIME \
+messages on Internet."
+HOMEPAGE = "http://search.cpan.org/~nezumi/MIME-Charset-${PV}/"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0 | GPLv1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/N/NE/NEZUMI/MIME-Charset-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "71440416376248c31aa3bef753fae28d"
+SRC_URI[sha256sum] = "878c779c0256c591666bd06c0cde4c0d7820eeeb98fd1183082aee9a1e7b1d13"
+
+S = "${WORKDIR}/MIME-Charset-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmime/libmime-types-perl_2.17.bb b/meta-openembedded/meta-perl/recipes-perl/libmime/libmime-types-perl_2.17.bb
new file mode 100644
index 000000000..414753030
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmime/libmime-types-perl_2.17.bb
@@ -0,0 +1,42 @@
+SUMMARY = "MIME::Types - Definition of MIME types"
+DESCRIPTION = "MIME types are used in MIME compliant lines, for instance \
+as part of e-mail and HTTP traffic, to indicate the type of content which \
+is transmitted. Sometimes real knowledge about a mime-type is need.\
+\n\
+This module maintains a set of MIME::Type objects, which each describe \
+one known mime type."
+HOMEPAGE = "http://search.cpan.org/~markov/MIME-Types-${PV}"
+SECTION = "libraries"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://META.yml;beginline=11;endline=11;md5=963ce28228347875ace682de56eef8e8"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/MIME-Types-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[md5sum] = "6f1441addab947137bac92c379a47ba3"
+SRC_URI[sha256sum] = "e04ed7d42f1ff3150a303805f2689c28f80b92c511784d4641cb7f040d3e8ff6"
+
+S = "${WORKDIR}/MIME-Types-${PV}"
+
+inherit cpan ptest
+
+RDEPENDS_${PN} = "\
+ perl-module-base \
+ perl-module-file-basename \
+ perl-module-file-spec \
+ perl-module-overload \
+"
+
+RDEPENDS_${PN}-ptest = "perl-module-lib perl-module-test-more"
+#RSUGGESTS_${PN}-ptest = "libmojo-base-perl"
+
+do_install () {
+ cpan_do_install
+ install -d ${D}${bindir}
+ install -m 755 ${S}/bin/collect-types ${D}${bindir}/collect-types
+}
+
+do_install_ptest () {
+ cp -r ${B}/t ${D}${PTEST_PATH}
+}
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-perl_0.4224.bb b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-perl_0.4224.bb
new file mode 100644
index 000000000..d523a7a0c
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-perl_0.4224.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Module::Build - Build and install Perl modules"
+DESCRIPTION = "Many Perl distributions use a Build.PL file instead of a \
+Makefile.PL file to drive distribution configuration, build, test and \
+installation. Traditionally, Build.PL uses Module::Build as the underlying \
+build system. This module provides a simple, lightweight, drop-in replacement. \
+Whereas Module::Build has over 6,700 lines of code; this module has less than \
+120, yet supports the features needed by most distributions."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://metacpan.org/release/Module-Build"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=960;endline=965;md5=624c06db56a2af4d70cf9edc29fcae1b"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/Module-Build-${PV}.tar.gz"
+SRC_URI[md5sum] = "b74c2f6e84b60aad3a3defd30b6f0f4d"
+SRC_URI[sha256sum] = "a6ca15d78244a7b50fdbf27f85c85f4035aa799ce7dd018a0d98b358ef7bc782"
+
+S = "${WORKDIR}/Module-Build-${PV}"
+
+inherit cpan_build
+
+# From:
+# https://github.com/rehsack/meta-cpan/blob/master/recipes-devel/module-build-perl/module-build-perl_0.4216.bb
+#
+do_patch_module_build () {
+ cd ${S}
+ sed -i -e 's,my $interpreter = $self->{properties}{perl};,my $interpreter = "${bindir}/perl";,g' lib/Module/Build/Base.pm
+}
+
+do_patch[postfuncs] += "do_patch_module_build"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.039.bb b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.039.bb
new file mode 100644
index 000000000..b1a56e56d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-build-tiny-perl_0.039.bb
@@ -0,0 +1,54 @@
+SUMMARY = "Module::Build::Tiny - A tiny replacement for Module::Build"
+DESCRIPTION = "Many Perl distributions use a Build.PL file instead of a \
+Makefile.PL file to drive distribution configuration, build, test and \
+installation. Traditionally, Build.PL uses Module::Build as the underlying \
+build system. This module provides a simple, lightweight, drop-in replacement. \
+Whereas Module::Build has over 6,700 lines of code; this module has less than \
+120, yet supports the features needed by most distributions."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~leont/Module-Build-Tiny/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=57b8100f0b648cd37fbc3725fe3c111a"
+
+DEPENDS = "libextutils-config-perl-native libextutils-helpers-perl-native libextutils-installpaths-perl-native"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/Module-Build-Tiny-${PV}.tar.gz"
+SRC_URI[md5sum] = "2332c90c17454107fea3f2614e11a3a9"
+SRC_URI[sha256sum] = "7d580ff6ace0cbe555bf36b86dc8ea232581530cbeaaea09bccb57b55797f11c"
+
+S = "${WORKDIR}/Module-Build-Tiny-${PV}"
+
+inherit cpan_build
+
+do_install () {
+ cpan_build_do_install
+}
+
+RDEPENDS_${PN} = " libextutils-config-perl \
+ libextutils-helpers-perl \
+ libextutils-installpaths-perl \
+ perl-module-xsloader \
+ perl-module-file-spec \
+ perl-module-io-handle \
+ perl-module-tap-harness-env \
+ perl-module-ipc-open3 \
+ perl-module-file-path \
+ perl-module-cpan \
+ perl-module-extutils-cbuilder \
+ perl-module-getopt-long \
+ perl-module-extutils-makemaker \
+ perl-module-exporter \
+ perl-module-carp \
+ perl-module-test-more \
+ perl-module-text-parsewords \
+ perl-module-load \
+ perl-module-file-temp \
+ perl-module-data-dumper \
+ perl-module-extutils-parsexs \
+ perl-module-pod-man \
+ perl-module-json-pp \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-pluggable-perl_5.2.bb b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-pluggable-perl_5.2.bb
new file mode 100644
index 000000000..aed65d3a8
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-pluggable-perl_5.2.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Automatically give your module the ability to have plugins"
+DESCRIPTION = "Provides a simple but, hopefully, extensible way of \
+having 'plugins' for your module. Obviously this isn't going to be the \
+be all and end all of solutions but it works for me.\
+\
+Essentially all it does is export a method into your namespace that \
+looks through a search path for .pm files and turn those into class \
+names.\
+\
+Optionally it instantiates those classes for you."
+SECTION = "libs"
+
+AUTHOR = "Simon Wistow <simon@thegestalt.org>"
+HOMEPAGE = "https://github.com/simonwistow/Module-Pluggable"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=322;endline=325;md5=086450ce010f6fda25db0b38fcc41086"
+
+SRCNAME = "Module-Pluggable"
+SRC_URI = "${CPAN_MIRROR}/authors/id/S/SI/SIMONW/${SRCNAME}-${PV}.tar.gz"
+SRC_URI[md5sum] = "87ce2971662efd0b69a81bb4dc9ea76c"
+SRC_URI[sha256sum] = "b3f2ad45e4fd10b3fb90d912d78d8b795ab295480db56dc64e86b9fa75c5a6df"
+
+PR = "r1"
+
+UPSTREAM_CHECK_REGEX = "Module\-Pluggable\-(?P<pver>(\d+\.\d+))"
+UPSTREAM_CHECK_URI = "https://metacpan.org/release/${SRCNAME}"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-base \
+ perl-module-deprecate \
+ perl-module-file-basename \
+ perl-module-file-find \
+ perl-module-file-spec \
+ perl-module-file-spec-functions \
+ perl-module-if \
+ perl-module-test-more \
+"
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-runtime-perl_0.016.bb b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-runtime-perl_0.016.bb
new file mode 100644
index 000000000..89f0f709a
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmodule/libmodule-runtime-perl_0.016.bb
@@ -0,0 +1,37 @@
+SUMMARY = "Module::Runtime - runtime module handling"
+DESCRIPTION = "The functions exported by this module deal with runtime \
+handling of Perl modules, which are normally handled at compile time. This \
+module avoids using any other modules, so that it can be used in low-level \
+infrastructure. \
+The parts of this module that work with module names apply the same syntax \
+that is used for barewords in Perl source. In principle this syntax can vary \
+between versions of Perl, and this module applies the syntax of the Perl on \
+which it is running. In practice the usable syntax hasn't changed yet, but \
+there's a good chance of it changing in Perl 5.18. \
+The functions of this module whose purpose is to load modules include \
+workarounds for three old Perl core bugs regarding require. These workarounds \
+are applied on any Perl version where the bugs exist, except for a case where \
+one of the bugs cannot be adequately worked around in pure Perl."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~zefram/Module-Runtime/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=36;endline=44;md5=9416434672a57853d6181f3da9094963"
+
+SRCNAME = "Module-Runtime"
+SRC_URI = "${CPAN_MIRROR}/authors/id/Z/ZE/ZEFRAM/${SRCNAME}-${PV}.tar.gz"
+SRC_URI[md5sum] = "d3d47222fa2e3dfcb4526f6cc8437b20"
+SRC_URI[sha256sum] = "68302ec646833547d410be28e09676db75006f4aa58a11f3bdb44ffe99f0f024"
+
+UPSTREAM_CHECK_REGEX = "Module\-Runtime\-(?P<pver>(\d+\.\d+)).tar"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-test-more \
+ perl-module-strict \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libmoo/libmoo-perl_2.003004.bb b/meta-openembedded/meta-perl/recipes-perl/libmoo/libmoo-perl_2.003004.bb
new file mode 100644
index 000000000..a260ab87d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libmoo/libmoo-perl_2.003004.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Moo - Minimalist Object Orientation (with Moose compatibility)"
+DESCRIPTION = "This module us an extremely light-weight subset of \"Moose\" \
+optimised for rapid startup and \"pay only for what you use\"."
+
+SECTION = "libs"
+
+HOMEPAGE = "http://metapan.org/release/Moo/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=731;endline=776;md5=27efedd175eeaddbd18f4e3572bd72a8"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/H/HA/HAARG/Moo-${PV}.tar.gz"
+SRC_URI[md5sum] = "d4fcd0f240033198571fcc81ce7c5f15"
+SRC_URI[sha256sum] = "f8bbb625f8e963eabe05cff9048fdd72bdd26777404ff2c40bc690f558be91e1"
+
+S = "${WORKDIR}/Moo-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " libclass-method-modifiers-perl \
+ libdevel-globaldestruction-perl \
+ libmodule-runtime-perl \
+ librole-tiny-perl \
+ perl-module-constant \
+ perl-module-exporter \
+ perl-module-mro \
+ perl-module-scalar-util \
+"
+
+RPROVIDES_${PN} = " libmethod-inliner-perl \
+ libmethod-generate-accessor-perl \
+ libmethod-generate-buildall-perl \
+ libmethod-generate-constructor-perl \
+ libmethod-generate-demolishall-perl \
+ libmoo-perl \
+ libmoo-handlemoose-perl \
+ libmoo-handlemoose-fakemetaclass-perl \
+ libmoo-object-perl \
+ libmoo-role-perl \
+ libsub-defer-perl \
+ libsub-quote-perl \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/files/run-ptest b/meta-openembedded/meta-perl/recipes-perl/libnet/files/run-ptest
new file mode 100644
index 000000000..c9f9ca94d
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/files/run-ptest
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+for case in `find t -type f -name '*.t'`; do
+ perl $case >$case.output 2>&1
+ ret=$?
+ cat $case.output
+ if [ $ret -ne 0 ]; then
+ echo "FAIL: ${case%.t}"
+ elif grep -i 'SKIP' $case.output; then
+ echo "SKIP: ${case%.t}"
+ else
+ echo "PASS: ${case%.t}"
+ fi
+
+ rm -f $case.output
+done
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.14.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.14.bb
new file mode 100644
index 000000000..efaa7f7b1
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-dns-perl_1.14.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "This package contains the DNS.pm module with friends."
+HOMEPAGE = "http://www.net-dns.org/"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+
+LIC_FILES_CHKSUM = "file://README;md5=92d93d8c5bf22de77578531e283dd219"
+
+DEPENDS += "perl"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/N/NL/NLNETLABS/Net-DNS-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "0da1099c0a3548d36ea9e31d5bb9e122"
+SRC_URI[sha256sum] = "83c38a594eeb2c85d66e60047a0f5b403f34bd92a5d13606f02e828d450299fc"
+
+S = "${WORKDIR}/Net-DNS-${PV}"
+
+EXTRA_CPANFLAGS = "EXPATLIBPATH=${STAGING_LIBDIR} EXPATINCPATH=${STAGING_INCDIR}"
+
+inherit cpan
+
+RDEPENDS_${PN} = "perl-module-integer"
+
+do_compile() {
+ export LIBC="$(find ${STAGING_DIR_TARGET}/${base_libdir}/ -name 'libc-*.so')"
+ cpan_do_compile
+}
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.65.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.65.bb
new file mode 100644
index 000000000..f2b1f1634
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ldap-perl_0.65.bb
@@ -0,0 +1,29 @@
+SUMMARY = "LDAP Perl module"
+DESCRIPTION = "Net::LDAP is a collection of modules that implements \
+a LDAP services API for Perl programs. The module may be used to \
+search directories or perform maintenance functions such as adding, \
+deleting or modifying entries."
+
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://README;beginline=3;endline=5;md5=4d6588c2fa0d38ae162f6314d201d89e"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MA/MARSCHAP/perl-ldap-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "d057c8db76913d95c0e460c7bdd98b27"
+SRC_URI[sha256sum] = "5f57dd261dc16ebf942a272ddafe69526598df71151a51916edc37a4f2f23834"
+
+S = "${WORKDIR}/perl-ldap-${PV}"
+
+inherit cpan
+
+do_configure_prepend() {
+ perl -pi -e 's/auto_install_now.*//g' Makefile.PL
+}
+
+RDEPENDS_${PN} = "perl \
+ libconvert-asn1-perl \
+ libio-socket-ssl-perl \
+ libauthen-sasl-perl \
+"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl-0.12/libidn-wr-cross-compile.patch b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl-0.12/libidn-wr-cross-compile.patch
new file mode 100644
index 000000000..679caa36a
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl-0.12/libidn-wr-cross-compile.patch
@@ -0,0 +1,49 @@
+perl-Net-LibIDN: cross-compile
+
+Upstream-Status: Pending
+
+Add support for cross-compile allowing the compiler binary to be
+specified into the perl Makefile instead of using the default 'gcc'.
+
+Signed-off-by: Greg Moffatt <greg.moffatt@windriver.com>
+---
+
+--- perl-Net-LibIDN-0.12.orig/Makefile.PL 2009-02-26 07:09:45.000000000 -0500
++++ perl-Net-LibIDN-0.12/Makefile.PL 2010-10-19 09:34:22.811173965 -0400
+@@ -9,6 +9,7 @@
+ my $options;
+ my $testno=1;
+ my %MakeParams = InitMakeParams();
++my $compiler;
+
+ WriteMakefile(%MakeParams);
+
+@@ -44,7 +45,8 @@
+ (
+ "with-libidn=s" => \$libdir,
+ "with-libidn-inc=s" => \$incdir,
+- "disable-tld" => \$disable_tld
++ "disable-tld" => \$disable_tld,
++ "compiler=s" => \$compiler
+ );
+
+ if ($libdir)
+@@ -165,12 +167,17 @@
+ return 0;
+ }
+
+- foreach my $cc (qw/cc gcc/)
++ foreach my $cc ($compiler, qw/cc gcc/)
+ {
+ unlink($test);
+ system "$cc $cflags -o $test $test.c $ldflags";
+ next if ($? >> 8);
+
++ if ($compiler == $cc)
++ {
++ return 1;
++ }
++
+ if (open(FILE, "./$test|"))
+ {
+ my $match;
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl_0.12.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl_0.12.bb
new file mode 100644
index 000000000..1ef9f0bc3
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-libidn-perl_0.12.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Net::LibIDN - Perl bindings for GNU Libidn"
+DESCRIPTION = "\
+Provides bindings for GNU Libidn, a C library for handling Internationalized \
+Domain Names according to IDNA (RFC 3490), in a way very much inspired by \
+Turbo Fredriksson's PHP-IDN. \
+"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPLv1+"
+HOMEPAGE = "http://search.cpan.org/dist/Net-LibIDN/"
+DEPENDS += "libidn"
+# We must need glibc-gconvs to enable charset related functions,
+# such as Net::LibIDN::idn_to_ascii().
+RDEPENDS_${PN}_append_libc-glibc = " glibc-gconvs"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/T/TH/THOR/Net-LibIDN-${PV}.tar.gz"
+SRC_URI[md5sum] = "c3e4de2065009d67bcb1df0afb473e12"
+SRC_URI[sha256sum] = "2f8acc9442b3866ec7dc63cd449fc693ae3e930d5d3e5e9430fbb6f393bdbb17"
+
+SRC_URI += "file://libidn-wr-cross-compile.patch"
+
+LIC_FILES_CHKSUM = "file://README;beginline=42;endline=92;md5=3374ea0369ca3ead6047520477a43147"
+
+S = "${WORKDIR}/Net-LibIDN-${PV}"
+
+EXTRA_CPANFLAGS = "--with-libidn=${STAGING_LIBDIR} --with-libidn-inc=${STAGING_INCDIR} --compiler='${CC}'"
+EXTRA_CPANFLAGS += "--disable-tld"
+
+inherit cpan
+
+FILES_${PN}-dbg += "${libdir}/perl/vendor_perl/*/auto/Net/LibIDN/.debug/"
+
+do_configure_prepend() {
+ rm -rf ${S}/.pc/
+}
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ssleay-perl_1.84.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ssleay-perl_1.84.bb
new file mode 100644
index 000000000..cfecef9cf
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-ssleay-perl_1.84.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Net::SSLeay - Perl extension for using OpenSSL"
+DESCRIPTION = "This module offers some high level convenience functions for accessing \
+web pages on SSL servers (for symmetry, same API is offered for \
+accessing http servers, too), a sslcat() function for writing your own \
+clients, and finally access to the SSL api of SSLeay/OpenSSL package \
+so you can write servers or clients for more complicated applications."
+HOMEPAGE = "http://search.cpan.org/dist/Net-SSLeay/"
+SECTION = "libs"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=274;endline=294;md5=67d67095d83e339da538a082fad5f38e"
+
+DEPENDS = "openssl zlib openssl-native"
+RDEPENDS_${PN} += "\
+ libssl \
+ libcrypto \
+ perl-module-carp \
+ perl-module-errno \
+ perl-module-extutils-makemaker \
+ perl-module-mime-base64 \
+ perl-module-socket \
+ zlib \
+"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MI/MIKEM/Net-SSLeay-${PV}.tar.gz \
+ file://run-ptest \
+ "
+SRC_URI[md5sum] = "cfbe968487149626978f427cc9fb8c77"
+SRC_URI[sha256sum] = "823ec3cbb428309d6a9e56f362a9300693ce3215b7fede109adb7be361fff177"
+
+S = "${WORKDIR}/Net-SSLeay-${PV}"
+
+inherit cpan ptest
+
+export OPENSSL_PREFIX="${STAGING_LIBDIR}"
+
+EXTRA_CPANFLAGS = "INC=-I${STAGING_INCDIR} LIBS='-L${STAGING_LIBDIR} -lcrypto -lssl -L${STAGING_BASELIBDIR} -lz'"
+
+do_install_ptest() {
+ cp -r ${B}/t ${D}${PTEST_PATH}
+}
+
+BBCLASSEXTEND = "native"
+
+FILES_${PN}-dbg =+ "${libdir}/perl/vendor_perl/*/auto/Net/SSLeay/.debug/"
+
+RDEPENDS_${PN}-ptest = " perl"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-telnet-perl_3.04.bb b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-telnet-perl_3.04.bb
new file mode 100644
index 000000000..652e8c941
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libnet/libnet-telnet-perl_3.04.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Net-Telnet Perl module"
+DESCRIPTION = "Net::Telnet allows you to make client connections to a TCP port and do \
+network I/O, especially to a port using the TELNET protocol. Simple I/O \
+methods such as print, get, and getline are provided. More sophisticated \
+interactive features are provided because connecting to a TELNET port \
+ultimately means communicating with a program designed for human interaction. \
+These interactive features include the ability to specify a time-out and to \
+wait for patterns to appear in the input stream, such as the prompt from a \
+shell."
+
+HOMEPAGE = "http://search.cpan.org/dist/Net-Telnet/"
+SECTION = "Development/Libraries"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://README;beginline=4;endline=7;md5=3fd238bfb6ee1810cb15d5d95e07b0f5"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/J/JR/JROGERS/Net-Telnet-${PV}.tar.gz"
+SRC_URI[md5sum] = "d2514080116c1b0fa5f96295c84538e3"
+SRC_URI[sha256sum] = "e64d567a4e16295ecba949368e7a6b8b5ae2a16b3ad682121d9b007dc5d2a37a"
+
+S = "${WORKDIR}/Net-Telnet-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = "perl"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libproc/libproc-waitstat-perl_1.00.bb b/meta-openembedded/meta-perl/recipes-perl/libproc/libproc-waitstat-perl_1.00.bb
new file mode 100644
index 000000000..1599e61f1
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libproc/libproc-waitstat-perl_1.00.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Interpret and act on wait() status values"
+DESCRIPTION = "This module contains functions for interpreting and acting \
+on wait status values."
+
+HOMEPAGE = "http://search.cpan.org/~rosch/Proc-WaitStat/"
+SECTION = "libraries"
+
+LICENSE = "Artistic-1.0|GPLv1+"
+LIC_FILES_CHKSUM = "file://README;beginline=21;endline=23;md5=f36550f59a0ae5e6e3b0be6a4da60d26"
+
+RDEPENDS_${PN} += "perl libipc-signal-perl"
+
+S = "${WORKDIR}/Proc-WaitStat-${PV}"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RO/ROSCH/Proc-WaitStat-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "b911bd579b6b142391b21de1efa30c95"
+SRC_URI[sha256sum] = "d07563f5e787909d16e7390241e877f49ab739b1de9d0e2ea1a41bd0bf4474bc"
+
+inherit cpan
diff --git a/meta-openembedded/meta-perl/recipes-perl/librole/librole-tiny-perl_2.000006.bb b/meta-openembedded/meta-perl/recipes-perl/librole/librole-tiny-perl_2.000006.bb
new file mode 100644
index 000000000..c2755ea0f
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/librole/librole-tiny-perl_2.000006.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Role::Tiny - Roles. Like a nouvelle cousine portion size of Moose."
+DESCRIPTION = "\"Role::Tiny\" is a minimalist role composition tool."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://metacpan.org/pod/Role::Tiny"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=177;endline=214;md5=26df7e7c20551fb1906e2286624f0b71"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/H/HA/HAARG/Role-Tiny-${PV}.tar.gz"
+SRC_URI[md5sum] = "7c277728a7e090f64b495857cadfed08"
+SRC_URI[sha256sum] = "cc73418c904a0286ecd8915eac11f5be2a8d1e17ea9cb54c9116b0340cd3e382"
+
+S = "${WORKDIR}/Role-Tiny-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-exporter \
+ perl-module-strict \
+ perl-module-test-more \
+ perl-module-warnings \
+"
+
+RPROVIDES_${PN} = " librole-tiny-perl \
+ librole-tiny-with-perl \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libstrictures/libstrictures-perl_2.000003.bb b/meta-openembedded/meta-perl/recipes-perl/libstrictures/libstrictures-perl_2.000003.bb
new file mode 100644
index 000000000..a6808d3f8
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libstrictures/libstrictures-perl_2.000003.bb
@@ -0,0 +1,45 @@
+SUMMARY = "strictures - turn on strict and make all warnings fatal"
+DESCRIPTION = "I've been writing the equivalent of this module at the top \
+of my code for about a year now. I figured it was time to make it shorter. \
+\
+Things like the importer in \"use Moose\" don't help me because they turn \
+warnings on but don't make them fatal -- which from my point of view is \
+useless because I want an exception to tell me my code isn't warnings-clean. \
+\
+Any time I see a warning from my code, that indicates a mistake. \
+\
+Any time my code encounters a mistake, I want a crash -- not spew to STDERR \
+and then unknown (and probably undesired) subsequent behaviour. \
+\
+I also want to ensure that obvious coding mistakes, like indirect object \
+syntax (and not so obvious mistakes that cause things to accidentally compile \
+as such) get caught, but not at the cost of an XS dependency and not at the \
+cost of blowing things up on another machine. \
+\
+Therefore, \"strictures\" turns on additional checking, but only when it \
+thinks it's running in a test file in a VCS checkout -- although if this \
+causes undesired behaviour this can be overridden by setting the \
+PERL_STRICTURES_EXTRA environment variable."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://metacpan.org/pod/strictures"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=246;endline=262;md5=43be558cf4f19823cdd6af22135cf5f8"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/H/HA/HAARG/strictures-${PV}.tar.gz"
+SRC_URI[md5sum] = "78244cfab6168dcf196370d1e2309536"
+SRC_URI[sha256sum] = "27f8ea096a521e9754d36ea32889c2cda28346d04e3e399e7ea118d182dbaf22"
+
+S = "${WORKDIR}/strictures-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " perl-module-carp \
+ perl-module-strict \
+ perl-module-test-more \
+ perl-module-warnings \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libsub/libsub-exporter-progressive-perl_0.001013.bb b/meta-openembedded/meta-perl/recipes-perl/libsub/libsub-exporter-progressive-perl_0.001013.bb
new file mode 100644
index 000000000..64d19c0f1
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libsub/libsub-exporter-progressive-perl_0.001013.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Sub::Exporter::Progressive - Only use Sub::Exporter if you need it."
+DESCRIPTION = "\"Sub::Exporter\" is an incredibly powerful module, but with \
+that power comes great responsibility, er- as well as some runtime penalties. \
+This module is a \"Sub::Exporter\" wrapper that will let your users just use \
+\"Exporter\" if all they are doing is picking exports, but use \
+\"Sub::Exporter\" if your users try to use \"Sub::Exporter's\" more advanced \
+features, like renaming exports, if they try to use them."
+
+SECTION = "libs"
+
+HOMEPAGE = "https://metacpan.org/pod/Sub-Exporter-Progressive/"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=003fa970662359a43ac2c2961108b0f1"
+
+DEPENDS_${PN} = " perl-module-test-more"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/F/FR/FREW/Sub-Exporter-Progressive-${PV}.tar.gz"
+SRC_URI[md5sum] = "72cf6acdd2a0a8b105821a4db98e4ebe"
+SRC_URI[sha256sum] = "d535b7954d64da1ac1305b1fadf98202769e3599376854b2ced90c382beac056"
+
+S = "${WORKDIR}/Sub-Exporter-Progressive-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} += " perl-module-carp \
+ perl-module-list-util \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libterm/libterm-readkey-perl_2.37.bb b/meta-openembedded/meta-perl/recipes-perl/libterm/libterm-readkey-perl_2.37.bb
new file mode 100644
index 000000000..6b76682c6
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libterm/libterm-readkey-perl_2.37.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Term::ReadKey - A perl module for simple terminal control."
+DESCRIPTION = "Term::ReadKey is a compiled perl module dedicated to providing simple \
+control over terminal driver modes (cbreak, raw, cooked, etc.,) support \
+for non-blocking reads, if the architecture allows, and some generalized \
+handy functions for working with terminals. One of the main goals is to \
+have the functions as portable as possible, so you can just plug in "use \
+Term::ReadKey" on any architecture and have a good likelihood of it \
+working."
+HOMEPAGE = "http://search.cpan.org/~jstowe/TermReadKey-${PV}"
+SECTION = "libraries"
+
+LICENSE = "Artistic-1.0 | GPLv1+"
+LIC_FILES_CHKSUM = "file://README;md5=c275db663c8489a5709ebb22b185add5"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/J/JS/JSTOWE/TermReadKey-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "e8ea15c16333ac4f8d146d702e83cc0c"
+SRC_URI[sha256sum] = "4a9383cf2e0e0194668fe2bd546e894ffad41d556b41d2f2f577c8db682db241"
+
+S = "${WORKDIR}/TermReadKey-${PV}"
+
+# It needs depend on native to let dynamic loader use native modules
+# rather than target ones.
+DEPENDS = "libterm-readkey-perl-native"
+
+inherit cpan
+
+do_configure_append () {
+ # Hack the dynamic module loader so that it use native modules since it can't load
+ # the target ones.
+ if [ "${BUILD_SYS}" != "${HOST_SYS}" ]; then
+ sed -i -e "s#-I\$(INST_ARCHLIB)#-I${STAGING_BINDIR_NATIVE}/perl-native/perl/vendor_perl/${@get_perl_version(d)}#g" Makefile
+ fi
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.42.bb b/meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.42.bb
new file mode 100644
index 000000000..c9ba59480
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libtest/libtest-harness-perl_3.42.bb
@@ -0,0 +1,120 @@
+# NOTE:
+# You should use perl-module-test-harness instead of this package,
+# unless you specifically need a newer version than what is provided
+# by perl in oe-core.
+
+SUMMARY = "Test::Harness - Run Perl standard test scripts with statistics"
+DESCRIPTION = "Although, for historical reasons, the Test::Harness \
+distribution takes its name from this module it now exists only to provide \
+TAP::Harness with an interface that is somewhat backwards compatible \
+with Test::Harness 2.xx. If you're writing new code consider using \
+TAP::Harness directly instead. \
+\
+Emulation is provided for runtests and execute_tests but the \
+pluggable 'Straps' interface that previous versions of Test::Harness \
+supported is not reproduced here. Straps is now available as a stand \
+alone module: Test::Harness::Straps. \
+\
+See TAP::Parser, TAP::Harness for the main documentation for this \
+distribution."
+
+SECTION = "libs"
+
+HOMEPAGE = "http://testanything.org"
+
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=29;endline=30;md5=b08db4360eec119e875dddd7cb8a5ddd"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/L/LE/LEONT/Test-Harness-${PV}.tar.gz"
+SRC_URI[md5sum] = "c794906473f88d6b74194e2d56f16bd6"
+SRC_URI[sha256sum] = "0fd90d4efea82d6e262e6933759e85d27cbcfa4091b14bf4042ae20bab528e53"
+
+UPSTREAM_CHECK_REGEX = "Test\-Harness\-(?P<pver>(\d+\.\d+))(?!_\d+).tar"
+
+S = "${WORKDIR}/Test-Harness-${PV}"
+
+inherit cpan ptest-perl
+
+RDEPENDS_${PN} += "\
+ perl-module-benchmark \
+"
+
+RPROVIDES_${PN} += "libapp-prove-perl \
+ libapp-prove-state-perl \
+ libapp-prove-state-result-perl \
+ libapp-prove-state-result-test-perl \
+ libtap-base-perl \
+ libtap-formatter-base-perl \
+ libtap-formatter-color-perl \
+ libtap-formatter-console-perl \
+ libtap-formatter-console-parallelsession-perl \
+ libtap-formatter-console-session-perl \
+ libtap-formatter-file-perl \
+ libtap-formatter-file-session-perl \
+ libtap-formatter-session-perl \
+ libtap-harness-perl \
+ libtap-harness-env-perl \
+ libtap-object-perl \
+ libtap-parser-perl \
+ libtap-parser-aggregator-perl \
+ libtap-parser-grammar-perl \
+ libtap-parser-iterator-perl \
+ libtap-parser-iterator-array-perl \
+ libtap-parser-iterator-process-perl \
+ libtap-parser-iterator-stream-perl \
+ libtap-parser-iteratorfactory-perl \
+ libtap-parser-multiplexer-perl \
+ libtap-parser-result-perl \
+ libtap-parsser-result-bailout-perl \
+ libtap-parser-result-comment-perl \
+ libtap-parser-result-plan-perl \
+ libtap-parser-result-pragma-perl \
+ libtap-parser-result-test-perl \
+ libtap-parser-result-unknown-perl \
+ libtap-parser-result-version-perl \
+ libtap-parser-result-yaml-perl \
+ libtap-parser-resultfactory-perl \
+ libtap-parser-scheduler-perl \
+ libtap-parser-scheduler-job-perl \
+ libtap-parser-scheduler-spinner-perl \
+ libtap-parser-source-perl \
+ libtap-parser-sourcehandler-perl \
+ libtap-parser-sourcehandler-executable-perl \
+ libtap-parser-sourcehandler-file-perl \
+ libtap-parser-sourcehandler-handle-perl \
+ libtap-parser-sourcehandler-perl-perl \
+ libtap-parser-sourcehandler-rawtap-perl \
+ libtap-parser-yamlish-reader-perl \
+ libtap-parser-yamlish-writer-perl \
+ "
+
+do_install_prepend() {
+ # these tests are inappropriate on target
+ rm -rf ${B}/t/000-load.t
+ rm -rf ${B}/t/state.t
+ # these tests require "-T" (taint) option on command line
+ rm -rf ${B}/t/aggregator.t
+ rm -rf ${B}/t/bailout.t
+ rm -rf ${B}/t/base.t
+ rm -rf ${B}/t/callbacks.t
+ rm -rf ${B}/t/errors.t
+ rm -rf ${B}/t/nested.t
+ rm -rf ${B}/t/object.t
+ rm -rf ${B}/t/premature-bailout.t
+ rm -rf ${B}/t/results.t
+ rm -rf ${B}/t/streams.t
+ rm -rf ${B}/t/yamlish-output.t
+ rm -rf ${B}/t/compat/version.t
+}
+
+do_install_append() {
+ install -d ${D}/usr/local/bin
+ # do not clobber perl-misc /usr/bin/prove
+ install -m 0755 ${B}/bin/prove ${D}/usr/local/bin/
+ rm -rf ${D}${bindir}/prove
+ rm -rf ${D}${bindir}
+}
+
+FILES_${PN} += "/usr/local/bin/prove"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-charwidth-perl_0.04.bb b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-charwidth-perl_0.04.bb
new file mode 100644
index 000000000..9057ae7fa
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-charwidth-perl_0.04.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Text::CharWidth - Get number of occupied columns of a string on terminal."
+DESCRIPTION = "This module supplies features similar as wcwidth(3) and wcswidth(3) \
+in C language. \
+Characters have its own width on terminal depending on locale. For \
+example, ASCII characters occupy one column per character, east Asian \
+fullwidth characters (like Hiragana or Han Ideograph) occupy two columns \
+per character, and combining characters (apperaring in ISO-8859-11 Thai, \
+Unicode, and so on) occupy zero columns per character. mbwidth() gives the \
+width of the first character of the given string and mbswidth() gives the \
+width of the whole given string."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~kubota/Text-CharWidth-${PV}/"
+
+LICENSE = "Artistic-1.0 | GPLv1+"
+LIC_FILES_CHKSUM = "file://README;md5=d8d54c8c500cbdd57a4c15911d9d96db"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/K/KU/KUBOTA/Text-CharWidth-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "37a723df0580c0758c0ee67b37336c15"
+SRC_URI[sha256sum] = "abded5f4fdd9338e89fd2f1d8271c44989dae5bf50aece41b6179d8e230704f8"
+
+S = "${WORKDIR}/Text-CharWidth-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb
new file mode 100644
index 000000000..a4c246e34
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-diff-perl_1.41.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Text::Diff - Perform diffs on files and record sets"
+DESCRIPTION = "diff() provides a basic set of services akin to the GNU diff \
+utility. It is not anywhere near as feature complete as GNU diff, but it is \
+better integrated with Perl and available on all platforms. It is often \
+faster than shelling out to a system's diff executable for small files, \
+and generally slower on larger files."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~ovid/Text-Diff/"
+
+LICENSE = "Artistic-1.0 | GPL-2.0+"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=385c55653886acac3821999a3ccd17b3"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/O/OV/OVID/Text-Diff-${PV}.tar.gz"
+SRC_URI[md5sum] = "30d56e6dd5551ca16b8e16cc7299dc21"
+SRC_URI[sha256sum] = "a67f50a48e313c1680cc662109ce5f913ea71454db355d0cf4db87ac89d2d2fa"
+
+S = "${WORKDIR}/Text-Diff-${PV}"
+
+inherit cpan
+
+RDEPENDS_${PN} = " libalgorithm-diff-perl \
+ perl-module-extutils-makemaker \
+ perl-module-exporter \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-iconv-perl_1.7.bb b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-iconv-perl_1.7.bb
new file mode 100644
index 000000000..275ccb8c9
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-iconv-perl_1.7.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Perl interface to iconv() codeset conversion function"
+DESCRIPTION = "\
+The Text::Iconv module provides a Perl interface to the iconv() \
+function as defined by the Single UNIX Specification. The convert() \
+method converts the encoding of characters in the input string from \
+the fromcode codeset to the tocode codeset, and returns the result. \
+Settings of fromcode and tocode and their permitted combinations are \
+implementation-dependent. Valid values are specified in the system \
+documentation."
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPL-1.0+"
+LIC_FILES_CHKSUM = "file://README;beginline=3;endline=6;md5=fadf2919c7128e887d26b4d905f90649"
+RRECOMMENDS_${PN}_append_libc-glibc = " glibc-gconvs"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/M/MP/MPIOTR/Text-Iconv-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "81b26e069eaebb084e91ea3c009b67ae"
+SRC_URI[sha256sum] = "5b80b7d5e709d34393bcba88971864a17b44a5bf0f9e4bcee383d029e7d2d5c3"
+
+S = "${WORKDIR}/Text-Iconv-${PV}"
+
+inherit cpan
+
+FILES_${PN}-dbg += "${libdir}/perl/vendor_perl/*/auto/Text/Iconv/.debug/"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-wrapi18n-perl_0.06.bb b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-wrapi18n-perl_0.06.bb
new file mode 100644
index 000000000..b2c239d79
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libtext/libtext-wrapi18n-perl_0.06.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Text::WrapI18N - Line wrapping module with support for multibyte, \
+fullwidth, and combining characters and languages without whitespaces \
+between words."
+DESCRIPTION = "This module intends to be a better Text::Wrap module. This module is \
+needed to support multibyte character encodings such as UTF-8, EUC-JP, \
+EUC-KR, GB2312, and Big5. This module also supports characters with \
+irregular widths, such as combining characters (which occupy zero columns \
+on terminal, like diacritical marks in UTF-8) and fullwidth characters \
+(which occupy two columns on terminal, like most of east Asian \
+characters). Also, minimal handling of languages which doesn't use \
+whitespaces between words (like Chinese and Japanese) is supported."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~kubota/Text-WrapI18N-${PV}/"
+
+LICENSE = "Artistic-1.0 | GPLv1+"
+LIC_FILES_CHKSUM = "file://README;md5=080862e1e40cdcddef4393e137285858"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/K/KU/KUBOTA/Text-WrapI18N-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "0799c16a00926e6c18d400c2e2861d5f"
+SRC_URI[sha256sum] = "4bd29a17f0c2c792d12c1005b3c276f2ab0fae39c00859ae1741d7941846a488"
+
+S = "${WORKDIR}/Text-WrapI18N-${PV}"
+
+DEPENDS = "libtext-charwidth-perl"
+
+RDEPENDS_${PN} = "libtext-charwidth-perl"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libunicode/libunicode-linebreak-perl_2017.004.bb b/meta-openembedded/meta-perl/recipes-perl/libunicode/libunicode-linebreak-perl_2017.004.bb
new file mode 100644
index 000000000..5ccb411fa
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libunicode/libunicode-linebreak-perl_2017.004.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Unicode::LineBreak - UAX #14 Unicode Line Breaking Algorithm."
+DESCRIPTION = "Unicode::LineBreak performs Line Breaking Algorithm described in Unicode \
+Standard Annex #14 [UAX #14]. East_Asian_Width informative property \
+defined by Annex #11 [UAX #11] will be concerned to determine breaking \
+positions."
+SECTION = "libs"
+
+HOMEPAGE = "http://search.cpan.org/~nezumi/Unicode-LineBreak-${PV}/"
+
+LICENSE = "Artistic-1.0 | GPLv1+"
+LIC_FILES_CHKSUM = "file://README;md5=77241abd74fec561b3f3de1b44c0241b"
+
+SRC_URI = "${CPAN_MIRROR}/authors/id/N/NE/NEZUMI/Unicode-LineBreak-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "de7672227922260ac92d20bbad29660b"
+SRC_URI[sha256sum] = "655bc3c4cb60ad0770d97816716cfe322f24e602c70e595f5941dfa02c40cb76"
+
+S = "${WORKDIR}/Unicode-LineBreak-${PV}"
+
+DEPENDS = "libsombok3 libmime-charset-perl"
+
+RDEPENDS_${PN} = "libsombok3 libmime-charset-perl"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-filter-buffertext-perl_1.01.bb b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-filter-buffertext-perl_1.01.bb
new file mode 100644
index 000000000..77dd616bf
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-filter-buffertext-perl_1.01.bb
@@ -0,0 +1,25 @@
+SUMMARY = "XML::Filter::BufferText - Filter to put all characters() in one event"
+DESCRIPTION = "\
+The XML::Filter::BufferText module is a very simple filter. One common \
+cause of grief (and programmer error) is that XML parsers aren't required \
+to provide character events in one chunk. They can, but are not forced \
+to, and most don't. This filter does the trivial but oft-repeated task \
+of putting all characters into a single event. \
+"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPLv1+"
+HOMEPAGE = "http://search.cpan.org/dist/XML-Filter-BufferText/"
+DEPENDS += "libxml-sax-perl-native"
+RDEPENDS_${PN} += "libxml-sax-perl"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/R/RB/RBERJON/XML-Filter-BufferText-${PV}.tar.gz"
+SRC_URI[md5sum] = "2992c0387632583b966ab9c965b25512"
+SRC_URI[sha256sum] = "8fd2126d3beec554df852919f4739e689202cbba6a17506e9b66ea165841a75c"
+
+LIC_FILES_CHKSUM = "file://BufferText.pm;beginline=88;endline=90;md5=497aa6d79cc84c3d769a2a0016bee928"
+
+S = "${WORKDIR}/XML-Filter-BufferText-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/disable-libxml2-check.patch b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/disable-libxml2-check.patch
new file mode 100644
index 000000000..a8e7cc1bb
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/disable-libxml2-check.patch
@@ -0,0 +1,79 @@
+Do not use the _libxml_check_lib() on cross-compile
+
+Upstream-Status: Inappropriate [configuration]
+
+xml2 have been added into package's DEPENDS, so not need to use the
+_libxml_check_lib() to check it again, and _libxml_check_lib() always
+return false on cross-compile environment
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ Makefile.PL | 52 ++++++++++++++++++++++++++--------------------------
+ 1 file changed, 26 insertions(+), 26 deletions(-)
+
+diff --git a/Makefile.PL b/Makefile.PL
+index c0485f1..09c676b 100644
+--- a/Makefile.PL
++++ b/Makefile.PL
+@@ -411,32 +411,32 @@ sub _libxml_check_lib {
+ }
+ }
+
+-print "Checking for ability to link against xml2...";
+-if ( _libxml_check_lib('xml2') ) {
+- print "yes\n";
+-}
+-else {
+- print "no\n";
+- print "Checking for ability to link against libxml2...";
+- if ( _libxml_check_lib('libxml2')) {
+- print "yes\n";
+- }
+- else {
+- print STDERR <<"DEATH";
+-libxml2, zlib, and/or the Math library (-lm) have not been found.
+-Try setting LIBS and INC values on the command line
+-Or get libxml2 from
+- http://xmlsoft.org/
+-If you install via RPMs, make sure you also install the -devel
+-RPMs, as this is where the headers (.h files) are.
+-
+-Also, you may try to run perl Makefile.PL with the DEBUG=1 parameter
+-to see the exact reason why the detection of libxml2 installation
+-failed or why Makefile.PL was not able to compile a test program.
+-DEATH
+- exit 0; # 0 recommended by http://cpantest.grango.org (Notes for CPAN Authors)
+- }
+-}
++#print "Checking for ability to link against xml2...";
++#if ( _libxml_check_lib('xml2') ) {
++# print "yes\n";
++#}
++#else {
++# print "no\n";
++# print "Checking for ability to link against libxml2...";
++# if ( _libxml_check_lib('libxml2')) {
++# print "yes\n";
++# }
++# else {
++# print STDERR <<"DEATH";
++#libxml2, zlib, and/or the Math library (-lm) have not been found.
++#Try setting LIBS and INC values on the command line
++#Or get libxml2 from
++# http://xmlsoft.org/
++#If you install via RPMs, make sure you also install the -devel
++#RPMs, as this is where the headers (.h files) are.
++#
++#Also, you may try to run perl Makefile.PL with the DEBUG=1 parameter
++#to see the exact reason why the detection of libxml2 installation
++#failed or why Makefile.PL was not able to compile a test program.
++#DEATH
++# exit 0; # 0 recommended by http://cpantest.grango.org (Notes for CPAN Authors)
++# }
++#}
+
+ # -------------------------------------------------------------------------- #
+ # _NOW_ write the Makefile
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/fix-CATALOG-conditional-compile.patch b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/fix-CATALOG-conditional-compile.patch
new file mode 100644
index 000000000..1dd9fb375
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/fix-CATALOG-conditional-compile.patch
@@ -0,0 +1,31 @@
+[PATCH] Fix a compile error
+
+Upstream-Status: Pending
+
+Fix a compile error by conditional using 'catal' since catal
+is only defined when LIBXML_CATALOG_ENABLED is enabled.
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ LibXML.xs | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/LibXML.xs b/LibXML.xs
+index 66da04b..45da681 100644
+--- a/LibXML.xs
++++ b/LibXML.xs
+@@ -2777,9 +2777,11 @@ _default_catalog( self, catalog )
+ xmlCatalogPtr catal = INT2PTR(xmlCatalogPtr,SvIV(SvRV(catalog)));
+ #endif
+ INIT:
++#ifdef LIBXML_CATALOG_ENABLED
+ if ( catal == NULL ) {
+ croak( "empty catalog\n" );
+ }
++#endif
+ CODE:
+ warn( "this feature is not implemented" );
+ RETVAL = 0;
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/using-DOCB-conditional.patch b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/using-DOCB-conditional.patch
new file mode 100644
index 000000000..d255ec753
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl/using-DOCB-conditional.patch
@@ -0,0 +1,91 @@
+[PATCH] Fix a compile error
+
+Upstream-Status: Pending
+
+by conditional using 'XML_DOCB_DOCUMENT_NODE' since it is only
+defined when LIBXML_DOCB_ENABLED is enabled in xmlversion.h.
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ LibXML.xs | 9 +-
+ dom.c | 2 +
+ perl-libxml-mm.c | 4 +
+ 4 files changed, 678 insertions(+), 658 deletions(-)
+
+diff --git a/LibXML.xs b/LibXML.xs
+index b299ba4..66da04b 100644
+--- a/LibXML.xs
++++ b/LibXML.xs
+@@ -5026,7 +5026,9 @@ addChild( self, nNode )
+ XSRETURN_UNDEF;
+ case XML_DOCUMENT_NODE :
+ case XML_HTML_DOCUMENT_NODE :
++#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE :
++#endif
+ croak("addChild: HIERARCHY_REQUEST_ERR\n");
+ XSRETURN_UNDEF;
+ case XML_NOTATION_NODE :
+@@ -5286,7 +5288,9 @@ _toStringC14N(self, comments=0, xpath=&PL_sv_undef, exclusive=0, inc_prefix_list
+ if ( nodepath == NULL
+ && self->type != XML_DOCUMENT_NODE
+ && self->type != XML_HTML_DOCUMENT_NODE
++#ifdef LIBXML_DOCB_ENABLED
+ && self->type != XML_DOCB_DOCUMENT_NODE
++#endif
+ ) {
+ if (comments)
+ nodepath = xmlStrdup( (const xmlChar *) "(. | .//node() | .//@* | .//namespace::*)" );
+@@ -5297,7 +5301,10 @@ _toStringC14N(self, comments=0, xpath=&PL_sv_undef, exclusive=0, inc_prefix_list
+ if ( nodepath != NULL ) {
+ if ( self->type == XML_DOCUMENT_NODE
+ || self->type == XML_HTML_DOCUMENT_NODE
+- || self->type == XML_DOCB_DOCUMENT_NODE ) {
++#ifdef LIBXML_DOCB_ENABLED
++ || self->type == XML_DOCB_DOCUMENT_NODE
++#endif
++ ) {
+ refNode = xmlDocGetRootElement( self->doc );
+ }
+ if (SvOK(xpath_context)) {
+diff --git a/dom.c b/dom.c
+index 87eb61d..cbd391b 100644
+--- a/dom.c
++++ b/dom.c
+@@ -654,7 +654,9 @@ domName(xmlNodePtr node) {
+
+ case XML_DOCUMENT_NODE :
+ case XML_HTML_DOCUMENT_NODE :
++#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE :
++#endif
+ name = (const xmlChar *) "#document";
+ break;
+
+diff --git a/perl-libxml-mm.c b/perl-libxml-mm.c
+index d162b06..7ac5436 100644
+--- a/perl-libxml-mm.c
++++ b/perl-libxml-mm.c
+@@ -331,7 +331,9 @@ PmmNewNode(xmlNodePtr node)
+ switch ( node->type ) {
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
++#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
++#endif
+ proxy = (ProxyNodePtr)xmlMalloc(sizeof(struct _DocProxyNode));
+ if (proxy != NULL) {
+ ((DocProxyNodePtr)proxy)->psvi_status = Pmm_NO_PSVI;
+@@ -550,7 +552,9 @@ PmmNodeToSv( xmlNodePtr node, ProxyNodePtr owner )
+ switch ( node->type ) {
+ case XML_DOCUMENT_NODE:
+ case XML_HTML_DOCUMENT_NODE:
++#ifdef LIBXML_DOCB_ENABLED
+ case XML_DOCB_DOCUMENT_NODE:
++#endif
+ if ( ((xmlDocPtr)node)->encoding != NULL ) {
+ SetPmmENCODING(dfProxy, (int)xmlParseCharEncoding( (const char*)((xmlDocPtr)node)->encoding ));
+ }
+--
+1.7.10.4
+
diff --git a/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl_2.0132.bb b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl_2.0132.bb
new file mode 100644
index 000000000..1f1840118
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-libxml-perl_2.0132.bb
@@ -0,0 +1,47 @@
+SUMMARY = "Perl interface to the libxml2 library"
+DESCRIPTION = "This module is an interface to libxml2, providing XML and HTML parsers \
+with DOM, SAX and XMLReader interfaces, a large subset of DOM Layer 3 \
+interface and a XML::XPath-like interface to XPath API of libxml2. \
+The module is split into several packages which are not described in this \
+section; unless stated otherwise, you only need to use XML::LibXML; in \
+your programs."
+
+HOMEPAGE = "http://search.cpan.org/dist/XML-LibXML-1.99/"
+SECTION = "libs"
+LICENSE = "Artistic-1.0|GPLv1+"
+DEPENDS += "libxml2 \
+ libxml-sax-perl-native \
+ zlib \
+"
+RDEPENDS_${PN} += "\
+ libxml2 \
+ libxml-sax-perl \
+ libxml-sax-base-perl \
+ perl-module-encode \
+ perl-module-data-dumper \
+ zlib \
+"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/XML-LibXML-${PV}.tar.gz;name=libxml \
+ file://disable-libxml2-check.patch \
+ file://fix-CATALOG-conditional-compile.patch \
+ file://using-DOCB-conditional.patch \
+"
+LIC_FILES_CHKSUM = "file://debian/copyright;md5=64eda1bc135f0ece1d1187f2a8ac82c1 \
+ file://LICENSE;md5=97871bde150daeb5e61ad95137ff2446 \
+"
+SRC_URI[libxml.md5sum] = "43546fd9a3974f19323f9fb04861ece9"
+SRC_URI[libxml.sha256sum] = "721452e3103ca188f5968ab06d5ba29fe8e00e49f4767790882095050312d476"
+
+S = "${WORKDIR}/XML-LibXML-${PV}"
+
+inherit cpan
+
+EXTRA_CPANFLAGS = "INC=-I${STAGING_INCDIR}/libxml2 LIBS=-L${STAGING_LIBDIR}"
+
+BBCLASSEXTEND = "native"
+
+CFLAGS += " -D_GNU_SOURCE "
+BUILD_CFLAGS += " -D_GNU_SOURCE "
+
+FILES_${PN}-dbg =+ "${libdir}/perl/vendor_perl/*/auto/XML/LibXML/.debug/"
diff --git a/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-sax-writer-perl_0.57.bb b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-sax-writer-perl_0.57.bb
new file mode 100644
index 000000000..d1b0de093
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/libxml/libxml-sax-writer-perl_0.57.bb
@@ -0,0 +1,25 @@
+SUMMARY = "XML::SAX::Writer - SAX2 Writer"
+DESCRIPTION = "\
+XML::SAX::Writer helps to serialize SAX2 representations of XML documents to \
+strings, files, and other flat representations. It handles charset encodings, \
+XML escaping conventions, and so forth. It is still considered alpha, \
+although it has been put to limited use in settings such as XML::LibXML and \
+the AxKit XML Application Server. \
+"
+SECTION = "libs"
+LICENSE = "Artistic-1.0 | GPLv1+"
+HOMEPAGE = "http://search.cpan.org/dist/XML-SAX-Writer/"
+DEPENDS += "libxml-filter-buffertext-perl-native"
+RDEPENDS_${PN} += "libxml-filter-buffertext-perl"
+
+SRC_URI = "http://search.cpan.org/CPAN/authors/id/P/PE/PERIGRIN/XML-SAX-Writer-${PV}.tar.gz"
+SRC_URI[md5sum] = "3e3023c648e3003c04de2fb04435f8bd"
+SRC_URI[sha256sum] = "3d61d07ef43b0126f5b4de4f415a256fa859fa88dc4fdabaad70b7be7c682cf0"
+
+LIC_FILES_CHKSUM = "file://README;beginline=45;endline=46;md5=d41d8cd98f00b204e9800998ecf8427e"
+
+S = "${WORKDIR}/XML-SAX-Writer-${PV}"
+
+inherit cpan
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb b/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb
new file mode 100644
index 000000000..5db5b8f8b
--- /dev/null
+++ b/meta-openembedded/meta-perl/recipes-perl/po4a/po4a_0.49.bb
@@ -0,0 +1,33 @@
+SUMMARY = "PO for anything"
+DESCRIPTION = "The po4a (PO for anything) project goal is to ease translations \
+(and more interestingly, the maintenance of translations) using gettext tools \
+on areas where they were not expected like documentation."
+HOMEPAGE = "https://po4a.alioth.debian.org"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a96fc9b4cc36d80659e694ea109f0325"
+
+SRC_URI = "git://alioth.debian.org/anonscm/git/po4a/po4a.git;protocol=https"
+
+# v0.49
+SRCREV = "79ed87a577a543538fe39c7b60079981f5997072"
+
+S = "${WORKDIR}/git"
+
+DEPENDS = " \
+ libmodule-build-perl-native \
+ libtext-wrapi18n-perl \
+ libterm-readkey-perl \
+ liblocale-gettext-perl \
+ libunicode-linebreak-perl \
+"
+
+RRECOMMENDS_${PN} = " \
+ libtext-wrapi18n-perl \
+ libterm-readkey-perl \
+ liblocale-gettext-perl \
+ libunicode-linebreak-perl \
+"
+
+inherit cpan_build
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/COPYING.MIT b/meta-openembedded/meta-python/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-python/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-python/README b/meta-openembedded/meta-python/README
new file mode 100644
index 000000000..0566e4992
--- /dev/null
+++ b/meta-openembedded/meta-python/README
@@ -0,0 +1,53 @@
+meta-python
+================================
+
+Introduction
+-------------------------
+
+This layer is intended to be the home of python modules for OpenEmbedded.
+Modules in this layer need to be independent of openembedded-core and
+meta-openembedded/meta-oe. Because of this, modules required by 'gateone'
+and 'anki' are not included and remain in:
+ meta-openembedded/meta-oe/recipes-devtools/python.
+
+Dependencies
+-------------------------
+
+The meta-python layer depends on:
+
+ URI: git://git.openembedded.org/openembedded-core
+ layers: meta
+ branch: master
+ revision: HEAD
+
+ URI: git://git.openembedded.org/meta-openembedded
+ layers: meta-oe
+ branch: master
+ revision: HEAD
+
+Please follow the recommended setup procedures of your OE distribution.
+For Angstrom that is:
+ http://www.angstrom-distribution.org/building-angstrom,
+other distros should have similar online resources.
+
+Contributing
+-------------------------
+
+The meta-openembedded mailinglist
+(openembedded-devel@lists.openembedded.org) is used for questions,
+comments and patch review. It is subscriber only, so please register
+before posting.
+
+Send pull requests to openembedded-devel@lists.openembedded.org with
+'[meta-python]' 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-python][PATCH'
+
+Maintenance
+-------------------------
+
+Layer Maintainers:
+ Tim "moto-timo" Orling <TicoTimo@gmail.com>
+ Derek Straka <derek@asterius.io>
+
diff --git a/meta-openembedded/meta-python/conf/layer.conf b/meta-openembedded/meta-python/conf/layer.conf
new file mode 100644
index 000000000..7089071fa
--- /dev/null
+++ b/meta-openembedded/meta-python/conf/layer.conf
@@ -0,0 +1,19 @@
+# We might have a conf and classes directory, append to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "meta-python"
+BBFILE_PATTERN_meta-python := "^${LAYERDIR}/"
+BBFILE_PRIORITY_meta-python = "7"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_meta-python = "1"
+
+LAYERDEPENDS_meta-python = "core openembedded-layer"
+
+LAYERSERIES_COMPAT_meta-python = "sumo"
+
+LICENSE_PATH += "${LAYERDIR}/licenses"
diff --git a/meta-openembedded/meta-python/licenses/LLNL b/meta-openembedded/meta-python/licenses/LLNL
new file mode 100644
index 000000000..1127d56ce
--- /dev/null
+++ b/meta-openembedded/meta-python/licenses/LLNL
@@ -0,0 +1,16 @@
+Legal Notice
+
+*** Legal Notice for all LLNL-contributed files ***
+
+Copyright (c) 1996. The Regents of the University of California. All rights reserved.
+
+Permission to use, copy, modify, and distribute this software for any purpose without
+fee is hereby granted, provided that this entire notice is included in all copies of any software which is or includes a copy or modification of this software and in all copies of the supporting documentation for such software.
+
+This work was produced at the University of California, Lawrence Livermore National
+Laboratory under contract no. W-7405-ENG-48 between the U.S. Department of Energy and The Regents of the University of California for the operation of UC LLNL.
+
+DISCLAIMER
+
+This software was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the University of California nor any of their employees, makes any warranty, express or implied, or assumes any liability or responsibility for the accuracy, completeness, or usefulness of any
+information, apparatus, product, or process disclosed, or represents that its use would not infringe privately-owned rights. Reference herein to any specific commercial products, process, or service by trade name, trademark, manufacturer, or otherwise, does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or the University of California. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or the University of California, and shall not be used for advertising or product endorsement purposes.
diff --git a/meta-openembedded/meta-python/licenses/Unicode b/meta-openembedded/meta-python/licenses/Unicode
new file mode 100644
index 000000000..5d2cc4a62
--- /dev/null
+++ b/meta-openembedded/meta-python/licenses/Unicode
@@ -0,0 +1,37 @@
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright 1991-2015 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in
+http://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software,
+(b) this copyright and permission notice appear in associated
+documentation, and
+(c) there is clear notice in each modified Data File or in the Software
+as well as in the documentation associated with the Data File(s) or
+Software that the data or software has been modified.
+
+THE DATA FILES AND SOFTWARE ARE 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 OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR 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 THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
diff --git a/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/80oe.conf.in b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/80oe.conf.in
new file mode 100644
index 000000000..4503da422
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/80oe.conf.in
@@ -0,0 +1,24 @@
+// Some custom Gate One settings for OpenEmbedded
+{
+ "*": {
+ "gateone": { // These settings apply to all of Gate One
+ "log_file_prefix": "@localstate@/log/gateone.log", // default would be /var/log/gateone/gateone.log
+ "log_file_max_size": 5242880, // 5 megabyte logs for OE by default (default would normally be 100Mb)
+ "log_file_num_backups": 2, // Default is normally 10
+ "origins": ["*"], // Every device has a unique origin
+ "logging": "info",
+ "pid_file": "/run/gateone.pid",
+ "session_dir": "/tmp/gateone",
+ "user_dir": "@localstate@/lib/gateone/users"
+ },
+ "terminal": {
+ // Disabling session logging for embedded devices is a good idea (limited/slow storage)
+ "session_logging": false,
+ "syslog_session_logging": false
+// "commands": {
+// // For some reason this doesn't work (never asks for the password)
+// "login": "setsid /bin/login" // Normally this would emulate logging into the host console
+// }
+ }
+ }
+}
diff --git a/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-avahi.service b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-avahi.service
new file mode 100644
index 000000000..0f613d18e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-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">GateOne on %h</name>
+ <service>
+ <type>_https._tcp</type>
+ <port>443</port>
+ </service>
+</service-group>
diff --git a/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-init.in b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-init.in
new file mode 100644
index 000000000..86d655c94
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone-init.in
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides: gateone
+# Required-Start: networking
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Gateone HTML5 ssh client
+# Description: Gateone HTML5 terminal emulator and SSH client.
+### END INIT INFO
+
+. /etc/init.d/functions
+
+NAME=gateone
+DAEMON=@bindir@/gateone
+PIDFILE=/run/gateone.pid
+WORKDIR=@localstate@/lib/gateone
+
+do_start() {
+ cd $WORKDIR
+ @bindir@/python $DAEMON > /dev/null 2>&1 &
+ cd $OLDPWD
+}
+
+do_stop() {
+ kill -TERM `cat $PIDFILE`
+}
+
+case "$1" in
+ start)
+ echo "Starting gateone"
+ do_start
+ ;;
+ stop)
+ echo "Stopping gateone"
+ do_stop
+ ;;
+ restart|force-reload)
+ echo "Restart gateone"
+ do_stop
+ sleep 1
+ do_start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
diff --git a/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone.service.in b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone.service.in
new file mode 100644
index 000000000..44667275a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone/gateone.service.in
@@ -0,0 +1,10 @@
+[Unit]
+Description=GateOne daemon
+ConditionPathExists=|@localstate@/lib/gateone
+
+[Service]
+WorkingDirectory=@localstate@/lib/gateone
+ExecStart=@bindir@/python @bindir@/gateone
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone_git.bb b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone_git.bb
new file mode 100644
index 000000000..4577873de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/gateone/gateone_git.bb
@@ -0,0 +1,87 @@
+SUMMARY = "HTML5 (plugin-free) web-based terminal emulator and SSH client"
+LICENSE = "AGPL-3.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=834cbc6995db88433db17cdf8953a428"
+HOMEPAGE = "http://liftoffsoftware.com/Products/GateOne"
+
+PV = "1.2+git${SRCPV}"
+SRCREV = "f7a9be46cb90f57459ebd363d24702de0e651034"
+SRC_URI = "git://github.com/liftoff/GateOne.git;branch=master \
+ file://gateone-avahi.service \
+ file://80oe.conf.in \
+ file://gateone.service.in \
+ file://gateone-init.in \
+"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools python-dir systemd update-rc.d
+
+DISTUTILS_INSTALL_ARGS = "--root=${D} \
+ --prefix=${prefix} \
+ --install-lib=${PYTHON_SITEPACKAGES_DIR} \
+ --install-data=${PYTHON_SITEPACKAGES_DIR} \
+ --install-scripts=${bindir} \
+ --skip_init_scripts"
+
+do_install_append() {
+
+ # fix up hardcoded paths
+ for file in gateone.service gateone-init 80oe.conf; do
+ sed -e s:@bindir@:${bindir}:g \
+ -e s:@localstate@:${localstatedir}:g \
+ < ${WORKDIR}/$file.in \
+ > ${WORKDIR}/$file
+ done
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/gateone.service ${D}${systemd_unitdir}/system
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/gateone-init ${D}${sysconfdir}/init.d/gateone
+
+ install -m 0755 -d ${D}${sysconfdir}/avahi/services/
+ install -m 0644 ${WORKDIR}/gateone-avahi.service ${D}${sysconfdir}/avahi/services/
+
+ install -m 0755 -d ${D}${sysconfdir}/gateone/conf.d/
+ install -m 0644 ${WORKDIR}/80oe.conf ${D}${sysconfdir}/gateone/conf.d/80oe.conf
+
+ install -d ${D}${localstatedir}/lib/gateone
+}
+
+FILES_${PN} = "${localstatedir}/lib ${bindir} ${base_libdir} ${sysconfdir} ${PYTHON_SITEPACKAGES_DIR}"
+RDEPENDS_${PN} = "mime-support \
+ openssh-ssh \
+ python-compression \
+ python-contextlib \
+ python-crypt \
+ python-datetime \
+ python-email \
+ python-fcntl \
+ python-futures \
+ python-html \
+ python-imaging \
+ python-io \
+ python-json \
+ python-logging \
+ python-misc \
+ python-multiprocessing \
+ python-netclient \
+ python-pkgutil \
+ python-pyopenssl \
+ python-re \
+ python-setuptools \
+ python-shell \
+ python-simplejson \
+ python-subprocess \
+ python-syslog \
+ python-terminal \
+ python-textutils \
+ python-tornado \
+ python-unixadmin \
+ python-xml \
+ python-html5lib \
+ bash \
+"
+
+SYSTEMD_SERVICE_${PN} = "gateone.service"
+INITSCRIPT_NAME = "gateone"
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc
new file mode 100644
index 000000000..11971dc4a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool.inc
@@ -0,0 +1,12 @@
+SUMMARY = "A simple connection pool for gevent"
+DESCRIPTION = "creates a pool of connections that can be used with gevent"
+HOMEPAGE = "https://github.com/studio-ousia/gsocketpool"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
+DEPENDS += "${PYTHON_PN}-gevent"
+RDEPENDS_${PN} += "${PYTHON_PN}-gevent"
+
+SRC_URI[md5sum] = "49f5f292ef1b60944ae92ca426a5e550"
+SRC_URI[sha256sum] = "f2e2749aceadce6b27ca52e2b0a64af99797746a8681e1a2963f72007c14cb14"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool_0.1.6.bb b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool_0.1.6.bb
new file mode 100644
index 000000000..e96ad1ca1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python-gsocketpool_0.1.6.bb
@@ -0,0 +1,2 @@
+require python-gsocketpool.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb
new file mode 100644
index 000000000..883621e21
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-gsocketpool/python3-gsocketpool_0.1.6.bb
@@ -0,0 +1,2 @@
+require python-gsocketpool.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc
new file mode 100644
index 000000000..05fbae48b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc.inc
@@ -0,0 +1,13 @@
+SUMMARY = "A gevent based messagpack rpc library"
+DESCRIPTION = "mprpc is a fast implementation of the messagepack rpc protocol for python. \
+It is based on gevent for handling connections and enabling concurrent connections."
+HOMEPAGE = "https://github.com/studio-ousia/mprpc"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ba825394aec026b5f94edca44426859"
+DEPENDS += "${PYTHON_PN}-gevent"
+RDEPENDS_${PN} += "${PYTHON_PN}-gevent ${PYTHON_PN}-msgpack ${PYTHON_PN}-gsocketpool"
+
+SRC_URI[md5sum] = "acde1f346411997d76ab89790a356823"
+SRC_URI[sha256sum] = "e8ddd47e7a2fb2d3b203fcc522443ee5be56c8f7e2c6d915c047445951cef1fb"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc_0.1.16.bb b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc_0.1.16.bb
new file mode 100644
index 000000000..6b2ea2193
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python-mprpc_0.1.16.bb
@@ -0,0 +1,2 @@
+require python-mprpc.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.16.bb b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.16.bb
new file mode 100644
index 000000000..837d604ed
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-mprpc/python3-mprpc_0.1.16.bb
@@ -0,0 +1,2 @@
+require python-mprpc.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python-pyconnman_0.1.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python-pyconnman_0.1.0.bb
new file mode 100644
index 000000000..77b5e4dcf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-pyconnman/python-pyconnman_0.1.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Python-based Network Connectivity Management"
+HOMEPAGE = "https://pypi.python.org/pypi/pyconnman/"
+LICENSE = "Apache-2.0"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "b7fa82034b1c0e1fb1b518ffe3bb4fc0"
+SRC_URI[sha256sum] = "46c64c0692063fd0c9fb0216d49f7884bec9fa9760d8473db4b1e2f8162fab4a"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "connman python-dbus python-pprint"
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-pyro4/python-pyro4_4.63.bb b/meta-openembedded/meta-python/recipes-connectivity/python-pyro4/python-pyro4_4.63.bb
new file mode 100644
index 000000000..6f683e3e7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-pyro4/python-pyro4_4.63.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python Remote Objects"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=378acef375e17a3bff03bd0f78c53220"
+
+SRC_URI[md5sum] = "e1d772b67bf7c6f75fa3174bc95c8839"
+SRC_URI[sha256sum] = "67d2b34156619ba37e92100af95aade8129dd2b7327eb05821d43887451f7d7b"
+
+PYPI_PACKAGE = "Pyro4"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-selectors34 \
+ ${PYTHON_PN}-serpent \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-zlib \
+ "
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun.inc b/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun.inc
new file mode 100644
index 000000000..79a8bfb21
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun.inc
@@ -0,0 +1,10 @@
+SUMMARY = "Python TUN/TAP tunnel module"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=13f7629e8e4989b66b4a913ab05a91de"
+
+SRC_URI[md5sum] = "5b35b1cf80a02cca7ec72eb95d6b0192"
+SRC_URI[sha256sum] = "07595dadf85f5176eb08c8d4d9ba5b862a180e96633f670f91437c47a1bead0d"
+
+PYPI_PACKAGE = "python-pytun"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun_2.2.1.bb b/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun_2.2.1.bb
new file mode 100644
index 000000000..3fc587f3a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python-pytun_2.2.1.bb
@@ -0,0 +1,2 @@
+require python-pytun.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python3-pytun_2.2.1.bb b/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python3-pytun_2.2.1.bb
new file mode 100644
index 000000000..938d9d739
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-pytun/python3-pytun_2.2.1.bb
@@ -0,0 +1,2 @@
+require python-pytun.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python-thrift_0.11.0.bb b/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python-thrift_0.11.0.bb
new file mode 100644
index 000000000..8047ec77b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-thrift/python-thrift_0.11.0.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python bindings for the Apache Thrift RPC system"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=e3641ae1a26cf5c12a3a71bd3030ab0e"
+
+SRC_URI[md5sum] = "36165d5c80e6b101dbe9fcf7ef524d51"
+SRC_URI[sha256sum] = "7d59ac4fdcb2c58037ebd4a9da5f9a49e3e034bf75b3f26d9fe48ba3d8806e6b"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-connectivity/python-txws/python-txws_0.9.1.bb b/meta-openembedded/meta-python/recipes-connectivity/python-txws/python-txws_0.9.1.bb
new file mode 100644
index 000000000..0b2ac118a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/python-txws/python-txws_0.9.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Twisted Web Sockets"
+HOMEPAGE = "https://github.com/MostAwesomeDude/txWS"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=76699830db7fa9e897f6a1ad05f98ec8"
+
+DEPENDS = "python-twisted python-six python-vcversioner"
+
+SRC_URI = "git://github.com/MostAwesomeDude/txWS.git"
+SRCREV= "88cf6d9b9b685ffa1720644bd53c742afb10a414"
+
+S = "${WORKDIR}/git"
+
+inherit setuptools
+
diff --git a/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/parallel_make.patch b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/parallel_make.patch
new file mode 100644
index 000000000..248824606
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/parallel_make.patch
@@ -0,0 +1,43 @@
+Add dependency of __init__.py
+
+Tasks must be done after exec of __init__, which creates the
+src/_generated directory that tasks are based on.
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+
+Upstream-Status: Submitted
+(However it seems that this project is out of maintanence.)
+
+diff -ruN telepathy-python-0.15.19-orig/src/Makefile.am telepathy-python-0.15.19/src/Makefile.am
+--- telepathy-python-0.15.19-orig/src/Makefile.am 2011-03-10 08:51:49.000000000 +0800
++++ telepathy-python-0.15.19/src/Makefile.am 2011-03-10 08:54:45.000000000 +0800
+@@ -39,17 +39,17 @@
+ XSLTPROC_OPTS = --nonet --novalid --xinclude
+ tools_dir = $(top_srcdir)/tools
+
+-_generated/interfaces.py: $(tools_dir)/python-interfaces-generator.xsl $(wildcard $(spec_dir)/*.xml)
++_generated/interfaces.py: _generated/__init__.py $(tools_dir)/python-interfaces-generator.xsl $(wildcard $(spec_dir)/*.xml)
+ $(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ $(tools_dir)/python-interfaces-generator.xsl \
+ $(spec_dir)/all.xml
+
+-_generated/constants.py: $(tools_dir)/python-constants-generator.xsl $(wildcard $(spec_dir)/*.xml)
++_generated/constants.py: _generated/__init__.py $(tools_dir)/python-constants-generator.xsl $(wildcard $(spec_dir)/*.xml)
+ $(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ $(tools_dir)/python-constants-generator.xsl \
+ $(spec_dir)/all.xml
+
+-_generated/errors.py: $(tools_dir)/python-errors-generator.xsl $(wildcard $(spec_dir)/*.xml)
++_generated/errors.py: _generated/__init__.py $(tools_dir)/python-errors-generator.xsl $(wildcard $(spec_dir)/*.xml)
+ $(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ $(tools_dir)/python-errors-generator.xsl \
+ $(spec_dir)/all.xml
+@@ -58,7 +58,7 @@
+ $(AM_V_GEN)$(mkdir_p) $(dir $@)
+ @echo "# Placeholder for package" > $@
+
+-_generated/%.py: $(tools_dir)/spec-to-python.xsl $(spec_dir)/%.xml
++_generated/%.py: _generated/__init__.py $(tools_dir)/spec-to-python.xsl $(spec_dir)/%.xml
+ $(AM_V_GEN)$(XSLTPROC) $(XSLTPROC_OPTS) -o $@ \
+ $(tools_dir)/spec-to-python.xsl \
+ $(spec_dir)/$*.xml
diff --git a/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/remove_duplicate_install.patch b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/remove_duplicate_install.patch
new file mode 100644
index 000000000..df95a4c13
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/remove_duplicate_install.patch
@@ -0,0 +1,26 @@
+commit f6c67662145de889055a86a6b3b12c70a45fc8d5
+Author: Dongxiao Xu <dongxiao.xu@intel.com>
+Date: Wed Sep 7 16:02:20 2011 +0800
+
+ Avoid duplicated installation of errors.py
+
+ newer version of autotools don't seem to like listing files to install
+ twice. Remove one errors.py from the installation list.
+
+ Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+
+ Upstream-Status: Inappropirate [upstream inactive]
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 5c27dfe..7536e43 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -11,7 +11,7 @@ telepathy_PYTHON = \
+
+ # telepathy._generated.* auto-generated modules
+ spec_dir = $(top_srcdir)/spec
+-spec_files := $(patsubst $(spec_dir)%.xml,_generated%.py,$(wildcard $(spec_dir)/*.xml))
++spec_files := $(filter-out _generated/errors.py, $(patsubst $(spec_dir)%.xml,_generated%.py,$(wildcard $(spec_dir)/*.xml)))
+
+ BUILT_SOURCES = \
+ _generated/interfaces.py \
diff --git a/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/telepathy-python_fix_for_automake_1.12.patch b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/telepathy-python_fix_for_automake_1.12.patch
new file mode 100644
index 000000000..f613fdce4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python-0.15.19/telepathy-python_fix_for_automake_1.12.patch
@@ -0,0 +1,26 @@
+Upstream-Status: Pending
+
+automake 1.12 has deprecated use of mkdir_p, and it recommends
+use of MKDIR_P instead. Changed the code to avoid these kind
+of warning-errors.
+
+| make[1]: _generated/: Command not found
+| make[1]: *** [_generated/__init__.py] Error 127
+| make[1]: Leaving directory `/srv/home/nitin/builds2/build0/tmp/work/i586-poky-linux/telepathy-python-0.15.19-r4/telepathy-python-0.15.19/src'
+| make: *** [all-recursive] Error 1
+
+Signed-Off-By: Nitin A Kamble <nitin.a.kamble@intel.com>
+2012/07/10
+Index: telepathy-python-0.15.19/src/Makefile.am
+===================================================================
+--- telepathy-python-0.15.19.orig/src/Makefile.am
++++ telepathy-python-0.15.19/src/Makefile.am
+@@ -55,7 +55,7 @@ _generated/errors.py: _generated/__init_
+ $(spec_dir)/all.xml
+
+ _generated/__init__.py:
+- $(AM_V_GEN)$(mkdir_p) $(dir $@)
++ $(AM_V_GEN)$(MKDIR_P) $(dir $@)
+ @echo "# Placeholder for package" > $@
+
+ _generated/%.py: _generated/__init__.py $(tools_dir)/spec-to-python.xsl $(spec_dir)/%.xml
diff --git a/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python_0.15.19.bb b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python_0.15.19.bb
new file mode 100644
index 000000000..b7aea24a7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-connectivity/telepathy/telepathy-python_0.15.19.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Telepathy IM framework - Python package"
+HOMEPAGE = "http://telepathy.freedesktop.org/wiki/"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1 \
+ file://src/utils.py;beginline=1;endline=17;md5=9a07d1a9791a7429a14e7b25c6c86822"
+
+DEPENDS = "libxslt-native"
+RDEPENDS_${PN} += "python-dbus"
+
+SRC_URI = "http://telepathy.freedesktop.org/releases/${BPN}/${BPN}-${PV}.tar.gz \
+ file://parallel_make.patch \
+ file://remove_duplicate_install.patch \
+ file://telepathy-python_fix_for_automake_1.12.patch"
+
+PR = "r6"
+
+inherit autotools pythonnative
+
+SRC_URI[md5sum] = "f7ca25ab3c88874015b7e9728f7f3017"
+SRC_URI[sha256sum] = "244c0e1bf4bbd78ae298ea659fe10bf3a73738db550156767cc2477aedf72376"
+
+FILES_${PN} += "\
+ ${libdir}/python*/site-packages/telepathy/*.py \
+ ${libdir}/python*/site-packages/telepathy/*/*.py \
+"
+
+do_install_append () {
+ rm -f ${D}${libdir}/python*/site-packages/telepathy/*.pyc
+ rm -f ${D}${libdir}/python*/site-packages/telepathy/*.pyo
+ rm -f ${D}${libdir}/python*/site-packages/telepathy/*/*.pyc
+ rm -f ${D}${libdir}/python*/site-packages/telepathy/*/*.pyo
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb
new file mode 100644
index 000000000..9d851abe3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/pyrtm_0.4.2.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Python interface for Remember The Milk API"
+AUTHOR = "Sridhar Ratnakumar / srid"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=a53cbc7cb75660694e138ba973c148df"
+
+PYPI_PACKAGE_EXT = "tar.bz2"
+
+SRC_URI[md5sum] = "7c87da94656b620dfe532ca63d642eb8"
+SRC_URI[sha256sum] = "b2d701b25ad3f9a1542057f3eb492c5c1d7dbe2b8d1e8f763043dcc14ee1d933"
+
+inherit pypi setuptools
+
+PACKAGES =+ "${PN}-tests ${PN}-samples"
+
+FILES_${PN}-samples += " \
+ ${PYTHON_SITEPACKAGES_DIR}/rtm/samples \
+"
+
+FILES_${PN}-tests += " \
+ ${PYTHON_SITEPACKAGES_DIR}/rtm/tests \
+"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+"
+
+RDEPENDS_${PN}-samples += " \
+ ${PN} \
+"
+
+RDEPENDS_${PN}-tests += " \
+ ${PN} \
+ ${PYTHON_PN}-unittest \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc
new file mode 100644
index 000000000..f1a641299
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-alembic.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "A database migration tool for SQLAlchemy"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c5f1361296835ff94bda73db7dd312a6"
+
+SRC_URI[md5sum] = "5cfef58641c9a94d4a5d547e951a7dda"
+SRC_URI[sha256sum] = "13b8611788acf0d7b617775db5c2ae26554a6d4263c590ef628d448fd05aef56"
+
+PYPI_PACKAGE = "alembic"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-dateutil \
+ ${PYTHON_PN}-editor \
+ ${PYTHON_PN}-mako \
+ ${PYTHON_PN}-sqlalchemy \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-alembic_0.9.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-alembic_0.9.8.bb
new file mode 100644
index 000000000..efcb2b1de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-alembic_0.9.8.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-alembic.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc
new file mode 100644
index 000000000..a0d20ff4d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Wraps the best available JSON implementation available in a common interface"
+DESCRIPTION = "Anyjson loads whichever is the fastest JSON module installed and \
+provides a uniform API regardless of which JSON implementation is used."
+HOMEPAGE = "https://bitbucket.org/runeh/anyjson"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=989aa97e73c912a83a3c873fa11deb08"
+
+inherit pypi
+
+SRC_URI[md5sum] = "2ea28d6ec311aeeebaf993cb3008b27c"
+SRC_URI[sha256sum] = "37812d863c9ad3e35c0734c42e0bf0320ce8c3bed82cd20ad54cb34d158157ba"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-simplejson"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb
new file mode 100644
index 000000000..31b8749fe
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-anyjson_0.3.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-anyjson.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc
new file mode 100644
index 000000000..c4826723e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs.inc
@@ -0,0 +1,8 @@
+SUMMARY = "A small Python module for determining appropriate + platform-specific dirs, e.g. a user data dir."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=31625363c45eb0c67c630a2f73e438e4"
+
+SRC_URI[md5sum] = "44c679904082a2133f5566c8a0d3ab42"
+SRC_URI[sha256sum] = "9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb
new file mode 100644
index 000000000..e9ff9b3fc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-appdirs_1.4.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-appdirs.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc
new file mode 100644
index 000000000..5c379956f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto.inc
@@ -0,0 +1,23 @@
+DESCRIPTION = "Python binding to the Networking and Cryptography (NaCl) library"
+HOMEPAGE = "https://github.com/pyca/pynacl"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=52010cd3c7d7bd965b55721ef4d93ec2"
+
+PYPI_PACKAGE = "asn1crypto"
+
+SRC_URI[md5sum] = "de3520426e81a6581352d4366f310eb1"
+SRC_URI[sha256sum] = "9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-netclient \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb
new file mode 100644
index 000000000..46aace286
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-asn1crypto_0.24.0.bb
@@ -0,0 +1,7 @@
+inherit setuptools
+require python-asn1crypto.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc
new file mode 100644
index 000000000..ead2b6e73
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-astroid.inc
@@ -0,0 +1,31 @@
+SUMMARY = "An abstract syntax tree for Python with inference support."
+HOMEPAGE = "https://pypi.python.org/pypi/astroid"
+SECTION = "devel/python"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+SRC_URI[md5sum] = "7d7dc000b25f0cbfcca20cb9a8dc0310"
+SRC_URI[sha256sum] = "35cfae47aac19c7b407b7095410e895e836f2285ccf1220336afba744cc4c5f2"
+
+inherit pypi
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN}-tests += " \
+ ${PYTHON_SITEPACKAGES_DIR}/astroid/test* \
+ ${PYTHON_SITEPACKAGES_DIR}/astroid/__pycache__/test* \
+"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-distutils \
+ ${PYTHON_PN}-lazy-object-proxy \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-wrapt \
+ ${PYTHON_PN}-setuptools \
+"
+
+RDEPENDS_${PN}-tests_class-target += "\
+ ${PYTHON_PN}-unittest \
+ ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.3.bb
new file mode 100644
index 000000000..687394da6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-astroid_1.6.3.bb
@@ -0,0 +1,10 @@
+inherit setuptools
+require python-astroid.inc
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-enum34 \
+ ${PYTHON_PN}-backports-functools-lru-cache \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-singledispatch \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc
new file mode 100644
index 000000000..1d93dd715
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-attr.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "Simple decorator to set attributes of target function or class in a DRY way"
+HOMEPAGE = "https://github.com/denis-ryzhkov/attr"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=59805a0285f4d2b6abdedae73db4f5c1"
+
+SRC_URI[md5sum] = "68b9a503991241fb2df28488686b0e1e"
+SRC_URI[sha256sum] = "9091548058d17f132596e61fa7518e504f76b9a4c61ca7d86e1f96dbf7d4775d"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb
new file mode 100644
index 000000000..979d6cb68
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-attr_0.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-attr.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc
new file mode 100644
index 000000000..c29f058fa
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-attrs.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "Classes Without Boilerplate"
+HOMEPAGE = "http://www.attrs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d4ab25949a73fe7d4fdee93bcbdbf8ff"
+
+SRC_URI[md5sum] = "d7a89063b2e0fd36bd82389c4d82821d"
+SRC_URI[sha256sum] = "1c7960ccfd6a005cd9f7ba884e6316b5e430a3f1a6c37c5f87d8b43f83b54ec9"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-cryptography \
+ ${PYTHON_PN}-ctypes \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-attrs_17.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-attrs_17.4.0.bb
new file mode 100644
index 000000000..e3bec0fdf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-attrs_17.4.0.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-attrs.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc
new file mode 100644
index 000000000..43b9ce9e3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-automat.inc
@@ -0,0 +1,24 @@
+DESCRIPTION = "Self-service finite-state machines for the programmer on the go"
+HOMEPAGE = "https://github.com/glyph/Automat"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4ad213bcca81688e94593e5f60c87477"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-automat:"
+
+SRC_URI[md5sum] = "ad7bba58d262d8956d732330cb5ef53d"
+SRC_URI[sha256sum] = "3c1fd04ecf08ac87b4dd3feae409542e9bf7827257097b2b6ed5692f69d6f6a8"
+
+PYPI_PACKAGE = "Automat"
+
+inherit pypi
+
+SRC_URI_append = " \
+ file://0001-setup.py-remove-the-dependency-on-m2r.patch \
+"
+
+DEPENDS += "${PYTHON_PN}-setuptools-scm-native"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-attrs \
+ ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-automat/0001-setup.py-remove-the-dependency-on-m2r.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-automat/0001-setup.py-remove-the-dependency-on-m2r.patch
new file mode 100644
index 000000000..d6def98c9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-automat/0001-setup.py-remove-the-dependency-on-m2r.patch
@@ -0,0 +1,49 @@
+From d5ebe479fc8fe11c5c75e7f35484849320349222 Mon Sep 17 00:00:00 2001
+From: Derek Straka <derek@asterius.io>
+Date: Fri, 22 Dec 2017 09:07:00 -0500
+Subject: [PATCH] setup.py: remove the dependency on m2r
+
+The dependency on m2r is removed here as it only provides the
+long_description value that is optional. This item is just the
+text that would be present on PyPi, so it doesn't provide much
+value in this case
+
+Upstream-Status: Inappropriate (OE specific)
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+---
+ setup.py | 10 ----------
+ 1 file changed, 10 deletions(-)
+
+Index: Automat-0.6.0/setup.py
+===================================================================
+--- Automat-0.6.0.orig/setup.py
++++ Automat-0.6.0/setup.py
+@@ -4,14 +4,6 @@ Setup file for automat
+
+ from setuptools import setup, find_packages
+
+-try:
+- from m2r import parse_from_file
+- long_description = parse_from_file('README.md')
+-except(IOError, ImportError):
+- print("\n\n!!! m2r not found, long_description is bad, don't upload this to PyPI !!!\n\n")
+- import io
+- long_description = io.open('README.md', encoding="utf-8").read()
+-
+ setup(
+ name='Automat',
+ use_scm_version=True,
+@@ -19,12 +11,10 @@ setup(
+ description="""
+ Self-service finite-state machines for the programmer on the go.
+ """.strip(),
+- long_description=long_description,
+ packages=find_packages(exclude=[]),
+ package_dir={'automat': 'automat'},
+ setup_requires=[
+ 'setuptools-scm',
+- 'm2r',
+ ],
+ install_requires=[
+ "attrs",
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.6.0.bb
new file mode 100644
index 000000000..8ac8c9c0f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-automat_0.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-automat.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc
new file mode 100644
index 000000000..a3299e4ac
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python.inc
@@ -0,0 +1,41 @@
+DESCRIPTION = "SDK for connecting to AWS IoT using Python."
+HOMEPAGE = "https://github.com/aws/aws-iot-device-sdk-python"
+LICENSE = "Apache-2.0 & (EPL-1.0 | EDL-1.0)"
+LICENSE_${PN}-examples = "Apache-2.0"
+LIC_FILES_CHKSUM = "\
+ file://LICENSE.txt;md5=9ac49901b833e769c7d6f21e8dbd7b30 \
+ file://AWSIoTPythonSDK/core/protocol/paho/client.py;endline=14;md5=5a3c8a1a4bb71bd934f450ecff972ad9 \
+"
+
+SRC_URI[md5sum] = "97e8cf0d40ef3765d979c19b534a716d"
+SRC_URI[sha256sum] = "d68cbff396143e837b4c23b6621d3b7ae374281afc75eed8e51a28625d9125ba"
+
+inherit pypi
+
+PYPI_PACKAGE = "AWSIoTPythonSDK"
+
+do_install_append() {
+ install -d -m0755 ${D}${datadir}/${BPN}/examples
+ cp --preserve=mode,timestamps -R ${S}/samples/* ${D}${datadir}/${BPN}/examples
+ # this requires the full blown AWS Python SDK
+ rm -r ${D}${datadir}/${BPN}/examples/basicPubSub
+}
+
+PACKAGES =+ "${PN}-examples"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-math \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-threading \
+"
+RDEPENDS_${PN}-examples += "${PN}"
+
+FILES_${PN}-examples = "${datadir}/${BPN}/examples"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.3.1.bb
new file mode 100644
index 000000000..490e97391
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-aws-iot-device-sdk-python_1.3.1.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-aws-iot-device-sdk-python.inc
+
+RDEPENDS_${PN}-examples += "${PYTHON_PN}-argparse"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc
new file mode 100644
index 000000000..4dcb255c8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-babel.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "A collection of tools for internationalizing Python applications"
+HOMEPAGE = "http://babel.edgewall.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e6eeaabc92cfc2d03f53e789324d7292"
+
+SRC_URI[md5sum] = "152a6b17fe4110b95675aceb9af9fab2"
+SRC_URI[sha256sum] = "8ce4cb6fdd4393edd323227cba3a077bceb2a6ce5201c902c65e730046f41f14"
+
+PYPI_PACKAGE = "Babel"
+
+inherit pypi
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-difflib \
+ ${PYTHON_PN}-distutils \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-pytz \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.5.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.5.3.bb
new file mode 100644
index 000000000..f7c166eba
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-babel_2.5.3.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-babel.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb
new file mode 100644
index 000000000..6a4d267bc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-backports-abc_0.4.bb
@@ -0,0 +1,18 @@
+SUMMARY = "collections.abc from Python 3.4"
+DESCRIPTION = "A backport of recent additions to the 'collections.abc' module"
+
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://${WORKDIR}/LICENSE;md5=dd98d01d471fac8d8dbdd975229dba03"
+
+# pypi package doesn't have valid entry for license
+SRC_URI += "https://raw.githubusercontent.com/cython/backports_abc/master/LICENSE;name=license"
+
+SRC_URI[md5sum] = "0b65a216ce9dc9c1a7e20a729dd7c05b"
+SRC_URI[sha256sum] = "8b3e4092ba3d541c7a2f9b7d0d9c0275b21c6a01c53a61c731eba6686939d0a5"
+SRC_URI[license.md5sum] = "dd98d01d471fac8d8dbdd975229dba03"
+SRC_URI[license.sha256sum] = "0a4f3b38055f50f047a42521568fa6ddb9a5976c2884f6ae138796d0f71150ca"
+
+
+
+PYPI_PACKAGE = "backports_abc"
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.4.bb
new file mode 100644
index 000000000..961436f53
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-backports-functools-lru-cache_1.4.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Backport of functools.lru_cache from Python 3.3"
+HOMEPAGE = "https://github.com/jaraco/backports.functools_lru_cache"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=47;endline=47;md5=98fc3658e5970d26f6b2109808c766be"
+
+PYPI_PACKAGE = "backports.functools_lru_cache"
+
+SRC_URI[md5sum] = "b954e7d5e2ca0f0f66ad2ed12ba800e5"
+SRC_URI[sha256sum] = "31f235852f88edc1558d428d890663c49eb4514ffec9f3650e7f3c9e4a12e36f"
+
+DEPENDS += "python-setuptools-scm-native"
+
+inherit setuptools pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-threading \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb
new file mode 100644
index 000000000..45492daa6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-backports-ssl_3.5.0.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "The ssl.match_hostname() function from Python 3.4"
+DESCRIPTION = "The Secure Sockets layer is only actually secure if you check the hostname in the \
+certificate returned by the server to which you are connecting, and verify that it matches to hostname \
+that you are trying to reach. But the matching logic, defined in RFC2818, can be a bit tricky to implement \
+on your own. So the ssl package in the Standard Library of Python 3.2 and greater now includes a \
+match_hostname() function for performing this check instead of requiring every application to \
+implement the check separately. This backport brings match_hostname() to users of earlier versions of Python"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=95a5ee8fd779fbeca8b4cbca64433c87"
+
+SRC_URI[md5sum] = "c03fc5e2c7b3da46b81acf5cbacfe1e6"
+SRC_URI[sha256sum] = "502ad98707319f4a51fa2ca1c677bd659008d27ded9f6380c79e8932e38dcdf2"
+
+PYPI_PACKAGE = "backports.ssl_match_hostname"
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-pkgutil"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc
new file mode 100644
index 000000000..449096978
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt.inc
@@ -0,0 +1,17 @@
+DESCRIPTION = "Modern password hashing for your software and your servers."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f7bb094c7232b058c7e9f2e431f389c"
+
+DEPENDS += "${PYTHON_PN}-cffi-native"
+
+SRC_URI[md5sum] = "8408abc974446e64862a9742104e97b6"
+SRC_URI[sha256sum] = "67ed1a374c9155ec0840214ce804616de49c3df9c5bc66740687c1c9b1cd9e8d"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb
new file mode 100644
index 000000000..b136aa489
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-bcrypt_3.1.4.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-bcrypt.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc
new file mode 100644
index 000000000..d60d987ca
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Screen-scraping library"
+HOMEPAGE = " https://www.crummy.com/software/BeautifulSoup/bs4"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=f2d38d8a40bf73fd4b3d16ca2e5882d1"
+
+SRC_URI[md5sum] = "c17714d0f91a23b708a592cb3c697728"
+SRC_URI[sha256sum] = "808b6ac932dccb0a4126558f7dfdcf41710dd44a4ef497a0bb59a77f9f078e89"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target = "\
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-html5lib \
+ ${PYTHON_PN}-lxml \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb
new file mode 100644
index 000000000..907285ac1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-beautifulsoup4_4.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-beautifulsoup4.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb
new file mode 100644
index 000000000..679730262
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-behave_1.2.6.bb
@@ -0,0 +1,10 @@
+SUMMARY = "A behavior-driven development framework, Python style"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d950439e8ea6ed233e4288f5e1a49c06"
+
+SRC_URI[md5sum] = "3f05c859a1c45f5ed33e925817ad887d"
+SRC_URI[sha256sum] = "b9662327aa53294c1351b0a9c369093ccec1d21026f050c3bd9b3e5cccf81a86"
+
+RDEPENDS_${PN} += "python-difflib python-setuptools python-pkgutil python-misc python-argparse python-xml python-enum34 python-parse python-parse-type python-six"
+
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc
new file mode 100644
index 000000000..38a22f668
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray.inc
@@ -0,0 +1,11 @@
+SUMMARY = "A high-level Python efficient arrays of booleans -- C extension"
+HOMEPAGE = "https://github.com/ilanschnell/bitarray"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3ba469353f9f2a244b2075902351e37d"
+
+SRC_URI[md5sum] = "3825184f54f4d93508a28031b4c65d3b"
+SRC_URI[sha256sum] = "7da501356e48a83c61f479393681c1bc4b94e5a34ace7e08cb29e7dd9290ab18"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.1.bb
new file mode 100644
index 000000000..f78c7abd2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-bitarray_0.8.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-bitarray.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc
new file mode 100644
index 000000000..eaf390837
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-blinker.inc
@@ -0,0 +1,7 @@
+DESCRIPTION = "Fast, simple object-to-object and broadcast signaling."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=946d7e89af6f7733aeaebed5635d2682"
+
+SRC_URI[md5sum] = "8b3722381f83c2813c52de3016b68d33"
+SRC_URI[sha256sum] = "471aee25f3992bd325afa3772f1063dbdbbca947a041b8b89466dc00d606f8b6"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb
new file mode 100644
index 000000000..bc4164e97
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-blinker_1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-blinker.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-can.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-can.inc
new file mode 100644
index 000000000..a71c47be4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-can.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Controller Area Network (CAN) interface module for Python"
+SECTION = "devel/python"
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=38138baa100d7259934590850bc0406e"
+
+SRC_URI[md5sum] = "3310f0aa2a8492d0ff614ecf636ec8a8"
+SRC_URI[sha256sum] = "4a5c01dd67feeda35f88e6c12ea14ac8cabd426b9be0cc5f9fd083fe90a9dbfc"
+
+PYPI_PACKAGE="python-can"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-sqlite3 \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-can_2.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-can_2.1.0.bb
new file mode 100644
index 000000000..f0edb6408
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-can_2.1.0.bb
@@ -0,0 +1,8 @@
+require python-can.inc
+inherit pypi setuptools
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc
new file mode 100644
index 000000000..1648d3e94
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cassandra-driver.inc
@@ -0,0 +1,33 @@
+SUMMARY = "DataStax Python Driver for Apache Cassandra"
+DESCRIPTION = "A modern, feature-rich and highly-tunable Python client \
+library for Apache Cassandra (1.2+) and DataStax Enterprise (3.1+) using \
+exclusively Cassandra's binary protocol and Cassandra Query Language v3."
+HOMEPAGE = "https://github.com/datastax/python-driver"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
+SRCNAME = "cassandra-driver"
+
+SRC_URI[md5sum] = "5c8b4a3adfc48180e8ec38b8c4e996fd"
+SRC_URI[sha256sum] = "61b670fb2ba95d51d91fa7b589aae3666df494713f5d1ed78bb5c510778d77f0"
+
+DISTUTILS_BUILD_ARGS += " \
+ --no-libev \
+"
+DISTUTILS_INSTALL_ARGS += " \
+ --no-libev \
+"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-cython \
+ ${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-json \
+ libevent \
+"
+
+DEPENDS_${PN} += "\
+ ${PYTHON_PN}-cython \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc
new file mode 100644
index 000000000..26df5c115
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-certifi.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Python package for providing Mozilla's CA Bundle."
+DESCRIPTION = "This installable Python package contains a CA Bundle that you can reference in your \
+Python code. This is useful for verifying HTTP requests, for example. This is the same CA Bundle \
+which ships with the Requests codebase, and is derived from Mozilla Firefox's canonical set."
+HOMEPAGE = " http://certifi.io/"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f77f61d14ee6feac4228d3ebd26cc1f1"
+
+SRC_URI[md5sum] = "068fd5c3c690ae47504b3e0bf4e56c4c"
+SRC_URI[sha256sum] = "edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.1.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.1.18.bb
new file mode 100644
index 000000000..adfe6238e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-certifi_2018.1.18.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-certifi.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc
new file mode 100644
index 000000000..e6071eeca
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cffi.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Foreign Function Interface for Python calling C code"
+HOMEPAGE = "http://cffi.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5677e2fdbf7cdda61d6dd2b57df547bf"
+DEPENDS += "libffi ${PYTHON_PN}-pycparser"
+
+SRC_URI[md5sum] = "ac8492f4ad952360737413e82d661908"
+SRC_URI[sha256sum] = "e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4"
+
+RDEPENDS_${PN}_class-target = " \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb
new file mode 100644
index 000000000..bc667b805
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cffi_1.11.5.bb
@@ -0,0 +1,6 @@
+require python-cffi.inc
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc
new file mode 100644
index 000000000..630529978
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-chardet.inc
@@ -0,0 +1,23 @@
+SUMMARY = "Universal encoding detector for Python 2 and 3"
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+inherit pypi
+
+# setup.py of chardet needs this.
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+SRC_URI[md5sum] = "7dd1ba7f9c77e32351b0a0cfacf4055c"
+SRC_URI[sha256sum] = "84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"
+
+BBCLASSEXTEND = "native nativesdk"
+
+PACKAGES =+ "${PN}-cli"
+RDEPENDS_${PN}-cli = "${PN} "
+FILES_${PN}-cli += " \
+ ${PYTHON_SITEPACKAGES_DIR}/chardet/cli \
+"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-logging \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb
new file mode 100644
index 000000000..3b6feeef1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-chardet_3.0.4.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-chardet.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-argparse"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb
new file mode 100644
index 000000000..20fc2fdc3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cheetah_2.4.4.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Python template engine and code generation tool"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aff1107514aa6aae948f9fe71fdc393b"
+
+PR = "r3"
+
+PYPI_PACKAGE = "Cheetah"
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "python-pickle python-pprint"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[md5sum] = "853917116e731afbc8c8a43c37e6ddba"
+SRC_URI[sha256sum] = "be308229f0c1e5e5af4f27d7ee06d90bb19e6af3059794e5fd536a6f29a9b550"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-click.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-click.inc
new file mode 100644
index 000000000..718bbabcf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-click.inc
@@ -0,0 +1,21 @@
+SUMMARY = "A simple wrapper around optparse for powerful command line utilities."
+DESCRIPTION = "\
+Click is a Python package for creating beautiful command line interfaces \
+in a composable way with as little code as necessary. It's the "Command \
+Line Interface Creation Kit". It's highly configurable but comes with \
+sensible defaults out of the box."
+HOMEPAGE = "http://click.pocoo.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=09e8b7869f94ba9e9a7b260d53c65dab"
+
+SRC_URI[md5sum] = "fc4cc00c4863833230d3af92af48abd4"
+SRC_URI[sha256sum] = "f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-threading \
+ "
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb
new file mode 100644
index 000000000..f63e27c84
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-click_6.7.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools
+require python-click.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-contextlib"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.8.1.bb
new file mode 100644
index 000000000..145ab9890
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cmd2_0.8.1.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Extra features for standard library's cmd module"
+HOMEPAGE = "http://packages.python.org/cmd2/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=51;endline=51;md5=0f13c9cfc75288223cf7edd2f3b985a2"
+
+SRC_URI[md5sum] = "701b916ffac99137bea413205106f993"
+SRC_URI[sha256sum] = "d09976f9ad2327883c2d07b5acb42e66ad52b17e352873c22041ed124bfe8aba"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-doctest \
+ ${PYTHON_PN}-pyparsing \
+ ${PYTHON_PN}-pyperclip \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-textutils \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc
new file mode 100644
index 000000000..c1fb8582c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-configparser.inc
@@ -0,0 +1,11 @@
+SUMMARY = "This module provides the ConfigParser class which implements a basic configuration language which provides a structure similar to what’s found in Microsoft Windows INI files."
+SECTION = "devel/python"
+HOMEPAGE = "https://docs.python.org/3/library/configparser.html"
+LICENSE = "MIT"
+
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "cfdd915a5b7a6c09917a64a573140538"
+SRC_URI[sha256sum] = "5308b47021bc2340965c371f0f058cc6971a04502638d4244225c49d80db273a"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb
new file mode 100644
index 000000000..69f045dba
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-configparser_3.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-configparser.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc
new file mode 100644
index 000000000..815350492
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-constantly.inc
@@ -0,0 +1,11 @@
+DESCRIPTION = "Symbolic constants in Python"
+HOMEPAGE = "https://github.com/twisted/constantly"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e393e4ddd223e3a74982efa784f89fd7"
+
+SRC_URI[md5sum] = "f0762f083d83039758e53f8cf0086eef"
+SRC_URI[sha256sum] = "586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"
+
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-json"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb
new file mode 100644
index 000000000..29b15eb60
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-constantly_15.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-constantly.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc
new file mode 100644
index 000000000..00bb87b0c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Test vectors for the cryptography package."
+HOMEPAGE = "https://cryptography.io/"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0 | BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8c3617db4fb6fae01f1d253ab91511e4"
+
+DEPENDS += " \
+ ${PYTHON_PN}-cryptography \
+"
+
+SRC_URI[md5sum] = "ef115b870cc8d8b9f0f4189b512bc170"
+SRC_URI[sha256sum] = "78c4b4f3f84853ea5d038e2f53d355229dd8119fe9cf949c3e497c85c760a5ca"
+
+PYPI_PACKAGE = "cryptography_vectors"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.1.4.bb
new file mode 100644
index 000000000..4975278a9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography-vectors_2.1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-cryptography-vectors.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc
new file mode 100644
index 000000000..4be79077e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography.inc
@@ -0,0 +1,57 @@
+SUMMARY = "Provides cryptographic recipes and primitives to python developers"
+HOMEPAGE = "https://cryptography.io/"
+LICENSE = "Apache-2.0 | BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d5ede125ed08d4fd14ec44d334bdb388"
+
+DEPENDS += " \
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-cffi-native \
+ ${PYTHON_PN}-asn1crypto \
+ ${PYTHON_PN}-six \
+"
+
+SRC_URI[md5sum] = "9f39d4d8f2b05f295fa0ff52475ec4f2"
+SRC_URI[sha256sum] = "e4d967371c5b6b2e67855066471d844c5d52d210c36c28d49a8507b96e2c5291"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-idna \
+ ${PYTHON_PN}-asn1crypto \
+ ${PYTHON_PN}-pycparser \
+ ${PYTHON_PN}-setuptools \
+ ${PYTHON_PN}-six \
+"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-cffi \
+ ${PYTHON_PN}-idna \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-asn1crypto \
+ ${PYTHON_PN}-pycparser \
+ ${PYTHON_PN}-setuptools \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-threading \
+"
+
+RDEPENDS_${PN}-ptest += " \
+ ${PN} \
+ ${PYTHON_PN}-cryptography-vectors \
+ ${PYTHON_PN}-iso8601 \
+ ${PYTHON_PN}-pretend \
+ ${PYTHON_PN}-pytest \
+"
+
+inherit ptest
+
+do_install_ptest() {
+ install -d ${D}${PTEST_PATH}/tests
+ cp -rf ${S}/tests/* ${D}${PTEST_PATH}/tests/
+ install -d ${D}${PTEST_PATH}/tests/hazmat
+ cp -rf ${S}/tests/hazmat/* ${D}${PTEST_PATH}/tests/hazmat/
+}
+
+FILES_${PN}-dbg += " \
+ ${libdir}/${PYTHON_PN}2.7/site-packages/${SRCNAME}/hazmat/bindings/.debug \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest
new file mode 100644
index 000000000..0ba239c2a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography/run-ptest
@@ -0,0 +1,2 @@
+#!/bin/sh
+py.test
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.1.4.bb
new file mode 100644
index 000000000..9c2f88418
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cryptography_2.1.4.bb
@@ -0,0 +1,22 @@
+inherit pypi setuptools
+require python-cryptography.inc
+
+SRC_URI += " \
+ file://run-ptest \
+"
+
+DEPENDS += " \
+ ${PYTHON_PN}-enum34 \
+"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-enum34 \
+ ${PYTHON_PN}-ipaddress \
+"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-enum34 \
+ ${PYTHON_PN}-ipaddress \
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc
new file mode 100644
index 000000000..5d3b9d5ba
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cython.inc
@@ -0,0 +1,40 @@
+DESCRIPTION = "Cython is a language specially designed for writing Python extension modules. \
+It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \
+and the messy, low-level world of C."
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e23fadd6ceef8c618fc1c65191d846fa"
+PYPI_PACKAGE = "Cython"
+BBCLASSEXTEND = "native nativesdk"
+
+SRC_URI[md5sum] = "0e0568d6bed4b09ad01afe0a38805305"
+SRC_URI[sha256sum] = "634e2f10fc8d026c633cffacb45cd8f4582149fa68e1428124e762dbc566e68a"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-pyparsing \
+ ${PYTHON_PN}-setuptools \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-xml \
+"
+
+RDEPENDS_${PN}_class-nativesdk += "\
+ nativesdk-${PYTHON_PN}-misc \
+ nativesdk-${PYTHON_PN}-netserver \
+ nativesdk-${PYTHON_PN}-pkgutil \
+ nativesdk-${PYTHON_PN}-pyparsing \
+ nativesdk-${PYTHON_PN}-setuptools \
+ nativesdk-${PYTHON_PN}-shell \
+ nativesdk-${PYTHON_PN}-xml \
+"
+
+do_install_append() {
+ # Make sure we use /usr/bin/env python
+ for PYTHSCRIPT in `grep -rIl '^#!.*python' ${D}`; do
+ sed -i -e '1s|^#!.*|#!/usr/bin/env ${PYTHON_PN}|' $PYTHSCRIPT
+ done
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.2.bb
new file mode 100644
index 000000000..d803a6ed4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-cython_0.28.2.bb
@@ -0,0 +1,10 @@
+inherit setuptools
+require python-cython.inc
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/Cython/"
+UPSTREAM_CHECK_REGEX = "/Cython/(?P<pver>(\d+[\.\-_]*)+)"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-distribute \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch
new file mode 100644
index 000000000..dbb840718
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-daemon/0001-Workaround-for-issue-2-1.patch
@@ -0,0 +1,31 @@
+From 0981eee9f0198c2045dc0eaa78a005d06fc7bfe4 Mon Sep 17 00:00:00 2001
+From: Carlos Eduardo Moreira dos Santos <cems@cemshost.com.br>
+Date: Tue, 28 Mar 2017 18:23:44 -0300
+Subject: [PATCH] Workaround for issue 2 [1]
+
+[1] https://pagure.io/python-daemon/issue/2
+---
+ version.py | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/version.py b/version.py
+index d58422a377ee..293e2d64c2b7 100644
+--- a/version.py
++++ b/version.py
+@@ -648,9 +648,10 @@ class ChangelogAwareDistribution(distutils.dist.Distribution, object):
+
+ @lru_cache(maxsize=128)
+ def get_version_info(self):
+- changelog_path = get_changelog_path(self)
+- version_info = generate_version_info_from_changelog(changelog_path)
+- return version_info
++ return {
++ 'version': '2.1.2',
++ 'maintainer': 'Ben Finney'
++ }
+
+ def get_version(self):
+ version_info = self.get_version_info()
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb
new file mode 100644
index 000000000..4c18e2bad
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-daemon_2.1.2.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "Library to implement a well-behaved Unix daemon process"
+HOMEPAGE = "https://pagure.io/python-daemon/"
+SECTION = "devel/python"
+
+DEPENDS = "python-docutils"
+RDEPENDS_${PN} = "python-docutils \
+ python-lockfile (>= 0.10) \
+ python-resource \
+"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit pypi setuptools
+
+SRC_URI[md5sum] = "9c57343d81f2a96c51cffeab982b04d2"
+SRC_URI[sha256sum] = "261c859be5c12ae7d4286dc6951e87e9e1a70a882a8b41fd926efc1ec4214f73"
+
+# Fix for build error in Yocto:
+# i = p.rfind('/') + 1
+# AttributeError: 'NoneType' object has no attribute 'rfind'
+#S = "${WORKDIR}/python-daemon"
+SRC_URI_append = " \
+ file://0001-Workaround-for-issue-2-1.patch \
+"
+
+PYPI_PACKAGE = "python-daemon"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb
new file mode 100644
index 000000000..98f23aba1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-daemonize_2.4.7.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Library to enable your code run as a daemon process on Unix-like systems"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=13e982bf1b7b164b9d6d1665dac83873"
+SRCNAME = "daemonize"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "\
+ python-fcntl \
+ python-unixadmin \
+ python-logging \
+ python-resource \
+"
+
+SRC_URI[md5sum] = "6759005b12dfeea0d4305f8536b4b0c2"
+SRC_URI[sha256sum] = "c0194e861826be456c7c69985825ac7b79632d8ac7ad4cde8e12fee7971468c8"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc
new file mode 100644
index 000000000..333b5e224
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil.inc
@@ -0,0 +1,21 @@
+SUMMARY = "Extensions to the standard Python datetime module"
+DESCRIPTION = "The dateutil module provides powerful extensions to the datetime module available in the Python standard library."
+HOMEPAGE = "https://dateutil.readthedocs.org"
+LICENSE = "BSD-3-Clause & Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3155c7bdc71f66e02678411d2abf996"
+
+SRC_URI[md5sum] = "03a08c8bcf0a2b29f1cd21b9de4d12fb"
+SRC_URI[sha256sum] = "9d8074be4c993fbe4947878ce593052f71dac82932a677d49194d8ce9778002e"
+
+PYPI_PACKAGE = "python-dateutil"
+inherit pypi
+
+PACKAGES =+ "${PN}-zoneinfo"
+FILES_${PN}-zoneinfo = "${libdir}/${PYTHON_DIR}/site-packages/dateutil/zoneinfo"
+
+RDEPENDS_${PN}_class-target = "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-stringold \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.2.bb
new file mode 100644
index 000000000..12ae4c311
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dateutil_2.7.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-dateutil.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.6.bb
new file mode 100644
index 000000000..0f18ccc88
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dbus_1.2.6.bb
@@ -0,0 +1,32 @@
+SUMMARY = "Python bindings for the DBus inter-process communication system"
+SECTION = "devel/python"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+LICENSE = "MIT & AFL-2.1 | GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b03240518994df6d8c974675675e5ca4 \
+ file://dbus-gmain/COPYING;md5=05c3eacd50f69bb1d58afec460baad57 "
+DEPENDS = "expat dbus dbus-glib virtual/libintl python-pyrex-native"
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-python/dbus-python-${PV}.tar.gz \
+"
+
+SRC_URI[md5sum] = "1ce1ddf2582060f8f971652ea54cc17e"
+SRC_URI[sha256sum] = "32f29c17172cdb9cb61c68b1f1a71dfe7351506fc830869029c47449bd04faeb"
+S = "${WORKDIR}/dbus-python-${PV}"
+
+inherit distutils-base autotools pkgconfig
+
+PACKAGECONFIG ?= ""
+PACKAGECONFIG[docs] = "--enable-html-docs,--disable-html-docs,python3-docutils-native"
+PACKAGECONFIG[api-docs] = "--enable-api-docs,--disable-api-docs,python3-docutils-native python3-epydoc-native"
+
+export STAGING_LIBDIR
+export STAGING_INCDIR
+
+RDEPENDS_${PN} = "python-io python-logging python-stringold python-threading python-xml"
+
+FILES_${PN}-dev += "${libdir}/pkgconfig"
+
+do_install_append() {
+ # Remove files that clash with python3-dbus; their content is same
+ rm ${D}${includedir}/dbus-1.0/dbus/dbus-python.h ${D}${libdir}/pkgconfig/dbus-python.pc
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch
new file mode 100644
index 000000000..c4d817849
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0001-Add-functionality-to-add-own-objects-to-internal-obj.patch
@@ -0,0 +1,52 @@
+From c4436fd42f2936e5fb0f95434d06e45aa9959ca0 Mon Sep 17 00:00:00 2001
+From: Simon Busch <simon.busch@lge.com>
+Date: Wed, 9 Apr 2014 13:18:33 +0200
+Subject: [PATCH] Add functionality to add own objects to internal object
+
+ list
+
+In some case the tests might want to create dynamically dbus objects which extended
+functionality from own class definitions within templates. In such cases we need to
+register those objects with the internal object manager of dbusmock.
+
+Signed-off-by: Simon Busch <simon.busch@lge.com>
+
+---
+ dbusmock/__init__.py | 4 ++--
+ dbusmock/mockobject.py | 8 ++++++++
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/dbusmock/__init__.py b/dbusmock/__init__.py
+index 8a482ab..3d5d71a 100644
+--- a/dbusmock/__init__.py
++++ b/dbusmock/__init__.py
+@@ -14,8 +14,8 @@ __license__ = 'LGPL 3+'
+ __version__ = '0.16.7'
+
+ from dbusmock.mockobject import (DBusMockObject, MOCK_IFACE,
+- OBJECT_MANAGER_IFACE, get_object, get_objects)
++ OBJECT_MANAGER_IFACE, get_object, get_objects, add_object)
+ from dbusmock.testcase import DBusTestCase
+
+ __all__ = ['DBusMockObject', 'MOCK_IFACE', 'OBJECT_MANAGER_IFACE',
+- 'DBusTestCase', 'get_object', 'get_objects']
++ 'DBusTestCase', 'get_object', 'get_objects', 'add_object']
+diff --git a/dbusmock/mockobject.py b/dbusmock/mockobject.py
+index 586dbad..e4f130f 100644
+--- a/dbusmock/mockobject.py
++++ b/dbusmock/mockobject.py
+@@ -688,6 +688,14 @@ dbus.service._method_lookup = _dbusmock_method_lookup
+ # Helper API for templates
+ #
+
++def add_object(path, obj):
++ if path in objects:
++ raise dbus.exceptions.DBusException(
++ 'org.freedesktop.DBus.Mock.NameError',
++ 'object %s already exists' % path)
++
++ objects[path] = obj
++
+
+ def get_objects():
+ '''Return all existing object paths'''
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch
new file mode 100644
index 000000000..06ab1f05e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock/0002-Add-possibility-to-import-templates-from-packages.patch
@@ -0,0 +1,27 @@
+From 03bd5cb77c54033857810bb17562859eefa41221 Mon Sep 17 00:00:00 2001
+From: Simon Busch <simon.busch@lge.com>
+Date: Wed, 9 Apr 2014 13:20:33 +0200
+Subject: [PATCH] Add possibility to import templates from packages
+
+Does not have any unit tests yet.
+
+Signed-off-by: Simon Busch <simon.busch@lge.com>
+
+---
+ dbusmock/mockobject.py | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/dbusmock/mockobject.py b/dbusmock/mockobject.py
+index e4f130f..389df70 100644
+--- a/dbusmock/mockobject.py
++++ b/dbusmock/mockobject.py
+@@ -46,6 +46,9 @@ def load_module(name):
+ exec(f.read(), mod.__dict__, mod.__dict__)
+ return mod
+
++ if '.' in name:
++ return importlib.import_module(name)
++
+ return importlib.import_module('dbusmock.templates.' + name)
+
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb
new file mode 100644
index 000000000..ec8c54aac
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dbusmock_0.16.7.bb
@@ -0,0 +1,25 @@
+# Copyright (c) 2014 LG Electronics, Inc.
+
+SUMMARY = "With this program/Python library you can easily create mock objects on D-Bus"
+AUTHOR = "Martin Pitt <martin.pitt@ubuntu.com>"
+
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e6a600fd5e1d9cbde2d983680233ad02"
+
+SRC_URI[md5sum] = "80f8caa838fad96483a8751e11d384f9"
+SRC_URI[sha256sum] = "2d2ea892fa4633c3ec6ac1e912120ec493047a5c6522849b7d1c95ad755bce75"
+
+SRC_URI += " \
+ file://0001-Add-functionality-to-add-own-objects-to-internal-obj.patch \
+ file://0002-Add-possibility-to-import-templates-from-packages.patch \
+"
+
+PYPI_PACKAGE = "python-dbusmock"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-dbus \
+ ${PYTHON_PN}-pygobject \
+ ${PYTHON_PN}-xml \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc
new file mode 100644
index 000000000..44edb8ad7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-decorator.inc
@@ -0,0 +1,19 @@
+SUMMARY = "Python decorator utilities"
+DESCRIPTION = "\
+The aim of the decorator module it to simplify the usage of decorators \
+for the average programmer, and to popularize decorators by showing \
+various non-trivial examples. Of course, as all techniques, decorators \
+can be abused and you should not try to solve every problem with a \
+decorator, just because you can."
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=893f896413826096ce5270c700a498fd"
+
+SRC_URI[md5sum] = "249e7299b9b4bced0c382343f84eb1c0"
+SRC_URI[sha256sum] = "c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-stringold \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb
new file mode 100644
index 000000000..2a2b455f5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-decorator_4.3.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-decorator.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-contextlib"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc
new file mode 100644
index 000000000..e4f03b937
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-django-south.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Migrations for Django"
+DESCRIPTION = "South is an intelligent database migrations library for the Django web framework. It is database-independent and DVCS-friendly, as well as a whole host of other features."
+HOMEPAGE = "http://south.aeracode.org/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=17;endline=18;md5=2155d8ae21e7c23101d5febac696b27e"
+
+SRC_URI[md5sum] = "c76a9758b2011bc3b6c39f881bba2f66"
+SRC_URI[sha256sum] = "d360bd31898f9df59f6faa786551065bba45b35e7ee3c39b381b4fbfef7392f4"
+
+PYPI_PACKAGE = "South"
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-django \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb
new file mode 100644
index 000000000..357b766a3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-django-south_1.0.2.bb
@@ -0,0 +1,2 @@
+require python-django-south.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc
new file mode 100644
index 000000000..4ef2d7f9d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-django.inc
@@ -0,0 +1,32 @@
+SUMMARY = "A high-level Python Web framework"
+HOMEPAGE = "http://www.djangoproject.com/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=f09eb47206614a4954c51db8a94840fa"
+
+SRC_URI[md5sum] = "f306015e16a8d5024dbac923ac34fffb"
+SRC_URI[sha256sum] = "22383567385a9c406d8a5ce080a2694c82c6b733e157922197e8b393bb3aacd9"
+
+PYPI_PACKAGE = "Django"
+inherit pypi
+
+FILES_${PN} += "${datadir}/django"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-compression \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-html \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-pytz \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-unixadmin \
+ ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.10.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.10.bb
new file mode 100644
index 000000000..d2347cc96
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-django_1.11.10.bb
@@ -0,0 +1,8 @@
+require python-django.inc
+inherit setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc
new file mode 100644
index 000000000..6a04429b7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "DNS toolkit for Python"
+HOMEPAGE = "http://www.dnspython.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b9d855ee0d7bea17c8b0994d37985e1e"
+
+SRC_URI[md5sum] = "05d33ffb5d8f35ae0474bb952778a344"
+SRC_URI[sha256sum] = "40f563e1f7a7b80dc5a4e76ad75c23da53d62f1e15e6e517293b04e1f84ead7c"
+
+PYPI_PACKAGE_EXT = "zip"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-math \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb
new file mode 100644
index 000000000..9dbcd0ffb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dnspython_1.15.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-dnspython.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb
new file mode 100644
index 000000000..68436a1a5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-docutils_0.14rc2.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Text processing system for documentation"
+HOMEPAGE = "http://docutils.sourceforge.net"
+SECTION = "devel/python"
+LICENSE = "PSF & BSD-2-Clause & GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=35a23d42b615470583563132872c97d6"
+
+DEPENDS = "python"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/docutils/docutils-${PV}.tar.gz"
+SRC_URI[md5sum] = "2f4bee6451958252f7bec71f18b05be3"
+SRC_URI[sha256sum] = "3caee0bcb2a49fdf24fcfa70849a60abb7a181aa68b030f7cb7494096181830c"
+
+S = "${WORKDIR}/docutils-${PV}"
+
+inherit distutils
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc
new file mode 100644
index 000000000..ecf74a0bc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dominate.inc
@@ -0,0 +1,11 @@
+SUMMARY = "Dominate is a Python library for creating and manipulating HTML documents using an elegant DOM API."
+LICENSE = "LGPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=b52f2d57d10c4f7ee67a7eb9615d5d24"
+
+SRC_URI[md5sum] = "45bd97e6f7888aac24ae86013c57638e"
+SRC_URI[sha256sum] = "4b8ce6f33633c9dd9175b228d21c00c801b6bd0327747cd5e17fc2da934c3a69"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-threading \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb
new file mode 100644
index 000000000..c19445e72
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-dominate_2.3.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-dominate.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc
new file mode 100644
index 000000000..30650bda4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-editor.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "Programmatically open and editor, capture the result"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI[md5sum] = "0aca5f2ef176ce68e98a5b7e31372835"
+SRC_URI[sha256sum] = "a3c066acee22a1c94f63938341d4fb374e3fdd69366ed6603d7b24bed1efc565"
+
+PYPI_PACKAGE = "python-editor"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb
new file mode 100644
index 000000000..f7a9a8c0d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-editor_1.0.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-editor.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb
new file mode 100644
index 000000000..d50b5c7c5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-enum34_1.1.6.bb
@@ -0,0 +1,11 @@
+SUMMARY = "backport of Python 3.4's enum package"
+HOMEPAGE = "https://bitbucket.org/stoneleaf/enum34"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://enum/LICENSE;md5=0a97a53a514564c20efd7b2e8976c87e"
+
+SRC_URI[md5sum] = "5f13a0841a61f7fc295c514490d120d0"
+SRC_URI[sha256sum] = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb
new file mode 100644
index 000000000..dd9799faf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-epydoc_3.0.1.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Epydoc is a tool for generating API documentation for Python modules, based on their docstrings"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=011c0d78eb6054d731c879132d7313f0"
+HOMEPAGE = "http://epydoc.sourceforge.net/"
+
+SRC_URI[md5sum] = "cdd6f6c76dd8bab5e653a343a0544294"
+SRC_URI[sha256sum] = "d4e5c8d90937d01b05170f592c1fa9b29e9ed0498dfe7f0eb2a3af61725b6ad1"
+
+inherit pypi distutils
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-xml \
+ "
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc
new file mode 100644
index 000000000..5a3884a6f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-evdev.inc
@@ -0,0 +1,21 @@
+SUMMARY = "Python evdev lib"
+HOMEPAGE = "https://github.com/gvalkov/python-evdev"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=18debddbb3f52c661a129724a883a8e2"
+
+SRC_URI[md5sum] = "c7e855ae9f97f869a59e75b29f05ce74"
+SRC_URI[sha256sum] = "57edafc469a414f58b51af1bfb9ee2babb9f626dd2df530d71c1176871850aa1"
+
+do_compile_prepend() {
+ rm -rf ${S}/evdev/ecodes.c
+}
+
+DISTUTILS_BUILD_ARGS = "build_ecodes --evdev-headers ${STAGING_DIR_TARGET}/usr/include/linux/input.h:${STAGING_DIR_TARGET}/usr/include/linux/input-event-codes.h"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-fcntl \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-stringold \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb
new file mode 100644
index 000000000..63541363e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-evdev_0.7.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-evdev.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc
new file mode 100644
index 000000000..a333ef4ee
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "A Python library for generating news feeds in RSS and Atom formats"
+HOMEPAGE = "http://code.google.com/p/feedformatter/"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=258e3f39e2383fbd011035d04311008d"
+SRCREV = "7391193c83e10420b5a2d8ef846d23fc368c6d85"
+
+SRC_URI = "git://github.com/marianoguerra/feedformatter.git"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-xml \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb
new file mode 100644
index 000000000..175f94478
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-feedformatter_0.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-feedformatter.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb
new file mode 100644
index 000000000..b8ee700f0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-feedparser_5.2.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Python Atom and RSS feed parser"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c21a7713ef6dc1b99644061c397e7c2a"
+
+SRC_URI[md5sum] = "d552f7a2a55e8e33b2a3fe1082505b42"
+SRC_URI[sha256sum] = "bd030652c2d08532c034c27fcd7c85868e7fa3cb2b17f230a44a6bbc92519bf9"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-html \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-stringold \
+ "
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc
new file mode 100644
index 000000000..b60ee17d1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "i18n and l10n support for Flask based on babel and pytz"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51917f3e8e858f5ae295a7d0e2eb3cc9"
+
+SRC_URI[md5sum] = "07803453743f139309021572a799c6b3"
+SRC_URI[sha256sum] = "c0d75710bd4b0fe866f9f2347de6e19208712f9cec006436b4c1c15d4cb0c939"
+
+PYPI_PACKAGE = "Flask-Babel"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-speaklater \
+ ${PYTHON_PN}-babel \
+ ${PYTHON_PN}-flask \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb
new file mode 100644
index 000000000..38e78c73f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-babel_0.11.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-babel.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb
new file mode 100644
index 000000000..f035862de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bcrypt_0.7.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Bcrypt hashing for Flask."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0ee2ee5bee7fe96597770e92db5719a8"
+
+SRC_URI[md5sum] = "d345c36ac6637d3ca9fa942e238d00ca"
+SRC_URI[sha256sum] = "d71c8585b2ee1c62024392ebdbc447438564e2c8c02b4e57b56a4cafd8d13c5f"
+
+PYPI_PACKAGE = "Flask-Bcrypt"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-bcrypt ${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc
new file mode 100644
index 000000000..0723b9738
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "An extension that includes Bootstrap in your project, without any boilerplate code."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=a03749709f06118a17349deb5a210619"
+
+SRC_URI[md5sum] = "e40d50f5c5b6438c1c6200a6f2871f81"
+SRC_URI[sha256sum] = "cb08ed940183f6343a64e465e83b3a3f13c53e1baabb8d72b5da4545ef123ac8"
+
+PYPI_PACKAGE = "Flask-Bootstrap"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-dominate \
+ ${PYTHON_PN}-flask \
+ ${PYTHON_PN}-visitor \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb
new file mode 100644
index 000000000..eeaade9a8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-bootstrap_3.3.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-bootstrap.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc
new file mode 100644
index 000000000..59eb64f77
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login.inc
@@ -0,0 +1,14 @@
+SUMMARY = "User session management for Flask"
+DESCRIPTION = "Flask-Login provides user session management for Flask. \
+It handles the common tasks of logging in, logging out, and remembering \
+your users’ sessions over extended periods of time."
+HOMEPAGE = " https://github.com/maxcountryman/flask-login"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8aa87a1cd9fa41d969ad32cfdac2c596"
+
+SRC_URI[md5sum] = "25b34c74bd509792f291c16e184225df"
+SRC_URI[sha256sum] = "c815c1ac7b3e35e2081685e389a665f2c74d7e077cb93cecabaea352da4752ec"
+
+PYPI_PACKAGE = "Flask-Login"
+
+RDEPENDS_${PN}_class-target = "${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb
new file mode 100644
index 000000000..510cedf22
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-login_0.4.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-login.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc
new file mode 100644
index 000000000..bb0870348
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Flask extension for sending email"
+DESCRIPTION = "A Flask extension for sending email"
+HOMEPAGE = " https://github.com/rduplain/flask-email"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5b16dfa6d3f275ace5985bb92949f770"
+
+SRC_URI[md5sum] = "04b35a42a44ec7aa724ec8ce55e2e08e"
+SRC_URI[sha256sum] = "22e5eb9a940bf407bcf30410ecc3708f3c56cc44b29c34e1726fe85006935f41"
+
+PYPI_PACKAGE = "Flask-Mail"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb
new file mode 100644
index 000000000..8324da867
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-mail_0.9.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-mail.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc
new file mode 100644
index 000000000..7af4fe1b5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "SQLAlchemy database migrations for Flask applications using Alembic"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b69377f79f3f48c661701236d5a6a85"
+
+SRC_URI[md5sum] = "def4106c80897b7fad2afb3bc05360e4"
+SRC_URI[sha256sum] = "b709ca8642559c3c5a81a33ab10839fa052177accd5ba821047a99db635255ed"
+
+PYPI_PACKAGE = "Flask-Migrate"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-flask-sqlalchemy \
+ ${PYTHON_PN}-alembic \
+ ${PYTHON_PN}-flask \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.1.1.bb
new file mode 100644
index 000000000..ece516f50
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-migrate_2.1.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-migrate.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc
new file mode 100644
index 000000000..932ccdf4a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav.inc
@@ -0,0 +1,13 @@
+DESCRIPTION = "Easily create navigation for Flask applications."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=2729ee82259d601d90d28b0574d12416"
+
+SRC_URI[md5sum] = "4d51cfd06d58f8d0fe85775a6696c0e5"
+SRC_URI[sha256sum] = "44e40b755380a1e68ab521a2f9174de259a2c94ddcdaabf36b3aca2e110a33f4"
+
+PYPI_PACKAGE = "flask-nav"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-blinker \
+ ${PYTHON_PN}-flask \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb
new file mode 100644
index 000000000..30b5b3b3b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-nav_0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-nav.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb
new file mode 100644
index 000000000..b2dc96e3c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-navigation_0.2.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "The navigation of Flask application."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=af2ec695dc1f3eb7bd74f79a68a0d789"
+
+SRC_URI[md5sum] = "d1075ee02a3f69da37e5cadad3395f31"
+SRC_URI[sha256sum] = "c42d30efa989ca877444a410e8a1cd2563546f9effe3d9fe388eedf7a6c69285"
+
+PYPI_PACKAGE = "Flask-Navigation"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-blinker \
+ ${PYTHON_PN}-flask \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
new file mode 100644
index 000000000..fb2d6ed8b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo.inc
@@ -0,0 +1,13 @@
+SUMMARY = "PyMongo support for Flask applications"
+DESCRIPTION = "PyMongo support for Flask applications."
+HOMEPAGE = "https://github.com/mitsuhiko/flask/"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://flask_pymongo/wrappers.py;beginline=1;endline=24;md5=424c4e1047d28e01b4e4634a069c019d"
+
+SRC_URI[md5sum] = "d7a1b717f27154e1f3a355f8ec2467d6"
+SRC_URI[sha256sum] = "2baaa2ba5107d72b3a8bd4b5c0c8881316e35340ad1ae979cc13f1f3c8843b3d"
+
+PYPI_PACKAGE = "Flask-PyMongo"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pymongo ${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb
new file mode 100644
index 000000000..d41d02348
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-pymongo_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-pymongo.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc
new file mode 100644
index 000000000..0485f85aa
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Simple framework for creating REST APIs"
+DESCRIPTION = "\
+Flask-RESTful is an extension for Flask that adds support for quickly building \
+REST APIs"
+HOMEPAGE = "https://github.com/flask-restful/flask-restful"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=685bb55ed99a366bb431995f5eef2783"
+
+SRC_URI[md5sum] = "8243ca101185b130d8fa529cbdbdbddd"
+SRC_URI[sha256sum] = "5795519501347e108c436b693ff9a4d7b373a3ac9069627d64e4001c05dd3407"
+
+inherit pypi
+
+PYPI_PACKAGE = "Flask-RESTful"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb
new file mode 100644
index 000000000..1968d1d9d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-restful_0.3.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-flask-restful.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc
new file mode 100644
index 000000000..fca777bc5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Scripting support for flask"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e686048adb69341fc8a08caeda528b41"
+
+SRC_URI[md5sum] = "3fbd91fe13cebedfb2431331f6eabb68"
+SRC_URI[sha256sum] = "6425963d91054cfcc185807141c7314a9c5ad46325911bd24dcb489bd0161c65"
+
+PYPI_PACKAGE = "Flask-Script"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-flask \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb
new file mode 100644
index 000000000..b7d55af15
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-script_2.0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-script.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc
new file mode 100644
index 000000000..e0efbc63a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "Adds SQLAlchemy support to your Flask application."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ed1b8cc741515a835a7f6bf2f62ef4a"
+
+SRC_URI[md5sum] = "373ce61dfd03b593ad2eaba68c9fee35"
+SRC_URI[sha256sum] = "5971b9852b5888655f11db634e87725a9031e170f37c0ce7851cf83497f56e53"
+
+PYPI_PACKAGE = "Flask-SQLAlchemy"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-sqlalchemy ${PYTHON_PN}-flask"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb
new file mode 100644
index 000000000..3dc355c5d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-sqlalchemy_2.3.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-sqlalchemy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc
new file mode 100644
index 000000000..cd7ac1aeb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Flexible and efficient upload handling for Flask"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=b712ac634b39469660c9bdfb8d03421c"
+
+SRC_URI[md5sum] = "e5eee34aa92b64a4d22847672b3858a1"
+SRC_URI[sha256sum] = "53ecbd6033667d50ae02b63adebbaa33c7fc56c09e5293025810cf9d841ecb02"
+
+PYPI_PACKAGE = "Flask-Uploads"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-flask \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb
new file mode 100644
index 000000000..d39b07f69
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-uploads_0.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-uploads.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc
new file mode 100644
index 000000000..c2b71829c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Customizable user account management for Flask"
+DESCRIPTION = "Customizable User Account Management for Flask; Register \
+Confirm email, Login, Change username, Change password, Forgot Password \
+and more."
+HOMEPAGE = " https://github.com/lingthio/Flask-User"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=97de97cd9d6e23c88129d884588ce71a"
+
+SRC_URI[md5sum] = "f7965e66ca139c8436896da07e66c21f"
+SRC_URI[sha256sum] = "601abcc0343dfbae0c56273d98362d5cdc266ac84d20b3f65a212e4a2c83b302"
+
+PYPI_PACKAGE = "Flask-User"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-flask \
+ ${PYTHON_PN}-flask-login \
+ ${PYTHON_PN}-flask-mail \
+ ${PYTHON_PN}-babel"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb
new file mode 100644
index 000000000..654d37752
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-user_0.6.19.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-user.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
new file mode 100644
index 000000000..3c90656ad
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Simple integration of Flask and WTForms."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3ca6bb31670492f791e6a9f2fb9f8a80"
+
+SRC_URI[md5sum] = "586f50f233926cade42e3d744aca3e8f"
+SRC_URI[sha256sum] = "5d14d55cfd35f613d99ee7cba0fc3fbbe63ba02f544d349158c14ca15561cc36"
+
+PYPI_PACKAGE = "Flask-WTF"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-flask \
+ ${PYTHON_PN}-itsdangerous \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-wtforms \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb
new file mode 100644
index 000000000..dbf091bc0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-wtf_0.14.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-wtf.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc
new file mode 100644
index 000000000..a1fe14ed4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "XStatic support for flask"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=659968f6ebd4b70b6c3190d20b4a924c"
+
+SRC_URI[md5sum] = "2f56023e1444c8bd1fec41afe93de743"
+SRC_URI[sha256sum] = "226ea8e97065a9488b59bfe5c94af4c6e2ea70a25052e301fb231a1381490133"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-flask-xstatic:"
+SRC_URI += "file://remove-pip-requires.patch"
+
+PYPI_PACKAGE = "Flask-XStatic"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-flask \
+ ${PYTHON_PN}-xstatic \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch
new file mode 100644
index 000000000..a2d620ad0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic/remove-pip-requires.patch
@@ -0,0 +1,7 @@
+--- Flask-XStatic-0.0.1/setup.py.orig 2015-01-30 08:01:56.000000000 -0800
++++ Flask-XStatic-0.0.1/setup.py 2017-04-17 21:40:32.570181626 -0700
+@@ -1,4 +1,3 @@
+-from pip.req import parse_requirements
+ import setuptools
+
+ with open('README.rst') as f:
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb
new file mode 100644
index 000000000..dff14a8c0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask-xstatic_0.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask-xstatic.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc
new file mode 100644
index 000000000..ecf5619ec
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask.inc
@@ -0,0 +1,16 @@
+SUMMARY = "A microframework based on Werkzeug, Jinja2 and good intentions"
+DESCRIPTION = "\
+Flask is a microframework for Python based on Werkzeug, Jinja 2 and good \
+intentions. And before you ask: It’s BSD licensed!"
+HOMEPAGE = "https://github.com/mitsuhiko/flask/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=19866b76b054ab30c270c0eb9d7e43d7"
+
+SRC_URI[md5sum] = "97278dfdafda98ba7902e890b0289177"
+SRC_URI[sha256sum] = "49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1"
+
+CLEANBROKEN = "1"
+
+PYPI_PACKAGE = "Flask"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-werkzeug ${PYTHON_PN}-werkzeug-tests ${PYTHON_PN}-jinja2 ${PYTHON_PN}-itsdangerous ${PYTHON_PN}-click"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-flask_0.12.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-flask_0.12.2.bb
new file mode 100644
index 000000000..a0a28ab8b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-flask_0.12.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-flask.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb
new file mode 100644
index 000000000..dad15ee0f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-funcsigs_1.0.2.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+"
+DESCRPTION = " \
+funcsigs is a backport of the `PEP 362`_ function signature features from \
+Python 3.3's `inspect`_ module. The backport is compatible with Python 2.6, \
+2.7 as well as 3.3 and up. 3.2 was supported by version 0.4, but with \
+setuptools and pip no longer supporting 3.2, we cannot make any statement \
+about 3.2 compatibility. \
+"
+
+HOMEPAGE = "http://funcsigs.readthedocs.org"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d6bc91dc8e5793892189fe7481a2d354"
+
+SRC_URI[md5sum] = "7e583285b1fb8a76305d6d68f4ccc14e"
+SRC_URI[sha256sum] = "a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"
+
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb
new file mode 100644
index 000000000..cb4bba496
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-functools32_3.2.3-2.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Backport of the functools module from Python 3.2.3 for use on 2.7 and PyPy."
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=27cf2345969ed18e6730e90fb0063a10"
+
+SRC_URI[md5sum] = "09f24ffd9af9f6cd0f63cb9f4e23d4b2"
+SRC_URI[sha256sum] = "f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb
new file mode 100644
index 000000000..46f7fe50f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-future_0.16.0.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Clean single-source support for Python 3 and 2"
+HOMEPAGE = "https://python-future.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3f457538b297bd0ef86564b8ac216ad7"
+
+SRC_URI[md5sum] = "3e8e88a2bda48d54b1da7634d04760d7"
+SRC_URI[sha256sum] = "e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb"
+
+PYPI_PACKAGE_HASH = "99abde815842bc6e97d5a7806ad51236630da14ca2f3b1fce94c0bb94d3d"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb
new file mode 100644
index 000000000..897581f19
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-gdata_2.0.18.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Google Data APIs Python Client Library"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.txt;md5=4c8f0e6846e52a7fe4943acf462d808d"
+HOMEPAGE = "http://code.google.com/p/gdata-python-client/"
+
+SRC_URI[md5sum] = "13b6e6dd8f9e3e9a8e005e05a8329408"
+SRC_URI[sha256sum] = "56e7d22de819c22b13ceb0fe1869729b4287f89ebbd4bb55380d7bcf61a1fdb6"
+
+S = "${WORKDIR}/gdata.py-${PV}"
+
+inherit pypi distutils
+
+FILES_${PN} += "${datadir}"
+
+RDEPENDS_${PN} = " \
+ ${PYTHON_PN}-distutils \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
new file mode 100644
index 000000000..13513f219
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-gevent.inc
@@ -0,0 +1,33 @@
+SUMMARY = "A coroutine-based Python networking library"
+DESCRIPTION = "gevent is a coroutine-based Python networking library that uses greenlet to provide \
+a high-level synchronous API on top of the libevent event loop."
+HOMEPAGE = "http://www.gevent.org"
+LICENSE = "MIT & Python-2.0 & BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4de99aac27b470c29c6c309e0c279b65 \
+ file://NOTICE;md5=5966cd2c6582656d28ab3c33da3860f8 \
+ file://deps/libev/LICENSE;md5=d6ad416afd040c90698edcdf1cbee347"
+DEPENDS += "libevent"
+DEPENDS += "${PYTHON_PN}-greenlet"
+RDEPENDS_${PN} = "${PYTHON_PN}-greenlet \
+ ${PYTHON_PN}-mime \
+ ${PYTHON_PN}-pprint \
+ "
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-gevent:"
+
+SRC_URI_append = " \
+ file://libev-conf.patch;patch=1;pnum=1 \
+"
+
+SRC_URI[md5sum] = "7f0baf355384fe5ff2ecf66853422554"
+SRC_URI[sha256sum] = "4791c8ae9c57d6f153354736e1ccab1e2baf6c8d9ae5a77a9ac90f41e2966b2d"
+
+# The python-gevent has no autoreconf ability
+# and the logic for detecting a cross compile is flawed
+# so always force a cross compile
+do_configure_append() {
+ sed -i -e 's/^cross_compiling=no/cross_compiling=yes/' ${S}/deps/libev/configure
+ sed -i -e 's/^cross_compiling=no/cross_compiling=yes/' ${S}/deps/c-ares/configure
+}
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch
new file mode 100644
index 000000000..79c1867ba
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-gevent/libev-conf.patch
@@ -0,0 +1,26 @@
+From 2294734ef9d5e2efb05820e9759a1635799bdea9 Mon Sep 17 00:00:00 2001
+From: Andrej Rode <andrej.rode@ettus.com>
+Date: Mon, 10 Apr 2017 19:25:18 -0700
+Subject: [PATCH] libev: make configure crosscompile compatible
+
+Signed-off-by: Andrej Rode <andrej.rode@ettus.com>
+---
+ deps/libev/configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/deps/libev/configure b/deps/libev/configure
+index 743817e..96c2366 100755
+--- a/deps/libev/configure
++++ b/deps/libev/configure
+@@ -2208,7 +2208,7 @@ fi
+ ac_ext=c
+ ac_cpp='$CPP $CPPFLAGS'
+ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_link='$CC -static -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+--
+2.10.2
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb
new file mode 100644
index 000000000..f13bfd7b7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-gevent_1.2.2.bb
@@ -0,0 +1,4 @@
+require python-gevent.inc
+inherit setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc
new file mode 100644
index 000000000..7a42240fe
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Python lightweight in-process concurrent programming"
+LICENSE = "MIT & PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=03143d7a1a9f5d8a0fee825f24ca9c36 \
+ file://LICENSE.PSF;md5=c106931d9429eda0492617f037b8f69a"
+
+SRC_URI[md5sum] = "6e0b9dd5385f81d478451ec8ed1d62b3"
+SRC_URI[sha256sum] = "0fef83d43bf87a5196c91e73cb9772f945a4caaff91242766c5916d1dd1381e4"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.13.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.13.bb
new file mode 100644
index 000000000..c14976ed3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-greenlet_0.4.13.bb
@@ -0,0 +1,2 @@
+inherit distutils
+require python-greenlet.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.8.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.8.4.bb
new file mode 100644
index 000000000..45e0cc1b1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio-tools_1.8.4.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Google gRPC tools"
+HOMEPAGE = "http://www.grpc.io/"
+SECTION = "devel/python"
+
+DEPENDS = "python-grpcio"
+RDEPENDS_${PN} = "python-grpcio"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+inherit pypi setuptools
+
+SRC_URI[md5sum] = "e04e65afe60410cf178ff2698f052a7c"
+SRC_URI[sha256sum] = "edc84c09039d3a01012ccd97450abd06ee6b980710f6d9f191b50deb6774a75c"
+
+# For usage in other recipies when compiling protobuf files (e.g. by grpcio-tools)
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch
new file mode 100644
index 000000000..0c1d964a6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio/0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch
@@ -0,0 +1,33 @@
+From b02be74a2eff8abc612ef84f30e0fbce6a7f65f5 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 4 Aug 2017 09:04:07 -0700
+Subject: [PATCH] setup.py: Do not mix C and C++ compiler options
+
+EXTRA_ENV_COMPILE_ARGS is used both with CC and CXX
+so using -std=c++11 or -std=gnu99 together will cause
+build time errors espcially with clang
+
+error: invalid argument '-std=gnu99' not allowed with 'C++'
+
+gcc7 ( defaults are -std=gnu11 and -std=gnu++14 )
+ as well clang default to these standards mode or newer
+anyway
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: grpcio-1.8.4/setup.py
+===================================================================
+--- grpcio-1.8.4.orig/setup.py
++++ grpcio-1.8.4/setup.py
+@@ -115,7 +115,7 @@ if EXTRA_ENV_COMPILE_ARGS is None:
+ else:
+ EXTRA_ENV_COMPILE_ARGS += ' -D_ftime=_ftime64 -D_timeb=__timeb64'
+ elif "linux" in sys.platform:
+- EXTRA_ENV_COMPILE_ARGS += ' -std=c++11 -std=gnu99 -fvisibility=hidden -fno-wrapv -fno-exceptions'
++ EXTRA_ENV_COMPILE_ARGS += ' -fvisibility=hidden -fno-wrapv -fno-exceptions'
+ elif "darwin" in sys.platform:
+ EXTRA_ENV_COMPILE_ARGS += ' -fvisibility=hidden -fno-wrapv -fno-exceptions'
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.8.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.8.4.bb
new file mode 100644
index 000000000..bec9d846b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-grpcio_1.8.4.bb
@@ -0,0 +1,25 @@
+DESCRIPTION = "Google gRPC"
+HOMEPAGE = "http://www.grpc.io/"
+SECTION = "devel/python"
+
+DEPENDS = "python-protobuf"
+
+SRC_URI_append_class-target = " file://0001-setup.py-Do-not-mix-C-and-C-compiler-options.patch "
+
+RDEPENDS_${PN} = "python-enum34 \
+ python-futures \
+ python-protobuf \
+ python-setuptools \
+ python-six \
+"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+inherit pypi setuptools
+
+SRC_URI[md5sum] = "7860f7c61de3890323670b7b1ff63e56"
+SRC_URI[sha256sum] = "88d87aab9c7889b3ab29dd74aac1a5493ed78b9bf5afba1c069c9dd5531f951d"
+
+# For usage in other recipes when compiling protobuf files (e.g. by grpcio-tools)
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc
new file mode 100644
index 000000000..0eb8bf321
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib.inc
@@ -0,0 +1,15 @@
+SUMMARY = "HTML parser based on the WHATWG HTML specifcation"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1ba5ada9e6fead1fdc32f43c9f10ba7c"
+
+SRC_URI[md5sum] = "942a0688d6bdf20d087c9805c40182ad"
+SRC_URI[sha256sum] = "66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-lxml \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-webencodings \
+ ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb
new file mode 100644
index 000000000..f5941a2a1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-html5lib_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-html5lib.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc
new file mode 100644
index 000000000..17a3449e7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-humanize.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Python humanize utilities"
+HOMEPAGE = "http://github.com/jmoiron/humanize"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=d2eff82fc25dd07c919a02465884f02e"
+
+SRC_URI[md5sum] = "e8473d9dc1b220911cac2edd53b1d973"
+SRC_URI[sha256sum] = "a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb
new file mode 100644
index 000000000..57693093d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-humanize_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-humanize.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc
new file mode 100644
index 000000000..2b5b0a0ff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink.inc
@@ -0,0 +1,17 @@
+DESCRIPTION = "A featureful, correct URL for Python"
+HOMEPAGE = "https://github.com/python-hyper/hyperlink"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3893d4ed05dcc823f8ed685a9ea19bcb"
+
+SRC_URI[md5sum] = "eaccb9845b559817e838846669cbc68a"
+SRC_URI[sha256sum] = "bc4ffdbde9bdad204d507bd8f554f16bba82dd356f6130cb16f41422909c33bc"
+
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-stringold ${PYTHON_PN}-netclient"
+
+PACKAGES =. "${PN}-test "
+
+FILES_${PN}-test += " \
+ ${PYTHON_SITEPACKAGES_DIR}/hyperlinkt/test \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_17.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_17.3.1.bb
new file mode 100644
index 000000000..59a9a5c8d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-hyperlink_17.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-hyperlink.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc
new file mode 100644
index 000000000..b1d0d1895
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-idna.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Internationalised Domain Names in Applications"
+HOMEPAGE = "https://github.com/kjd/idna"
+LICENSE = "BSD-3-Clause & Python-2.0 & Unicode"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=c9ba5acd829579492fd5eb306c7a0565"
+
+SRC_URI[md5sum] = "c706e2790b016bd0ed4edd2d4ba4d147"
+SRC_URI[sha256sum] = "2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f"
+
+RDEPENDS_${PN}_class-target = "\
+ ${PYTHON_PN}-codecs \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.6.bb
new file mode 100644
index 000000000..2dcf72a29
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-idna_2.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-idna.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch
new file mode 100644
index 000000000..2575306be
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch
@@ -0,0 +1,55 @@
+From 07d4f095a9e22ae676a8d68073101131e65012dc Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 15 Nov 2011 13:16:54 +0100
+Subject: [PATCH] python imaging setup.py: force paths for zlib, freetype and jpeg and don't add host paths
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+
+Upstream-Status: Inappropriate [embedded specific]
+---
+ setup.py | 14 +++-----------
+ 1 files changed, 3 insertions(+), 11 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 5d4d53a..b1a22ec 100644
+--- a/setup.py
++++ b/setup.py
+@@ -34,10 +34,10 @@ def libinclude(root):
+ # TIFF_ROOT = libinclude("/opt/tiff")
+
+ TCL_ROOT = None
+-JPEG_ROOT = None
+-ZLIB_ROOT = None
++JPEG_ROOT = os.environ['STAGING_LIBDIR']
++ZLIB_ROOT = os.environ['STAGING_LIBDIR']
+ TIFF_ROOT = None
+-FREETYPE_ROOT = None
++FREETYPE_ROOT = os.environ['STAGING_LIBDIR'], os.environ['STAGING_INCDIR']
+ LCMS_ROOT = None
+
+ # FIXME: add mechanism to explicitly *disable* the use of a library
+@@ -147,7 +147,6 @@ class pil_build_ext(build_ext):
+ add_directory(library_dirs, "/opt/local/lib")
+ add_directory(include_dirs, "/opt/local/include")
+
+- add_directory(library_dirs, "/usr/local/lib")
+ # FIXME: check /opt/stuff directories here?
+
+ prefix = sysconfig.get_config_var("prefix")
+@@ -207,13 +206,6 @@ class pil_build_ext(build_ext):
+ if os.path.isfile(os.path.join(tcl_dir, "tk.h")):
+ add_directory(include_dirs, tcl_dir)
+
+- # standard locations
+- add_directory(library_dirs, "/usr/local/lib")
+- add_directory(include_dirs, "/usr/local/include")
+-
+- add_directory(library_dirs, "/usr/lib")
+- add_directory(include_dirs, "/usr/include")
+-
+ #
+ # insert new dirs *before* default libs, to avoid conflicts
+ # between Python PYD stub libs and real libraries
+--
+1.7.2.5
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch
new file mode 100644
index 000000000..4960ed466
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/allow.to.disable.some.features.patch
@@ -0,0 +1,65 @@
+At least lcms wasn't deterministicly detected from sysroot.
+
+This will allow to export LCMS_ENABLED=False when lcms isn't in PACKAGECONFIG.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+diff -uNr Imaging-1.1.7.orig/setup.py Imaging-1.1.7/setup.py
+--- Imaging-1.1.7.orig/setup.py 2013-07-22 10:17:02.081457075 +0200
++++ Imaging-1.1.7/setup.py 2013-07-22 13:10:09.029707492 +0200
+@@ -39,6 +39,12 @@
+ TIFF_ROOT = None
+ FREETYPE_ROOT = os.environ['STAGING_LIBDIR'], os.environ['STAGING_INCDIR']
+ LCMS_ROOT = None
++TCL_ENABLED = os.getenv('TCL_ENABLED', "True")
++JPEG_ENABLED = os.getenv('JPEG_ENABLED', "True")
++ZLIB_ENABLED = os.getenv('ZLIB_ENABLED', "True")
++TIFF_ENABLED = os.getenv('TIFF_ENABLED', "True")
++FREETYPE_ENABLED = os.getenv('FREETYPE_ENABLED', "True")
++LCMS_ENABLED = os.getenv('LCMS_ENABLED', "True")
+
+ # FIXME: add mechanism to explicitly *disable* the use of a library
+
+@@ -220,22 +226,22 @@
+ zlib = jpeg = tiff = freetype = tcl = tk = lcms = None
+ feature = feature()
+
+- if find_include_file(self, "zlib.h"):
++ if ZLIB_ENABLED == 'True' and find_include_file(self, "zlib.h"):
+ if find_library_file(self, "z"):
+ feature.zlib = "z"
+ elif sys.platform == "win32" and find_library_file(self, "zlib"):
+ feature.zlib = "zlib" # alternative name
+
+- if find_include_file(self, "jpeglib.h"):
++ if JPEG_ENABLED == 'True' and find_include_file(self, "jpeglib.h"):
+ if find_library_file(self, "jpeg"):
+ feature.jpeg = "jpeg"
+ elif sys.platform == "win32" and find_library_file(self, "libjpeg"):
+ feature.jpeg = "libjpeg" # alternative name
+
+- if find_library_file(self, "tiff"):
++ if TIFF_ENABLED == 'True' and find_library_file(self, "tiff"):
+ feature.tiff = "tiff"
+
+- if find_library_file(self, "freetype"):
++ if FREETYPE_ENABLED == 'True' and find_library_file(self, "freetype"):
+ # look for freetype2 include files
+ freetype_version = 0
+ for dir in self.compiler.include_dirs:
+@@ -256,11 +262,11 @@
+ if dir:
+ add_directory(self.compiler.include_dirs, dir, 0)
+
+- if find_include_file(self, "lcms.h"):
++ if LCMS_ENABLED == 'True' and find_include_file(self, "lcms.h"):
+ if find_library_file(self, "lcms"):
+ feature.lcms = "lcms"
+
+- if _tkinter and find_include_file(self, "tk.h"):
++ if TCL_ENABLED == 'True' and _tkinter and find_include_file(self, "tk.h"):
+ # the library names may vary somewhat (e.g. tcl84 or tcl8.4)
+ version = TCL_VERSION[0] + TCL_VERSION[2]
+ if find_library_file(self, "tcl" + version):
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch
new file mode 100644
index 000000000..9ecc63a0d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/fix-freetype-includes.patch
@@ -0,0 +1,30 @@
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From c6040f618d8f2706a7b46d1cdf37d1a587f9701f Mon Sep 17 00:00:00 2001
+From: Andrew Stromnov <stromnov@gmail.com>
+Date: Thu, 28 Nov 2013 16:58:43 +0400
+Subject: [PATCH] fix compiling with FreeType 2.5.1
+
+---
+ _imagingft.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/_imagingft.c b/_imagingft.c
+index 47d50bd..f19555b 100644
+--- a/_imagingft.c
++++ b/_imagingft.c
+@@ -59,7 +59,11 @@ struct {
+ const char* message;
+ } ft_errors[] =
+
++#if defined(USE_FREETYPE_2_1)
++#include FT_ERRORS_H
++#else
+ #include <freetype/fterrors.h>
++#endif
+
+ /* -------------------------------------------------------------------- */
+ /* font objects */
+--
+1.8.5.1
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch
new file mode 100644
index 000000000..b01136f9a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/python-imaging-CVE-2016-2533.patch
@@ -0,0 +1,38 @@
+python-imaging: CVE-2016-2533
+
+the patch comes from:
+https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-2533
+https://github.com/python-pillow/Pillow/commit/ae453aa18b66af54e7ff716f4ccb33adca60afd4#diff-8ff6909c159597e22288ad818938fd6b
+
+PCD decoder overruns the shuffle buffer, Fixes #568
+
+Signed-off-by: Li Wang <li.wang@windriver.com>
+---
+ libImaging/PcdDecode.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libImaging/PcdDecode.c b/libImaging/PcdDecode.c
+index b6898e3..c02d005 100644
+--- a/libImaging/PcdDecode.c
++++ b/libImaging/PcdDecode.c
+@@ -47,7 +47,7 @@ ImagingPcdDecode(Imaging im, ImagingCodecState state, UINT8* buf, int bytes)
+ out[0] = ptr[x];
+ out[1] = ptr[(x+4*state->xsize)/2];
+ out[2] = ptr[(x+5*state->xsize)/2];
+- out += 4;
++ out += 3;
+ }
+
+ state->shuffle((UINT8*) im->image[state->y],
+@@ -62,7 +62,7 @@ ImagingPcdDecode(Imaging im, ImagingCodecState state, UINT8* buf, int bytes)
+ out[0] = ptr[x+state->xsize];
+ out[1] = ptr[(x+4*state->xsize)/2];
+ out[2] = ptr[(x+5*state->xsize)/2];
+- out += 4;
++ out += 3;
+ }
+
+ state->shuffle((UINT8*) im->image[state->y],
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch
new file mode 100644
index 000000000..028a51ad5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging/remove-host-libdir.patch
@@ -0,0 +1,25 @@
+Avoid getting host sysroot paths in the library paths to fix issue like:
+
+| /home/andrei/work/yocto/build-rpi-master/tmp/sysroots/x86_64-linux/usr/lib/libz.so: file not recognized: File format not recognized
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+
+Index: Imaging-1.1.7/setup.py
+===================================================================
+--- Imaging-1.1.7.orig/setup.py
++++ Imaging-1.1.7/setup.py
+@@ -155,11 +155,6 @@ class pil_build_ext(build_ext):
+
+ # FIXME: check /opt/stuff directories here?
+
+- prefix = sysconfig.get_config_var("prefix")
+- if prefix:
+- add_directory(library_dirs, os.path.join(prefix, "lib"))
+- add_directory(include_dirs, os.path.join(prefix, "include"))
+-
+ #
+ # locate tkinter libraries
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb
new file mode 100644
index 000000000..60dd7d0a3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb
@@ -0,0 +1,48 @@
+SUMMARY = "Python Imaging Library (PIL)"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README;beginline=92;endline=120;md5=c4371af4579f1e489cf881c1443dd4ec"
+DEPENDS = "freetype jpeg tiff"
+SRCNAME = "Imaging"
+PR = "r5"
+
+SRC_URI = "http://effbot.org/downloads/Imaging-${PV}.tar.gz \
+ file://0001-python-imaging-setup.py-force-paths-for-zlib-freetyp.patch \
+ file://allow.to.disable.some.features.patch \
+ file://fix-freetype-includes.patch \
+ file://remove-host-libdir.patch \
+ file://python-imaging-CVE-2016-2533.patch \
+"
+
+SRC_URI[md5sum] = "fc14a54e1ce02a0225be8854bfba478e"
+SRC_URI[sha256sum] = "895bc7c2498c8e1f9b99938f1a40dc86b3f149741f105cf7c7bd2e0725405211"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+# There isn't enable/disable option, and lcms is in meta-oe, at least make it explicit when enabled
+# setup.py already has FIXME: add mechanism to explicitly *disable* the use of a library
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[lcms] = ",,lcms"
+
+inherit distutils
+
+do_compile() {
+ export STAGING_LIBDIR=${STAGING_LIBDIR}
+ export STAGING_INCDIR=${STAGING_INCDIR}
+ export LCMS_ENABLED=${@bb.utils.contains('PACKAGECONFIG', 'lcms', 'True', 'False', d)}
+ distutils_do_compile
+}
+
+do_install() {
+ export STAGING_LIBDIR=${STAGING_LIBDIR}
+ export STAGING_INCDIR=${STAGING_INCDIR}
+ export LCMS_ENABLED=${@bb.utils.contains('PACKAGECONFIG', 'lcms', 'True', 'False', d)}
+ distutils_do_install
+ install -d ${D}${datadir}/doc/${BPN}/html/
+ install -m 0644 ${S}/README ${D}${datadir}/doc/${BPN}/
+ install -m 0644 ${S}/Docs/* ${D}${datadir}/doc/${BPN}/html/
+
+ # get rid of #!/usr/local/bin/python
+ sed -i -e 's:/usr/local/bin/:${bindir}/env :g' ${D}${bindir}/*
+}
+
+RDEPENDS_${PN} += "python-lang python-stringold"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc
new file mode 100644
index 000000000..b63fac979
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-incremental.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "Incremental is a small library that versions your Python projects"
+HOMEPAGE = "https://github.com/twisted/incremental"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6ca9b07f08e2c72d48c74d363d1e0e15"
+
+SRC_URI[md5sum] = "602746e0d438e075a5a9e0678140bba2"
+SRC_URI[sha256sum] = "7b751696aaf36eebfab537e458929e194460051ccad279c72b755a167eebd4b3"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-twisted \
+ ${PYTHON_PN}-click \
+"
+
+# -native is needed to build python[3]-twisted, however, we need to take steps to
+# prevent a circular dependency. The build apparently does not use the part of
+# python-incremental which uses python-twisted, so this hack is OK.
+RDEPENDS_${PYTHON_PN}-incremental-native_remove = "${PYTHON_PN}-twisted-native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb
new file mode 100644
index 000000000..139ac0c52
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-incremental_17.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-incremental.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.19.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.19.bb
new file mode 100644
index 000000000..9c50b4670
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ipaddress_1.0.19.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Python 3.3+'s ipaddress for Python 2.6, 2.7, 3.2."
+HOMEPAGE = "https://github.com/phihag/ipaddress"
+LICENSE = "Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7f538584cc3407bf76042def7168548a"
+
+DEPENDS += "python-pip"
+
+SRC_URI[md5sum] = "d0687efaf93a32476d81e90ba0609c57"
+SRC_URI[sha256sum] = "200d8686011d470b5e4de207d803445deee427455cd0cb7c982b68cf82524f81"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc
new file mode 100644
index 000000000..61e9abbac
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Simple module to parse ISO 8601 dates"
+HOMEPAGE = "http://pyiso8601.readthedocs.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b05625f2336fa024e8d57e65c6595844"
+
+SRC_URI[md5sum] = "4de940f691c5ea759fb254384c8ddcf6"
+SRC_URI[sha256sum] = "49c4b20e1f38aa5cf109ddcd39647ac419f928512c869dc01d5c7098eddede82"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb
new file mode 100644
index 000000000..c543cf9f9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-iso8601_0.1.12.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-iso8601.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc
new file mode 100644
index 000000000..6d13e5f7c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-isort.inc
@@ -0,0 +1,15 @@
+SUMMARY = "A Python utility / library to sort Python imports."
+HOMEPAGE = "https://pypi.python.org/pypi/isort"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "fb554e9c8f9aa76e333a03d470a5cf52"
+SRC_URI[sha256sum] = "b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-shell \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb
new file mode 100644
index 000000000..fa46d89b5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-isort_4.3.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-isort.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc
new file mode 100644
index 000000000..84f9e7742
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Various helpers to pass trusted data to untrusted environments and back."
+HOMEPAGE = "http://github.com/mitsuhiko/itsdangerous"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b61841e2bf5f07884148e2a6f1bcab0c"
+
+SRC_URI[md5sum] = "a3d55aa79369aef5345c036a8a26307f"
+SRC_URI[sha256sum] = "cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519"
+
+CLEANBROKEN = "1"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-simplejson \
+ ${PYTHON_PN}-netclient \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb
new file mode 100644
index 000000000..8c99cb4ca
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-itsdangerous_0.24.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-itsdangerous.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc
new file mode 100644
index 000000000..a0e802ca7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3.inc
@@ -0,0 +1,15 @@
+SUMMARY = "Module for serializing and de-serializing Java objects."
+DESCRIPTION = "python-javaobj is a python library that provides functions\
+ for reading and writing (writing is WIP currently) Java objects serialized\
+ or will be deserialized by ObjectOutputStream. This form of object\
+ representation is a standard data interchange format in Java world."
+HOMEPAGE = "https://github.com/tcalmant/python-javaobj"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://javaobj.py;beginline=21;endline=33;md5=8b504419ce78f8133b21b4d4a89ef7e9"
+
+SRC_URI[md5sum] = "f669bb8099380e3dd84db3d542aa5b68"
+SRC_URI[sha256sum] = "b8b0d310fd97e1c7914d7911ee9d3f4b3d84d2a674aa95a4b0da3d8f155fc1bb"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb
new file mode 100644
index 000000000..ed34740e8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-javaobj-py3_0.2.4.bb
@@ -0,0 +1,2 @@
+require python-javaobj-py3.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc
new file mode 100644
index 000000000..0c0bf0def
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Python Jinja2: A small but fast and easy to use stand-alone template engine written in pure python."
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=20c831f91dd3bd486020f672ba2be386"
+
+PYPI_PACKAGE = "Jinja2"
+
+SRC_URI[md5sum] = "61ef1117f945486472850819b8d1eb3d"
+SRC_URI[sha256sum] = "f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-io ${PYTHON_PN}-pickle ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-math ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-pprint ${PYTHON_PN}-shell ${PYTHON_PN}-markupsafe \
+ ${PYTHON_PN}-json ${PYTHON_PN}-threading ${PYTHON_PN}-numbers"
+
+CLEANBROKEN = "1"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb
new file mode 100644
index 000000000..5233cf40c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jinja2_2.10.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools
+require python-jinja2.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-lang \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc
new file mode 100644
index 000000000..409c09ad7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Appling JSON patches in Python 2.6+ and 3.x"
+HOMEPAGE = "https://github.com/stefankoegl/python-json-patch"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi
+
+SRC_URI[md5sum] = "83c4c9faccb4a2ff8c1db80cbddc590d"
+SRC_URI[sha256sum] = "49f29cab70e9068db3b1dc6b656cbe2ee4edf7dfe9bf5a0055f17a4b6804a4b9"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-json ${PYTHON_PN}-jsonpointer ${PYTHON_PN}-netclient ${PYTHON_PN}-stringold"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb
new file mode 100644
index 000000000..90cd31802
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpatch_1.23.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-jsonpatch.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc
new file mode 100644
index 000000000..4ed01ed6c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Resolve JSON Pointers in Python"
+HOMEPAGE = "https://github.com/stefankoegl/python-json-pointer"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=32b15c843b7a329130f4e266a281ebb3"
+
+inherit pypi
+
+SRC_URI[md5sum] = "741b98d0e693b08b5e44e0a9da5a7bb7"
+SRC_URI[sha256sum] = "c192ba86648e05fdae4f08a17ec25180a9aef5008d973407b581798a83975362"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-json \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb
new file mode 100644
index 000000000..e13a776ad
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonpointer_2.0.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-jsonpointer.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc
new file mode 100644
index 000000000..6fdc02498
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema.inc
@@ -0,0 +1,24 @@
+SUMMARY = "An implementation of JSON Schema validation for Python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8"
+
+SRC_URI[md5sum] = "50c6b69a373a8b55ff1e0ec6e78f13f4"
+SRC_URI[sha256sum] = "6ff5f3180870836cae40f06fa10419f557208175f13ad7bc26caa77beb1f6e02"
+
+DEPENDS += "${PYTHON_PN}-vcversioner-native"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-rfc3987 \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-strict-rfc3339 \
+ ${PYTHON_PN}-unittest \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb
new file mode 100644
index 000000000..b677c646e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-jsonschema_2.6.0.bb
@@ -0,0 +1,12 @@
+inherit pypi setuptools
+require python-jsonschema.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-functools32 \
+ ${PYTHON_PN}-lang \
+ ${PYTHON_PN}-re \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc
new file mode 100644
index 000000000..83d2ea3cd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy.inc
@@ -0,0 +1,10 @@
+SUMMARY = "A fast and thorough lazy object proxy"
+HOMEPAGE = "https://python-lazy-object-proxy.readthedocs.io/"
+LICENSE = "BSD"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ec680df42d8ad56427a83308817658cc"
+
+SRC_URI[md5sum] = "e128152b76eb5b9ba759504936139fd0"
+SRC_URI[sha256sum] = "eb91be369f945f10d3a49f5f9be8b3d0b93a4c2be8f8a5b83b0571b8123e0a7a"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb
new file mode 100644
index 000000000..df4d60bff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-lazy-object-proxy_1.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-lazy-object-proxy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb
new file mode 100644
index 000000000..9ad865d40
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-lockfile_0.12.2.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "Platform-independent file locking module"
+HOMEPAGE = "http://launchpad.net/pylockfile"
+SECTION = "devel/python"
+
+RDEPENDS_${PN} = "python-threading"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit pypi setuptools
+
+SRC_URI[md5sum] = "a6a1a82957a23afdf44cfdd039b65ff9"
+SRC_URI[sha256sum] = "6aed02de03cba24efabcd600b30540140634fc06cfa603822d508d5361e9f799"
+
+# Satisfy setup.py 'setup_requires'
+DEPENDS += " \
+ python-pbr-native \
+ "
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc
new file mode 100644
index 000000000..3f3a1e27c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-lxml.inc
@@ -0,0 +1,43 @@
+SUMMARY = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API."
+DESCRIPTION = "lxml is a Pythonic, mature binding for the libxml2 and \
+libxslt libraries. It provides safe and convenient access to these \
+libraries using the ElementTree API. It extends the ElementTree API \
+significantly to offer support for XPath, RelaxNG, XML Schema, XSLT, \
+C14N and much more."
+HOMEPAGE = "http://codespeak.net/lxml"
+SECTION = "devel/python"
+LICENSE = "BSD & GPLv2 & MIT & PSF"
+LIC_FILES_CHKSUM = "file://LICENSES.txt;md5=e4c045ebad958ead4b48008f70838403 \
+ file://doc/licenses/elementtree.txt;md5=eb34d036a6e3d56314ee49a6852ac891 \
+ file://doc/licenses/BSD.txt;md5=700a1fc17f4797d4f2d34970c8ee694b \
+ file://doc/licenses/GPL.txt;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://src/lxml/isoschematron/resources/rng/iso-schematron.rng;beginline=2;endline=7;md5=939e7430ce85e1242ff50c4ee9430752 \
+ file://src/lxml/isoschematron/resources/xsl/iso-schematron-xslt1/iso_schematron_message.xsl;beginline=2;endline=24;md5=cc86b7b2bbc678e13f58ea403eb9929b \
+ file://src/lxml/isoschematron/resources/xsl/RNG2Schtrn.xsl;beginline=2;endline=7;md5=5b03236d293dc3784205542b409d2f53 \
+ "
+
+DEPENDS += "libxml2 libxslt"
+
+SRC_URI[md5sum] = "c266d9062e23b08f66426979a2b36f51"
+SRC_URI[sha256sum] = "e2629cdbcad82b83922a3488937632a4983ecc0fed3e5cfbf430d069382eeb9b"
+
+DISTUTILS_BUILD_ARGS += " \
+ --with-xslt-config='pkg-config libxslt' \
+ --with-xml2-config='pkg-config libxml-2.0' \
+"
+
+DISTUTILS_INSTALL_ARGS += " \
+ --with-xslt-config='pkg-config libxslt' \
+ --with-xml2-config='pkg-config libxml-2.0' \
+"
+
+inherit pypi
+
+do_configure_prepend() {
+ sed -i -e 's/--version/--modversion/' ${B}/setupinfo.py
+}
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} += "libxml2 libxslt ${PYTHON_PN}-compression"
+RDEPENDS_${PN}_class-native = "libxml2-native libxslt-native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.1.bb
new file mode 100644
index 000000000..81ccb12d8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-lxml_4.2.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-lxml.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch
new file mode 100644
index 000000000..c71b16fec
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/0001-setup.py-link-in-sysroot-not-in-host-directories.patch
@@ -0,0 +1,39 @@
+From dfb83a41aaeae326e9b6f02b233af375bc7b8815 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 29 Mar 2013 15:17:17 +0100
+Subject: [PATCH] setup.py: link in sysroot, not in host directories
+
+Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
+
+Upstream-status: Unknown
+---
+ setup.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 3407c82..15ed7cd 100644
+--- a/setup.py
++++ b/setup.py
+@@ -127,7 +127,7 @@ class _M2CryptoBuildExt(build_ext.build_ext):
+ self.openssl = os.path.join(self.openssl, 'OpenSSL')
+ else:
+ self.libraries = ['ssl', 'crypto']
+- self.openssl = '/usr'
++ self.openssl = os.environ.get( "STAGING_DIR" )
+
+ def finalize_options(self):
+ '''Overloaded build_ext implementation to append custom openssl
+@@ -143,8 +143,8 @@ class _M2CryptoBuildExt(build_ext.build_ext):
+ if _openssl and os.path.isdir(_openssl):
+ self.openssl = _openssl
+
+- self.include_dirs.append(os.path.join(self.openssl, 'include'))
+- openssl_library_dir = os.path.join(self.openssl, 'lib')
++ self.include_dirs.append(os.environ.get( "STAGING_INCDIR" ))
++ openssl_library_dir = os.environ.get( "STAGING_LIBDIR" )
+
+ if platform.system() == "Linux":
+ if _multiarch: # on Fedora/RHEL it is an empty string
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch
new file mode 100644
index 000000000..c6654e540
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/cross-compile-platform.patch
@@ -0,0 +1,30 @@
+Do not compute platform, this does not work in cross compile environment
+since it pokes at the system for getting architecture values
+
+Upstream-Status: Inappropriate
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: M2Crypto-0.26.0/setup.py
+===================================================================
+--- M2Crypto-0.26.0.orig/setup.py
++++ M2Crypto-0.26.0/setup.py
+@@ -141,19 +141,6 @@ class _M2CryptoBuildExt(build_ext.build_
+ self.include_dirs.append(
+ os.path.join(self.openssl, 'include', 'openssl'))
+
+- # For RedHat-based distros, the '-D__{arch}__' option for
+- # Swig needs to be normalized, particularly on i386.
+- mach = platform.machine().lower()
+- if mach in ('i386', 'i486', 'i586', 'i686'):
+- arch = '__i386__'
+- elif mach in ('ppc64', 'powerpc64'):
+- arch = '__powerpc64__'
+- elif mach in ('ppc', 'powerpc'):
+- arch = '__powerpc__'
+- else:
+- arch = '__%s__' % mach
+- self.swig_opts.append('-D%s' % arch)
+-
+ self.swig_opts.extend(['-I%s' % i for i in self.include_dirs])
+ self.swig_opts.append('-includeall')
+ self.swig_opts.append('-modern')
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch
new file mode 100644
index 000000000..2d738cc94
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto/m2crypto-0.26.4-gcc_macros.patch
@@ -0,0 +1,24 @@
+Imported from Fedora
+
+--- M2Crypto/SWIG/_m2crypto.i 2017-09-26 11:26:33.000000000 +0200
++++ M2Crypto-0.26.4/SWIG/_m2crypto.i 2017-09-26 21:04:14.080330741 +0200
+@@ -7,6 +7,7 @@
+ * Copyright (c) 2009-2010 Heikki Toivonen. All rights reserved.
+ *
+ */
++%import "gcc_macros.h"
+
+ %module(threads=1) m2crypto
+ /* We really don't need threadblock (PyGILState_Ensure() etc.) anywhere.
+@@ -15,11 +16,6 @@
+ %nothreadblock;
+ %nothreadallow;
+
+-#if SWIG_VERSION >= 0x030000
+-#define __WCHAR_MAX__ __WCHAR_MAX
+-#define __WCHAR_MIN__ __WCHAR_MIN
+-#endif
+-
+ %{
+ #if __GNUC__ < 5
+ #pragma GCC diagnostic ignored "-Wunused-label"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.26.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.26.4.bb
new file mode 100644
index 000000000..272c76ca1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-m2crypto_0.26.4.bb
@@ -0,0 +1,50 @@
+SUMMARY = "A Python crypto and SSL toolkit"
+HOMEPAGE = "https://gitlab.com/m2crypto/m2crypto"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=b0e1f0b7d0ce8a62c18b1287b991800e"
+
+SRC_URI += "file://0001-setup.py-link-in-sysroot-not-in-host-directories.patch \
+ file://cross-compile-platform.patch \
+ file://m2crypto-0.26.4-gcc_macros.patch \
+ "
+SRC_URI[md5sum] = "5c74c25ba8b45122318a165a3a2059ad"
+SRC_URI[sha256sum] = "5cae7acc0b34821f8c0ddf6665e482893fe1f198ad6379e61ffa9d8e65f5c199"
+
+PYPI_PACKAGE = "M2Crypto"
+inherit pypi setuptools siteinfo
+
+DEPENDS += "openssl swig-native"
+RDEPENDS_${PN} += "python-typing"
+
+DISTUTILS_BUILD_ARGS += "build_ext --openssl=${STAGING_DIR_HOST} -I${STAGING_INCDIR}"
+DISTUTILS_INSTALL_ARGS += "build_ext --openssl=${STAGING_DIR_HOST}"
+
+SWIG_FEATURES_x86 = "-D__i386__"
+SWIG_FEATURES ?= "-D__${HOST_ARCH}__"
+export SWIG_FEATURES
+
+# Get around a problem with swig, but only if the
+# multilib header file exists.
+#
+do_compile_prepend() {
+ ${CPP} -dM - < /dev/null | grep -v __STDC__ | grep -v __REGISTER_PREFIX__ | grep -v __GNUC__ \
+ | sed 's/^\(#define \([^ ]*\) .*\)$/#undef \2\n\1/' > SWIG/gcc_macros.h
+ if [ "${SITEINFO_BITS}" = "64" ];then
+ bit="64"
+ else
+ bit="32"
+ fi
+
+ if [ -e ${STAGING_INCDIR}/openssl/opensslconf-${bit}.h ] ;then
+ for i in SWIG/_ec.i SWIG/_evp.i; do
+ sed -i -e "s/opensslconf.*\./opensslconf-${bit}\./" "$i"
+ done
+ elif [ -e ${STAGING_INCDIR}/openssl/opensslconf-n${bit}.h ] ;then
+ for i in SWIG/_ec.i SWIG/_evp.i; do
+ sed -i -e "s/opensslconf.*\./opensslconf-n${bit}\./" "$i"
+ done
+ fi
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc
new file mode 100644
index 000000000..a9fa55639
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-mako.inc
@@ -0,0 +1,21 @@
+SUMMARY = "A super-fast templating language that borrows the best ideas from the existing templating languages"
+HOMEPAGE = "http://www.makotemplates.org/"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1bb21fa2d2f7a534c884b990430a6863"
+
+PYPI_PACKAGE = "Mako"
+
+inherit pypi
+
+SRC_URI[md5sum] = "5836cc997b1b773ef389bf6629c30e65"
+SRC_URI[sha256sum] = "4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae"
+
+RDEPENDS_${PN} = " \
+ ${PYTHON_PN}-html \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb
new file mode 100644
index 000000000..3372eeb28
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-mako_1.0.7.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-mako.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc
new file mode 100644
index 000000000..927f84452
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "Implements a XML/HTML/XHTML Markup safe string for Python"
+HOMEPAGE = "http://github.com/mitsuhiko/markupsafe"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c6d1adcf45d69359f256c1cea3254127"
+
+SRC_URI[md5sum] = "2fcedc9284d50e577b5192e8e3578355"
+SRC_URI[sha256sum] = "a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"
+
+PYPI_PACKAGE = "MarkupSafe"
+inherit pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-stringold"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb
new file mode 100644
index 000000000..05bbe8a35
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-markupsafe_1.0.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-markupsafe.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch
new file mode 100644
index 000000000..21b9094a1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib/fix_setupext.patch
@@ -0,0 +1,110 @@
+This fixes the numpy import problem in setupext.py using a hard-coded path.
+
+Index: matplotlib-2.0.2/setupext.py
+===================================================================
+--- matplotlib-2.0.2.orig/setupext.py
++++ matplotlib-2.0.2/setupext.py
+@@ -148,6 +148,7 @@ def has_include_file(include_dirs, filen
+ Returns `True` if `filename` can be found in one of the
+ directories in `include_dirs`.
+ """
++ return True
+ if sys.platform == 'win32':
+ include_dirs += os.environ.get('INCLUDE', '.').split(';')
+ for dir in include_dirs:
+@@ -172,7 +173,7 @@ def get_base_dirs():
+ Returns a list of standard base directories on this platform.
+ """
+ if options['basedirlist']:
+- return options['basedirlist']
++ return [os.environ['STAGING_LIBDIR']]
+
+ basedir_map = {
+ 'win32': ['win32_static', ],
+@@ -260,14 +261,6 @@ def make_extension(name, files, *args, *
+ `distutils.core.Extension` constructor.
+ """
+ ext = DelayedExtension(name, files, *args, **kwargs)
+- for dir in get_base_dirs():
+- include_dir = os.path.join(dir, 'include')
+- if os.path.exists(include_dir):
+- ext.include_dirs.append(include_dir)
+- for lib in ('lib', 'lib64'):
+- lib_dir = os.path.join(dir, lib)
+- if os.path.exists(lib_dir):
+- ext.library_dirs.append(lib_dir)
+ ext.include_dirs.append('.')
+
+ return ext
+@@ -314,6 +307,7 @@ class PkgConfig(object):
+ " matplotlib may not be able to find some of its dependencies")
+
+ def set_pkgconfig_path(self):
++ return
+ pkgconfig_path = sysconfig.get_config_var('LIBDIR')
+ if pkgconfig_path is None:
+ return
+@@ -875,14 +869,14 @@ class Numpy(SetupPackage):
+ reload(numpy)
+
+ ext = Extension('test', [])
+- ext.include_dirs.append(numpy.get_include())
++ ext.include_dirs.append(os.path.join(os.environ['STAGING_LIBDIR'], 'python2.7/site-packages/numpy/core/include/'))
+ if not has_include_file(
+ ext.include_dirs, os.path.join("numpy", "arrayobject.h")):
+ warnings.warn(
+ "The C headers for numpy could not be found. "
+ "You may need to install the development package")
+
+- return [numpy.get_include()]
++ return [os.path.join(os.environ['STAGING_LIBDIR'], 'python2.7/site-packages/numpy/core/include/')]
+
+ def check(self):
+ min_version = extract_versions()['__version__numpy__']
+Index: matplotlib-2.0.2/setup.py
+===================================================================
+--- matplotlib-2.0.2.orig/setup.py
++++ matplotlib-2.0.2/setup.py
+@@ -66,28 +66,6 @@ mpl_packages = [
+ setupext.Python(),
+ setupext.Platform(),
+ 'Required dependencies and extensions',
+- setupext.Numpy(),
+- setupext.Six(),
+- setupext.Dateutil(),
+- setupext.FuncTools32(),
+- setupext.Subprocess32(),
+- setupext.Pytz(),
+- setupext.Cycler(),
+- setupext.Tornado(),
+- setupext.Pyparsing(),
+- setupext.LibAgg(),
+- setupext.FreeType(),
+- setupext.FT2Font(),
+- setupext.Png(),
+- setupext.Qhull(),
+- setupext.Image(),
+- setupext.TTConv(),
+- setupext.Path(),
+- setupext.ContourLegacy(),
+- setupext.Contour(),
+- setupext.Delaunay(),
+- setupext.QhullWrap(),
+- setupext.Tri(),
+ 'Optional subpackages',
+ setupext.SampleData(),
+ setupext.Toolkits(),
+@@ -100,13 +78,8 @@ mpl_packages = [
+ setupext.BackendMacOSX(),
+ setupext.BackendQt5(),
+ setupext.BackendQt4(),
+- setupext.BackendGtk3Agg(),
+ setupext.BackendGtk3Cairo(),
+- setupext.BackendGtkAgg(),
+- setupext.BackendTkAgg(),
+- setupext.BackendWxAgg(),
+ setupext.BackendGtk(),
+- setupext.BackendAgg(),
+ setupext.BackendCairo(),
+ setupext.Windowing(),
+ 'Optional LaTeX dependencies',
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb
new file mode 100644
index 000000000..5b1c3f05b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-matplotlib_2.0.2.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats"
+SECTION = "devel/python"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE/LICENSE;md5=afec61498aa5f0c45936687da9a53d74"
+
+DEPENDS += "python-numpy freetype libpng python-dateutil python-pytz"
+RDEPENDS_${PN} = "python-core python-distutils python-numpy freetype libpng python-dateutil python-pytz"
+
+SRC_URI = "https://github.com/matplotlib/matplotlib/archive/v${PV}.tar.gz \
+ file://fix_setupext.patch \
+"
+SRC_URI[md5sum] = "89717c1ef3c6fdcd6fb1f3b597a4858c"
+SRC_URI[sha256sum] = "aebed23921562792b68b8ca355de5abc176af4424f1987e2fa95f65e5c5e7e89"
+S = "${WORKDIR}/matplotlib-${PV}"
+EXTRA_OECONF = "--disable-docs"
+
+inherit setuptools pkgconfig
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch
new file mode 100644
index 000000000..941bed3d7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe/0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch
@@ -0,0 +1,33 @@
+From 3484bdfa7adbaebcf8bb8e7d4820f64b12717932 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Fri, 29 Jul 2016 15:37:18 +0800
+Subject: [PATCH] python-mccabe: remove unnecessary setup_requires
+ pytest-runner
+
+* Remove setup_requires pytest-runner as the
+ setup_requires pytest-runner actually is not
+ used for pytest which only in do_compile phase
+ via setup.py build
+
+Upstream-Status: Pending
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index e59903d..bf2aaba 100644
+--- a/setup.py
++++ b/setup.py
+@@ -33,7 +33,6 @@ setup(
+ license='Expat license',
+ py_modules=['mccabe'],
+ zip_safe=False,
+- setup_requires=['pytest-runner'],
+ tests_require=['pytest'],
+ entry_points={
+ 'flake8.extension': [
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb
new file mode 100644
index 000000000..a86d15800
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-mccabe_0.4.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "McCabe checker, plugin for flake8"
+HOMEPAGE = "https://github.com/dreamhost/cliff"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=f8b50fba1711ecac6bcdb6324f85a66d"
+
+SRC_URI += " \
+ file://0001-python-mccabe-remove-unnecessary-setup_requires-pyte.patch \
+"
+
+SRC_URI[md5sum] = "8c425db05f310adcd4bb174b991f26f5"
+SRC_URI[sha256sum] = "9a2b12ebd876e77c72e41ebf401cc2e7c5b566649d50105ca49822688642207b"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ python-prettytable \
+ python-cmd2 \
+ python-pyparsing"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb
new file mode 100644
index 000000000..840c36efe
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-mock_2.0.0.bb
@@ -0,0 +1,22 @@
+SUMMARY = "A Python Mocking and Patching Library for Testing"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=de9dfbf780446b18aab11f00baaf5b7e"
+
+SRC_URI[md5sum] = "0febfafd14330c9dcaa40de2d82d40ad"
+SRC_URI[sha256sum] = "b158b6df76edd239b8208d481dc46b6afd45a846b7812ff0ce58971cf5bc8bba"
+
+inherit pypi setuptools
+
+DEPENDS += " \
+ python-pbr-native"
+
+RDEPENDS_${PN} += " \
+ python-prettytable \
+ python-cmd2 \
+ python-pyparsing \
+ python-mccabe \
+ python-pep8 \
+ python-pyflakes \
+ python-pbr \
+ python-funcsigs \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.4.bb
new file mode 100644
index 000000000..4c5d8aedc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-monotonic_1.4.bb
@@ -0,0 +1,10 @@
+SUMMARY = "An implementation of time.monotonic() for Python 2.0 through 3.2"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314"
+
+SRC_URI[md5sum] = "29302cd6b1013b3ab0d1ed78e20d22f2"
+SRC_URI[sha256sum] = "a02611d5b518cd4051bf22d21bd0ae55b3a03f2d2993a19b6c90d9d168691f84"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "${PYTHON_PN}-ctypes ${PYTHON_PN}-io ${PYTHON_PN}-re ${PYTHON_PN}-threading"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc
new file mode 100644
index 000000000..fdc892610
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack.inc
@@ -0,0 +1,13 @@
+SUMMARY = "MessagePack (de)serializer"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=cd9523181d9d4fbf7ffca52eaa2a5751"
+
+SRC_URI[md5sum] = "6d644c06a87a5a111bbbf5b34b4be440"
+SRC_URI[sha256sum] = "378cc8a6d3545b532dfd149da715abae4fda2a3adb6d74e525d0d5e51f46909b"
+
+PYPI_PACKAGE = "msgpack-python"
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-io \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb
new file mode 100644
index 000000000..2c2c8f2ad
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-msgpack_0.5.6.bb
@@ -0,0 +1,2 @@
+require python-msgpack.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc
new file mode 100644
index 000000000..d74302398
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "Provides enhanced HTTPS support for httplib and urllib2 using PyOpenSSL"
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://MANIFEST.in;md5=ce22c0cd986d2de3f7073cd6b5523ae0"
+
+SRC_URI[md5sum] = "a0d349cf9530e331697a6e5ab1f40de6"
+SRC_URI[sha256sum] = "fba4d4798dcac2965874f24afb6631b4326baa4bd02505744d34f690c354856a"
+
+PYPI_PACKAGE = "ndg_httpsclient"
+
+DEPENDS += " \
+ ${PYTHON_PN}-pyopenssl \
+ ${PYTHON_PN}-pyasn1 \
+"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-pyopenssl \
+ ${PYTHON_PN}-pyasn1 \
+"
+
+BBCLASSEXTEND = "native nativesdk"
+
+UPSTREAM_CHECK_REGEX = ""
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.4.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.4.4.bb
new file mode 100644
index 000000000..ca0eb3263
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ndg-httpsclient_0.4.4.bb
@@ -0,0 +1,2 @@
+require python-ndg-httpsclient.inc
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc
new file mode 100644
index 000000000..5b6d4dffa
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr.inc
@@ -0,0 +1,13 @@
+SUMMARY = "A network address manipulation library for Python."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e6345d695ffe3776f68a56fe7962db44"
+
+SRC_URI[md5sum] = "51019ef59c93f3979bcb37d3b8527e07"
+SRC_URI[sha256sum] = "38aeec7cdd035081d3a4c306394b19d677623bf76fa0913f6695127c7753aefd"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb
new file mode 100644
index 000000000..ca5a79a78
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-netaddr_0.7.19.bb
@@ -0,0 +1,6 @@
+require python-netaddr.inc
+inherit setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-textutils \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb
new file mode 100644
index 000000000..bc0c6863d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-networkx_2.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Python package for creating and manipulating graphs and networks"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3376ff7c9c58048c62d91431f7f08cde"
+
+SRC_URI[md5sum] = "4a2c2a62dfc46ba7d594daca7c834995"
+SRC_URI[sha256sum] = "64272ca418972b70a196cb15d9c85a5a6041f09a2f32e0d30c0255f25d458bb1"
+
+PYPI_PACKAGE_EXT = "zip"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "python-2to3"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch
new file mode 100644
index 000000000..81ed744cb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-numeric/0001-it-tries-to-define-this-function-differently-than-it.patch
@@ -0,0 +1,30 @@
+From 322e781c67d7a78fc2cfc3d377f50b825fc64abb Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 2 Jun 2017 20:21:01 -0700
+Subject: [PATCH] it tries to define this function differently than it is
+ defined in sys/time.h.
+
+Use the definition from system
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Packages/RNG/Src/ranf.c | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/Packages/RNG/Src/ranf.c b/Packages/RNG/Src/ranf.c
+index 5ca7dc5..e669fa8 100644
+--- a/Packages/RNG/Src/ranf.c
++++ b/Packages/RNG/Src/ranf.c
+@@ -149,9 +149,6 @@ void Mixranf(int *s,u32 s48[2])
+ #else
+ struct timeval tv;
+ struct timezone tz;
+-#if !defined(__sgi)
+- int gettimeofday(struct timeval *, struct timezone *);
+-#endif
+
+ (void)gettimeofday(&tv,&tz);
+ s48[0] = (u32)tv.tv_sec;
+--
+2.13.0
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb
new file mode 100644
index 000000000..c91d77c81
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-numeric_24.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "A sophisticated Numeric Processing Package for Python"
+SECTION = "devel/python"
+LICENSE = "PSF & LLNL"
+LIC_FILES_CHKSUM = "file://Legal.htm;md5=e3ce75dedd4043918d15979ae43e312e"
+
+PR = "ml3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/numpy/Numeric-${PV}.tar.gz \
+ file://0001-it-tries-to-define-this-function-differently-than-it.patch \
+"
+S = "${WORKDIR}/Numeric-${PV}"
+
+inherit distutils
+
+SRC_URI[md5sum] = "2ae672656e06716a149acb048cca3093"
+SRC_URI[sha256sum] = "5f72e729eb6ff57442f2a38bfc9931738b59e5077928e2e70d22b4610ff15258"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc
new file mode 100644
index 000000000..c5de8a091
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib.inc
@@ -0,0 +1,25 @@
+SUMMARY = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic"
+HOMEPAGE = "https://github.com/idan/oauthlib"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5ba9ce41463615e082609806255bce1b"
+
+SRC_URI = "https://pypi.python.org/packages/a5/8a/212e9b47fb54be109f3ff0684165bb38c51117f34e175c379fce5c7df754/oauthlib-${PV}.tar.gz"
+SRC_URI[md5sum] = "277a9a966cc8c72e492b4eeb41332445"
+SRC_URI[sha256sum] = "ce57b501e906ff4f614e71c36a3ab9eacbb96d35c24d1970d2539bbc3ec70ce1"
+
+S = "${WORKDIR}/oauthlib-${PV}"
+
+# The following configs & dependencies are from setuptools extras_require.
+# These dependencies are optional, hence can be controlled via PACKAGECONFIG.
+# The upstream names may not correspond exactly to bitbake package names.
+#
+# Uncomment this line to enable all the optional features.
+#PACKAGECONFIG ?= "test signedtoken signals rsa"
+PACKAGECONFIG[test] = ",,,${PYTHON_PN}-blinker ${PYTHON_PN}-cryptography ${PYTHON_PN}-nose ${PYTHON_PN}-pyjwt"
+PACKAGECONFIG[signedtoken] = ",,,${PYTHON_PN}-cryptography ${PYTHON_PN}-pyjwt"
+PACKAGECONFIG[signals] = ",,,${PYTHON_PN}-blinker"
+PACKAGECONFIG[rsa] = ",,,${PYTHON_PN}-cryptography"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-core ${PYTHON_PN}-crypt ${PYTHON_PN}-datetime ${PYTHON_PN}-json ${PYTHON_PN}-logging ${PYTHON_PN}-math ${PYTHON_PN}-netclient ${PYTHON_PN}-unittest"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb
new file mode 100644
index 000000000..4329d21a1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-oauthlib_2.0.6.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-oauthlib.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re ${PYTHON_PN}-lang"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc
new file mode 100644
index 000000000..f834e6fd8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt.inc
@@ -0,0 +1,21 @@
+SUMMARY = "MQTT version 3.1/3.1.1 client library"
+LICENSE = "EPL-1.0 | EDL-1.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=eb48c6ee2cb9f5b8b9fe75e6f817bdfc \
+ file://epl-v10;md5=8d383c379e91d20ba18a52c3e7d3a979 \
+ file://edl-v10;md5=c09f121939f063aeb5235972be8c722c \
+"
+SRCNAME = "paho-mqtt"
+
+inherit pypi
+SRC_URI[md5sum] = "2cc27d8b369700b1fc99325add0dadd2"
+SRC_URI[sha256sum] = "31911f6031de306c27ed79dc77b690d7c55b0dcb0f0434ca34ec6361d0371122"
+
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-math \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb
new file mode 100644
index 000000000..a1031176e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-paho-mqtt_1.3.1.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-paho-mqtt.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb
new file mode 100644
index 000000000..60a3b43de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pam_1.8.2.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "Python PAM module using ctypes, py3/py2."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=64326d42471b493c5c088305364ad5da"
+
+SRC_URI[md5sum] = "db71b6b999246fb05d78ecfbe166629d"
+SRC_URI[sha256sum] = "26efe4e79b869b10f97cd8c4a6bbb04a4e54d41186364e975b4108c9c071812c"
+
+PYPI_PACKAGE = "python-pam"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "libpam"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "pam"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc
new file mode 100644
index 000000000..b9f84a614
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pandas.inc
@@ -0,0 +1,23 @@
+SUMMARY = "pandas library for high-performance data analysis tools"
+DESCRIPTION = "pandas is an open source, BSD-licensed library providing \
+high-performance, easy-to-use data structures and data analysis tools for \
+the Python programming language."
+HOMEPAGE = "http://pandas.pydata.org/"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ee0470f2de336c370a71c2f8d5e81c11"
+
+SRC_URI[md5sum] = "c7a2757b607748255f3270221ac61d59"
+SRC_URI[sha256sum] = "44a94091dd71f05922eec661638ec1a35f26d573c119aa2fad964f10a2880e6c"
+
+inherit pypi
+
+DEPENDS += " \
+ ${PYTHON_PN}-numpy-native \
+"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-numpy \
+ ${PYTHON_PN}-dateutil \
+ ${PYTHON_PN}-pytz \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.22.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.22.0.bb
new file mode 100644
index 000000000..b3bfab969
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pandas_0.22.0.bb
@@ -0,0 +1,7 @@
+inherit setuptools
+require python-pandas.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-future \
+ ${PYTHON_PN}-json \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb
new file mode 100644
index 000000000..b516c5912
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-parse-type_0.4.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Simplifies building parse types based on the parse module"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d07323820cca0f1d192cbbf8a0516f95"
+PYPI_PACKAGE = "parse_type"
+
+SRC_URI[md5sum] = "b5fa59e45965d1b2896023742df2e707"
+SRC_URI[sha256sum] = "f596bdc75d3dd93036fbfe3d04127da9f6df0c26c36e01e76da85adef4336b3c"
+
+RDEPENDS_${PN} += "python-parse"
+
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.2.bb
new file mode 100644
index 000000000..8e16372c5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-parse_1.8.2.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Parse strings using a specification based on the Python format() syntax"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://parse.py;beginline=1191;endline=1209;md5=5147afdd9b3615290ad8733f0137a1a1"
+
+SRC_URI[md5sum] = "42002338551bdfa0f01bbe4e679a17dd"
+SRC_URI[sha256sum] = "8048dde3f5ca07ad7ac7350460952d83b63eaacecdac1b37f45fd74870d849d2"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-logging \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc
new file mode 100644
index 000000000..9e477ecf9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-passlib.inc
@@ -0,0 +1,19 @@
+SUMMARY = "comprehensive password hashing framework supporting over 30 schemes"
+DESCRIPTION = "\
+Passlib is a password hashing library for Python 2 & 3, which provides cross-platform \
+implementations of over 30 password hashing algorithms, as well as a framework for \
+managing existing password hashes. It’s designed to be useful for a wide range of \
+tasks, from verifying a hash found in /etc/shadow, to providing full-strength password \
+hashing for multi-user applications."
+HOMEPAGE = "https://bitbucket.org/ecollins/passlib"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=73eed1a5470b969951dac411086c7036"
+
+SRC_URI[md5sum] = "254869dae3fd9f09f0746a3cb29a0b15"
+SRC_URI[sha256sum] = "3d948f64138c25633613f303bcc471126eae67c04d5e3f6b7b8ce6242f8653e0"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-crypt \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb
new file mode 100644
index 000000000..11c598a08
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-passlib_1.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-passlib.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb
new file mode 100644
index 000000000..6b4019f84
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-paste_2.0.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Tools for using a Web Server Gateway Interface stack"
+HOMEPAGE = "http://pythonpaste.org/"
+LICENSE = "MIT"
+RDEPENDS_${PN} = "python-six"
+
+LIC_FILES_CHKSUM = "file://docs/license.txt;md5=1798f29d55080c60365e6283cb49779c"
+
+SRC_URI[md5sum] = "1231e14eae62fa7ed76e9130b04bc61e"
+SRC_URI[sha256sum] = "2346a347824c32641bf020c17967b49ae74d3310ec1bc9b958d4b84e2d985218"
+
+PYPI_PACKAGE = "Paste"
+inherit pypi setuptools
+
+FILES_${PN} += "/usr/lib/*"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pbr_3.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pbr_3.1.1.bb
new file mode 100644
index 000000000..bdff867f3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pbr_3.1.1.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "Python Build Reasonableness: PBR is a library that injects some useful and sensible default behaviors into your setuptools run"
+HOMEPAGE = "https://pypi.python.org/pypi/pbr"
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1dece7821bf3fd70fe1309eaa37d52a2"
+
+SRC_URI[md5sum] = "4e82c2e07af544c56a5b71c801525b00"
+SRC_URI[sha256sum] = "05f61c71aaefc02d8e37c0a3eeb9815ff526ea28b3b76324769e6158d7f95be1"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN}_class-target += " \
+ python-pip \
+ "
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb
new file mode 100644
index 000000000..b12d72d38
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pep8_1.7.1.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Python style guide checker"
+HOMEPAGE = "https://github.com/dreamhost/cliff"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=d8ebbbe831259ce010179d2f310b0f3e"
+
+SRC_URI[md5sum] = "603821d06db945c71d811b5a8d78423c"
+SRC_URI[sha256sum] = "fe249b52e20498e59e0b5c5256aa52ee99fc295b26ec9eaa85776ffdb9fe6374"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ python-prettytable \
+ python-cmd2 \
+ python-pyparsing"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc
new file mode 100644
index 000000000..fa8ad0119
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect.inc
@@ -0,0 +1,21 @@
+SUMMARY = "A Pure Python Expect like Module for Python"
+HOMEPAGE = "http://pexpect.readthedocs.org/"
+SECTION = "devel/python"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1c7a725251880af8c6a148181665385b"
+
+SRC_URI[md5sum] = "913fc0a68a915cdf6ad4250493c94cf7"
+SRC_URI[sha256sum] = "9f8eb3277716a01faafaba553d629d3d60a1a624c7cf45daa600d2148c30020c"
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/pexpect"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-terminal \
+ ${PYTHON_PN}-resource \
+ ${PYTHON_PN}-fcntl \
+ ${PYTHON_PN}-ptyprocess \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.5.0.bb
new file mode 100644
index 000000000..1c46b47a2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pexpect_4.5.0.bb
@@ -0,0 +1,2 @@
+require python-pexpect.inc
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pip_9.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pip_9.0.3.bb
new file mode 100644
index 000000000..e3fc6ba65
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pip_9.0.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "PIP is a tool for installing and managing Python packages"
+HOMEPAGE = "https://pip.pypa.io/"
+LICENSE = "MIT & LGPL-2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=25fba45109565f87de20bae85bc39452"
+
+SRC_URI[md5sum] = "b15b33f9aad61f88d0f8c866d16c55d8"
+SRC_URI[sha256sum] = "7bf48f9a693be1d58f49f7af7e0ae9fe29fd671cde8a55e6edca3581c4ef5796"
+
+inherit pypi setuptools
+
+# Since PIP is like CPAN for PERL we need to drag in all python modules to ensure everything works
+RDEPENDS_${PN}_class-target = "python-modules python-distribute python-misc"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc
new file mode 100644
index 000000000..320359aa6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Plugin and hook calling mechanisms for python"
+HOMEPAGE = "https://github.com/pytest-dev/pluggy"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=338dad807ed9337bfaeb9979c3bfe20f"
+
+SRC_URI[md5sum] = "ffdde7c3a5ba9a440404570366ffb6d5"
+SRC_URI[sha256sum] = "7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb
new file mode 100644
index 000000000..edcd4f512
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pluggy_0.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pluggy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc
new file mode 100644
index 000000000..a744950b6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ply.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Python Lex and Yacc"
+DESCRIPTION = "Python ply: PLY is yet another implementation of lex and yacc for Python"
+HOMEPAGE = "https://pypi.python.org/pypi/ply"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://README.md;beginline=5;endline=32;md5=f5ee5c355c0e6719c787a71b8f0fa96c"
+
+SRC_URI[md5sum] = "6465f602e656455affcd7c5734c638f8"
+SRC_URI[sha256sum] = "00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb
new file mode 100644
index 000000000..2b6165c5b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ply_3.11.bb
@@ -0,0 +1,2 @@
+require python-ply.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc
new file mode 100644
index 000000000..b342aef52
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pretend.inc
@@ -0,0 +1,9 @@
+SUMMARY = "A library for stubbing in Python"
+HOMEPAGE = "https://github.com/alex/pretend"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=411780c0b7fa756753e94affeee5bc99"
+
+SRC_URI[md5sum] = "ad53883ede48aeac7ae584f0de0240e8"
+SRC_URI[sha256sum] = "c90eb810cde8ebb06dafcb8796f9a95228ce796531bc806e794c2f4649aa1b10"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb
new file mode 100644
index 000000000..73b8ed4d7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pretend_1.0.9.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pretend.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb
new file mode 100644
index 000000000..6f4390e24
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-prettytable_0.7.2.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Python library for displaying tabular data in a ASCII table format"
+HOMEPAGE = "http://code.google.com/p/prettytable"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3e73500ffa52de5071cff65990055282"
+
+SRC_URI[md5sum] = "0c1361104caff8b09f220748f9d69899"
+SRC_URI[sha256sum] = "a53da3b43d7a5c229b5e3ca2892ef982c46b7923b51e98f0db49956531211c4f"
+
+SRCNAME = "prettytable"
+
+SRC_URI = "https://pypi.python.org/packages/source/P/PrettyTable/${SRCNAME}-${PV}.zip"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+do_install_append() {
+ perm_files=`find "${D}${PYTHON_SITEPACKAGES_DIR}/" -name "*.txt" -o -name "PKG-INFO"`
+ for f in $perm_files; do
+ chmod 644 "${f}"
+ done
+}
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/PrettyTable/"
+UPSTREAM_CHECK_REGEX = "/PrettyTable/(?P<pver>(\d+[\.\-_]*)+)"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc
new file mode 100644
index 000000000..297c0d373
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-progress.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Easy progress reporting for Python"
+HOMEPAGE = "http://github.com/verigak/progress/"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=aef5566ac4fede9815eccf124c281317"
+
+SRC_URI[md5sum] = "f65ccfcc2339d522b2dd5801aaa40dc7"
+SRC_URI[sha256sum] = "c88d89ee3bd06716a0b8b5504d9c3bcb3c1c0ab98f96dc7f1dc5f56812a4f60a"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-math \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.3.bb
new file mode 100644
index 000000000..80608627a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-progress_1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-progress.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc
new file mode 100644
index 000000000..cc409a4eb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Library for building powerful interactive command lines in Python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b2cde7da89f0c1f3e49bf968d00d554f"
+
+SRC_URI[md5sum] = "8fe70295006dbc8afedd43e5eba99032"
+SRC_URI[sha256sum] = "858588f1983ca497f1cf4ffde01d978a3ea02b01c8a26a8bbc5cd2e66d816917"
+
+PYPI_PACKAGE = "prompt_toolkit"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-core \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-terminal \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-wcwidth \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_1.0.15.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_1.0.15.bb
new file mode 100644
index 000000000..527c905a8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-prompt-toolkit_1.0.15.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-prompt-toolkit.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc
new file mode 100644
index 000000000..b84983d5b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf.inc
@@ -0,0 +1,25 @@
+DESCRIPTION = "Protocol Buffers"
+HOMEPAGE = "https://developers.google.com/protocol-buffers/"
+SECTION = "devel/python"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
+
+inherit pypi
+
+SRC_URI[md5sum] = "393a53483224cb338df5c643646c0300"
+SRC_URI[sha256sum] = "09879a295fd7234e523b62066223b128c5a8a88f682e3aff62fb115e4a0d8be0"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-unittest \
+"
+
+# For usage in other recipies when compiling protobuf files (e.g. by grpcio-tools)
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.5.2.bb
new file mode 100644
index 000000000..f04fc489f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-protobuf_3.5.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-protobuf.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc
new file mode 100644
index 000000000..5d8e61f4b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-psutil.inc
@@ -0,0 +1,20 @@
+SUMMARY = "A cross-platform process and system utilities module for Python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0f02e99f7f3c9a7fe8ecfc5d44c2be62"
+
+SRC_URI[md5sum] = "3b291833dbea631db9d271aa602a169a"
+SRC_URI[sha256sum] = "e2467e9312c2fa191687b89ff4bc2ad8843be4af6fb4dc95a7cc5f7d7a327b18"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN}-tests += " \
+ ${PYTHON_SITEPACKAGES_DIR}/psutil/test* \
+ ${PYTHON_SITEPACKAGES_DIR}/psutil/__pycache__/test* \
+"
+
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.3.bb
new file mode 100644
index 000000000..9aabfb206
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-psutil_5.4.3.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-psutil.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc
new file mode 100644
index 000000000..43f2d094a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess.inc
@@ -0,0 +1,20 @@
+SUMMARY = "Run a subprocess in a pseudo terminal"
+HOMEPAGE = "http://ptyprocess.readthedocs.io/en/latest/"
+SECTION = "devel/python"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=cfdcd51fa7d5808da4e74346ee394490"
+
+SRCNAME = "ptyprocess"
+
+SRC_URI[md5sum] = "d3b8febae1b8c53b054bd818d0bb8665"
+SRC_URI[sha256sum] = "e64193f0047ad603b71f202332ab5527c5e52aa7c8b609704fc28c0dc20c4365"
+
+UPSTREAM_CHECK_URI = "https://pypi.python.org/pypi/ptyprocess"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-core \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.5.2.bb
new file mode 100644
index 000000000..7ca458771
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ptyprocess_0.5.2.bb
@@ -0,0 +1,2 @@
+require python-ptyprocess.inc
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-py.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-py.inc
new file mode 100644
index 000000000..c7d672737
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-py.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Library with cross-python path, ini-parsing, io, code, log facilities"
+HOMEPAGE = "http://py.readthedocs.io/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a6bb0320b04a0a503f12f69fea479de9"
+
+SRC_URI[md5sum] = "279ca69c632069e1b71e11b14641ca28"
+SRC_URI[sha256sum] = "ca18943e28235417756316bfada6cd96b23ce60dd532642690dcfdaba988a76d"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-py_1.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-py_1.5.2.bb
new file mode 100644
index 000000000..5ad2c1976
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-py_1.5.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-py.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc
new file mode 100644
index 000000000..d150409a2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio.inc
@@ -0,0 +1,11 @@
+SUMMARY = "Support for the Linux 2.6.x ALSA Sound System"
+SECTION = "devel/python"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1a3b161aa0fcec32a0c8907a2219ad9d"
+
+SRC_URI[md5sum] = "b46f69561bc85fc52e698b2440ca251e"
+SRC_URI[sha256sum] = "84e8f8da544d7f4bd96479ce4a237600077984d9be1d7f16c1d9a492ecf50085"
+
+DEPENDS += "alsa-lib"
+
+RDEPENDS_${PN} += "libasound"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb
new file mode 100644
index 000000000..e5153421b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyalsaaudio_0.8.4.bb
@@ -0,0 +1,2 @@
+require python-pyalsaaudio.inc
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc
new file mode 100644
index 000000000..9fa54cfe0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules.inc
@@ -0,0 +1,16 @@
+SUMMARY = "A collection of ASN.1-based protocols modules."
+DESCRIPTION = "A collection of ASN.1 modules expressed in form of pyasn1\
+ classes. Includes protocols PDUs definition (SNMP, LDAP etc.) and various\
+ data structures (X.509, PKCS etc.)."
+HOMEPAGE = "https://github.com/etingof/pyasn1-modules"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=280606d9c18f200e03e0c247ac61475a"
+
+SRC_URI[md5sum] = "ff938698590f314ff9b3d5c48737d899"
+SRC_URI[sha256sum] = "af00ea8f2022b6287dc375b2c70f31ab5af83989fc6fe9eacd4976ce26cd7ccc"
+
+inherit pypi
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pyasn1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.1.bb
new file mode 100644
index 000000000..eb7888408
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1-modules_0.2.1.bb
@@ -0,0 +1,2 @@
+require python-pyasn1-modules.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc
new file mode 100644
index 000000000..f3c32e08a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Python library implementing ASN.1 types."
+HOMEPAGE = "http://pyasn1.sourceforge.net/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=280606d9c18f200e03e0c247ac61475a"
+
+SRC_URI[md5sum] = "cb5883ddc6a9f405600429f37cf0759c"
+SRC_URI[sha256sum] = "d258b0a71994f7770599835249cece1caef3c70def868c4915e6e5ca49b67d15"
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-math \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.2.bb
new file mode 100644
index 000000000..a13c74dda
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyasn1_0.4.2.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-pyasn1.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-lang \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc
new file mode 100644
index 000000000..e441dc6de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11.inc
@@ -0,0 +1,7 @@
+SUMMARY = "Seamless operability between C++11 and Python"
+HOMEPAGE = "https://github.com/wjakob/pybind11"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=beb87117af69fd10fbf9fb14c22a2e62"
+
+SRC_URI[md5sum] = "2c651a75a20dabbaa18a8b023ffd54c0"
+SRC_URI[sha256sum] = "cbb036a8aad59a199ad672f98813f85c672642c6a67b4ff3868b1d6abc5fae3e"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.2.bb
new file mode 100644
index 000000000..e56743002
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pybind11_2.2.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pybind11.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc
new file mode 100644
index 000000000..399fe579f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "Bluetooth Python extension module"
+HOMEPAGE = "http://karulis.github.io/pybluez/"
+SECTION = "devel/python"
+
+DEPENDS = "bluez5"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8a71d0475d08eee76d8b6d0c6dbec543"
+
+inherit pypi
+
+SRC_URI = "https://pypi.python.org/packages/c1/98/3149481d508bee174335be6725880f00d297afebe75c15e917af8f6fe169/PyBluez-0.22.zip"
+SRC_URI[md5sum] = "49dab9d5a8f0b798c8125c7f649be3cd"
+SRC_URI[sha256sum] = "4ce006716a54d9d18e8186a3f1c8b12a8e6befecffe8fd5828a291fb694ce49d"
+
+S = "${WORKDIR}/PyBluez-${PV}"
+
+RDEPENDS_${PN} += "\
+ bluez5 \
+ ${PYTHON_PN}-fcntl \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb
new file mode 100644
index 000000000..3158f4b64
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pybluez_0.22.bb
@@ -0,0 +1,2 @@
+require python-pybluez.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc
new file mode 100644
index 000000000..d112d9f77
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Parser of the C language, written in pure Python"
+HOMEPAGE = "https://github.com/eliben/pycparser"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86f1cedb4e6410a88ce8e30b91079169"
+
+SRC_URI[md5sum] = "72370da54358202a60130e223d488136"
+SRC_URI[sha256sum] = "99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-ply \
+ ${PYTHON_PN}-pprint \
+ cpp \
+ cpp-symlinks \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb
new file mode 100644
index 000000000..98742737f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycparser_2.18.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-pycparser.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc
new file mode 100644
index 000000000..232cdb711
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto.inc
@@ -0,0 +1,21 @@
+DESCRIPTION = "Cryptographic modules for Python."
+HOMEPAGE = "http://www.pycrypto.org/"
+LICENSE = "PSFv2"
+LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=35f354d199e8cb7667b059a23578e63d"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-pycrypto:"
+
+DEPENDS += " gmp"
+
+inherit pypi autotools-brokensep
+
+SRC_URI += "file://cross-compiling.patch \
+ file://CVE-2013-7459.patch \
+ "
+
+SRC_URI[md5sum] = "55a61a054aa66812daf5161a0d5d7eda"
+SRC_URI[sha256sum] = "f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c"
+
+do_compile[noexec] = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch
new file mode 100644
index 000000000..9006c5c35
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/CVE-2013-7459.patch
@@ -0,0 +1,98 @@
+From 8dbe0dc3eea5c689d4f76b37b93fe216cf1f00d4 Mon Sep 17 00:00:00 2001
+From: Legrandin <helderijs@gmail.com>
+Date: Sun, 22 Dec 2013 22:24:46 +0100
+Subject: [PATCH] Throw exception when IV is used with ECB or CTR
+
+The IV parameter is currently ignored when initializing
+a cipher in ECB or CTR mode.
+
+For CTR mode, it is confusing: it takes some time to see
+that a different parameter is needed (the counter).
+
+For ECB mode, it is outright dangerous.
+
+This patch forces an exception to be raised.
+
+Upstream-Status: Backport
+[https://github.com/dlitz/pycrypto/commit/8dbe0dc3eea5c689d4f76b37b93fe216cf1f00d4]
+
+CVE: CVE-2013-7459
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ lib/Crypto/SelfTest/Cipher/common.py | 31 +++++++++++++++++++++++--------
+ src/block_template.c | 11 +++++++++++
+ 2 files changed, 34 insertions(+), 8 deletions(-)
+
+diff --git a/lib/Crypto/SelfTest/Cipher/common.py b/lib/Crypto/SelfTest/Cipher/common.py
+index 8bebed9..91ec743 100644
+--- a/lib/Crypto/SelfTest/Cipher/common.py
++++ b/lib/Crypto/SelfTest/Cipher/common.py
+@@ -239,19 +239,34 @@ class RoundtripTest(unittest.TestCase):
+ return """%s .decrypt() output of .encrypt() should not be garbled""" % (self.module_name,)
+
+ def runTest(self):
+- for mode in (self.module.MODE_ECB, self.module.MODE_CBC, self.module.MODE_CFB, self.module.MODE_OFB, self.module.MODE_OPENPGP):
++
++ ## ECB mode
++ mode = self.module.MODE_ECB
++ encryption_cipher = self.module.new(a2b_hex(self.key), mode)
++ ciphertext = encryption_cipher.encrypt(self.plaintext)
++ decryption_cipher = self.module.new(a2b_hex(self.key), mode)
++ decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
++ self.assertEqual(self.plaintext, decrypted_plaintext)
++
++ ## OPENPGP mode
++ mode = self.module.MODE_OPENPGP
++ encryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
++ eiv_ciphertext = encryption_cipher.encrypt(self.plaintext)
++ eiv = eiv_ciphertext[:self.module.block_size+2]
++ ciphertext = eiv_ciphertext[self.module.block_size+2:]
++ decryption_cipher = self.module.new(a2b_hex(self.key), mode, eiv)
++ decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
++ self.assertEqual(self.plaintext, decrypted_plaintext)
++
++ ## All other non-AEAD modes (but CTR)
++ for mode in (self.module.MODE_CBC, self.module.MODE_CFB, self.module.MODE_OFB):
+ encryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+ ciphertext = encryption_cipher.encrypt(self.plaintext)
+-
+- if mode != self.module.MODE_OPENPGP:
+- decryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+- else:
+- eiv = ciphertext[:self.module.block_size+2]
+- ciphertext = ciphertext[self.module.block_size+2:]
+- decryption_cipher = self.module.new(a2b_hex(self.key), mode, eiv)
++ decryption_cipher = self.module.new(a2b_hex(self.key), mode, self.iv)
+ decrypted_plaintext = decryption_cipher.decrypt(ciphertext)
+ self.assertEqual(self.plaintext, decrypted_plaintext)
+
++
+ class PGPTest(unittest.TestCase):
+ def __init__(self, module, params):
+ unittest.TestCase.__init__(self)
+diff --git a/src/block_template.c b/src/block_template.c
+index c36b316..8746948 100644
+--- a/src/block_template.c
++++ b/src/block_template.c
+@@ -170,6 +170,17 @@ ALGnew(PyObject *self, PyObject *args, PyObject *kwdict)
+ "Key cannot be the null string");
+ return NULL;
+ }
++ if (IVlen != 0 && mode == MODE_ECB)
++ {
++ PyErr_Format(PyExc_ValueError, "ECB mode does not use IV");
++ return NULL;
++ }
++ if (IVlen != 0 && mode == MODE_CTR)
++ {
++ PyErr_Format(PyExc_ValueError,
++ "CTR mode needs counter parameter, not IV");
++ return NULL;
++ }
+ if (IVlen != BLOCK_SIZE && mode != MODE_ECB && mode != MODE_CTR)
+ {
+ PyErr_Format(PyExc_ValueError,
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch
new file mode 100644
index 000000000..712f3e8dd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto/cross-compiling.patch
@@ -0,0 +1,23 @@
+Index: pycrypto-2.6/setup.py
+===================================================================
+--- pycrypto-2.6.orig/setup.py
++++ pycrypto-2.6/setup.py
+@@ -271,7 +271,8 @@ class PCTBuildConfigure(Command):
+ if not os.path.exists("config.status"):
+ if os.system("chmod 0755 configure") != 0:
+ raise RuntimeError("chmod error")
+- cmd = "sh configure" # we use "sh" here so that it'll work on mingw32 with standard python.org binaries
++ host = os.environ.get("HOST_SYS")
++ cmd = "ac_cv_func_malloc_0_nonnull=yes sh configure --host " + host # we use "sh" here so that it'll work on mingw32 with standard python.org binaries
+ if self.verbose < 1:
+ cmd += " -q"
+ if os.system(cmd) != 0:
+@@ -370,7 +371,7 @@ kw = {'name':"pycrypto",
+ 'ext_modules': plat_ext + [
+ # _fastmath (uses GNU mp library)
+ Extension("Crypto.PublicKey._fastmath",
+- include_dirs=['src/','/usr/include/'],
++ include_dirs=['src/'],
+ libraries=['gmp'],
+ sources=["src/_fastmath.c"]),
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb
new file mode 100644
index 000000000..e13db01b7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycrypto_2.6.1.bb
@@ -0,0 +1,9 @@
+inherit distutils
+require python-pycrypto.inc
+
+# We explicitly call distutils_do_install, since we want it to run, but
+# *don't* want the autotools install to run, since this package doesn't
+# provide a "make install" target.
+do_install() {
+ distutils_do_install
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc
new file mode 100644
index 000000000..c4969f966
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Cryptographic library for Python"
+DESCRIPTION = "PyCryptodome is a self-contained Python package of low-level\
+ cryptographic primitives."
+HOMEPAGE = "http://www.pycryptodome.org"
+LICENSE = "PD & BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=775fe77831c03bf82f35abc0e230d4c1"
+
+SRC_URI[md5sum] = "a2587b6381b0ef4eb960cea1e7507d04"
+SRC_URI[sha256sum] = "c5dd29e9f1b733e74311bf95d0e544e91bd1d14bc0366e8f443562d8d9920b7d"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-math \
+"
+
+RDEPENDS_${PN}-tests += " \
+ ${PYTHON_PN}-unittest \
+"
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN}-tests += " \
+ ${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/ \
+ ${PYTHON_SITEPACKAGES_DIR}/Crypto/SelfTest/__pycache__/ \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb
new file mode 100644
index 000000000..c7701eb9f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pycryptodome_3.4.11.bb
@@ -0,0 +1,2 @@
+require python-pycryptodome.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc
new file mode 100644
index 000000000..0773b7ff8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus.inc
@@ -0,0 +1,11 @@
+DESCRIPTION = "Pythonic DBus library"
+HOMEPAGE = "https://pypi.python.org/pypi/pydbus/"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a916467b91076e631dd8edb7424769c7"
+
+SRC_URI[md5sum] = "c6abd44862322679bd4e907bebc3e0d0"
+SRC_URI[sha256sum] = "4207162eff54223822c185da06c1ba8a34137a9602f3da5a528eedf3f78d0f2c"
+
+S = "${WORKDIR}/pydbus-${PV}"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-pygobject"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb
new file mode 100644
index 000000000..1722a80cd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pydbus_0.6.0.bb
@@ -0,0 +1,2 @@
+require python-pydbus.inc
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc
new file mode 100644
index 000000000..d2d41d51d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect.inc
@@ -0,0 +1,11 @@
+SUMMARY = "Python expectaton library"
+DESCRIPTION = "Minimal but very flexible implementation of the expect pattern"
+SECTION = "devel/python"
+HOMEPAGE = " https://bitbucket.org/dwt/pyexpect"
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://README.md;md5=500b884e9dcd5f677a53cbbee8ace939"
+
+inherit pypi
+
+SRC_URI[md5sum] = "c71307d6c7096fdbde0813018dfa0092"
+SRC_URI[sha256sum] = "d656ef7e07a8aa539ce0a4883a683341037b6fc1c329bf55b63bffbf2cce9582"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb
new file mode 100644
index 000000000..d26beb794
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyexpect_1.0.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyexpect.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc
new file mode 100644
index 000000000..2365379aa
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata.inc
@@ -0,0 +1,13 @@
+SUMMARY = "A Python interface for the Firmata protocol"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=84ddcef430b7c44caa22b2ff4b37a3df"
+PYPI_PACKAGE = "pyFirmata"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-pyserial \
+"
+
+SRC_URI[md5sum] = "ee4c23ca5c35d3091d550a63540811a3"
+SRC_URI[sha256sum] = "b54d49d66a9d93c1ef9c72ca01264414cb2de177baac116c12d5cce0c380160c"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb
new file mode 100644
index 000000000..d77e0f385
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyfirmata_1.0.3.bb
@@ -0,0 +1,3 @@
+inherit setuptools
+require python-pyfirmata.inc
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.bb
new file mode 100644
index 000000000..244485965
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyflakes_1.6.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "passive checker of Python programs"
+HOMEPAGE = "https://github.com/dreamhost/cliff"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=029ce1beb023f2c4ca9f417e4984a865"
+
+SRC_URI[md5sum] = "b385b0e4cd40a522553e97cd2d83573e"
+SRC_URI[sha256sum] = "8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-prettytable \
+ ${PYTHON_PN}-cmd2 \
+ ${PYTHON_PN}-pyparsing"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch
new file mode 100644
index 000000000..1f31cb805
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0001-reflect-2.1-reporting-for-key-imports.patch
@@ -0,0 +1,90 @@
+From ed44474c11f577c1644910964a917a4cf701bb0f Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Tue, 26 Jan 2016 14:24:26 -0500
+Subject: [PATCH] reflect 2.1 reporting for key imports
+
+GnuPG 2.1 changes how it reports key imports. These changes should
+make the pygpgme test suite compatible with GnuPG 2.1.
+
+See also:
+https://lists.gnupg.org/pipermail/gnupg-devel/2016-January/030718.html
+
+Upstream-Status: Backport
+
+Signed-off-by: Catalin Enache <catalin.enache@windriver.com>
+
+---
+ tests/test_import.py | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/tests/test_import.py b/tests/test_import.py
+index 10eb816..597eb47 100644
+--- a/tests/test_import.py
++++ b/tests/test_import.py
+@@ -55,7 +55,7 @@ class ImportTestCase(GpgHomeTestCase):
+ ctx = gpgme.Context()
+ with self.keyfile('key1.sec') as fp:
+ result = ctx.import_(fp)
+- self.assertEqual(result.considered, 1)
++ self.assertEqual(result.considered, 3)
+ self.assertEqual(result.no_user_id, 0)
+ self.assertEqual(result.imported, 1)
+ self.assertEqual(result.imported_rsa, 0)
+@@ -64,18 +64,18 @@ class ImportTestCase(GpgHomeTestCase):
+ self.assertEqual(result.new_sub_keys, 0)
+ self.assertEqual(result.new_signatures, 0)
+ self.assertEqual(result.new_revocations, 0)
+- self.assertEqual(result.secret_read, 1)
+- self.assertEqual(result.secret_imported, 1)
++ self.assertEqual(result.secret_read, 3)
++ self.assertEqual(result.secret_imported, 2)
+ self.assertEqual(result.secret_unchanged, 0)
+ self.assertEqual(result.skipped_new_keys, 0)
+ self.assertEqual(result.not_imported, 0)
+ self.assertEqual(len(result.imports), 2)
+ self.assertEqual(result.imports[0],
+ ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+- None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
++ None, gpgme.IMPORT_NEW))
+ self.assertEqual(result.imports[1],
+ ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+- None, gpgme.IMPORT_NEW))
++ None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
+ # can we get the public key?
+ key = ctx.get_key('E79A842DA34A1CA383F64A1546BB55F0885C65A4')
+ # can we get the secret key?
+@@ -102,17 +102,17 @@ class ImportTestCase(GpgHomeTestCase):
+ fp = BytesIO(b'\n'.join(keys))
+ ctx = gpgme.Context()
+ result = ctx.import_(fp)
+- self.assertEqual(result.considered, 3)
++ self.assertEqual(result.considered, 5)
+ self.assertEqual(result.no_user_id, 0)
+ self.assertEqual(result.imported, 2)
+- self.assertEqual(result.imported_rsa, 1)
++ self.assertEqual(result.imported_rsa, 0)
+ self.assertEqual(result.unchanged, 0)
+ self.assertEqual(result.new_user_ids, 0)
+ self.assertEqual(result.new_sub_keys, 0)
+ self.assertEqual(result.new_signatures, 1)
+ self.assertEqual(result.new_revocations, 0)
+- self.assertEqual(result.secret_read, 1)
+- self.assertEqual(result.secret_imported, 1)
++ self.assertEqual(result.secret_read, 3)
++ self.assertEqual(result.secret_imported, 2)
+ self.assertEqual(result.secret_unchanged, 0)
+ self.assertEqual(result.skipped_new_keys, 0)
+ self.assertEqual(result.not_imported, 0)
+@@ -122,10 +122,10 @@ class ImportTestCase(GpgHomeTestCase):
+ None, gpgme.IMPORT_NEW))
+ self.assertEqual(result.imports[1],
+ ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+- None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
++ None, gpgme.IMPORT_SIG))
+ self.assertEqual(result.imports[2],
+ ('E79A842DA34A1CA383F64A1546BB55F0885C65A4',
+- None, gpgme.IMPORT_SIG))
++ None, gpgme.IMPORT_NEW | gpgme.IMPORT_SECRET))
+ self.assertEqual(result.imports[3],
+ ('93C2240D6B8AA10AB28F701D2CF46B7FC97E6B0F',
+ None, gpgme.IMPORT_NEW))
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch
new file mode 100644
index 000000000..c18cf3feb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0002-passphrase_cb-is-deprecated.patch
@@ -0,0 +1,52 @@
+From ba0dc8273e4f83bcd2d43baa5910aae34b93048c Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Mon, 1 Feb 2016 19:25:12 -0500
+Subject: [PATCH] passphrase_cb is deprecated
+
+https://bugs.gnupg.org/gnupg/issue767 indicates that
+gpgme_set_passphrase_cb is a deprecated corner of the API and that
+developers using gpgme should really rely on the gpg-agent to handle
+this stuff. This should actually simplify things for most
+installations -- just strip out all passphrase handling from your
+application entirely, relying on gpg to figure out how to find the
+agent, and relying on the agent figuring out how to prompt the user
+(if necessary).
+
+However, if a developer really wants to use the passphrase callback
+approach, they'll have to use loopback pinentry. This sets up the
+test suite to be able to make those tests.
+
+Upstream-Status: Backport
+
+Signed-off-by: Catalin Enache <catalin.enache@windriver.com>
+
+---
+ tests/util.py | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/tests/util.py b/tests/util.py
+index cd803c2..86892ca 100644
+--- a/tests/util.py
++++ b/tests/util.py
+@@ -28,7 +28,9 @@ keydir = os.path.join(os.path.dirname(__file__), 'keys')
+
+ class GpgHomeTestCase(unittest.TestCase):
+
+- gpg_conf_contents = ''
++ gpg_conf_contents = 'pinentry-mode loopback'
++ gpg_agent_conf_contents = 'allow-loopback-pinentry'
++
+ import_keys = []
+
+ def keyfile(self, key):
+@@ -41,6 +43,10 @@ class GpgHomeTestCase(unittest.TestCase):
+ fp.write(self.gpg_conf_contents.encode('UTF-8'))
+ fp.close()
+
++ fp = open(os.path.join(self._gpghome, 'gpg-agent.conf'), 'wb')
++ fp.write(self.gpg_agent_conf_contents.encode('UTF-8'))
++ fp.close()
++
+ # import requested keys into the keyring
+ ctx = gpgme.Context()
+ for key in self.import_keys:
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch
new file mode 100644
index 000000000..6acb68bfe
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/0003-handle-generic-error-when-no-passphrase-callback-pre.patch
@@ -0,0 +1,30 @@
+From 579b5930e15de8855bf63b3c20b6c3aaf894c3eb Mon Sep 17 00:00:00 2001
+From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+Date: Mon, 1 Feb 2016 19:27:59 -0500
+Subject: [PATCH] handle generic error when no passphrase callback present
+
+apparently gpg 2.1 returns ERR_GENERAL right now if the pinentry was
+in loopback mode and no passphrase callback was supplied. Earlier
+versions supplied ERR_BAD_PASSPHRASE.
+
+Upstream-Status: Backport
+
+Signed-off-by: Catalin Enache <catalin.enache@windriver.com>
+
+---
+ tests/test_passphrase.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test_passphrase.py b/tests/test_passphrase.py
+index 0a235e9..35b3c59 100644
+--- a/tests/test_passphrase.py
++++ b/tests/test_passphrase.py
+@@ -41,7 +41,7 @@ class PassphraseTestCase(GpgHomeTestCase):
+ new_sigs = ctx.sign(plaintext, signature, gpgme.SIG_MODE_CLEAR)
+ except gpgme.GpgmeError as exc:
+ self.assertEqual(exc.args[0], gpgme.ERR_SOURCE_GPGME)
+- self.assertEqual(exc.args[1], gpgme.ERR_BAD_PASSPHRASE)
++ self.assertEqual(exc.args[1], gpgme.ERR_GENERAL)
+ else:
+ self.fail('gpgme.GpgmeError not raised')
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest
new file mode 100644
index 000000000..ce2abb66a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme/run-ptest
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+GPG_AGENT_INFO= python test_all.py -v 2>&1 | sed -e '/\.\.\. ok/ s/^/PASS: /g' -e '/\.\.\. [ERROR|FAIL]/ s/^/FAIL: /g' -e '/\.\.\. skipped/ s/^/SKIP: /g' -e 's/ \.\.\. ok//g' -e 's/ \.\.\. ERROR//g' -e 's/ \.\.\. FAIL//g' -e 's/ \.\.\. skipped//g'
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb
new file mode 100644
index 000000000..14e967db8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pygpgme_0.3.bb
@@ -0,0 +1,26 @@
+SUMMARY = "A Python module for working with OpenPGP messages"
+DESCRIPTION = "PyGPGME is a Python module that lets you sign, verify, \
+ encrypt and decrypt messages using the OpenPGP format."
+HOMEPAGE = "https://launchpad.net/pygpgme"
+
+LICENSE = "LGPL-2.1"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=6517bdc8f2416f27ab725d4702f7aac3"
+
+SRC_URI = "file://run-ptest \
+ file://0001-reflect-2.1-reporting-for-key-imports.patch \
+ file://0002-passphrase_cb-is-deprecated.patch \
+ file://0003-handle-generic-error-when-no-passphrase-callback-pre.patch \
+"
+
+SRC_URI[md5sum] = "d38355af73f0352cde3d410b25f34fd0"
+SRC_URI[sha256sum] = "5fd887c407015296a8fd3f4b867fe0fcca3179de97ccde90449853a3dfb802e1"
+
+DEPENDS += "gpgme"
+RDEPENDS_${PN} += "gnupg"
+
+inherit pypi setuptools ptest
+
+do_install_ptest(){
+ install ${S}/test_all.py ${D}${PTEST_PATH}
+ cp -r ${S}/tests ${D}${PTEST_PATH}
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb
new file mode 100644
index 000000000..02d4f54e1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyhamcrest_1.9.0.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Hamcrest framework for matcher objects"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=f6df1318c6071dd1707f5e3b6c11f24f"
+
+PYPI_PACKAGE = "PyHamcrest"
+
+SRC_URI[md5sum] = "8b833a3fa30197455df79424f30c8c3f"
+SRC_URI[sha256sum] = "8ffaa0a53da57e89de14ced7185ac746227a8894dbd5a3c718bf05ddbd1d56cd"
+
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc
new file mode 100644
index 000000000..620b244c6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface.inc
@@ -0,0 +1,11 @@
+SUMMARY = "Pyiface is a package that exposes the network interfaces of the operating system in a easy to use and transparent way"
+SECTION = "devel/python"
+HOMEPAGE = "https://pypi.python.org/pypi/pyiface/"
+LICENSE = "GPLv3+"
+
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fe869ee987a340198fb0d54c55c47f1"
+
+SRC_URI[md5sum] = "06c3c71fe51df740dae6a88a13afb5e0"
+SRC_URI[sha256sum] = "4bb79100cbcf7344a1ccaddc578cd6455da47d8eac6eb1bf903ec32e043af924"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.5.bb
new file mode 100644
index 000000000..854cb30ee
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyiface_0.0.5.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyiface.inc \ No newline at end of file
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc
new file mode 100644
index 000000000..975f11c10
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Python pyinotify: Linux filesystem events monitoring"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ab173cade7965b411528464589a08382"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-shell \
+"
+
+SRC_URI[md5sum] = "8e580fa1ff3971f94a6f81672b76c406"
+SRC_URI[sha256sum] = "9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb
new file mode 100644
index 000000000..0c9a2c72e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyinotify_0.9.6.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-pyinotify.inc
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc
new file mode 100644
index 000000000..d866c5650
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks.inc
@@ -0,0 +1,22 @@
+SUMMARY = "Pure-Python Java Keystore (JKS) library"
+DESCRIPTION = "PyJKS enables Python projects to load and manipulate\
+ Java KeyStore (JKS) data without a JVM dependency. PyJKS supports JKS,\
+ JCEKS, BKS and UBER (BouncyCastle) keystores."
+HOMEPAGE = "http://github.com/kurtbrose/pyjks"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9694d6cc724caf7f7386be88a4a81958"
+
+SRC_URI[md5sum] = "d53501e7c80d465969742bc6bee91d49"
+SRC_URI[sha256sum] = "709c44a303dd6b2464078ebeb677417e717818d4b3dc3844a462bef9d215dcc8"
+
+inherit pypi
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-javaobj-py3 \
+ ${PYTHON_PN}-pyasn1 \
+ ${PYTHON_PN}-pyasn1-modules \
+ ${PYTHON_PN}-pycryptodome \
+ ${PYTHON_PN}-twofish\
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb
new file mode 100644
index 000000000..ce99f2835
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjks_17.1.1.bb
@@ -0,0 +1,2 @@
+require python-pyjks.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc
new file mode 100644
index 000000000..9f9282eac
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt.inc
@@ -0,0 +1,17 @@
+SUMMARY = "JSON Web Token implementation in Python"
+SUMMARY = "JSON Web Token implementation in Python"
+DESCRIPTION = "A Python implementation of JSON Web Token draft 32.\
+ Original implementation was written by https://github.com/progrium"
+HOMEPAGE = "http://github.com/jpadilla/pyjwt"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=68626705a7b513ca8d5f44a3e200ed0c"
+
+SRC_URI[md5sum] = "f7dbe0d62f2087a7605946aeeca02541"
+SRC_URI[sha256sum] = "dacba5786fe3bf1a0ae8673874e29f9ac497860955c501289c63b15d3daae63a"
+
+PYPI_PACKAGE = "PyJWT"
+inherit pypi
+
+RDEPENDS_${PN} = "${PYTHON_PN}-cryptography"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.1.bb
new file mode 100644
index 000000000..f0a77b674
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyjwt_1.6.1.bb
@@ -0,0 +1,2 @@
+require python-pyjwt.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc
new file mode 100644
index 000000000..ba85b9887
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pylint.inc
@@ -0,0 +1,38 @@
+SUMMARY="Pylint is a Python source code analyzer"
+HOMEPAGE= "http://www.pylint.org/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4325afd396febcb659c36b49533135d4"
+
+SRC_URI[md5sum] = "2eb5f3cb8fe567eaf5420dd415012202"
+SRC_URI[sha256sum] = "c77311859e0c2d7932095f30d2b1bfdc4b6fe111f534450ba727a52eae330ef2"
+
+inherit pypi
+
+DEPENDS += "${PYTHON_PN}-pytest-runner-native"
+
+do_install_append(){
+ rm ${D}${bindir}/pylint
+ cat >> ${D}${bindir}/pylint <<EOF
+#!/usr/bin/env ${PYTHON_PN}
+from pylint import run_pylint
+run_pylint()
+EOF
+ chmod 755 ${D}${bindir}/pylint
+ sed -i -e 's:^#!/usr/bin/python:#!/usr/bin/env\ ${PYTHON_PN}:g' ${D}/${PYTHON_SITEPACKAGES_DIR}/pylint/test/data/ascript
+}
+
+PACKAGES =+ "${PN}-tests"
+FILES_${PN}-tests+= " \
+ ${PYTHON_SITEPACKAGES_DIR}/pylint/test/ \
+ ${PYTHON_SITEPACKAGES_DIR}/pylint/testutils.py \
+"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-astroid \
+ ${PYTHON_PN}-isort \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-difflib \
+ ${PYTHON_PN}-netserver \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb
new file mode 100644
index 000000000..7b51d3fbd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pylint_1.8.3.bb
@@ -0,0 +1,4 @@
+inherit setuptools python-dir
+require python-pylint.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-backports-functools-lru-cache"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc
new file mode 100644
index 000000000..7765cc59c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp.inc
@@ -0,0 +1,15 @@
+DESCRIPTION = "Python API for MISP"
+HOMEPAGE = "https://github.com/MISP/PyMISP"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a3639cf5780f71b125d3e9d1dc127c20"
+
+SRC_URI[md5sum] = "d4fee2abb2d7468010b7fe9ebc68b0cb"
+SRC_URI[sha256sum] = "304fbd8862dfde27d767c093de87fec42fc63c70d8393643d1a3b4f765aae78f"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-dateutil \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-jsonschema \
+ ${PYTHON_PN}-requests \
+ ${PYTHON_PN}-six \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.89.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.89.bb
new file mode 100644
index 000000000..1b1fbe956
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pymisp_2.4.89.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pymisp.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc
new file mode 100644
index 000000000..baf3dd547
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Python driver for MongoDB <http://www.mongodb.org>"
+DESCRIPTION = "\
+The PyMongo distribution contains tools for interacting with MongoDB \
+database from Python. The bson package is an implementation of the BSON \
+format for Python. The pymongo package is a native Python driver for \
+MongoDB. The gridfs package is a gridfs implementation on top of pymongo."
+HOMEPAGE = "http://github.com/mongodb/mongo-python-driver"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
+
+SRC_URI[md5sum] = "0d72c87fb93cea0759529befafefce54"
+SRC_URI[sha256sum] = "f7ebcb846962ee40374db2d9014a89bea9c983ae63c1877957c3a0a756974796"
+
+PACKAGES =+ "${PYTHON_PN}-bson"
+
+FILES_${PYTHON_PN}-bson = "${PYTHON_SITEPACKAGES_DIR}/bson/*"
+
+RDEPENDS_${PYTHON_PN}-bson += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-threading \
+"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-bson \
+ ${PYTHON_PN}-pprint \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.6.1.bb
new file mode 100644
index 000000000..b1778b2f1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pymongo_3.6.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pymongo.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc
new file mode 100644
index 000000000..6a3989627
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux.inc
@@ -0,0 +1,11 @@
+SUMMARY = "Linux network configuration library for Python"
+DESCRIPTION = "This library contains Python bindings to ioctl calls"
+SECTION = "devel/python"
+HOMEPAGE = "http://github.com/rlisagor/pynetlinux"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=74e1861736ee959824fe7542323c12e9"
+
+inherit pypi
+
+SRC_URI[md5sum] = "3336e5d4a478acca4e35bf3125b4f883"
+SRC_URI[sha256sum] = "4ad08298c9f5ba15a11cddc639ba8778cabdfc402b51066d9e0a325e5a5b391c"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb
new file mode 100644
index 000000000..c45ad6ad6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pynetlinux_1.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pynetlinux.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc
new file mode 100644
index 000000000..7722e8ecd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl.inc
@@ -0,0 +1,23 @@
+SUMMARY = "Simple Python wrapper around the OpenSSL library"
+HOMEPAGE = "https://pyopenssl.org/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+DEPENDS += "openssl ${PYTHON_PN}-cryptography"
+
+SRC_URI[md5sum] = "d9c5134db8bf3183573b7840954cac94"
+SRC_URI[sha256sum] = "2c10cfba46a52c0b0950118981d61e72c1e5b1aac451ca1bc77de1a679456773"
+
+PYPI_PACKAGE = "pyOpenSSL"
+
+PACKAGES =+ "${PN}-tests"
+FILES_${PN}-tests = "${libdir}/${PYTHON_DIR}/site-packages/OpenSSL/test"
+
+RDEPENDS_${PN}_class-target = " \
+ ${PYTHON_PN}-cryptography \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-threading \
+"
+RDEPENDS_${PN}-tests = "${PN}"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_17.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_17.5.0.bb
new file mode 100644
index 000000000..b7d514613
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyopenssl_17.5.0.bb
@@ -0,0 +1,2 @@
+require python-pyopenssl.inc
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc
new file mode 100644
index 000000000..e30839f87
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing.inc
@@ -0,0 +1,21 @@
+SUMMARY = "Python parsing module"
+HOMEPAGE = "http://pyparsing.wikispaces.com/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=fb46329938e6bc829b256e37d5c1e31a"
+
+SRC_URI[md5sum] = "0214e42d63af850256962b6744c948d9"
+SRC_URI[sha256sum] = "0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-debugger \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb
new file mode 100644
index 000000000..90217f3c3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyparsing_2.2.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyparsing.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc
new file mode 100644
index 000000000..e05de6723
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip.inc
@@ -0,0 +1,12 @@
+DESCRIPTION = "A cross-platform clipboard module for Python. (only handles plain text for now)"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=1ed92115c8f96b19ec34ed09df586e51"
+
+SRC_URI[md5sum] = "d2f6a3129cd6f2518b52bb0b8deeeda7"
+SRC_URI[sha256sum] = "ce829433a9af640e08ee89b20f7c62132714bcc5d77df114044d0fccb8c3b3b8"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-ctypes \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.0.bb
new file mode 100644
index 000000000..6c9fcbd84
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyperclip_1.6.0.bb
@@ -0,0 +1,7 @@
+inherit setuptools
+require python-pyperclip.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb
new file mode 100644
index 000000000..e8ef1aa12
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex-native_0.9.9.bb
@@ -0,0 +1,5 @@
+require python-pyrex_${PV}.bb
+inherit native pythonnative
+DEPENDS = "python-native"
+RDEPENDS_${PN} = ""
+PR = "r3"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch
new file mode 100644
index 000000000..c58c3280e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex/pyrex-fix-optimized-mode.patch
@@ -0,0 +1,15 @@
+Upstream-Status: Pending
+
+Index: Pyrex-0.9.8.4/Pyrex/Distutils/extension.py
+===================================================================
+--- Pyrex-0.9.8.4.orig/Pyrex/Distutils/extension.py
++++ Pyrex-0.9.8.4/Pyrex/Distutils/extension.py
+@@ -15,7 +15,7 @@ except ImportError:
+ warnings = None
+
+ class Extension(_Extension.Extension):
+- _Extension.Extension.__doc__ + \
++ _Extension.Extension.__doc__ or "" + \
+ """pyrex_include_dirs : [string]
+ list of directories to search for Pyrex header files (.pxd) (in
+ Unix form for portability)
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb
new file mode 100644
index 000000000..c4dd2e69b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyrex_0.9.9.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Language for writing Python extension modules"
+DESCRIPTION = "Pyrex is a language specially designed for writing Python extension modules. \
+It's designed to bridge the gap between the nice, high-level, easy-to-use world of Python \
+and the messy, low-level world of C."
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=771d472f53f933033f57eeee7808e5bd"
+SRCNAME = "Pyrex"
+PR = "r4"
+
+SRC_URI = "\
+ http://www.cosc.canterbury.ac.nz/greg.ewing/python/${SRCNAME}/${SRCNAME}-${PV}.tar.gz \
+ file://pyrex-fix-optimized-mode.patch \
+"
+
+SRC_URI[md5sum] = "515dee67d15d4393841e2d60e8341947"
+SRC_URI[sha256sum] = "5f87df06831d0b3412eb4bc9d3fc2ee7bfae1b913d7da8c23ab2bf5699fb6b50"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
+
+FILES_${PN} += "${datadir}${base_libdir}/${PYTHON_DIR}/site-packages/Pyrex/Compiler/Lexicon.pickle"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc
new file mode 100644
index 000000000..9ec9866d8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2.inc
@@ -0,0 +1,25 @@
+SUMMARY = "A pure Python netlink and Linux network configuration library"
+LICENSE = "GPLv2 & Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL.v2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://LICENSE.Apache.v2;md5=34281e312165f843a2b7d1f114fe65ce"
+
+SRC_URI[md5sum] = "9c251543c4282a2f8b1a8d6aa8afc688"
+SRC_URI[sha256sum] = "7afad28ee0a0f3e7c34adaa9f953d00560ed9910203e93f107833b6e8d151171"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-pyroute2:"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-distutils \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-unixadmin \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.4.21.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.4.21.bb
new file mode 100644
index 000000000..f25f1b4ab
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyroute2_0.4.21.bb
@@ -0,0 +1,6 @@
+require python-pyroute2.inc
+inherit setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc
new file mode 100644
index 000000000..52a7e05ce
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial.inc
@@ -0,0 +1,42 @@
+SUMMARY = "Serial Port Support for Python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=d476d94926db6e0008a5b3860d1f5c0d"
+
+SRC_URI[md5sum] = "ed6183b15519a0ae96675e9c3330c69b"
+SRC_URI[sha256sum] = "6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627"
+
+inherit pypi
+
+PACKAGES =+ "${PN}-java ${PN}-osx ${PN}-win32 ${PN}-tools"
+
+FILES_${PN}-java = " \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/*java* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/__pycache__/*java* \
+"
+
+FILES_${PN}-osx = " \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/tools/*osx* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/tools/__pycache__/*osx* \
+"
+
+FILES_${PN}-win32 = " \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/*serialcli* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/__pycache__/*serialcli* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/*win32* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/__pycache__/*win32* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/tools/miniterm* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/tools/__pycache__/miniterm* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/tools/*windows* \
+ ${PYTHON_SITEPACKAGES_DIR}/serial/tools/__pycache__/*windows* \
+"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-fcntl \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb
new file mode 100644
index 000000000..fd852a2bf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyserial_3.4.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-pyserial.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-argparse"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb
new file mode 100644
index 000000000..24759b5d6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pysmi_0.2.2.bb
@@ -0,0 +1,16 @@
+SUMMARY = "SNMP SMI/MIB Parser"
+DESCRIPTION = "A pure-Python implementation of SNMP/SMI MIB \
+ parsing and conversion library. Can produce PySNMP MIB modules. \
+"
+HOMEPAGE = "https://pypi.python.org/pypi/pysmi"
+SECTION = "devel/python"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.rst;md5=d8b1bbadd635f187dee74d999a8c67b8"
+
+SRC_URI[md5sum] = "3b0f71e4e9f730d211f09d8ef5371140"
+SRC_URI[sha256sum] = "2a315cc3e556b3428372b69da663a24d2f0df9e9ab075b022cb133855f25aef7"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "python-ply"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb
new file mode 100644
index 000000000..0b38d58e4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pysnmp_4.3.5.bb
@@ -0,0 +1,25 @@
+SUMMARY = "A pure-Python SNMPv1/v2c/v3 library"
+DESCRIPTION = "SNMP v1/v2c/v3 engine and apps written in pure-Python. \
+ Supports Manager/Agent/Proxy roles, scriptable MIBs, asynchronous \
+ operation (asyncio, twisted, asyncore) and multiple transports.\
+"
+HOMEPAGE = "https://pypi.python.org/pypi/pysnmp"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=280606d9c18f200e03e0c247ac61475a"
+
+SRCNAME = "pysnmp"
+
+SRC_URI = "https://files.pythonhosted.org/packages/source/p/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
+
+SRC_URI[md5sum] = "387aaa23c168ccc0b59775cfdf519fc0"
+SRC_URI[sha256sum] = "38253fe95cea33f352fb36e85f3c2874043401724300c4888df74835161169d2"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+RDEPENDS_${PN} += "python-pycrypto \
+ python-pyasn1 \
+ python-pysmi \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc
new file mode 100644
index 000000000..53ec1b7d8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "A Python SOCKS client module"
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=1d457bcffb9661b45f799d4efee72f16"
+
+SRC_URI[md5sum] = "441c4e3bf5b042f7e70613cd871df26c"
+SRC_URI[sha256sum] = "3fe52c55890a248676fd69dc9e3c4e811718b777834bcaab7a8125cf9deac672"
+
+PYPI_PACKAGE = "PySocks"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-shell \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb
new file mode 100644
index 000000000..8a24e4c49
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pysocks_1.6.8.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pysocks.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc
new file mode 100644
index 000000000..884556570
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "DB-API 2.0 interface for SQLite 3.x"
+HOMEPAGE = "http://github.com/ghaering/pysqlite"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=28ad4f115e06c88bd737372a453369d8"
+
+SRC_URI[md5sum] = "033f17b8644577715aee55e8832ac9fc"
+SRC_URI[sha256sum] = "17d3335863e8cf8392eea71add33dab3f96d060666fe68ab7382469d307f4490"
+
+inherit pypi
+
+DEPENDS += "${PYTHON_PN}-pip"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-datetime \
+ sqlite3 \
+"
+
+FILES_${PN}-doc += "${datadir}"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb
new file mode 100644
index 000000000..95938f2b6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pysqlite_2.8.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pysqlite.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc
new file mode 100644
index 000000000..6dbc99f53
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pystache.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Python implementation of Mustache"
+HOMEPAGE = "https://github.com/defunkt/pystache"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=eb4417802c56384aac71b34505528a60"
+
+SRC_URI[md5sum] = "485885e67a0f6411d5252e69b20a35ca"
+SRC_URI[sha256sum] = "f7bbc265fb957b4d6c7c042b336563179444ab313fb93a719759111eabd3b85a"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-netserver \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb
new file mode 100644
index 000000000..a45501247
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pystache_0.5.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-pystache.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc
new file mode 100644
index 000000000..7546743fb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Invoke py.test as distutils command with dependency resolution"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a33f38bbf47d48c70fe0d40e5f77498e"
+
+SRC_URI[md5sum] = "8f8363a52bbabc4cedd5e239beb2ba11"
+SRC_URI[sha256sum] = "0f7c3a3cf5aead13f54baaa01ceb49e5ae92aba5d3ff1928e81e189c40bc6703"
+
+inherit pypi
+
+DEPENDS += " \
+ ${PYTHON_PN}-setuptools-scm-native"
+
+RDEPENDS_${PN} = "${PYTHON_PN}-py ${PYTHON_PN}-setuptools ${PYTHON_PN}-debugger ${PYTHON_PN}-json \
+ ${PYTHON_PN}-io"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_3.0.bb
new file mode 100644
index 000000000..1765a732d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest-runner_3.0.bb
@@ -0,0 +1,5 @@
+inherit setuptools
+require python-pytest-runner.inc
+
+# Dependency only exists for python2
+RDEPENDS_${PN} += "python-argparse python-compiler"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc
new file mode 100644
index 000000000..4feb9a03c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest.inc
@@ -0,0 +1,25 @@
+SUMMARY = "Simple powerful teting with python"
+HOMEPAGE = "http://pytest.org"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=c39b24965f4aef64222cb35de9d47cc4"
+
+SRC_URI[md5sum] = "1b83a25d45fad893f430fc5031653c56"
+SRC_URI[sha256sum] = "117bad36c1a787e1a8a659df35de53ba05f9f3398fb9e4ac17e80ad5903eb8c5"
+
+SRC_URI_append = " file://0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch \
+ file://pytest_version_fix.patch "
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-attrs \
+ ${PYTHON_PN}-debugger \
+ ${PYTHON_PN}-doctest \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-pluggy \
+ ${PYTHON_PN}-py \
+ ${PYTHON_PN}-setuptools \
+ ${PYTHON_PN}-six \
+"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-pytest:"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch
new file mode 100644
index 000000000..06dfcdfc6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/0001-setup.py-remove-the-setup_requires-for-setuptools-scm.patch
@@ -0,0 +1,32 @@
+From 24a901fd17926e8e05be4ed2e01b0113a2e3a852 Mon Sep 17 00:00:00 2001
+From: Derek Straka <derek@asterius.io>
+Date: Tue, 19 Dec 2017 11:36:39 -0500
+Subject: [PATCH] [PATCH 1/1] setup.py: remove the setup_requires for
+ setuptools-scm
+
+The setup_requires argument forces the download of the egg file for setuptools-scm
+during the do_compile phase. This download is incompatible with the typical fetch
+and mirror structure. The only usage of scm is the generation of the _version.py
+file and in the release tarball it is already correctly created
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index 3eb38ef..1163202 100644
+--- a/setup.py
++++ b/setup.py
+@@ -82,7 +82,6 @@ def main():
+ keywords="test unittest",
+ cmdclass={'test': PyTest},
+ # the following should be enabled for release
+- setup_requires=['setuptools-scm'],
+ python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
+ install_requires=install_requires,
+ extras_require=extras_require,
+--
+2.7.4
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch
new file mode 100644
index 000000000..b373d93e8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest/pytest_version_fix.patch
@@ -0,0 +1,51 @@
+Upstream-Status: Inappropriate (OE specific)
+
+python-pytest: remove fetch during do_compile phase
+commit: c974fbf9ebf185552ab65301e07af44f36517abf
+
+introduced an issue by making the version 0.0.0
+this fixes that
+
+Signed-off-by: Armin Kuster <akuster@mvista.com>
+
+Index: pytest-3.2.2/setup.py
+===================================================================
+--- pytest-3.2.2.orig/setup.py
++++ pytest-3.2.2/setup.py
+@@ -1,5 +1,6 @@
+ import os
+ import sys
++import re
+ import setuptools
+ import pkg_resources
+ from setuptools import setup, Command
+@@ -22,6 +23,18 @@ classifiers = [
+ with open('README.rst') as fd:
+ long_description = fd.read()
+
++def read(*names, **kwargs):
++ with open(os.path.join( *names), 'r') as fp:
++ return fp.read()
++
++def find_version(*file_paths):
++ version_file = read(*file_paths)
++ version_match = re.search(r"^version = ['\']([^'\"]*)['\']",
++ version_file, re.M)
++
++ if version_match:
++ return version_match.group(1)
++ raise RuntimeError("Unable to find version string.")
+
+ def get_environment_marker_support_level():
+ """
+@@ -59,9 +72,7 @@ def main():
+ name='pytest',
+ description='pytest: simple powerful testing with Python',
+ long_description=long_description,
+- use_scm_version={
+- 'write_to': '_pytest/_version.py',
+- },
++ version=find_version("_pytest", "_version.py"),
+ url='http://pytest.org',
+ license='MIT license',
+ platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb
new file mode 100644
index 000000000..201ab050c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytest_3.4.2.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools
+require python-pytest.inc
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-argparse \
+ ${PYTHON_PN}-compiler \
+ ${PYTHON_PN}-funcsigs \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc
new file mode 100644
index 000000000..519487f49
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytz.inc
@@ -0,0 +1,20 @@
+SUMMARY = "World timezone definitions, modern and historical"
+HOMEPAGE = "http://pythonhosted.org/pytz"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4878a915709225bceab739bdc2a18e8d"
+
+inherit pypi
+
+SRC_URI[md5sum] = "f054437920c895dd14a4509fabafe029"
+SRC_URI[sha256sum] = "c06425302f2cf668f1bba7a0a03f3c1d34d4ebeef2c72003da308b3947c7f749"
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-doctest \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.4.bb
new file mode 100755
index 000000000..f2ffc596f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pytz_2018.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pytz.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc
new file mode 100644
index 000000000..cb906c9ec
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev.inc
@@ -0,0 +1,18 @@
+SUMMARY = "A libudev binding"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343"
+
+SRC_URI[md5sum] = "cf4d9db7d772622144ca1be6b5d9353b"
+SRC_URI[sha256sum] = "094b7a100150114748aaa3b70663485dd360457a709bfaaafe5a977371033f2b"
+
+do_configure_prepend() {
+ sed -i "/import pyudev/d" ${S}/setup.py
+ sed -i "s/str(pyudev.__version__)/'${PV}'/g" ${S}/setup.py
+}
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-ctypes \
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-six \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb
new file mode 100644
index 000000000..a3e15014a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyudev_0.21.0.bb
@@ -0,0 +1,9 @@
+require python-pyudev.inc
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-contextlib \
+ ${PYTHON_PN}-subprocess \
+"
+
+inherit pypi setuptools
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc
new file mode 100644
index 000000000..30bbe85a9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb.inc
@@ -0,0 +1,10 @@
+SUMMARY = "PyUSB provides USB access on the Python language"
+HOMEPAGE = "http://pyusb.sourceforge.net/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51691ed11cc2c7ae93e383f60ed49b0f"
+DEPENDS += "libusb1"
+
+SRC_URI[md5sum] = "862b56452c64948c787ad8ef9498590b"
+SRC_URI[sha256sum] = "4e9b72cc4a4205ca64fbf1f3fff39a335512166c151ad103e55c8223ac147362"
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb
new file mode 100644
index 000000000..99a795b22
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyusb_1.0.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-pyusb.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc
new file mode 100644
index 000000000..3fef0cacd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Python support for YAML"
+HOMEPAGE = "http://www.pyyaml.org"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6015f088759b10e0bc2bf64898d4ae17"
+DEPENDS = "libyaml ${PYTHON_PN}-cython-native ${PYTHON_PN}"
+
+PYPI_PACKAGE = "PyYAML"
+inherit pypi
+
+SRC_URI[md5sum] = "4c129761b661d181ebf7ff4eb2d79950"
+SRC_URI[sha256sum] = "592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.12.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.12.bb
new file mode 100644
index 000000000..5a4c92d88
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyyaml_3.12.bb
@@ -0,0 +1,2 @@
+require python-pyyaml.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch
new file mode 100644
index 000000000..2dc3b73f9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq/club-rpath-out.patch
@@ -0,0 +1,26 @@
+diff --git a/setup.py b/setup.py
+index 62df445..1fdbdeb 100755
+--- a/setup.py
++++ b/setup.py
+@@ -213,12 +213,6 @@ def settings_from_prefix(prefix=None, bundle_libzmq_dylib=False):
+ pass
+ # unused rpath args for OS X:
+ # settings['extra_link_args'] = ['-Wl,-rpath','-Wl,$ORIGIN/..']
+- else:
+- settings['runtime_library_dirs'] += ['$ORIGIN/..']
+- elif sys.platform != 'darwin':
+- settings['runtime_library_dirs'] += [
+- os.path.abspath(x) for x in settings['library_dirs']
+- ]
+
+ return settings
+
+@@ -592,8 +586,6 @@ class Configure(build_ext):
+ pass
+ # unused rpath args for OS X:
+ # settings['extra_link_args'] = ['-Wl,-rpath','-Wl,$ORIGIN/../zmq']
+- else:
+- settings['runtime_library_dirs'] = [ os.path.abspath(pjoin('.', 'zmq')) ]
+
+ line()
+ info("Configure: Autodetecting ZMQ settings...")
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_14.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_14.7.0.bb
new file mode 100644
index 000000000..b5baf82df
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-pyzmq_14.7.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Pyzmq provides Zero message queue access for the Python language"
+HOMEPAGE = "http://zeromq.org/bindings:python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING.BSD;md5=11c65680f637c3df7f58bbc8d133e96e"
+DEPENDS = "zeromq"
+
+SRC_URI = "file://club-rpath-out.patch"
+SRC_URI[md5sum] = "87e3abb33af5794db5ae85c667bbf324"
+SRC_URI[sha256sum] = "77994f80360488e7153e64e5959dc5471531d1648e3a4bff14a714d074a38cc2"
+
+inherit pypi setuptools pkgconfig
+
+RDEPENDS_${PN} += "python-multiprocessing"
+
+FILES_${PN}-dbg =+ "${PYTHON_SITEPACKAGES_DIR}/zmq/backend/cython/.debug"
+
+do_compile_prepend() {
+ echo [global] > ${S}/setup.cfg
+ echo zmq_prefix = ${STAGING_DIR_HOST} >> ${S}/setup.cfg
+ echo have_sys_un_h = True >> ${S}/setup.cfg
+ echo skip_check_zmq = True >> ${S}/setup.cfg
+ echo libzmq_extension = False >> ${S}/setup.cfg
+ echo no_libzmq_extension = True >> ${S}/setup.cfg
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc
new file mode 100644
index 000000000..1a65d7314
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-redis.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Python client for Redis key-value store"
+DESCRIPTION = "The Python interface to the Redis key-value store."
+HOMEPAGE = "http://github.com/andymccurdy/redis-py"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=51d9ad56299ab60ba7be65a621004f27"
+
+SRC_URI[md5sum] = "048348d8cfe0b5d0bba2f4d835005c3b"
+SRC_URI[sha256sum] = "a22ca993cea2962dbb588f9f30d0015ac4afcc45bee27d3978c0dbe9e97c6c0f"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb
new file mode 100644
index 000000000..6c3ca8516
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-redis_2.10.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-redis.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc
new file mode 100644
index 000000000..5d6dca5d3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-requests.inc
@@ -0,0 +1,24 @@
+DESCRIPTION = "Python HTTP for Humans."
+HOMEPAGE = "http://python-requests.org"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=979d6a23b143e13ea0e5e3aa81248820"
+
+SRC_URI[md5sum] = "081412b2ef79bdc48229891af13f4d82"
+SRC_URI[sha256sum] = "9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-ndg-httpsclient \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-pyasn1 \
+ ${PYTHON_PN}-pyopenssl \
+ ${PYTHON_PN}-pysocks \
+ ${PYTHON_PN}-urllib3 \
+ ${PYTHON_PN}-chardet \
+ ${PYTHON_PN}-idna \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.18.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.18.4.bb
new file mode 100644
index 000000000..0d7a29f74
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-requests_2.18.4.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-requests.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-zlib"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc
new file mode 100644
index 000000000..461590411
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987.inc
@@ -0,0 +1,8 @@
+SUMMARY = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)"
+LICENSE = "GPLv3+"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=9;md5=2b723edf67b2f3088bc5e339b1ceda2d"
+
+SRC_URI[md5sum] = "aa108c7590902fe609c036864ecb7f84"
+SRC_URI[sha256sum] = "91a7826b0a26c246a5a91bef09c2c0809c713a689be689b9571e78a13f6557a4"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb
new file mode 100644
index 000000000..dcda5aa46
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-rfc3987_1.3.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-rfc3987.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc
new file mode 100644
index 000000000..78bbbc6de
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework.inc
@@ -0,0 +1,26 @@
+SUMMARY = "A Python generic test automation framework"
+DESCRIPTION = "Generic open source test atomation framework for acceptance\
+testing and acceptance test-driven development (ATDD). It has easy-to-use\
+tabular test data syntax and it utilizes the keyword-driven testing approach.\
+Its testing capabilities can be extended by test libraries implemented either\
+with Python or Java, and users can create new higher-level keywords from\
+existing ones using the same syntax that is used for creating test cases."
+HOMEPAGE = "http://robotframework.org"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+inherit pypi
+
+SRC_URI[md5sum] = "ea49a54b9d7e38302712194e85c37eaa"
+SRC_URI[sha256sum] = "2018f233568227f9af8c366f93e243a157b742f3baf5b649ecc9750ac0ee1ff7"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-xml \
+ ${PYTHON_PN}-difflib \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-html \
+ ${PYTHON_PN}-docutils \
+ ${PYTHON_PN}-ctypes \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.2.bb
new file mode 100644
index 000000000..ff7dedb55
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-robotframework_3.0.2.bb
@@ -0,0 +1,6 @@
+inherit setuptools
+require python-robotframework.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc
new file mode 100644
index 000000000..783d05b7e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "Bindings for the scrypt key derivation function library"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-2-Clause;md5=8bef8e6712b1be5aa76af1ebde9d6378"
+HOMEPAGE="https://bitbucket.org/mhallin/py-scrypt/overview"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-scrypt:"
+
+SRC_URI += "file://0001-py-scrypt-remove-the-hard-coded-include-paths.patch"
+
+SRC_URI[md5sum] = "ae8e3263aa31b040c1f9c7f1e1843a56"
+SRC_URI[sha256sum] = "f8239b2d47fa1d40bc27efd231dc7083695d10c1c2ac51a99380360741e0362d"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
new file mode 100644
index 000000000..d535e4326
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt/0001-py-scrypt-remove-the-hard-coded-include-paths.patch
@@ -0,0 +1,26 @@
+From d8db473ce9346cd6254c90e13ac45b3bbde494c4 Mon Sep 17 00:00:00 2001
+From: Derek Straka <derek@asterius.io>
+Date: Sun, 11 Mar 2018 19:55:38 -0400
+Subject: [PATCH] py-scrypt: remove the hard coded include paths
+
+Upstream-Status: Pending
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+---
+ setup.py | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index e36adc4..2ebfbf1 100644
+--- a/setup.py
++++ b/setup.py
+@@ -24,7 +24,6 @@ if sys.platform.startswith('linux'):
+ ('HAVE_SYS_SYSINFO_H', '1'),
+ ('_FILE_OFFSET_BITS', '64')]
+ libraries = ['crypto', 'rt']
+- includes = ['/usr/local/include', '/usr/include']
+ CFLAGS.append('-O2')
+ elif sys.platform.startswith('win32'):
+ define_macros = [('inline', '__inline')]
+--
+2.7.4
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb
new file mode 100644
index 000000000..9fbd00e04
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-scrypt_0.8.6.bb
@@ -0,0 +1,3 @@
+inherit setuptools python-dir
+require python-scrypt.inc
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc
new file mode 100644
index 000000000..ea0e575c4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify.inc
@@ -0,0 +1,16 @@
+HOMEPAGE = "https://github.com/bb4242/sdnotify"
+SUMMARY = "A pure Python implementation of systemd's service notification protocol (sd_notify)"
+
+DESCRIPTION = "\
+ sdnotify is a pure Python implementation of the systemd sd_notify protocol. \
+ This protocol can be used to inform systemd about service start-up completion, \
+ watchdog events, and other service status changes. \
+ Thus, this package can be used to write system services in Python that play nicely with systemd. \
+ "
+
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=cc572ccc4b18a4b7d13be5d01bc8213e"
+
+SRC_URI[md5sum] = "749ddca1c70be1697fecc443fb1fdb16"
+SRC_URI[sha256sum] = "73977fc746b36cc41184dd43c3fe81323e7b8b06c2bb0826c4f59a20c56bb9f1"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb
new file mode 100644
index 000000000..39ae3fb0b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-sdnotify_0.3.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools pypi
+require python-sdnotify.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb
new file mode 100644
index 000000000..69545ebbb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-selectors34_1.2.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Backport of the selectors module from Python 3.4"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=2fae0222c31d6c10488d4ab93a863af7"
+
+SRC_URI[md5sum] = "bc855a1c8839a811476c019dc07d92dd"
+SRC_URI[sha256sum] = "09f5066337f8a76fb5233f267873f89a27a17c10bf79575954894bb71686451c"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-six \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc
new file mode 100644
index 000000000..3f51bc29b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-serpent.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Serialization based on ast.literal_eval"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=acdea68f0e5a89eb6cbfdf54e38c356e"
+
+SRC_URI[md5sum] = "d0c50f1943ff86d830eb3fe40f6dc1e3"
+SRC_URI[sha256sum] = "b6855483d95a03b6aee358363684cd38a3a670240da5bc6da4253079cb07b8df"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.24.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.24.bb
new file mode 100644
index 000000000..0db3cf98a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-serpent_1.24.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-serpent.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc
new file mode 100644
index 000000000..eb66580a6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm.inc
@@ -0,0 +1,14 @@
+SUMMARY = "the blessed package to manage your versions by scm tags"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "1b55f9cedde4a33ab5d286c5f30e86db"
+SRC_URI[sha256sum] = "e163e8a12d2121f77575773cfc2b5988275dc1f1d2541fdf780127c29dbbea9c"
+
+PYPI_PACKAGE = "setuptools_scm"
+inherit pypi
+
+RDEPENDS_${PN}_class-target = "${PYTHON_PN}-py ${PYTHON_PN}-setuptools ${PYTHON_PN}-debugger ${PYTHON_PN}-json"
+RDEPENDS_${PN}_class-native = "${PYTHON_PN}-setuptools-native"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_1.15.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_1.15.7.bb
new file mode 100644
index 000000000..64b36e3a0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-setuptools-scm_1.15.7.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-setuptools-scm.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-argparse"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc
new file mode 100644
index 000000000..e28d51859
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson.inc
@@ -0,0 +1,23 @@
+SUMMARY = "Simple, fast, extensible JSON encoder/decoder for Python"
+HOMEPAGE = "http://cheeseshop.python.org/pypi/simplejson"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=c6338d7abd321c0b50a2a547e441c52e"
+
+SRC_URI[md5sum] = "870bf6257465ce2ee8cad14e2394f7eb"
+SRC_URI[sha256sum] = "4c4ecf20e054716cc1e5a81cadc44d3f4027108d8dd0861d8b1e3bd7a32d4f0a"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-numbers \
+"
+
+PACKAGES =+ "${PN}-tests"
+RDEPENDS_${PN}-tests = "${PN} ${PYTHON_PN}-unittest"
+FILES_${PN}-tests+= " \
+ ${PYTHON_SITEPACKAGES_DIR}/simplejson/tests \
+ ${PYTHON_SITEPACKAGES_DIR}/simplejson/tool.py* \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.13.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.13.2.bb
new file mode 100644
index 000000000..24ad9a960
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-simplejson_3.13.2.bb
@@ -0,0 +1,4 @@
+inherit setuptools
+require python-simplejson.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-re"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb
new file mode 100644
index 000000000..44c9505b3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-singledispatch_3.4.0.3.bb
@@ -0,0 +1,12 @@
+SUMMARY = "functools.singledispatch from Python 3.4"
+DESCRIPTION = "PEP 443 proposed to expose a mechanism in the functools standard library module \
+in Python 3.4 that provides a simple form of generic programming known as single-dispatch \
+generic functions. This library is a backport of this functionality to Python 2.6 - 3.3"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://README.rst;md5=ee3cd67264adc7eb07981f3644dc17dc"
+
+SRC_URI[md5sum] = "af2fc6a3d6cc5a02d0bf54d909785fcb"
+SRC_URI[sha256sum] = "5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c"
+
+inherit pypi setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-six.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-six.inc
new file mode 100644
index 000000000..a5915c116
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-six.inc
@@ -0,0 +1,19 @@
+SUMMARY = "Python 2 and 3 compatibility library"
+HOMEPAGE = "http://pypi.python.org/pypi/six/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=35cec5bf04dd0820d0a18533ea7c774a"
+
+SRC_URI[md5sum] = "d12789f9baf7e9fb2524c0c64f1773f8"
+SRC_URI[sha256sum] = "70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9"
+
+do_compile_append() {
+ ${PYTHON} setup.py -q bdist_egg --dist-dir ./
+}
+do_install_append() {
+ install -m 0644 ${S}/*.egg ${D}/${PYTHON_SITEPACKAGES_DIR}/
+}
+
+RDEPENDS_${PN} += "${PYTHON_PN}-io"
+
+BBCLASSEXTEND = "native nativesdk"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb
new file mode 100644
index 000000000..9075745d7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-six_1.11.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-six.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb
new file mode 100644
index 000000000..8081416ee
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-slip-dbus_0.6.1.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Convenience functions for dbus services in Python 2.x"
+HOMEPAGE = "http://nphilipp.fedorapeople.org/python-slip/"
+DESCRIPTION = "\
+The Simple Library for Python 2.x packages contain miscellaneous code for \
+convenience, extension and workaround purposes. \
+\
+This package provides slip.dbus.service.Object, which is a dbus.service.Object \
+derivative that ends itself after a certain time without being used and/or if \
+there are no clients anymore on the message bus, as well as convenience \
+functions and decorators for integrating a dbus service with PolicyKit."
+
+SECTION = "devel/python"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5574c6965ae5f583e55880e397fbb018"
+SRCNAME = "python-slip"
+
+SRC_URI = "https://github.com/nphilipp/${SRCNAME}/releases/download/${SRCNAME}-${PV}/${SRCNAME}-${PV}.tar.bz2"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools
+
+SRC_URI[md5sum] = "a6d8ee96245fc21785d4c1c062c85f2f"
+SRC_URI[sha256sum] = "bc897f1ab6f5b4989f85548799aaeb84fde67bbba18e40341bfe1d7885c2fd9a"
+
+do_compile_prepend() {
+ sed -e 's/@VERSION@/${PV}/g' setup.py.in > setup.py
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc
new file mode 100644
index 000000000..f472a57f4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-smbus.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Set of i2c tools for linux - Python module"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://smbusmodule.c;beginline=1;endline=17;md5=fa24df321a520ff8e10f203425ab9fa8"
+PR = "r1"
+
+SRC_URI = "${KERNELORG_MIRROR}/software/utils/i2c-tools/i2c-tools-${PV}.tar.gz "
+SRC_URI[md5sum] = "d92a288d70f306d3895e3a7e9c14c9aa"
+SRC_URI[sha256sum] = "5b60daf6f011de0acb61de57dba62f2054bb39f19961d67e0c91610f071ca403"
+
+DEPENDS += "i2c-tools"
+
+S = "${WORKDIR}/i2c-tools-${PV}/py-smbus/"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb
new file mode 100644
index 000000000..1b9577887
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-smbus_4.0.bb
@@ -0,0 +1,2 @@
+inherit distutils
+require python-smbus.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb
new file mode 100644
index 000000000..e4a6d767d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-snakefood_1.4.bb
@@ -0,0 +1,51 @@
+SUMMARY = "Dependency graphing for Python"
+DESCRIPTION = " Generate dependency graphs from Python code. This \
+dependency tracker package has a few distinguishing characteristics \
+\
+ * It uses the AST to parse the Python files. This is very reliable, \
+ it always runs.\
+ * No module is loaded. Loading modules to figure out dependencies is \
+ almost always problem, because a lot of codebases run initialization \
+ code in the global namespace, which often requires additional setup. \
+ Snakefood is guaranteed not to have this problem (it just runs, no \
+ matter what).\
+ * It works on a set of files, i.e. you do not have to specify a single \
+ script, you can select a directory (package or else) or a set of files.\
+ It finds all the Python files recursively automatically.\
+ * Automatic/no configuration: your PYTHONPATH is automatically adjusted \
+ to include the required package roots. It figures out the paths that \
+ are required from the files/directories given as input. You should not \
+ have to setup ANYTHING.\
+ * It does not have to automatically 'follow' dependencies between modules,\
+ i.e. by default it only considers the files and directories you specify \
+ on the command-line and their immediate dependencies. It also has an \
+ option to automatically include only the dependencies within the \
+ packages of the files you specify.\
+ * It follows the UNIX philosophy of small programs that do one thing well:\
+ it consists of a few simple programs whose outputs you combine via \
+ pipes. Graphing dependencies always requires the user to filter and \
+ cluster the filenames, so this is appropriate. You can combine it with \
+ your favourite tools, grep, sed, etc.\
+\
+A problem with dependency trackers that run code is that they are unreliable, \
+due to the dynamic nature of Python (the presence of imports within function \
+calls and __import__ hooks makes it almost impossible to always do the right \
+thing). This script aims at being right 99% of the time, and we think that \
+given the trade-offs, 99% is good enough for 99% of the uses.\
+"
+AUTHOR = "Martin Blais <blais@furius.ca>"
+HOMEPAGE = "http://furius.ca/snakefood"
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI[md5sum] = "56c88667a33d8909b0aabf2ab6903bdf"
+SRC_URI[sha256sum] = "295784668032254e7391ca99ba7060edd3ae4eca1a330ac11627b18ab5923b77"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = " python-logging python-compiler python-shell"
+# the above modules do not have a -native counterpart
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb
new file mode 100644
index 000000000..c5af48dd3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-snimpy_0.8.12.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Interactive SNMP tool"
+DESCRIPTION = "Snimpy is a Python-based tool providing a simple interface to build SNMP query"
+HOMEPAGE = "https://pypi.python.org/pypi/snimpy"
+SECTION = "devel/python"
+
+DEPENDS += "libsmi python-cffi-native python-vcversioner-native"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://docs/license.rst;md5=7c53ab2d1240828625c3e093d049d4f4"
+
+SRC_URI[md5sum] = "6d016b6356db432e6a87ad708eb8fcb6"
+SRC_URI[sha256sum] = "04efcfba867ffb0e10cc8d7f93a553ceb6bdf2ee34e49762749028a2c76096c1"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "python-cffi \
+ python-pycparser \
+ python-pysnmp \
+ python-setuptools \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb
new file mode 100644
index 000000000..a1253112c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-sparts_0.7.3.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Library for rapid service prototyping with minimal boilerplate"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=0c1554636a564da3baf037ac652fc831"
+
+SRC_URI[md5sum] = "6aa8815652c6f5e5e8e5b2ac1813dd87"
+SRC_URI[sha256sum] = "b25707c349079a7c888155e7fdfd8394df2da9aca9c8eee4e205528cb16b7662"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} = "\
+ python-subprocess \
+ python-six \
+ python-argparse \
+ python-re \
+ python-shell \
+ python-threading \
+ python-logging \
+ python-unixadmin \
+ python-distutils \
+ python-daemonize \
+ python-futures \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc
new file mode 100644
index 000000000..94fa8a6c0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater.inc
@@ -0,0 +1,9 @@
+DESCRIPTION = "Media asset management for Python, with glue code for various frameworks"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b810770075a29bf44b96607440e7c801"
+
+SRC_URI[md5sum] = "e8d5dbe36e53d5a35cff227e795e8bbf"
+SRC_URI[sha256sum] = "59fea336d0eed38c1f0bf3181ee1222d0ef45f3a9dd34ebe65e6bfffdd6a65a9"
+
+PYPI_PACKAGE = "speaklater"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb
new file mode 100644
index 000000000..56fd55577
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-speaklater_1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-speaklater.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc
new file mode 100644
index 000000000..1b93763d5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-spidev.inc
@@ -0,0 +1,17 @@
+SUMMARY = "Python bindings for Linux SPI access through spidev"
+DESCRIPTION = "This project contains a python module for interfacing with SPI\
+devices from user space via the spidev linux kernel driver.\
+This is a modified version of the code originally found\
+[here](http://elk.informatik.fh-augsburg.de/da/da-49/trees/pyap7k/lang/py-spi)\
+All code is GPLv2 licensed unless explicitly stated otherwise."
+HOMEPAGE = "http://github.com/doceme/py-spidev"
+SECTION = "devel/python"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=54bdb9022ebb75ab68399cdaab97da60"
+SRCNAME = "spidev"
+
+SRC_URI[md5sum] = "f601676f1bb48b9aa3b3897f95216365"
+SRC_URI[sha256sum] = "09d2b5122f0dd79910713a11f9a0020f71537224bf829916def4fffc0ea59456"
+
+
+inherit pypi
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc
new file mode 100644
index 000000000..0c191ae7d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy.inc
@@ -0,0 +1,20 @@
+DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives \
+application developers the full power and flexibility of SQL"
+HOMEPAGE = "http://www.sqlalchemy.org/"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b1c412c9d8d1ce018f7a9374407c22bb"
+
+PYPI_PACKAGE = "SQLAlchemy"
+inherit pypi
+
+SRC_URI[md5sum] = "03db1c8f8ae911977c0bf3950a4c9c21"
+SRC_URI[sha256sum] = "6b55ec379c11ad696f9371ce8e0de93c7f21134323f56a56a1b0d8fbef17013c"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb
new file mode 100644
index 000000000..53c8fecf7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-sqlalchemy_1.1.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-sqlalchemy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc
new file mode 100644
index 000000000..dca9ea93e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339.inc
@@ -0,0 +1,8 @@
+SUMMARY = "Strict, simple, lightweight RFC3339 function.s"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+SRC_URI[md5sum] = "4d9b635b4df885bc37bc1189d66c9abc"
+SRC_URI[sha256sum] = "5cad17bedfc3af57b399db0fed32771f18fc54bbd917e85546088607ac5e1277"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb
new file mode 100644
index 000000000..b01ea99a3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-strict-rfc3339_0.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-strict-rfc3339.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb
new file mode 100644
index 000000000..f43706923
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-subprocess32_3.2.7.bb
@@ -0,0 +1,15 @@
+SUMMARY = "A backport of the subprocess module from Python 3.2 for use on 2.x"
+DESCRIPTION = "This is a backport of the subprocess standard library module \
+from Python 3.2 - 3.5 for use on Python 2. It includes bugfixes and some new \
+features. On POSIX systems it is guaranteed to be reliable when used in \
+threaded applications. It includes timeout support from Python 3.3 and the \
+run() API from 3.5 but otherwise matches 3.2's API."
+LICENSE = "Python-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d3e62baa8fb96b11a59d3f2cd335d5c0"
+
+SRC_URI[md5sum] = "824c801e479d3e916879aae3e9c15e16"
+SRC_URI[sha256sum] = "1e450a4a4c53bf197ad6402c564b9f7a53539385918ef8f12bdf430a61036590"
+
+inherit pypi setuptools
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
new file mode 100644
index 000000000..5be5de092
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-systemd.inc
@@ -0,0 +1,18 @@
+SUMMARY = "Python interface for libsystemd"
+HOMEPAGE = "https://github.com/systemd/python-systemd"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=4fbd65380cdd255951079008b364516c"
+
+PYPI_PACKAGE = "systemd-python"
+DEPENDS += "systemd (<=234)"
+RDEPENDS_${PN} += "systemd ${PYTHON_PN}-syslog ${PYTHON_PN}-logging"
+REQUIRED_DISTRO_FEATURES = "systemd"
+inherit pypi distro_features_check
+
+SRC_URI[md5sum] = "5071ea5bcb976186e92a3f5e75df221d"
+SRC_URI[sha256sum] = "fd0e44bf70eadae45aadc292cb0a7eb5b0b6372cd1b391228047d33895db83e7"
+
+# allow for common patches for python- and python3-systemd
+FILESEXTRAPATHS_prepend := "${THISDIR}/python-systemd:"
+
+SRC_URI_append_libc-musl = " file://0001-Provide-implementation-of-strndupa-for-musl.patch"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch b/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch
new file mode 100644
index 000000000..d7085a856
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-systemd/0001-Provide-implementation-of-strndupa-for-musl.patch
@@ -0,0 +1,42 @@
+From 8b639f9faf6199e47b9eae0698d01a22917b6abe Mon Sep 17 00:00:00 2001
+From: Tim Orling <timothy.t.orling@linux.intel.com>
+Date: Fri, 29 Dec 2017 09:17:17 -0800
+Subject: [PATCH] Provide implementation of strndupa for musl
+
+Reuse the approach from oe-core:
+/meta/recipes-core/systemd/systemd/0002-src-basic-missing.h-check-for-missing-strndupa.patch
+
+Original patch author: Emil Renner Berthing <systemd@esmil.dk>
+
+Signed-off-by: Tim Orling <timothy.t.orling@linux.intel.com
+---
+Upstream-Status: Pending
+
+ systemd/util.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/systemd/util.c b/systemd/util.c
+index e02c825..277e611 100644
+--- a/systemd/util.c
++++ b/systemd/util.c
+@@ -34,6 +34,17 @@
+
+ #include "util.h"
+
++#if !HAVE_DECL_STRNDUPA
++#define strndupa(s, n) \
++ ({ \
++ const char *__old = (s); \
++ size_t __len = strnlen(__old, (n)); \
++ char *__new = (char *)alloca(__len + 1); \
++ __new[__len] = '\0'; \
++ (char *)memcpy(__new, __old, __len); \
++ })
++#endif
++
+ int safe_atou(const char *s, unsigned *ret_u) {
+ char *x = NULL;
+ unsigned long l;
+--
+2.13.6
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb
new file mode 100644
index 000000000..80f290077
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-systemd_234.bb
@@ -0,0 +1,2 @@
+require python-systemd.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb
new file mode 100644
index 000000000..46a20a5ed
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-tornado-redis_2.4.18.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Tornado-Redis is an asyncronous Redis client for the Tornado Web Server"
+DESCRIPTION = "Tornado-Redis is a Redis client that uses Tornado's native 'tornado-gen' interface. \
+It can be used alongside redis-py in Tornado applications: \
+tornado-redis to subscribe to Pub/Sub notifications and for blocking commands (such as BLPOP, BRPOP, BRPOPLPUSH); \
+redis-py for other commands."
+HOMEPAGE = "https://github.com/leporo/tornado-redis"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=ca307e8f37b5fa7f8dbbec033f7db7de"
+
+SRC_URI[md5sum] = "1c7ec0f645d15400871141c1149e6934"
+SRC_URI[sha256sum] = "8fd3b324158291ad5fb7f5f8dc2e8763b2895556bd2a44f2dd721b703c669046"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "python-tornado"
+
+RDEPENDS_${PN}-test += "${PN} python-tornado"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc
new file mode 100644
index 000000000..29d10da6b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-tornado.inc
@@ -0,0 +1,25 @@
+SUMMARY = "Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed."
+DESCRIPTION = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. \
+By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long \
+polling, WebSockets, and other applications that require a long-lived connection to each user."
+HOMEPAGE = "http://www.tornadoweb.org/en/stable/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://setup.py;beginline=3;endline=15;md5=8d463fc66ff8f275354ffe88d1896e12"
+
+SRC_URI[md5sum] = "a5fc7fd4aea94867609a491ce65786f1"
+SRC_URI[sha256sum] = "6d14e47eab0e15799cf3cdcc86b0b98279da68522caace2bd7ce644287685f0a"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-numbers ${PYTHON_PN}-email \
+ ${PYTHON_PN}-pkgutil ${PYTHON_PN}-html ${PYTHON_PN}-json ${PYTHON_PN}-certifi ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-ctypes"
+
+RDEPENDS_${PN}-test += "${PN} ${PYTHON_PN}-unittest"
+
+PACKAGES =+ "\
+ ${PN}-test \
+"
+
+FILES_${PN}-test = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/*/test \
+ ${libdir}/${PYTHON_DIR}/site-packages/*/testing.py* \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-tornado_4.5.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-tornado_4.5.3.bb
new file mode 100644
index 000000000..193a4db7d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-tornado_4.5.3.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools
+require python-tornado.inc
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-backports-abc \
+ ${PYTHON_PN}-backports-ssl \
+ ${PYTHON_PN}-singledispatch \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc
new file mode 100644
index 000000000..6480ad54f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-twisted.inc
@@ -0,0 +1,247 @@
+DESCRIPTION = "Twisted is an event-driven networking framework written in Python and licensed under the LGPL. \
+Twisted supports TCP, UDP, SSL/TLS, multicast, Unix sockets, a large number of protocols \
+(including HTTP, NNTP, IMAP, SSH, IRC, FTP, and others), and much more."
+HOMEPAGE = "http://www.twistedmatrix.com"
+
+#twisted/topfiles/NEWS:655: - Relicensed: Now under the MIT license, rather than LGPL.
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8a9c2fbfcba7d70504e3ba545e1820ed"
+
+SRC_URI[md5sum] = "6dbedb918f0c7288a4c670f59393ecf8"
+SRC_URI[sha256sum] = "0da1a7e35d5fcae37bc9c7978970b5feb3bc82822155b8654ec63925c05af75c"
+
+PYPI_PACKAGE = "Twisted"
+PYPI_PACKAGE_EXT = "tar.bz2"
+
+do_install_append() {
+ # remove some useless files before packaging
+ find ${D} \( -name "*.bat" -o -name "*.c" -o -name "*.h" \) -exec rm -f {} \;
+}
+
+PACKAGES += "\
+ ${PN}-zsh \
+ ${PN}-test \
+ ${PN}-protocols \
+ ${PN}-conch \
+ ${PN}-mail \
+ ${PN}-names \
+ ${PN}-news \
+ ${PN}-runner \
+ ${PN}-web \
+ ${PN}-words \
+ ${PN}-flow \
+ ${PN}-pair \
+ ${PN}-core \
+"
+
+PACKAGES =+ "\
+ ${PN}-src \
+ ${PN}-bin \
+"
+
+DEPENDS += " \
+ ${PYTHON_PN}-incremental-native \
+"
+
+RDEPENDS_${PN} = "\
+ ${PN}-bin \
+ ${PN}-core \
+ ${PN}-conch \
+ ${PN}-mail \
+ ${PN}-names \
+ ${PN}-runner \
+ ${PN}-web \
+ ${PN}-words \
+"
+
+RDEPENDS_${PN}-core = "${PYTHON_PN}-core ${PYTHON_PN}-zopeinterface ${PYTHON_PN}-incremental ${PYTHON_PN}-constantly ${PYTHON_PN}-hyperlink ${PYTHON_PN}-automat"
+RDEPENDS_${PN}-test = "${PN}"
+RDEPENDS_${PN}-conch = "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-mail = "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-names = "${PN}-core"
+RDEPENDS_${PN}-news = "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-runner = "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-web += "${PN}-core ${PN}-protocols"
+RDEPENDS_${PN}-words += "${PN}-core"
+RDEPENDS_${PN}-flow += "${PN}-core"
+RDEPENDS_${PN}-pair += "${PN}-core"
+RDEPENDS_${PN}-dbg = "${PN}"
+
+ALLOW_EMPTY_${PN} = "1"
+FILES_${PN} = ""
+
+FILES_${PN}-test = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/test \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/*/test \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/haproxy/test/ \
+"
+
+FILES_${PN}-protocols = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/*.py* \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/gps/ \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/mice/ \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/haproxy \
+"
+
+FILES_${PN}-zsh = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zsh \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zshcomp.* \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/twisted-completion.zsh \
+"
+
+FILES_${PN}-conch = " \
+ ${bindir}/ckeygen \
+ ${bindir}/tkconch \
+ ${bindir}/conch \
+ ${bindir}/conchftp \
+ ${bindir}/cftp \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_conch.py* \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/conch \
+"
+
+FILES_${PN}-core = " \
+${bindir}/manhole \
+${bindir}/mktap \
+${bindir}/twistd \
+${bindir}/tap2deb \
+${bindir}/tap2rpm \
+${bindir}/tapconvert \
+${bindir}/tkmktap \
+${bindir}/trial \
+${bindir}/easy_install* \
+${bindir}/pyhtmlizer \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/*.so \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/notestplugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/testplugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_ftp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_inet.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_manhole.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_portforward.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_socks.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_telnet.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_trial.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/dropin.cache \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/application \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/cred \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/enterprise \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/internet \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/manhole \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/manhole \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/persisted \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols\
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python\
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/timeoutqueue.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/filepath.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dxprofile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/plugin.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/htmlizer.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dispatch.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/hook.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/threadpool.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/otp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/usage.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/roots.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/versions.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/urlpath.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/util.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/components.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/logfile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/runtime.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/reflect.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/context.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/threadable.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/rebuild.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/failure.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/lockfile.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/formmethod.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/finalize.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/win32.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/dist.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/shortcut.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zipstream.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/release.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/syslog.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/log.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/compat.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/zshcomp.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/procutils.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/text.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/_twisted_zsh_stub \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/scripts/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/spread/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/tap/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/trial/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/__init__.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/_version.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/copyright.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/im.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/python/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/*.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/topfiles \
+${libdir}/${PYTHON_DIR}/site-packages/Twisted*egg-info \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/logger/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/_threads/ \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/positioning/ \
+"
+
+FILES_${PN}-mail = " \
+${bindir}/mailmail \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_mail.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/mail \
+"
+
+FILES_${PN}-names = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_names.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/names \
+"
+
+FILES_${PN}-news = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_news.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/news \
+"
+
+FILES_${PN}-runner = " \
+${libdir}/site-packages/twisted/runner/portmap.so \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/runner\
+"
+
+FILES_${PN}-web = " \
+${bindir}/websetroot \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_web.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/web\
+"
+
+FILES_${PN}-words = " \
+${bindir}/im \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_words.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/words\
+"
+
+FILES_${PN}-flow = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_flow.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/flow \"
+
+FILES_${PN}-pair = " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/twisted_pair.py* \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/pair \
+"
+
+FILES_${PN}-dbg += " \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*/.debug \
+${libdir}/${PYTHON_DIR}/site-packages/twisted/*/*/.debug \
+"
+
+FILES_${PN}-doc += " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/_pydoctortemplates/ \
+"
+
+RDEPENDS_{PN}-src = "${PN}"
+FILES_${PN}-src = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/*.py \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/*/*.py \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/*/*/*.py \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-twisted_17.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-twisted_17.9.0.bb
new file mode 100644
index 000000000..2be1709d0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-twisted_17.9.0.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools
+require python-twisted.inc
+
+RDEPENDS_${PN}-core += "${PYTHON_PN}-contextlib"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc
new file mode 100644
index 000000000..79ab285e5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-twofish.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Bindings for the Twofish implementation by Niels Ferguson"
+DESCRIPTION = "Bindings for the Twofish implementation by Niels Ferguson\
+ libtwofish-dev."
+HOMEPAGE = "http://github.com/keybase/python-twofish"
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=33a63abf6d7567b1689d8ce69f00e43b"
+
+SRC_URI[md5sum] = "d7d22f16dc4ffa0e3ae2200654033abe"
+SRC_URI[sha256sum] = "b09d8bb50d33b23ff34cafb1f9209f858f752935c6a5c901efb92a41acb830fa"
+
+inherit pypi
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb
new file mode 100644
index 000000000..85b021594
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-twofish_0.3.0.bb
@@ -0,0 +1,2 @@
+require python-twofish.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc
new file mode 100644
index 000000000..a0ee6b24b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-typing.inc
@@ -0,0 +1,9 @@
+SUMMARY = "Simple Python module defined by PEP 484."
+HOMEPAGE = "https://github.com/python/typing"
+LICENSE = "PSF"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=64fc2b30b67d0a8423c250e0386ed72f"
+
+SRC_URI[md5sum] = "5b2ade08d83be488f17b5fe587c27c74"
+SRC_URI[sha256sum] = "d400a9344254803a2368533e4533a4200d21eb7b6b729c173bc38201a74db3f2"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb
new file mode 100644
index 000000000..04ce063c9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-typing_3.6.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-typing.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc
new file mode 100644
index 000000000..c3d0bfeed
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ujson.inc
@@ -0,0 +1,15 @@
+SUMMARY = "Ultra fast JSON encoder and decoder for Python"
+DESCRIPTION = "UltraJSON is an ultra fast JSON encoder and decoder written in pure C with bindings for Python 2.5+ and 3."
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=88df8e78b9edfd744953862179f2d14e"
+
+SRC_URI[md5sum] = "42f77b0cce686dfa4da2e68480b1dd24"
+SRC_URI[sha256sum] = "f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86"
+
+inherit pypi
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb
new file mode 100644
index 000000000..b3c6ae66f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-ujson_1.35.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-ujson.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc
new file mode 100644
index 000000000..fc1206201
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Unified diff parsing/metadata extraction library"
+HOMEPAGE = "http://github.com/matiasb/python-unidiff"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=4c434b08ef42fea235bb019b5e5a97b3"
+
+SRC_URI[md5sum] = "47f669d7273541fec45e4cc0fba8d8e9"
+SRC_URI[sha256sum] = "9c9ab5fb96b6988b4cd5def6b275492442c04a570900d33aa6373105780025bc"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-io \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb
new file mode 100644
index 000000000..bdb3d27f9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-unidiff_0.5.5.bb
@@ -0,0 +1,2 @@
+require python-unidiff.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc
new file mode 100644
index 000000000..cf79926a6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3.inc
@@ -0,0 +1,19 @@
+SUMMARY = "Python HTTP library with thread-safe connection pooling, file post support, sanity friendly, and more"
+HOMEPAGE = "https://github.com/shazow/urllib3"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=ea114851ad9a8c311aac8728a681a067"
+
+SRC_URI[md5sum] = "0da7bed3fe94bf7dc59ae37885cc72f7"
+SRC_URI[sha256sum] = "cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-certifi \
+ ${PYTHON_PN}-cryptography \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-idna \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-pyopenssl \
+ ${PYTHON_PN}-threading \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.22.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.22.bb
new file mode 100644
index 000000000..6c81f1db9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-urllib3_1.22.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-urllib3.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb
new file mode 100644
index 000000000..cd6fa8dff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-vcversioner_2.16.0.0.bb
@@ -0,0 +1,25 @@
+SUMMARY = "Python vcversioner, automagically update the project's version"
+HOMEPAGE = "https://github.com/habnabit/vcversioner"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=827a7a91a8d20d3c666b665cd96db8e3"
+
+SRC_URI[md5sum] = "aab6ef5e0cf8614a1b1140ed5b7f107d"
+SRC_URI[sha256sum] = "dae60c17a479781f44a4010701833f1829140b1eeccd258762a74974aa06e19b"
+
+inherit pypi setuptools
+
+do_compile_append() {
+ ${PYTHON} setup.py -q bdist_egg --dist-dir ./
+}
+
+do_install_append() {
+ install -m 0644 ${S}/vcversioner*.egg ${D}/${PYTHON_SITEPACKAGES_DIR}/
+}
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-subprocess \
+ "
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc
new file mode 100644
index 000000000..8c2288cf0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-visitor.inc
@@ -0,0 +1,6 @@
+SUMMARY = "A tiny pythonic visitor implementation."
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=8227180126797a0148f94f483f3e1489"
+
+SRC_URI[md5sum] = "94a024ed0ec1b02b4497c15267d319ca"
+SRC_URI[sha256sum] = "2c737903b2b6864ebc6167eef7cf3b997126f1aa94bdf590f90f1436d23e480a"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb
new file mode 100644
index 000000000..eee25a543
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-visitor_0.1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-visitor.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.5.bb
new file mode 100644
index 000000000..d2f343eb1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-vobject_0.9.5.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Python package for parsing and generating vCard and vCalendar files"
+HOMEPAGE = "http://vobject.skyhouseconsulting.com/"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE-2.0.txt;md5=3b83ef96387f14655fc854ddc3c6bd57"
+
+SRC_URI[md5sum] = "aa629d6ae95db5edfd5b2402eb1073cb"
+SRC_URI[sha256sum] = "0f56cae196303d875682b9648b4bb43ffc769d2f0f800958e0a506af867b1243"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-dateutil \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc
new file mode 100644
index 000000000..1429450bb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth.inc
@@ -0,0 +1,8 @@
+SUMMARY = "Library for building powerful interactive command lines in Python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=11fba47286258744a6bc6e43530c32a1"
+
+SRC_URI[md5sum] = "b3b6a0a08f0c8a34d1de8cf44150a4ad"
+SRC_URI[sha256sum] = "3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb
new file mode 100644
index 000000000..ef107c16a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-wcwidth_0.1.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-wcwidth.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc
new file mode 100644
index 000000000..a02bbbbed
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Simple Python module for working with HTML/CSS color definitions."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=197add016087e6884a012b0f185d44ad"
+
+SRC_URI[md5sum] = "40890db38b2a856e526a568864025fe6"
+SRC_URI[sha256sum] = "030562f624467a9901f0b455fef05486a88cfb5daa1e356bd4aacea043850b59"
+
+RDEPENDS_${PN}_class-target = "\
+ ${PYTHON_PN}-stringold \
+"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb
new file mode 100644
index 000000000..a0b6708ca
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-webcolors_1.8.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-webcolors.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb
new file mode 100644
index 000000000..7a6437dc5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-webdav_0.1.2.bb
@@ -0,0 +1,19 @@
+DESCRIPTION = "This project aims to provide an object-oriented Python WebDAV client-side library\
+ based on Python`s standard httplib and Greg Stein`s davlib.\
+ The client shall fully support RFCs 4918 (basic specification),\
+ 3744 (access control), and 3253 (versioning)."
+SECTION = "devel/python"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://src/webdav/WebdavClient.py;endline=15;md5=a1520fad859feb7b0d7f05277bc6ce48"
+HOMEPAGE = "http://sourceforge.net/projects/pythonwebdavlib/"
+SRCNAME = "Python_WebDAV_Library"
+DEPENDS = "python"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/pythonwebdavlib/Python%20WebDAV%20Library%20-%20${PV}/${SRCNAME}-${PV}.zip"
+SRC_URI[md5sum] = "8e49e0ecc5b4327c4f752a544ee10e1a"
+SRC_URI[sha256sum] = "72c029ad1e25de950f59c2f1812d009d2c1691b70e4b5b09f1af9006e8fd5f23"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc
new file mode 100644
index 000000000..34ca7066b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings.inc
@@ -0,0 +1,13 @@
+SUMMARY = "Character encoding aliases for legacy web content"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e910b35b0ef4e1f665b9a75d6afb7709"
+
+SRC_URI[md5sum] = "32f6e261d52e57bf7e1c4d41546d15b8"
+SRC_URI[sha256sum] = "b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
+
+inherit pypi
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-json \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb
new file mode 100644
index 000000000..5de2ed1d7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-webencodings_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-webencodings.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc
new file mode 100644
index 000000000..c04a4e0c4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug.inc
@@ -0,0 +1,47 @@
+SUMMARY = "The Swiss Army knife of Python web development"
+DESCRIPTION = "\
+Werkzeug started as simple collection of various utilities for WSGI \
+applications and has become one of the most advanced WSGI utility modules. \
+It includes a powerful debugger, full featured request and response objects, \
+HTTP utilities to handle entity tags, cache control headers, HTTP dates, \
+cookie handling, file uploads, a powerful URL routing system and a bunch \
+of community contributed addon modules."
+HOMEPAGE = "http://werkzeug.pocoo.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=ed9a0b7c0254616d72dadb98b293ef1b"
+
+SRC_URI[md5sum] = "6d20b5be2d245be4ac7706cc390d130c"
+SRC_URI[sha256sum] = "c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c"
+
+PYPI_PACKAGE = "Werkzeug"
+
+CLEANBROKEN = "1"
+
+PACKAGES =+ "${PN}-tests"
+FILES_${PN}-tests+= " \
+ ${PYTHON_SITEPACKAGES_DIR}/werkzeug/test* \
+ ${PYTHON_SITEPACKAGES_DIR}/werkzeug/__pycache__/test* \
+ ${PYTHON_SITEPACKAGES_DIR}/werkzeug/contrib/test* \
+ ${PYTHON_SITEPACKAGES_DIR}/werkzeug/contrib/__pycache__/test* \
+"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-difflib \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-html \
+ ${PYTHON_PN}-io \
+ ${PYTHON_PN}-json \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pkgutil \
+ ${PYTHON_PN}-pprint \
+ ${PYTHON_PN}-threading \
+ ${PYTHON_PN}-unixadmin \
+"
+
+RDEPENDS_${PN}-tests = " \
+ ${PN} \
+ ${PYTHON_PN}-unittest \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb
new file mode 100644
index 000000000..db41161b3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-werkzeug_0.14.1.bb
@@ -0,0 +1,7 @@
+inherit pypi setuptools
+require python-werkzeug.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+ ${PYTHON_PN}-zlib \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc
new file mode 100644
index 000000000..a4ca5dcd4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh.inc
@@ -0,0 +1,24 @@
+SUMMARY = "Fast, pure-Python full text indexing, search, and spell checking library."
+DESCRIPTION = "\
+Whoosh is a fast, featureful full-text indexing and searching library \
+implemented in pure Python. Programmers can use it to easily add search \
+functionality to their applications and websites. Every part of how \
+Whoosh works can be extended or replaced to meet your needs exactly."
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=05303186defc6141143629961c7c8a60"
+
+SRC_URI[md5sum] = "893433e9c0525ac043df33e6e04caab2"
+SRC_URI[sha256sum] = "e0857375f63e9041e03fedd5b7541f97cf78917ac1b6b06c1fcc9b45375dda69"
+
+PYPI_PACKAGE = "Whoosh"
+PYPI_PACKAGE_EXT = "zip"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-email \
+ ${PYTHON_PN}-multiprocessing \
+ ${PYTHON_PN}-netclient \
+ ${PYTHON_PN}-numbers \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-shell \
+ ${PYTHON_PN}-stringold \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb
new file mode 100644
index 000000000..3b4291f40
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-whoosh_2.7.4.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools
+require python-whoosh.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-subprocess \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc
new file mode 100644
index 000000000..c85548fb4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt.inc
@@ -0,0 +1,15 @@
+SUMMARY = "A Python module for decorators, wrappers and monkey patching."
+HOMEPAGE = "http://wrapt.readthedocs.org/"
+LICENSE = "BSD"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=61c27930012e86b3dc7e36f92e83c4d8"
+
+SRC_URI[md5sum] = "e1346f31782d50401f81c2345b037076"
+SRC_URI[sha256sum] = "d4d560d479f2c21e1b5443bbd15fe7ec4b37fe7e53d335d3b9b0a7b1226fe3c6"
+
+inherit pypi
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-stringold \
+ ${PYTHON_PN}-threading \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb
new file mode 100644
index 000000000..bb4247657
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-wrapt_1.10.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools
+require python-wrapt.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc
new file mode 100644
index 000000000..916697fcf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms.inc
@@ -0,0 +1,16 @@
+DESCRIPTION = "A flexible forms validation and rendering library for python web development."
+HOMEPAGE = "https://pypi.python.org/pypi/WTForms"
+SECTION = "devel/python"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=c459accc90c6ed6a94878c8fe0535be2"
+
+SRC_URI[md5sum] = "6938a541fafd1a1ae2f6b9b88588eef2"
+SRC_URI[sha256sum] = "ffdf10bd1fa565b8233380cb77a304cd36fd55c73023e91d4b803c96bc11d46f"
+
+PYPI_PACKAGE = "WTForms"
+PYPI_PACKAGE_EXT = "zip"
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-netserver \
+ ${PYTHON_PN}-numbers \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.1.bb
new file mode 100644
index 000000000..fdb015e8a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-wtforms_2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-wtforms.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc
new file mode 100644
index 000000000..d1ab05d4f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd.inc
@@ -0,0 +1,12 @@
+SUMMARY = "Library for developers to extract data from Microsoft Excel (tm) spreadsheet files"
+DESCRIPTION = "Extract data from Excel spreadsheets (.xls and .xlsx,\
+ versions 2.0 onwards) on any platform. Pure Python (2.6, 2.7, 3.2+). \
+Strong support for Excel dates. Unicode-aware."
+HOMEPAGE = "http://www.python-excel.org/"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=08bd814936237b6e1355e6370b24b2c1"
+
+SRC_URI[md5sum] = "b85c9916ac755cad489a9005f5a0d390"
+SRC_URI[sha256sum] = "8a21885513e6d915fe33a8ee5fdfa675433b61405ba13e2a69e62ee36828d7e2"
+
+RDEPENDS_${PN} += "${PYTHON_PN}-compression ${PYTHON_PN}-io ${PYTHON_PN}-pprint ${PYTHON_PN}-shell"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb
new file mode 100644
index 000000000..3a4d709eb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-xlrd_1.1.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-xlrd.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc
new file mode 100644
index 000000000..d13cb83f6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome.inc
@@ -0,0 +1,17 @@
+DESCRIPTION = "Font Awesome icons packaged for setuptools (easy_install) / pip."
+HOMEPAGE = "https://pypi.python.org/pypi/XStatic-Font-Awesome"
+SECTION = "devel/python"
+LICENSE = "Apache-2"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=313d021898694cd2b0ea6508bdfe51a2"
+
+PYPI_PACKAGE = "XStatic-Font-Awesome"
+
+inherit pypi
+
+SRC_URI[md5sum] = "141a0e9a7e21e82f922573a00ae0c166"
+SRC_URI[sha256sum] = "e01fb480caaa7c7963dcb3328a4700e631bef6070db0e8b685816d220e685f6c"
+
+DEPENDS += " \
+ ${PYTHON_PN}-xstatic \
+ ${PYTHON_PN}-pip \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb
new file mode 100644
index 000000000..41e85f4a9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic-font-awesome_4.7.0.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-xstatic-font-awesome.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc
new file mode 100644
index 000000000..f7c7db99a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "XStatic base package with minimal support code"
+HOMEPAGE = "https://pypi.python.org/pypi/XStatic"
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://README.txt;md5=36a1e7eaa71e1bd07b8d2247839f228e"
+
+PYPI_PACKAGE = "XStatic"
+
+SRC_URI[md5sum] = "7064b5ea7fd1ee990e0ae0538301d9bc"
+SRC_URI[sha256sum] = "0ec93d7c66ebb9e0d31b664753437dc8634cb66e13310cb47c9eb1e0bc66d726"
+
+DEPENDS += " \
+ ${PYTHON_PN}-pip \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb
new file mode 100644
index 000000000..807303704
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-xstatic_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools
+require python-xstatic.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc
new file mode 100644
index 000000000..651ce7731
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-yappi.inc
@@ -0,0 +1,16 @@
+SUMMARY = "Yet Another Python Profiler"
+HOMEPAGE = "http://yappi.googlecode.com/"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=6b131c3041637f6a5175a43112dde05c"
+
+SRC_URI[md5sum] = "dc56240575c99938a924eaeb7c0d8beb"
+SRC_URI[sha256sum] = "5f657129e1b9b952379ffbc009357d0dcdb58c50f3bfe88ffbb992e4b27b263c"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-pickle \
+ ${PYTHON_PN}-threading \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb
new file mode 100644
index 000000000..a3bdde5c2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-yappi_0.98.bb
@@ -0,0 +1,2 @@
+require python-yappi.inc
+inherit setuptools
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc b/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc
new file mode 100644
index 000000000..1fab2cc7f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface.inc
@@ -0,0 +1,22 @@
+SUMMARY = "Interface definitions for Zope products"
+LICENSE = "ZPL-2.1"
+LIC_FILES_CHKSUM = "file://PKG-INFO;beginline=8;endline=8;md5=e54fd776274c1b7423ec128974bd9d46"
+
+SRC_URI[md5sum] = "8700a4f527c1203b34b10c2b4e7a6912"
+SRC_URI[sha256sum] = "d6d26d5dfbfd60c65152938fcb82f949e8dada37c041f72916fef6621ba5c5ce"
+
+PYPI_PACKAGE = "zope.interface"
+
+PACKAGES =. "${PN}-test "
+
+RPROVIDES_${PN} += "zope-interfaces"
+
+RDEPENDS_${PN}_class-target += "${PYTHON_PN}-datetime"
+
+FILES_${PN}-dbg += "${PYTHON_SITEPACKAGES_DIR}/*.egg/*/*/.debug"
+FILES_${PN}-dev += "${PYTHON_SITEPACKAGES_DIR}/zope/interface/*.c"
+FILES_${PN}-doc += "${PYTHON_SITEPACKAGES_DIR}/zope/interface/*.txt"
+FILES_${PN}-test += " \
+ ${PYTHON_SITEPACKAGES_DIR}/zope/interface/tests \
+ ${PYTHON_SITEPACKAGES_DIR}/zope/interface/common/tests \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.4.3.bb
new file mode 100644
index 000000000..1bdfd4d37
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python-zopeinterface_4.4.3.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools
+require python-zopeinterface.inc
+
+RDEPENDS_${PN}-test += "python-unittest python-doctest"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_0.9.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_0.9.8.bb
new file mode 100644
index 000000000..e248fe7ce
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-alembic_0.9.8.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-alembic.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb
new file mode 100644
index 000000000..199e225b2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-anyjson_0.3.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-anyjson.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb
new file mode 100644
index 000000000..d24e1d8b6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-appdirs_1.4.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-appdirs.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb
new file mode 100644
index 000000000..cfbe57520
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-asn1crypto_0.24.0.bb
@@ -0,0 +1,6 @@
+inherit setuptools3
+require python-asn1crypto.inc
+
+RDEPENDS_${PN}_class-target += " \
+ ${PYTHON_PN}-shell \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.3.bb
new file mode 100644
index 000000000..6e32c288f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-astroid_1.6.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-astroid.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb
new file mode 100644
index 000000000..e80648c8c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-attr_0.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-attr.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_17.4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_17.4.0.bb
new file mode 100644
index 000000000..c34693f50
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-attrs_17.4.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-attrs.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.6.0.bb
new file mode 100644
index 000000000..2c747643f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-automat_0.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-automat.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.3.1.bb
new file mode 100644
index 000000000..c43649dbf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-aws-iot-device-sdk-python_1.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-aws-iot-device-sdk-python.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.5.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.5.3.bb
new file mode 100644
index 000000000..0715d59f4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-babel_2.5.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-babel.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb
new file mode 100644
index 000000000..d2ec9e386
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bcrypt_3.1.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-bcrypt.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb
new file mode 100644
index 000000000..d98df11e3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-beautifulsoup4.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.1.bb
new file mode 100644
index 000000000..7ee444dc9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-bitarray_0.8.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-bitarray.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb
new file mode 100644
index 000000000..924b3cf51
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-blinker_1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-blinker.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.1.0.bb
new file mode 100644
index 000000000..aaa9e811c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-can_2.1.0.bb
@@ -0,0 +1,7 @@
+require python-can.inc
+inherit pypi setuptools3
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-codecs \
+ ${PYTHON_PN}-compression \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.13.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.13.0.bb
new file mode 100644
index 000000000..34f149d3f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cassandra-driver_3.13.0.bb
@@ -0,0 +1,8 @@
+inherit setuptools3
+require python-cassandra-driver.inc
+
+# Requires concurrent which is currently in -misc
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-misc \
+ ${PYTHON_PN}-numbers \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.1.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.1.18.bb
new file mode 100644
index 000000000..70f674b22
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-certifi_2018.1.18.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-certifi.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb
new file mode 100644
index 000000000..e88808434
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cffi_1.11.5.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-cffi.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb
new file mode 100644
index 000000000..038043c56
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-chardet_3.0.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-chardet.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb
new file mode 100644
index 000000000..192064404
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-click_6.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-click.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb
new file mode 100644
index 000000000..770cba596
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-configparser_3.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-configparser.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb
new file mode 100644
index 000000000..3f667540d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-constantly_15.1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-constantly.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.2.bb
new file mode 100644
index 000000000..c983e0b5d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-coverage_4.4.2.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Code coverage measurement for Python"
+HOMEPAGE = "https://coverage.readthedocs.io"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=2ee41112a44fe7014dce33e26468ba93"
+
+SRC_URI[md5sum] = "29a9fe85377e0f7327cf5db1e335483f"
+SRC_URI[sha256sum] = "309d91bd7a35063ec7a0e4d75645488bfab3f0b66373e7722f23da7f5b0f34cc"
+
+inherit pypi setuptools3
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.1.4.bb
new file mode 100644
index 000000000..58994ffff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography-vectors_2.1.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-cryptography-vectors.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest
new file mode 100644
index 000000000..0ba239c2a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography/run-ptest
@@ -0,0 +1,2 @@
+#!/bin/sh
+py.test
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.1.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.1.4.bb
new file mode 100644
index 000000000..195923343
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cryptography_2.1.4.bb
@@ -0,0 +1,8 @@
+inherit pypi setuptools3
+require python-cryptography.inc
+
+LDSHARED += "-pthread"
+
+SRC_URI += " \
+ file://run-ptest \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.2.bb
new file mode 100644
index 000000000..2ce6bdbd6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-cython_0.28.2.bb
@@ -0,0 +1,18 @@
+inherit setuptools3
+require python-cython.inc
+
+RDEPENDS_${PN} += "\
+ python3-setuptools \
+"
+
+# running build_ext a second time during install fails, because Python
+# would then attempt to import cythonized modules built for the target
+# architecture.
+DISTUTILS_INSTALL_ARGS += "--skip-build"
+
+do_install_append() {
+ # rename scripts that would conflict with the Python 2 build of Cython
+ mv ${D}${bindir}/cython ${D}${bindir}/cython3
+ mv ${D}${bindir}/cythonize ${D}${bindir}/cythonize3
+ mv ${D}${bindir}/cygdb ${D}${bindir}/cygdb3
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.2.bb
new file mode 100644
index 000000000..1d2baf55c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dateutil_2.7.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-dateutil.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb
new file mode 100644
index 000000000..844cbdc9a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-decorator_4.3.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-decorator.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb
new file mode 100644
index 000000000..10519111f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-django-south_1.0.2.bb
@@ -0,0 +1,2 @@
+require python-django-south.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.10.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.10.bb
new file mode 100644
index 000000000..e1e38c322
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-django_1.11.10.bb
@@ -0,0 +1,2 @@
+require python-django.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb
new file mode 100644
index 000000000..ce4dfdc74
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dnspython_1.15.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-dnspython.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb
new file mode 100644
index 000000000..5304ccc18
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-dominate_2.3.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-dominate.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb
new file mode 100644
index 000000000..8ad2b869d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-editor_1.0.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-editor.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb
new file mode 100644
index 000000000..3a92b6ec9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-evdev_0.7.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-evdev.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb
new file mode 100644
index 000000000..95a5405f3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-feedformatter_0.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-feedformatter.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb
new file mode 100644
index 000000000..104e7c28f
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-babel_0.11.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-babel.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb
new file mode 100644
index 000000000..877c75436
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-bootstrap_3.3.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-bootstrap.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb
new file mode 100644
index 000000000..2d23fe167
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-login_0.4.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-login.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
new file mode 100644
index 000000000..0b963be56
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-mail_0.9.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-mail.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.1.1.bb
new file mode 100644
index 000000000..c98cbfddb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-migrate_2.1.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-migrate.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
new file mode 100644
index 000000000..d25115251
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-nav_0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-nav.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb
new file mode 100644
index 000000000..2102554b6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-pymongo_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-pymongo.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb
new file mode 100644
index 000000000..6bff59a56
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-restful_0.3.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-flask-restful.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb
new file mode 100644
index 000000000..9f885191b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-script_2.0.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-script.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb
new file mode 100644
index 000000000..07f45bcff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-sqlalchemy_2.3.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-sqlalchemy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb
new file mode 100644
index 000000000..758c2acf7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-uploads_0.2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-uploads.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
new file mode 100644
index 000000000..251017f81
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-user_0.6.19.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-user.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb
new file mode 100644
index 000000000..52362a865
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-wtf_0.14.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-wtf.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb
new file mode 100644
index 000000000..5412befdb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask-xstatic_0.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask-xstatic.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_0.12.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_0.12.2.bb
new file mode 100644
index 000000000..cd439900c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-flask_0.12.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-flask.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb
new file mode 100644
index 000000000..1f172e586
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-gevent_1.2.2.bb
@@ -0,0 +1,3 @@
+require python-gevent.inc
+inherit setuptools3
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.13.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.13.bb
new file mode 100644
index 000000000..1aedf7fa8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-greenlet_0.4.13.bb
@@ -0,0 +1,2 @@
+inherit distutils3
+require python-greenlet.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb
new file mode 100644
index 000000000..6bd8b49f5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-html5lib_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-html5lib.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb
new file mode 100644
index 000000000..04464ac59
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-humanize_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-humanize.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_17.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_17.3.1.bb
new file mode 100644
index 000000000..70813bf34
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-hyperlink_17.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-hyperlink.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.6.bb
new file mode 100644
index 000000000..a08ca714a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-idna_2.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-idna.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb
new file mode 100644
index 000000000..0f04df4a6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-incremental_17.5.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-incremental.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb
new file mode 100644
index 000000000..4a332b53b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-iso8601_0.1.12.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-iso8601.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb
new file mode 100644
index 000000000..755b3e2f2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-isort_4.3.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-isort.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb
new file mode 100644
index 000000000..a71c20f0e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-itsdangerous_0.24.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3
+require python-itsdangerous.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-compression \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb
new file mode 100644
index 000000000..0ec23ba99
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-javaobj-py3_0.2.4.bb
@@ -0,0 +1,2 @@
+require python-javaobj-py3.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb
new file mode 100644
index 000000000..61156b630
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-jinja2_2.10.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-jinja2.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb
new file mode 100644
index 000000000..73efceeed
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpatch_1.23.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-jsonpatch.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb
new file mode 100644
index 000000000..8d0a09b43
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonpointer_2.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-jsonpointer.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb
new file mode 100644
index 000000000..926990747
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-jsonschema_2.6.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-jsonschema.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb
new file mode 100644
index 000000000..0ca58c7b7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-langtable_0.0.38.bb
@@ -0,0 +1,29 @@
+DESCRIPTION = "langtable is used to guess reasonable defaults for locale,\
+keyboard, territory"
+HOMEPAGE = "https://github.com/mike-fabian/langtable/"
+LICENSE = "GPLv3+"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "35687ca957b746f153a6872139462b1443f8cad1"
+PV = "0.0.38+git${SRCPV}"
+SRC_URI = "git://github.com/mike-fabian/langtable.git;branch=master \
+"
+
+inherit setuptools3 python3native
+
+DISTUTILS_INSTALL_ARGS = "--prefix=${D}/${prefix} \
+ --install-data=${D}/${datadir}/langtable"
+
+FILES_${PN} += "${datadir}/*"
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-compression \
+ ${PYTHON_PN}-doctest \
+ ${PYTHON_PN}-logging \
+ ${PYTHON_PN}-xml \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb
new file mode 100644
index 000000000..150e12fd4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-lazy-object-proxy_1.3.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-lazy-object-proxy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.1.bb
new file mode 100644
index 000000000..ff4bc7faa
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-lxml_4.2.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-lxml.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb
new file mode 100644
index 000000000..765e3c906
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-markupsafe_1.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-markupsafe.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb
new file mode 100644
index 000000000..096d7ddcb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-msgpack_0.5.6.bb
@@ -0,0 +1,2 @@
+require python-msgpack.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb
new file mode 100644
index 000000000..7f9cd5564
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-multidict_3.3.2.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Multidicts are useful for working with HTTP headers, URL query args etc."
+HOMEPAGE = "https://github.com/aio-libs/multidict/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e74c98abe0de8f798ca609137f9cef4a"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "06ca91d993de2d04c7ee6df0cbb44ea2"
+SRC_URI[sha256sum] = "f82e61c7408ed0dce1862100db55595481911f159d6ddec0b375d35b6449509b"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.4.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.4.4.bb
new file mode 100644
index 000000000..3f07b2ed2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ndg-httpsclient_0.4.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-ndg-httpsclient.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb
new file mode 100644
index 000000000..30416a4ff
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-netaddr_0.7.19.bb
@@ -0,0 +1,2 @@
+require python-netaddr.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
new file mode 100644
index 000000000..93df83ad3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ntplib_0.3.3.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "This module offers a simple interface to query NTP servers from Python."
+SECTION = "devel/python"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://ntplib.py;beginline=1;endline=23;md5=afa07338a9595257e94c205c3e72224d"
+
+SRCNAME = "ntplib"
+SRC_URI[md5sum] = "c7cc8e9b09f40c84819859d70b7784ca"
+SRC_URI[sha256sum] = "c4621b64d50be9461d9bd9a71ba0b4af06fbbf818bbd483752d95c1a4e273ede"
+
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit setuptools3 python3native pypi
+
+RDEPENDS_${PN} += "${PYTHON_PN}-datetime"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb
new file mode 100644
index 000000000..da13b55d8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-oauthlib_2.0.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-oauthlib.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_2.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_2.0.2.bb
new file mode 100644
index 000000000..be6d4e169
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ordered-set_2.0.2.bb
@@ -0,0 +1,10 @@
+SUMMARY = "A MutableSet that remembers its order, so that every entry has an index."
+HOMEPAGE = "http://github.com/LuminosoInsight/ordered-set"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://MIT-LICENSE;md5=0feb0c85b722f488b87844fb5f81d2dc"
+
+SRC_URI[md5sum] = "7b8d73dc64fd3c783ecb48e050bfcc0d"
+SRC_URI[sha256sum] = "942cad5d7d5b0760d5cbe93dfb385ac2ed402ca1d48c9f4e102d7d5cce3a90eb"
+
+inherit pypi setuptools3
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb
new file mode 100644
index 000000000..4981e61ed
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-paho-mqtt_1.3.1.bb
@@ -0,0 +1,3 @@
+inherit setuptools3
+require python-paho-mqtt.inc
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.22.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.22.0.bb
new file mode 100644
index 000000000..b5dd5e092
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pandas_0.22.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pandas.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb
new file mode 100644
index 000000000..18180a07a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-passlib_1.7.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-passlib.inc \ No newline at end of file
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.5.0.bb
new file mode 100644
index 000000000..cf39233a3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pexpect_4.5.0.bb
@@ -0,0 +1,2 @@
+require python-pexpect.inc
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch
new file mode 100644
index 000000000..3beef0700
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pid/0001-remove-requirement-of-nose.patch
@@ -0,0 +1,29 @@
+From 04d04a8fa1ef3d8dbdaebbaac9ae936e1c8234c1 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 28 Jun 2017 21:17:43 -0400
+Subject: [PATCH] remove requirement of nose
+
+The nose extends unittest to make testing easier.
+Do not need the test suite, so remove requirement of nose.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 3f7c7cb..c42a546 100644
+--- a/setup.py
++++ b/setup.py
+@@ -53,6 +53,4 @@ setup(
+ keywords='pid pidfile context manager decorator',
+ packages=["pid"],
+ install_requires=[],
+- test_suite='nose.collector',
+- setup_requires=['nose>=1.0'],
+ )
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb
new file mode 100644
index 000000000..e43831989
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pid_2.2.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Pidfile featuring stale detection and file-locking, can also \
+be used as context-manager or decorator"
+HOMEPAGE = "https://github.com/trbs/pid/"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=83d53cbd3105063f20305bc313464e29"
+
+SRC_URI[md5sum] = "04d30308013d16aa882b3806feda8ab2"
+SRC_URI[sha256sum] = "d8bb2ceec21a4ae84be6e9d320db1f56934b30e676e31c6f098ca7218b3d67d4"
+
+inherit pypi setuptools3
+
+SRC_URI += " \
+ file://0001-remove-requirement-of-nose.patch \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb
new file mode 100644
index 000000000..941e8e3d8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pluggy_0.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pluggy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb
new file mode 100644
index 000000000..72410baeb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ply_3.11.bb
@@ -0,0 +1,2 @@
+require python-ply.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch b/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch
new file mode 100644
index 000000000..775ae1b2e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl/0001-support-cross-complication.patch
@@ -0,0 +1,61 @@
+From 9a16800738547d117284354bbcad7dd77d9d0344 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 21 Apr 2016 03:05:57 -0400
+Subject: [PATCH] support cross-complication
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py | 35 -----------------------------------
+ 1 file changed, 35 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 658d1a5..e8be7eb 100755
+--- a/setup.py
++++ b/setup.py
+@@ -13,41 +13,6 @@ import sys
+ # - Need gcc
+ # - Need C headers
+ # - Need libcap headers
+-if not sys.platform.startswith('linux'):
+- sys.stderr.write("This module only works on linux\n")
+- sys.exit(1)
+-
+-kvers = os.uname()[2]
+-if kvers < '2.6.18' and not os.environ.get("PRCTL_SKIP_KERNEL_CHECK",False):
+- sys.stderr.write("This module requires linux 2.6.18 or newer\n")
+- sys.exit(1)
+-
+-if sys.version_info[:2] < (2,4):
+- sys.stderr.write("This module requires python 2.4 or newer\n")
+- sys.exit(1)
+-
+-exit = False
+-try:
+- subprocess.call(['gcc','-v'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-except:
+- sys.stderr.write("You need to install gcc to build this module\n")
+- sys.exit(1)
+-
+-sp = subprocess.Popen(['cpp'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-sp.communicate('#include <sys/prctl.h>\n'.encode())
+-if sp.returncode:
+- sys.stderr.write("You need to install libc development headers to build this module\n")
+- exit = True
+-
+-sp = subprocess.Popen(['cpp'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+-sp.communicate('#include <sys/capability.h>\n'.encode())
+-if sp.returncode:
+- sys.stderr.write("You need to install libcap development headers to build this module\n")
+- exit = True
+-
+-if exit:
+- sys.exit(1)
+-
+ _prctl = Extension("_prctl",
+ sources = ['_prctlmodule.c'],
+ depends = ['securebits.h'],
+--
+2.8.1
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.6.1.bb
new file mode 100644
index 000000000..5de83ce48
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-prctl_1.6.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Control process attributes through prctl"
+DESCRIPTION = "The linux prctl function allows you to control specific characteristics of a \
+process' behaviour. Usage of the function is fairly messy though, due to \
+limitations in C and linux. This module provides a nice non-messy python(ic) \
+interface."
+SECTION = "devel/python"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5eb2f4bcd60326f83e5deb542372d52f"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "1107d0be7bec4b28c85c62c454882d16844c930a"
+PV = "1.6.1+git${SRCPV}"
+
+SRC_URI = "git://github.com/seveas/python-prctl;branch=master \
+ file://0001-support-cross-complication.patch \
+"
+inherit setuptools3 python3native
+
+DEPENDS += "libcap"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb
new file mode 100644
index 000000000..9c5d8a843
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pretend_1.0.9.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pretend.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.3.bb
new file mode 100644
index 000000000..45e264213
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-progress_1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-progress.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_1.0.15.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_1.0.15.bb
new file mode 100644
index 000000000..0e99917c2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-prompt-toolkit_1.0.15.bb
@@ -0,0 +1,7 @@
+inherit pypi setuptools3
+require python-prompt-toolkit.inc
+
+RDEPENDS_${PN} += " \
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-shell \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.5.2.bb
new file mode 100644
index 000000000..781d1dc4d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-protobuf_3.5.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-protobuf.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.3.bb
new file mode 100644
index 000000000..c1969ea65
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-psutil_5.4.3.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-psutil.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-netclient"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.5.2.bb
new file mode 100644
index 000000000..bdcd0e253
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ptyprocess_0.5.2.bb
@@ -0,0 +1,2 @@
+require python-ptyprocess.inc
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.5.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.5.2.bb
new file mode 100644
index 000000000..0ee373d24
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-py_1.5.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-py.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb
new file mode 100644
index 000000000..b7da1a43d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyalsaaudio_0.8.4.bb
@@ -0,0 +1,2 @@
+require python-pyalsaaudio.inc
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.1.bb
new file mode 100644
index 000000000..3b1186f06
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1-modules_0.2.1.bb
@@ -0,0 +1,2 @@
+require python-pyasn1-modules.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.2.bb
new file mode 100644
index 000000000..a5e2a7136
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyasn1_0.4.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pyasn1.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.2.bb
new file mode 100644
index 000000000..355e28460
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybind11_2.2.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pybind11.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb
new file mode 100644
index 000000000..9712a7608
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pybluez_0.22.bb
@@ -0,0 +1,2 @@
+require python-pybluez.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb
new file mode 100644
index 000000000..7cc024ea0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycparser_2.18.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3
+require python-pycparser.inc
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-netclient \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb
new file mode 100644
index 000000000..02d634cb0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycrypto_2.6.1.bb
@@ -0,0 +1,9 @@
+inherit distutils3
+require python-pycrypto.inc
+
+# We explicitly call distutils_do_install, since we want it to run, but
+# *don't* want the autotools install to run, since this package doesn't
+# provide a "make install" target.
+do_install() {
+ distutils3_do_install
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb
new file mode 100644
index 000000000..0c062dddf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pycryptodome_3.4.11.bb
@@ -0,0 +1,2 @@
+require python-pycryptodome.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb
new file mode 100644
index 000000000..7ed1c63b6
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pydbus_0.6.0.bb
@@ -0,0 +1,2 @@
+require python-pydbus.inc
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb
new file mode 100644
index 000000000..bfd584041
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyexpect_1.0.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyexpect.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb
new file mode 100644
index 000000000..25af1b5c0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyfirmata_1.0.3.bb
@@ -0,0 +1,3 @@
+inherit setuptools3
+require python-pyfirmata.inc
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.5.bb
new file mode 100644
index 000000000..721e7b1c9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyiface_0.0.5.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyiface.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb
new file mode 100644
index 000000000..b3bab989a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyinotify_0.9.6.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyinotify.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb
new file mode 100644
index 000000000..8982fcebc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjks_17.1.1.bb
@@ -0,0 +1,2 @@
+require python-pyjks.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.1.bb
new file mode 100644
index 000000000..dc16d2282
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyjwt_1.6.1.bb
@@ -0,0 +1,2 @@
+require python-pyjwt.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb
new file mode 100644
index 000000000..563e8316c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pylint_1.8.3.bb
@@ -0,0 +1,2 @@
+inherit setuptools3 python3-dir
+require python-pylint.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.89.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.89.bb
new file mode 100644
index 000000000..4523d9e30
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymisp_2.4.89.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pymisp.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.6.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.6.1.bb
new file mode 100644
index 000000000..5164b186b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pymongo_3.6.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pymongo.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb
new file mode 100644
index 000000000..f6d9e3c06
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pynetlinux_1.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pynetlinux.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_17.5.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_17.5.0.bb
new file mode 100644
index 000000000..0f0f83e3a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyopenssl_17.5.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pyopenssl.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb
new file mode 100644
index 000000000..0805fee3e
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyparsing_2.2.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyparsing.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.0.bb
new file mode 100644
index 000000000..ee6f88bbb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyperclip_1.6.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyperclip.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.4.21.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.4.21.bb
new file mode 100644
index 000000000..a23e72c4a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyroute2_0.4.21.bb
@@ -0,0 +1,2 @@
+require python-pyroute2.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb
new file mode 100644
index 000000000..17ed3f8bc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyserial_3.4.bb
@@ -0,0 +1,7 @@
+inherit setuptools3
+require python-pyserial.inc
+
+do_install_append() {
+ rm -f ${D}${bindir}/miniterm.py
+ rmdir ${D}${bindir}
+}
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb
new file mode 100644
index 000000000..bbda05a51
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pysocks_1.6.8.bb
@@ -0,0 +1,6 @@
+inherit pypi setuptools3
+require python-pysocks.inc
+
+RDEPENDS_${PN}_class-target += "\
+ ${PYTHON_PN}-netclient \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_3.0.bb
new file mode 100644
index 000000000..df56ba6d4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest-runner_3.0.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pytest-runner.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb
new file mode 100644
index 000000000..466cfa825
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytest_3.4.2.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-pytest.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.4.bb
new file mode 100755
index 000000000..19a89dc55
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pytz_2018.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pytz.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb
new file mode 100644
index 000000000..a62d944ba
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyudev_0.21.0.bb
@@ -0,0 +1,2 @@
+require python-pyudev.inc
+inherit pypi setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
new file mode 100644
index 000000000..1ecede7cf
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyusb_1.0.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyusb.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.12.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.12.bb
new file mode 100644
index 000000000..470aca608
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-pyyaml_3.12.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-pyyaml.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb
new file mode 100644
index 000000000..b192ed872
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-redis_2.10.6.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-redis.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.2.bb
new file mode 100644
index 000000000..8652876a4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-file_1.4.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "File transport adapter for Requests"
+HOMEPAGE = "http://github.com/dashea/requests-file"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9cc728d6087e43796227b0a31422de6b"
+
+SRC_URI[md5sum] = "a907efb75faf0ccbb1857432bf9d8c0f"
+SRC_URI[sha256sum] = "f518e7cfe048e053fd1019dfb891b4c55b871c56c5a31693d733240c80b8f191"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+ python3-requests \
+"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb
new file mode 100644
index 000000000..3f99ed675
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests-ftp_0.3.1.bb
@@ -0,0 +1,14 @@
+SUMMARY = "FTP Transport Adapter for Requests"
+HOMEPAGE = "http://github.com/Lukasa/requests-ftp"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=6683a23c9968b97709441dc884d46df6"
+
+SRC_URI[md5sum] = "1a52ad1219e696b5abd5449d1ccc0294"
+SRC_URI[sha256sum] = "7504ceb5cba8a5c0135ed738596820a78c5f2be92d79b29f96ba99b183d8057a"
+
+inherit pypi setuptools3
+
+RDEPENDS_${PN} += " \
+ python3-requests \
+"
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.18.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.18.4.bb
new file mode 100644
index 000000000..0a2410f85
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-requests_2.18.4.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-requests.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb
new file mode 100644
index 000000000..cd1536b36
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-rfc3987_1.3.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-rfc3987.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.2.bb
new file mode 100644
index 000000000..8f613c386
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-robotframework_3.0.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-robotframework.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.23.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.23.bb
new file mode 100644
index 000000000..3e7baf45c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-scapy_0.23.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "Packet crafting/sending/sniffing, PCAP processing tool,\
+based on scapy with python3 compatibility"
+SECTION = "devel/python"
+HOMEPAGE = "https://github.com/phaethon/scapy"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=95ea6ecfc360eb47fe6f470ad736d7cd"
+
+inherit pypi setuptools3
+
+PYPI_PACKAGE = "scapy-python3"
+
+SRC_URI[md5sum] = "8642d09ca727e7e2b455223ae94059b7"
+SRC_URI[sha256sum] = "8760991a67162f43af4d9e64828bcefc100ba88859b75177ae9f7ace56e58186"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb
new file mode 100644
index 000000000..f49665322
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-scrypt_0.8.6.bb
@@ -0,0 +1,3 @@
+inherit setuptools3 python3-dir
+require python-scrypt.inc
+
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb
new file mode 100644
index 000000000..377af12e1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sdnotify_0.3.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3 pypi
+require python-sdnotify.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.24.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.24.bb
new file mode 100644
index 000000000..1e04def7b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-serpent_1.24.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-serpent.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_1.15.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_1.15.7.bb
new file mode 100644
index 000000000..5bf598387
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-setuptools-scm_1.15.7.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-setuptools-scm.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.13.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.13.2.bb
new file mode 100644
index 000000000..38f406c5d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-simplejson_3.13.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-simplejson.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb
new file mode 100644
index 000000000..b357bcd82
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-smbus_4.0.bb
@@ -0,0 +1,2 @@
+inherit distutils3
+require python-smbus.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb
new file mode 100644
index 000000000..aa4f699be
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-speaklater_1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-speaklater.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb
new file mode 100644
index 000000000..610611e43
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-spidev_3.2.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-spidev.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb
new file mode 100644
index 000000000..86cf9edde
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-sqlalchemy_1.1.17.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-sqlalchemy.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb
new file mode 100644
index 000000000..9e37052ae
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-strict-rfc3339_0.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-strict-rfc3339.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
new file mode 100644
index 000000000..580d99352
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-systemd_234.bb
@@ -0,0 +1,2 @@
+require python-systemd.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_4.5.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_4.5.3.bb
new file mode 100644
index 000000000..77c9fb516
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-tornado_4.5.3.bb
@@ -0,0 +1,7 @@
+inherit pypi setuptools3
+require python-tornado.inc
+
+# Requires _compression which is currently located in misc
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-misc \
+ "
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_17.9.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_17.9.0.bb
new file mode 100644
index 000000000..6bd8c52eb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-twisted_17.9.0.bb
@@ -0,0 +1,67 @@
+inherit pypi setuptools3
+require python-twisted.inc
+
+PACKAGES_remove = "${PN}-src"
+
+FILES_${PN}-core_append += " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/__pycache__ \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/python/__pycache__/*pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/__init__*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/notestplugin*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/testplugin*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_ftp*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_inet*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_manhole*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_portforward*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_socks*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_telnet*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_trial*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_core*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_qtstub*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_reactors*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/cred*.pyc \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/dropin*.cache \
+"
+
+FILES_${PN}-names_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_names*.pyc \
+"
+
+FILES_${PN}-news_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_news*.pyc \
+"
+
+FILES_${PN}-protocols_append += " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/protocols/__pycache__/*pyc \
+"
+
+FILES_${PN}-conch_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_conch*.pyc \
+"
+
+FILES_${PN}-lore_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_lore*.pyc \
+"
+FILES_${PN}-mail_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_mail*.pyc \
+"
+
+FILES_${PN}-web_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_web*.pyc \
+"
+
+FILES_${PN}-words_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_words*.pyc \
+"
+
+FILES_${PN}-flow_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_flow*.pyc \
+"
+
+FILES_${PN}-pair_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_pair*.pyc \
+"
+
+FILES_${PN}-runner_append = " \
+ ${libdir}/${PYTHON_DIR}/site-packages/twisted/plugins/__pycache__/twisted_runner*.pyc \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb
new file mode 100644
index 000000000..e593f6f21
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-twofish_0.3.0.bb
@@ -0,0 +1,2 @@
+require python-twofish.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb
new file mode 100644
index 000000000..ae4cc0a81
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-ujson_1.35.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-ujson.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb
new file mode 100644
index 000000000..0ddc7e2f2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-unidiff_0.5.5.bb
@@ -0,0 +1,2 @@
+require python-unidiff.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.22.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.22.bb
new file mode 100644
index 000000000..19eb7025b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-urllib3_1.22.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-urllib3.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
new file mode 100644
index 000000000..f6372c8d5
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-vcversioner_2.16.0.0.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Python vcversioner, automagically update the project's version"
+HOMEPAGE = "https://github.com/habnabit/vcversioner"
+
+LICENSE = "ISC"
+LIC_FILES_CHKSUM = "file://PKG-INFO;md5=827a7a91a8d20d3c666b665cd96db8e3"
+
+SRC_URI[md5sum] = "aab6ef5e0cf8614a1b1140ed5b7f107d"
+SRC_URI[sha256sum] = "dae60c17a479781f44a4010701833f1829140b1eeccd258762a74974aa06e19b"
+
+inherit pypi setuptools3
+
+do_compile_append() {
+ ${PYTHON} setup.py -q bdist_egg --dist-dir ./
+}
+
+do_install_append() {
+ install -m 0644 ${S}/vcversioner*.egg ${D}/${PYTHON_SITEPACKAGES_DIR}/
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb
new file mode 100644
index 000000000..b9bc51d4b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-visitor_0.1.3.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-visitor.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb
new file mode 100644
index 000000000..5f6259b08
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-wcwidth_0.1.7.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-wcwidth.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb
new file mode 100644
index 000000000..fcd9f7072
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-webcolors_1.8.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-webcolors.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb
new file mode 100644
index 000000000..71fe741e4
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-webencodings_0.5.1.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-webencodings.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.1.bb
new file mode 100644
index 000000000..414129c59
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-websockets_4.0.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "An implementation of the WebSocket Protocol (RFC 6455)"
+HOMEPAGE = "https://github.com/aaugustin/websockets"
+
+LICENSE = "BSD-3-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=5070256738c06d2e59adbec1f4057dac"
+
+inherit pypi setuptools3
+
+SRC_URI[md5sum] = "9e8c6b3c70def4146d75fbb0f52bdfc7"
+SRC_URI[sha256sum] = "da4d4fbe059b0453e726d6d993760065d69b823a27efc3040402a6fcfe6a1ed9"
+
+BBCLASSEXTEND = "native nativesdk"
+
+RDEPENDS_${PN} = "\
+ ${PYTHON_PN}-asyncio \
+"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb
new file mode 100644
index 000000000..145a1de0a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-werkzeug_0.14.1.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-werkzeug.inc
+
+RDEPENDS_${PN} += "${PYTHON_PN}-misc"
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb
new file mode 100644
index 000000000..5d8af303c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-whoosh_2.7.4.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-whoosh.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb
new file mode 100644
index 000000000..85f446ef9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-wrapt_1.10.11.bb
@@ -0,0 +1,2 @@
+inherit setuptools3
+require python-wrapt.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.1.bb
new file mode 100644
index 000000000..add59cf7d
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-wtforms_2.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-wtforms.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb
new file mode 100644
index 000000000..b7bd969c7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xlrd_1.1.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-xlrd.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb
new file mode 100644
index 000000000..639f80de9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic-font-awesome_4.7.0.0.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-xstatic-font-awesome.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb
new file mode 100644
index 000000000..76cb70273
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-xstatic_1.0.1.bb
@@ -0,0 +1,2 @@
+inherit pypi setuptools3
+require python-xstatic.inc
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb
new file mode 100644
index 000000000..07da5b6eb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-yappi_0.98.bb
@@ -0,0 +1,2 @@
+require python-yappi.inc
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.4.3.bb b/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.4.3.bb
new file mode 100644
index 000000000..be11858d3
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-devtools/python/python3-zopeinterface_4.4.3.bb
@@ -0,0 +1,4 @@
+inherit pypi setuptools3
+require python-zopeinterface.inc
+
+RDEPENDS_${PN}-test += "python3-unittest python3-doctest"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0001-comment-out-selinux.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0001-comment-out-selinux.patch
new file mode 100644
index 000000000..0ee32057c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0001-comment-out-selinux.patch
@@ -0,0 +1,70 @@
+From 7d483c27ac0a23ca3bba7f320918afc40013bd8e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 14:25:52 +0800
+Subject: [PATCH 01/13] comment out selinux
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/flags.py | 5 +++--
+ blivet/util.py | 6 +++++-
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/blivet/flags.py b/blivet/flags.py
+index 06822db..b55a93f 100644
+--- a/blivet/flags.py
++++ b/blivet/flags.py
+@@ -20,7 +20,7 @@
+ #
+
+ import shlex
+-import selinux
++#import selinux
+
+
+ class Flags(object):
+@@ -49,7 +49,8 @@ class Flags(object):
+ #
+ # enable/disable functionality
+ #
+- self.selinux = selinux.is_selinux_enabled()
++ #self.selinux = selinux.is_selinux_enabled()
++ self.selinux = False
+ self.multipath = True
+ self.dmraid = True
+ self.ibft = True
+diff --git a/blivet/util.py b/blivet/util.py
+index e3e71ce..0cf5188 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -4,7 +4,7 @@ import glob
+ import itertools
+ import os
+ import shutil
+-import selinux
++#import selinux
+ import subprocess
+ import re
+ import sys
+@@ -431,6 +431,8 @@ def get_cow_sysfs_path(dev_path, dev_sysfsPath):
+ def match_path_context(path):
+ """ Return the default SELinux context for the given path. """
+ context = None
++ return context
++
+ try:
+ context = selinux.matchpathcon(os.path.normpath(path), 0)[1]
+ except OSError as e:
+@@ -455,6 +457,8 @@ def set_file_context(path, context, root=None):
+
+ True if successful, False if not.
+ """
++ return False
++
+ if root is None:
+ root = '/'
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0002-run_program-support-timeout.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0002-run_program-support-timeout.patch
new file mode 100644
index 000000000..01e71be30
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0002-run_program-support-timeout.patch
@@ -0,0 +1,102 @@
+From 86744d408b91acdcb086a03d7779fcda152f2ac3 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 14:39:56 +0800
+Subject: [PATCH 02/13] run_program support timeout
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 68 +++++++++++++++++++++++++++++++++-------------------------
+ 1 file changed, 39 insertions(+), 29 deletions(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index 0cf5188..d4bd9bb 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -158,6 +158,30 @@ class Path(str):
+ def __hash__(self):
+ return self._path.__hash__()
+
++def timeout_command(argv, timeout, *args, **kwargs):
++ """call shell-command and either return its output or kill it
++ if it doesn't normally exit within timeout seconds and return None"""
++ import subprocess, datetime, os, time, signal
++ start = datetime.datetime.now()
++
++ try:
++ proc = subprocess.Popen(argv, *args, **kwargs)
++ while proc.poll() is None:
++ time.sleep(0.1)
++ now = datetime.datetime.now()
++ if (now - start).seconds> timeout:
++ os.kill(proc.pid, signal.SIGKILL)
++ os.waitpid(-1, os.WNOHANG)
++ program_log.debug("%d seconds timeout" % timeout)
++ return (-1, None)
++
++
++ except OSError as e:
++ program_log.error("Error running %s: %s", argv[0], e.strerror)
++ raise
++
++ program_log.debug("Return code: %d", proc.returncode)
++ return (proc.returncode, proc.stdout.read())
+
+ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False):
+ if env_prune is None:
+@@ -180,36 +204,22 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
+ stderr_dir = subprocess.STDOUT
+ else:
+ stderr_dir = subprocess.PIPE
+- try:
+- proc = subprocess.Popen(argv,
+- stdin=stdin,
+- stdout=subprocess.PIPE,
+- stderr=stderr_dir,
+- close_fds=True,
+- preexec_fn=chroot, cwd=root, env=env)
+-
+- out, err = proc.communicate()
+- if not binary_output and six.PY3:
+- out = out.decode("utf-8")
+- if out:
+- if not stderr_to_stdout:
+- program_log.info("stdout:")
+- for line in out.splitlines():
+- program_log.info("%s", line)
+-
+- if not stderr_to_stdout and err:
+- program_log.info("stderr:")
+- for line in err.splitlines():
+- program_log.info("%s", line)
+-
+- except OSError as e:
+- program_log.error("Error running %s: %s", argv[0], e.strerror)
+- raise
+-
+- program_log.debug("Return code: %d", proc.returncode)
+-
+- return (proc.returncode, out)
+
++ res, out = timeout_command(argv, 10,
++ stdin=stdin,
++ stdout=subprocess.PIPE,
++ stderr=stderr_dir,
++ close_fds=True,
++ preexec_fn=chroot, cwd=root, env=env)
++ if not binary_output and six.PY3:
++ out = out.decode("utf-8")
++ if out:
++ if not stderr_to_stdout:
++ program_log.info("stdout:")
++ for line in out.splitlines():
++ program_log.info("%s", line)
++
++ return (res, out)
+
+ def run_program(*args, **kwargs):
+ return _run_program(*args, **kwargs)[0]
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0003-support-infinit-timeout.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0003-support-infinit-timeout.patch
new file mode 100644
index 000000000..489fb56bb
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0003-support-infinit-timeout.patch
@@ -0,0 +1,66 @@
+From 923265e04df5920fc99393aa05f584032aa1b383 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:18:02 +0800
+Subject: [PATCH 03/13] support infinit timeout
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index d4bd9bb..44a2da5 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -158,6 +158,7 @@ class Path(str):
+ def __hash__(self):
+ return self._path.__hash__()
+
++# timeout = -1 means infinite timeout, always wait.
+ def timeout_command(argv, timeout, *args, **kwargs):
+ """call shell-command and either return its output or kill it
+ if it doesn't normally exit within timeout seconds and return None"""
+@@ -169,7 +170,7 @@ def timeout_command(argv, timeout, *args, **kwargs):
+ while proc.poll() is None:
+ time.sleep(0.1)
+ now = datetime.datetime.now()
+- if (now - start).seconds> timeout:
++ if timeout != -1 and (now - start).seconds> timeout:
+ os.kill(proc.pid, signal.SIGKILL)
+ os.waitpid(-1, os.WNOHANG)
+ program_log.debug("%d seconds timeout" % timeout)
+@@ -183,7 +184,7 @@ def timeout_command(argv, timeout, *args, **kwargs):
+ program_log.debug("Return code: %d", proc.returncode)
+ return (proc.returncode, proc.stdout.read())
+
+-def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False):
++def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=False, binary_output=False, timeout=10):
+ if env_prune is None:
+ env_prune = []
+
+@@ -192,7 +193,10 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
+ os.chroot(root)
+
+ with program_log_lock: # pylint: disable=not-context-manager
+- program_log.info("Running... %s", " ".join(argv))
++ if timeout != -1:
++ program_log.info("Running... %s", " ".join(argv))
++ else:
++ program_log.info("Running... %s ...infinite timeout", " ".join(argv))
+
+ env = os.environ.copy()
+ env.update({"LC_ALL": "C",
+@@ -205,7 +209,7 @@ def _run_program(argv, root='/', stdin=None, env_prune=None, stderr_to_stdout=Fa
+ else:
+ stderr_dir = subprocess.PIPE
+
+- res, out = timeout_command(argv, 10,
++ res, out = timeout_command(argv, timeout,
+ stdin=stdin,
+ stdout=subprocess.PIPE,
+ stderr=stderr_dir,
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-Mount-var-volatile-during-install.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-Mount-var-volatile-during-install.patch
new file mode 100644
index 000000000..cb837e286
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0004-Mount-var-volatile-during-install.patch
@@ -0,0 +1,59 @@
+From c3959bd00665e24a955bbdbea1ef555e76372f12 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:25:16 +0800
+Subject: [PATCH 04/13] Mount /var/volatile during install
+
+The installed system needs /var/volatile clean, otherwise it
+caused systemd's journalctl failed to record boot log.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/osinstall.py | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+diff --git a/blivet/osinstall.py b/blivet/osinstall.py
+index a4f9535..61819c2 100644
+--- a/blivet/osinstall.py
++++ b/blivet/osinstall.py
+@@ -294,6 +294,7 @@ class FSSet(object):
+ self._sysfs = None
+ self._proc = None
+ self._devshm = None
++ self._volatile = None
+ self._usb = None
+ self._selinux = None
+ self._run = None
+@@ -335,6 +336,12 @@ class FSSet(object):
+ return self._devshm
+
+ @property
++ def volatile(self):
++ if not self._volatile:
++ self._volatile = NoDevice(fmt=get_format("tmpfs", device="tmpfs", mountpoint="/var/volatile"))
++ return self._volatile
++
++ @property
+ def usb(self):
+ if not self._usb:
+ self._usb = NoDevice(fmt=get_format("usbfs", device="usbfs", mountpoint="/proc/bus/usb"))
+@@ -591,6 +598,7 @@ class FSSet(object):
+
+ devices = list(self.mountpoints.values()) + self.swap_devices
+ devices.extend([self.dev, self.devshm, self.devpts, self.sysfs,
++ self.volatile,
+ self.proc, self.selinux, self.usb, self.run])
+ if isinstance(_platform, EFI):
+ devices.append(self.efivars)
+@@ -650,6 +658,7 @@ class FSSet(object):
+ """ unmount filesystems, except swap if swapoff == False """
+ devices = list(self.mountpoints.values()) + self.swap_devices
+ devices.extend([self.dev, self.devshm, self.devpts, self.sysfs,
++ self.volatile,
+ self.proc, self.usb, self.selinux, self.run])
+ if isinstance(_platform, EFI):
+ devices.append(self.efivars)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0005-update-fstab-by-appending.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0005-update-fstab-by-appending.patch
new file mode 100644
index 000000000..4f343b7d8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0005-update-fstab-by-appending.patch
@@ -0,0 +1,32 @@
+From 386ff899763f8473eb93a7a1578fb7cc4f86f66d Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:28:12 +0800
+Subject: [PATCH 05/13] update fstab by appending
+
+The 'storage.write()' has updated fstab by overwriting
+the original one, we should update fstab by appending
+to keep original tmpfs partitions.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/osinstall.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/osinstall.py b/blivet/osinstall.py
+index 61819c2..afa82db 100644
+--- a/blivet/osinstall.py
++++ b/blivet/osinstall.py
+@@ -728,7 +728,7 @@ class FSSet(object):
+ # /etc/fstab
+ fstab_path = os.path.normpath("%s/etc/fstab" % get_sysroot())
+ fstab = self.fstab()
+- open(fstab_path, "w").write(fstab)
++ open(fstab_path, "a").write(fstab)
+
+ # /etc/crypttab
+ crypttab_path = os.path.normpath("%s/etc/crypttab" % get_sysroot())
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0006-fix-new.roots-object-is-not-iterable.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0006-fix-new.roots-object-is-not-iterable.patch
new file mode 100644
index 000000000..f5ff754d8
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0006-fix-new.roots-object-is-not-iterable.patch
@@ -0,0 +1,28 @@
+From cd92eea8fab37ba6b0c7f03daa5255343dc75716 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:30:20 +0800
+Subject: [PATCH 06/13] fix new.roots object is not iterable
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/blivet.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/blivet.py b/blivet/blivet.py
+index 6a33e9c..79ae91a 100644
+--- a/blivet/blivet.py
++++ b/blivet/blivet.py
+@@ -1761,7 +1761,7 @@ class Blivet(object):
+ p = partition.disk.format.parted_disk.getPartitionByPath(partition.path)
+ partition.parted_partition = p
+
+- for root in new.roots:
++ for root in new.roots or []:
+ root.swaps = [new.devicetree.get_device_by_id(d.id, hidden=True) for d in root.swaps]
+ root.swaps = [s for s in root.swaps if s]
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0007-fix-incorrect-timeout-while-system-time-changed.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0007-fix-incorrect-timeout-while-system-time-changed.patch
new file mode 100644
index 000000000..6512d8642
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0007-fix-incorrect-timeout-while-system-time-changed.patch
@@ -0,0 +1,48 @@
+From 78ee2b9090f9400ccc4f730e674f5ae972740ccb Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 26 Aug 2016 02:02:49 -0400
+Subject: [PATCH 07/13] fix incorrect timeout while system time changed
+
+While system time changed by NTP, invoking timeout_command
+breaks with incorrect timeout.
+--------
+|05:40:55,872 INFO program: Running... mount -t ext2 -o
+ defaults,ro /dev/sda2 /mnt/sysimage
+|01:40:55,086 DEBUG program: 10 seconds timeout
+--------
+
+Use numbert count to replace current time count could workaround
+the issue.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index 44a2da5..b3c45ac 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -163,14 +163,14 @@ def timeout_command(argv, timeout, *args, **kwargs):
+ """call shell-command and either return its output or kill it
+ if it doesn't normally exit within timeout seconds and return None"""
+ import subprocess, datetime, os, time, signal
+- start = datetime.datetime.now()
++ count = 0
+
+ try:
+ proc = subprocess.Popen(argv, *args, **kwargs)
+ while proc.poll() is None:
+ time.sleep(0.1)
+- now = datetime.datetime.now()
+- if timeout != -1 and (now - start).seconds> timeout:
++ count += 1
++ if timeout != -1 and count > timeout*10:
+ os.kill(proc.pid, signal.SIGKILL)
+ os.waitpid(-1, os.WNOHANG)
+ program_log.debug("%d seconds timeout" % timeout)
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0008-tweak-btrfs-packages.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0008-tweak-btrfs-packages.patch
new file mode 100644
index 000000000..121336e4c
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0008-tweak-btrfs-packages.patch
@@ -0,0 +1,45 @@
+From 6f661a511eea096c073888c7adb836a9a880b476 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 16:33:15 +0800
+Subject: [PATCH 08/13] tweak btrfs packages
+
+In oe-cre/yocto, we name btrfs package with btrfs-tools,
+rather than btrfs-progs.
+
+Upstream-Status: Inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/devices/btrfs.py | 2 +-
+ blivet/formats/fs.py | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/blivet/devices/btrfs.py b/blivet/devices/btrfs.py
+index c5cb21f..9d417b2 100644
+--- a/blivet/devices/btrfs.py
++++ b/blivet/devices/btrfs.py
+@@ -55,7 +55,7 @@ class BTRFSDevice(StorageDevice):
+
+ """ Base class for BTRFS volume and sub-volume devices. """
+ _type = "btrfs"
+- _packages = ["btrfs-progs"]
++ _packages = ["btrfs-tools"]
+ _external_dependencies = [availability.BLOCKDEV_BTRFS_PLUGIN]
+
+ def __init__(self, *args, **kwargs):
+diff --git a/blivet/formats/fs.py b/blivet/formats/fs.py
+index a49826f..e8f216d 100644
+--- a/blivet/formats/fs.py
++++ b/blivet/formats/fs.py
+@@ -918,7 +918,7 @@ class BTRFS(FS):
+ _formattable = True
+ _linux_native = True
+ _supported = True
+- _packages = ["btrfs-progs"]
++ _packages = ["btrfs-tools"]
+ _min_size = Size("256 MiB")
+ _max_size = Size("16 EiB")
+ _mkfs_class = fsmkfs.BTRFSMkfs
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0009-invoking-mount-with-infinite-timeout.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0009-invoking-mount-with-infinite-timeout.patch
new file mode 100644
index 000000000..fc084b129
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0009-invoking-mount-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From a6ac2157ee6793302e23ddbc5e3b249fa7da5b7e Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Wed, 31 Aug 2016 21:30:32 -0400
+Subject: [PATCH 09/13] invoking mount with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/util.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/util.py b/blivet/util.py
+index b3c45ac..9f02b18 100644
+--- a/blivet/util.py
++++ b/blivet/util.py
+@@ -257,7 +257,7 @@ def mount(device, mountpoint, fstype, options=None):
+
+ argv = ["mount", "-t", fstype, "-o", options, device, mountpoint]
+ try:
+- rc = run_program(argv)
++ rc = run_program(argv, timeout=-1)
+ except OSError:
+ raise
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0010-use-oe-variable-to-replace-hardcoded-dir.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0010-use-oe-variable-to-replace-hardcoded-dir.patch
new file mode 100644
index 000000000..45d8fabba
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0010-use-oe-variable-to-replace-hardcoded-dir.patch
@@ -0,0 +1,34 @@
+From e07133dbcf3c52e1ddd2f12797dcd16145269273 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 8 May 2017 03:54:12 -0400
+Subject: [PATCH 10/13] use oe variable to replace hardcoded dir
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ setup.py | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 4d06a33..a994d06 100644
+--- a/setup.py
++++ b/setup.py
+@@ -61,10 +61,10 @@ class blivet_sdist(sdist):
+
+
+ data_files = [
+- ('/etc/dbus-1/system.d', ['dbus/blivet.conf']),
+- ('/usr/share/dbus-1/system-services', ['dbus/com.redhat.Blivet1.service']),
+- ('/usr/libexec', ['dbus/blivetd']),
+- ('/usr/lib/systemd/system', ['dbus/blivet.service'])
++ (os.environ.get('sysconfdir')+'/dbus-1/system.d', ['dbus/blivet.conf']),
++ (os.environ.get('datadir')+'/dbus-1/system-services', ['dbus/com.redhat.Blivet1.service']),
++ (os.environ.get('libexecdir'), ['dbus/blivetd']),
++ (os.environ.get('systemd_system_unitdir'), ['dbus/blivet.service'])
+ ]
+
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0011-invoking-fsck-with-infinite-timeout.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0011-invoking-fsck-with-infinite-timeout.patch
new file mode 100644
index 000000000..c61fe01b9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0011-invoking-fsck-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From e9ab4376a18cc1bd413c000b036320833eec80d7 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 1 Jun 2017 16:05:27 +0800
+Subject: [PATCH 11/13] invoking fsck with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/tasks/fsck.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/tasks/fsck.py b/blivet/tasks/fsck.py
+index c4214dc..e13ac6b 100644
+--- a/blivet/tasks/fsck.py
++++ b/blivet/tasks/fsck.py
+@@ -77,7 +77,7 @@ class FSCK(task.BasicApplication, fstask.FSTask):
+ raise FSError("\n".join(error_msgs))
+
+ try:
+- rc = util.run_program(self._fsck_command)
++ rc = util.run_program(self._fsck_command, timeout=-1)
+ except OSError as e:
+ raise FSError("filesystem check failed: %s" % e)
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0012-invoking-mkfs-with-infinite-timeout.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0012-invoking-mkfs-with-infinite-timeout.patch
new file mode 100644
index 000000000..33bdbe812
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0012-invoking-mkfs-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From 9f5a048181cf29d241d96814e736b8235b3d42b1 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Fri, 16 Jun 2017 15:43:00 +0800
+Subject: [PATCH 12/13] invoking mkfs with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/tasks/fsmkfs.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/tasks/fsmkfs.py b/blivet/tasks/fsmkfs.py
+index ad166aa..7bf5075 100644
+--- a/blivet/tasks/fsmkfs.py
++++ b/blivet/tasks/fsmkfs.py
+@@ -170,7 +170,7 @@ class FSMkfs(task.BasicApplication, FSMkfsTask):
+ options = options or []
+ cmd = self._mkfs_command(options, label, set_uuid)
+ try:
+- ret = util.run_program(cmd)
++ ret = util.run_program(cmd, timeout=-1)
+ except OSError as e:
+ raise FSError(e)
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0013-Revert-Adapt-to-logging-module-name-change.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0013-Revert-Adapt-to-logging-module-name-change.patch
new file mode 100644
index 000000000..6bdf4ce94
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0013-Revert-Adapt-to-logging-module-name-change.patch
@@ -0,0 +1,30 @@
+From bfdaf79a2109ac6aed408f0c94f69766991e60e2 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 27 Jul 2017 14:34:30 +0800
+Subject: [PATCH 13/13] Revert "Adapt to logging module name change"
+
+Upstream-Status: Inappropriate [oe specific, sync with anaconda f26-release]
+
+This reverts commit c367d62a516e541ad28636c8259321f1c53417ce.
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/__init__.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/__init__.py b/blivet/__init__.py
+index 49277cb..a01e487 100644
+--- a/blivet/__init__.py
++++ b/blivet/__init__.py
+@@ -124,7 +124,7 @@ def enable_installer_mode():
+ from pyanaconda.constants import ROOT_PATH # pylint: disable=redefined-outer-name,no-name-in-module
+ _storage_root = _sysroot = ROOT_PATH
+
+- from pyanaconda.anaconda_logging import program_log_lock
++ from pyanaconda.anaconda_log import program_log_lock
+ util.program_log_lock = program_log_lock
+
+ flags.installer_mode = True
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0014-invoking-dd-with-infinite-timeout.patch b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0014-invoking-dd-with-infinite-timeout.patch
new file mode 100644
index 000000000..12a9e4f54
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet/0014-invoking-dd-with-infinite-timeout.patch
@@ -0,0 +1,31 @@
+From 92fe7dfd01131c93a9b2013cabf77d5f46900fab Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Tue, 6 Mar 2018 17:28:56 +0800
+Subject: [PATCH] invoking dd with infinite timeout
+
+This large timeout is needed when running on machines with
+lots of disks, or with slow disks.
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ blivet/devices/partition.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/blivet/devices/partition.py b/blivet/devices/partition.py
+index a7372fb..8947472 100644
+--- a/blivet/devices/partition.py
++++ b/blivet/devices/partition.py
+@@ -594,7 +594,7 @@ class PartitionDevice(StorageDevice):
+ cmd = ["dd", "if=/dev/zero", "of=%s" % device, "bs=%d" % bs,
+ "seek=%d" % start, "count=%d" % count]
+ try:
+- util.run_program(cmd)
++ util.run_program(cmd, timeout=-1)
+ except OSError as e:
+ log.error(str(e))
+ finally:
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_2.2.0.bb b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_2.2.0.bb
new file mode 100644
index 000000000..46dc32de7
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivet_2.2.0.bb
@@ -0,0 +1,47 @@
+DESCRIPTION = "A python module for system storage configuration"
+HOMEPAGE = "http://fedoraproject.org/wiki/blivet"
+LICENSE = "LGPLv2+"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "39db82f20d8d4904c0c4dc8912e595177c59e091"
+SRC_URI = "git://github.com/rhinstaller/blivet;branch=2.2-devel \
+ file://0001-comment-out-selinux.patch \
+ file://0002-run_program-support-timeout.patch\
+ file://0003-support-infinit-timeout.patch \
+ file://0004-Mount-var-volatile-during-install.patch \
+ file://0005-update-fstab-by-appending.patch \
+ file://0006-fix-new.roots-object-is-not-iterable.patch \
+ file://0007-fix-incorrect-timeout-while-system-time-changed.patch \
+ file://0008-tweak-btrfs-packages.patch \
+ file://0009-invoking-mount-with-infinite-timeout.patch \
+ file://0010-use-oe-variable-to-replace-hardcoded-dir.patch \
+ file://0011-invoking-fsck-with-infinite-timeout.patch \
+ file://0012-invoking-mkfs-with-infinite-timeout.patch \
+ file://0013-Revert-Adapt-to-logging-module-name-change.patch \
+ file://0014-invoking-dd-with-infinite-timeout.patch \
+"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "systemd"
+
+inherit setuptools3 python3native
+
+RDEPENDS_${PN} = "python3-pykickstart python3-pyudev \
+ parted python3-pyparted multipath-tools \
+ lsof cryptsetup libblockdev \
+ libbytesize \
+"
+
+FILES_${PN} += " \
+ ${datadir}/dbus-1/system-services \
+"
+
+inherit systemd
+
+SYSTEMD_AUTO_ENABLE = "disable"
+SYSTEMD_SERVICE_${PN} = "blivet.service"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.1.5.bb b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.1.5.bb
new file mode 100644
index 000000000..28c2565a1
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-blivet/python3-blivetgui_2.1.5.bb
@@ -0,0 +1,27 @@
+DESCRIPTION = "GUI tool for storage configuration using blivet library"
+HOMEPAGE = "https://github.com/rhinstaller/blivet-gui"
+LICENSE = "GPLv2+"
+SECTION = "devel/python"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+S = "${WORKDIR}/git"
+B = "${S}"
+
+SRCREV = "52ae8c000843c05abd1d8749f44bbe2e5d891d3d"
+SRC_URI = "git://github.com/rhinstaller/blivet-gui;branch=master \
+"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "x11 systemd"
+
+inherit setuptools3 python3native
+
+RDEPENDS_${PN} = "python3-pygobject python3 \
+ python3-blivet gtk+3 \
+ python3-pid libreport \
+"
+
+FILES_${PN} += " \
+ ${datadir}/* \
+ "
diff --git a/meta-openembedded/meta-python/recipes-extended/python-cson/python-cson_git.bb b/meta-openembedded/meta-python/recipes-extended/python-cson/python-cson_git.bb
new file mode 100644
index 000000000..efb338cf2
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-cson/python-cson_git.bb
@@ -0,0 +1,21 @@
+# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
+# Released under the MIT license (see COPYING.MIT for the terms)
+
+DESCRIPTION = "Python library for CSON (schema-compressed JSON)"
+HOMEPAGE = "https://github.com/gt3389b/python-cson/"
+LICENSE = "MIT"
+SECTION = "devel/python"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=7709d2635e63ab96973055a23c2a4cac"
+
+SRCREV = "f3f2898c44bb16b951d3e9f2fbf6d1c4158edda2"
+SRC_URI = "git://github.com/gt3389b/python-cson.git"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN}_class-native = ""
+DEPENDS_append_class-native = " python-native "
+
+inherit setuptools
+
+BBCLASSEXTEND = "native"
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.46.bb b/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.46.bb
new file mode 100644
index 000000000..40e2cbd4a
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-meh/python3-meh_0.46.bb
@@ -0,0 +1,17 @@
+SUMMARY = "A python library for handling exceptions"
+DESCRIPTION = "The python-meh package is a python library for handling, saving, and reporting \
+exceptions."
+HOMEPAGE = "http://git.fedorahosted.org/git/?p=python-meh.git"
+LICENSE = "GPLv2+"
+
+inherit setuptools3
+
+S = "${WORKDIR}/git"
+
+SRC_URI = "git://github.com/rhinstaller/python-meh.git;protocol=https;branch=master \
+"
+SRCREV = "bb1156728a4f76e5e3638ab20b9454a1568a99db"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+FILES_${PN} += "${datadir}/*"
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pyephem/python-pyephem_3.7.6.0.bb b/meta-openembedded/meta-python/recipes-extended/python-pyephem/python-pyephem_3.7.6.0.bb
new file mode 100644
index 000000000..e28ce6ccc
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pyephem/python-pyephem_3.7.6.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "PyEphem astronomical calculations"
+HOMEPAGE = "http://rhodesmill.org/pyephem/"
+
+LICENSE = "LGPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f288303760f6e5ceaafe3aaa32186ab1"
+
+SRC_URI[md5sum] = "405a109f3017251ecd8c2890d850f649"
+SRC_URI[sha256sum] = "7a4c82b1def2893e02aec0394f108d24adb17bd7b0ca6f4bc78eb7120c0212ac"
+
+PYPI_PACKAGE = "ephem"
+
+inherit pypi setuptools
+
+RDEPENDS_${PN} += "\
+ ${PYTHON_PN}-datetime \
+ ${PYTHON_PN}-math \
+ "
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0001-support-authentication-for-kickstart.patch b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0001-support-authentication-for-kickstart.patch
new file mode 100644
index 000000000..617699db0
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0001-support-authentication-for-kickstart.patch
@@ -0,0 +1,151 @@
+From d0d8890b5ef74c315381c9e1cff4b1d32892116b Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 1 Jun 2017 15:07:36 +0800
+Subject: [PATCH 1/4] support authentication for kickstart
+
+While download kickstart file from web server,
+we support basic/digest authentication.
+
+Add KickstartAuthError to report authentication failure,
+which the invoker could parse this specific error.
+
+Upstream-Status: inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pykickstart/errors.py | 19 +++++++++++++++++++
+ pykickstart/load.py | 32 +++++++++++++++++++++++++++-----
+ pykickstart/parser.py | 4 ++--
+ 3 files changed, 48 insertions(+), 7 deletions(-)
+
+diff --git a/pykickstart/errors.py b/pykickstart/errors.py
+index b76e84c..fd81bc8 100644
+--- a/pykickstart/errors.py
++++ b/pykickstart/errors.py
+@@ -35,6 +35,10 @@ It also exports several exception classes:
+
+ KickstartVersionError - An exception for errors relating to unsupported
+ syntax versions.
++
++ KickstartAuthError - An exception for errors relating to authentication
++ failed while downloading kickstart from web server
++
+ """
+ import warnings
+
+@@ -103,3 +107,18 @@ class KickstartVersionError(KickstartError):
+
+ def __str__ (self):
+ return self.value
++
++class KickstartAuthError(KickstartError):
++ """An exception for errors relating to authentication failed while
++ downloading kickstart from web server
++ """
++ def __init__(self, msg):
++ """Create a new KickstartAuthError exception instance with the
++ descriptive message val. val should be the return value of
++ formatErrorMsg.
++ """
++ KickstartError.__init__(self, msg)
++
++ def __str__(self):
++ return self.value
++
+diff --git a/pykickstart/load.py b/pykickstart/load.py
+index 1f69b9c..0f5741b 100644
+--- a/pykickstart/load.py
++++ b/pykickstart/load.py
+@@ -18,10 +18,13 @@
+ # with the express permission of Red Hat, Inc.
+ #
+ import requests
++from requests.auth import HTTPDigestAuth
++from requests.auth import HTTPBasicAuth
++
+ import shutil
+ import six
+
+-from pykickstart.errors import KickstartError
++from pykickstart.errors import KickstartError, KickstartAuthError
+ from pykickstart.i18n import _
+ from requests.exceptions import SSLError, RequestException
+
+@@ -29,7 +32,7 @@ _is_url = lambda location: '://' in location # RFC 3986
+
+ SSL_VERIFY = True
+
+-def load_to_str(location):
++def load_to_str(location, user=None, passwd=None):
+ '''Load a destination URL or file into a string.
+ Type of input is inferred automatically.
+
+@@ -40,7 +43,7 @@ def load_to_str(location):
+ Raises: KickstartError on error reading'''
+
+ if _is_url(location):
+- return _load_url(location)
++ return _load_url(location, user=user, passwd=passwd)
+ else:
+ return _load_file(location)
+
+@@ -71,13 +74,32 @@ def load_to_file(location, destination):
+ _copy_file(location, destination)
+ return destination
+
++def _get_auth(location, user=None, passwd=None):
++
++ auth = None
++ request = requests.get(location, verify=SSL_VERIFY)
++ if request.status_code == requests.codes.unauthorized:
++ if user is None or passwd is None:
++ log.info("Require Authentication")
++ raise KickstartAuthError("Require Authentication.\nAppend 'ksuser=<username> kspasswd=<password>' to boot command")
+
++ reasons = request.headers.get("WWW-Authenticate", "").split()
++ if reasons:
++ auth_type = reasons[0]
++ if auth_type == "Basic":
++ auth = HTTPBasicAuth(user, passwd)
++ elif auth_type == "Digest":
++ auth=HTTPDigestAuth(user, passwd)
+
+-def _load_url(location):
++ return auth
++
++def _load_url(location, user=None, passwd=None):
+ '''Load a location (URL or filename) and return contents as string'''
+
++ auth = _get_auth(location, user=user, passwd=passwd)
++
+ try:
+- request = requests.get(location, verify=SSL_VERIFY)
++ request = requests.get(location, verify=SSL_VERIFY, auth=auth)
+ except SSLError as e:
+ raise KickstartError(_('Error securely accessing URL "%s"') % location + ': {e}'.format(e=str(e)))
+ except RequestException as e:
+diff --git a/pykickstart/parser.py b/pykickstart/parser.py
+index d2b0fbe..26b5de9 100644
+--- a/pykickstart/parser.py
++++ b/pykickstart/parser.py
+@@ -773,7 +773,7 @@ class KickstartParser(object):
+ i = PutBackIterator(s.splitlines(True) + [""])
+ self._stateMachine (i)
+
+- def readKickstart(self, f, reset=True):
++ def readKickstart(self, f, reset=True, username=None, password=None):
+ """Process a kickstart file, given by the filename f."""
+ if reset:
+ self._reset()
+@@ -794,7 +794,7 @@ class KickstartParser(object):
+ self.currentdir[self._includeDepth] = cd
+
+ try:
+- s = load_to_str(f)
++ s = load_to_str(f, user=username, passwd=password)
+ except KickstartError as e:
+ raise KickstartError(formatErrorMsg(0, msg=_("Unable to open input kickstart file: %s") % str(e)))
+
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch
new file mode 100644
index 000000000..cb2123546
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch
@@ -0,0 +1,76 @@
+From e6e747b883114bfad51ad93f823e65f5a4d6438a Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 1 Jun 2017 15:12:29 +0800
+Subject: [PATCH 2/4] pykickstart/parser.py: add lock for readKickstart and
+ support https without certification
+
+- Add lock for readKickstart to fix race issue
+
+- Support to download kickstart file through https without certification
+
+Upstream-Status: Inappropriate[oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pykickstart/load.py | 2 +-
+ pykickstart/parser.py | 24 ++++++++++++++++++++++++
+ 2 files changed, 25 insertions(+), 1 deletion(-)
+
+diff --git a/pykickstart/load.py b/pykickstart/load.py
+index 0f5741b..48c8276 100644
+--- a/pykickstart/load.py
++++ b/pykickstart/load.py
+@@ -30,7 +30,7 @@ from requests.exceptions import SSLError, RequestException
+
+ _is_url = lambda location: '://' in location # RFC 3986
+
+-SSL_VERIFY = True
++SSL_VERIFY = False
+
+ def load_to_str(location, user=None, passwd=None):
+ '''Load a destination URL or file into a string.
+diff --git a/pykickstart/parser.py b/pykickstart/parser.py
+index 26b5de9..264ba05 100644
+--- a/pykickstart/parser.py
++++ b/pykickstart/parser.py
+@@ -57,6 +57,26 @@ STATE_COMMANDS = "commands"
+
+ ver = version.DEVEL
+
++import logging
++log = logging.getLogger("anaconda")
++
++import inspect
++import threading
++_private_ks_lock = threading.RLock()
++
++class KsLock(object):
++ def __enter__(self):
++ log.info("%s %s" % (self.__class__.__name__, inspect.stack()[0][3]))
++ _private_ks_lock.acquire()
++ return _private_ks_lock
++
++ def __exit__(self, exc_type, exc_val, exc_tb):
++ log.info("%s %s" % (self.__class__.__name__, inspect.stack()[0][3]))
++ _private_ks_lock.release()
++
++
++_ks_lock = KsLock()
++
+ def _preprocessStateMachine (lineIter):
+ l = None
+ lineno = 0
+@@ -774,6 +794,10 @@ class KickstartParser(object):
+ self._stateMachine (i)
+
+ def readKickstart(self, f, reset=True, username=None, password=None):
++ with _ks_lock:
++ self._readKickstart(f, reset=reset, username=username, password=password)
++
++ def _readKickstart(self, f, reset=True, username=None, password=None):
+ """Process a kickstart file, given by the filename f."""
+ if reset:
+ self._reset()
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0003-comment-out-sections-shutdown-and-environment-in-gen.patch b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0003-comment-out-sections-shutdown-and-environment-in-gen.patch
new file mode 100644
index 000000000..9fb25fb18
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0003-comment-out-sections-shutdown-and-environment-in-gen.patch
@@ -0,0 +1,48 @@
+From be6012a5dd49ae5e8ac035654ab1c6f37f0dc8f4 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 1 Jun 2017 15:15:15 +0800
+Subject: [PATCH 3/4] comment out sections shutdown and environment in
+ generated kickstart file
+
+Both of them is disabled by default.
+
+Upstream-Status: Inappropriate[oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+
+fixup! add comments of shutdown for user
+---
+ pykickstart/commands/reboot.py | 3 +++
+ pykickstart/parser.py | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/pykickstart/commands/reboot.py b/pykickstart/commands/reboot.py
+index 88799ba..2d0cea9 100644
+--- a/pykickstart/commands/reboot.py
++++ b/pykickstart/commands/reboot.py
+@@ -41,6 +41,9 @@ class FC3_Reboot(KickstartCommand):
+ elif self.action == KS_SHUTDOWN:
+ retval += "# Shutdown after installation\nshutdown"
+ retval += self._getArgsAsStr() + "\n"
++ else:
++ retval += "# Shutdown after installation\n#shutdown"
++ retval += self._getArgsAsStr() + "\n"
+
+ return retval
+
+diff --git a/pykickstart/parser.py b/pykickstart/parser.py
+index 264ba05..b3f33d7 100644
+--- a/pykickstart/parser.py
++++ b/pykickstart/parser.py
+@@ -383,7 +383,7 @@ class Packages(KickstartObject):
+
+ if not self.default:
+ if self.environment:
+- pkgs += "@^%s\n" % self.environment
++ pkgs += "#@^%s\n" % self.environment
+
+ grps = self.groupList
+ grps.sort()
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0004-load.py-retry-to-invoke-request-with-timeout.patch b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0004-load.py-retry-to-invoke-request-with-timeout.patch
new file mode 100644
index 000000000..70254f6fd
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0004-load.py-retry-to-invoke-request-with-timeout.patch
@@ -0,0 +1,82 @@
+From c0e63f0d3c09bdabb0ad2c88b7cc73e7618dd86a Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Thu, 15 Jun 2017 17:35:33 +0800
+Subject: [PATCH 4/4] load.py: retry to invoke request with timeout
+
+While networkless, use request to fetch kickstart file from
+network, it failed and wait 300s to break, we should retry
+to invoke request with timeout explicitly. So if it the
+network is up, the fetch works.
+
+Upstream-Status: inappropriate [oe specific]
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ pykickstart/load.py | 30 ++++++++++++++++++++++++++++++
+ 1 file changed, 30 insertions(+)
+
+diff --git a/pykickstart/load.py b/pykickstart/load.py
+index 48c8276..74b266b 100644
+--- a/pykickstart/load.py
++++ b/pykickstart/load.py
+@@ -21,6 +21,7 @@ import requests
+ from requests.auth import HTTPDigestAuth
+ from requests.auth import HTTPBasicAuth
+
++import time
+ import shutil
+ import six
+
+@@ -28,6 +29,9 @@ from pykickstart.errors import KickstartError, KickstartAuthError
+ from pykickstart.i18n import _
+ from requests.exceptions import SSLError, RequestException
+
++import logging
++log = logging.getLogger("anaconda")
++
+ _is_url = lambda location: '://' in location # RFC 3986
+
+ SSL_VERIFY = False
+@@ -74,6 +78,29 @@ def load_to_file(location, destination):
+ _copy_file(location, destination)
+ return destination
+
++def _access_url(location):
++ status = False
++
++ # Retry 45 times, wait 45s~135s
++ i = 0
++ while i < 45:
++
++ try:
++ request = requests.get(location, verify=SSL_VERIFY, timeout=2)
++ except RequestException as e:
++ log.info("Try '%s' %d times, %s" % (location, i, str(e)))
++ status = False
++ i += 1
++ time.sleep(1)
++ continue
++
++ else:
++ status = True
++ return status
++
++ return status
++
++
+ def _get_auth(location, user=None, passwd=None):
+
+ auth = None
+@@ -96,6 +123,9 @@ def _get_auth(location, user=None, passwd=None):
+ def _load_url(location, user=None, passwd=None):
+ '''Load a location (URL or filename) and return contents as string'''
+
++ if not _access_url(location):
++ raise KickstartError(_("Connection %s failed" % location))
++
+ auth = _get_auth(location, user=user, passwd=passwd)
+
+ try:
+--
+2.7.4
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0005-tweak-shebang-to-python3.patch b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0005-tweak-shebang-to-python3.patch
new file mode 100644
index 000000000..3d614955b
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/files/0005-tweak-shebang-to-python3.patch
@@ -0,0 +1,25 @@
+From 8a1f598223bd4cbcc877eb2aba3f5586c75c9d14 Mon Sep 17 00:00:00 2001
+From: Hongxu Jia <hongxu.jia@windriver.com>
+Date: Mon, 21 Aug 2017 10:05:06 +0800
+Subject: [PATCH] tweak shebang to python3
+
+Upstream-Status: Pending
+
+Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
+---
+ tools/ksvalidator.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tools/ksvalidator.py b/tools/ksvalidator.py
+index d6051d5..c3682e8 100755
+--- a/tools/ksvalidator.py
++++ b/tools/ksvalidator.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ #
+ # Chris Lumens <clumens@redhat.com>
+ #
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_2.35.bb b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_2.35.bb
new file mode 100644
index 000000000..7fe603b55
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pykickstart/python3-pykickstart_2.35.bb
@@ -0,0 +1,24 @@
+DESCRIPTION = "A python library for manipulating kickstart files"
+HOMEPAGE = "http://fedoraproject.org/wiki/pykickstart"
+LICENSE = "GPLv2+"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+
+DEPENDS = "python3"
+RDEPENDS_${PN} = "python3 \
+ python3-requests \
+ python3-six \
+"
+
+S = "${WORKDIR}/git"
+SRC_URI = "git://github.com/rhinstaller/pykickstart.git;protocol=https;branch=pykickstart-2 \
+ file://0001-support-authentication-for-kickstart.patch \
+ file://0002-pykickstart-parser.py-add-lock-for-readKickstart-and.patch \
+ file://0003-comment-out-sections-shutdown-and-environment-in-gen.patch \
+ file://0004-load.py-retry-to-invoke-request-with-timeout.patch \
+ file://0005-tweak-shebang-to-python3.patch \
+ "
+SRCREV = "b2787a818540e678c2f9c5dca0c6bbd65b8b55e5"
+
+inherit setuptools3
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted.inc b/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted.inc
new file mode 100644
index 000000000..a0ec02817
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "pyparted is a set of Python modules that provide Python programmers \
+an interface to libparted, the GNU parted library for disk partitioning and \
+filesystem manipulation."
+SUMMARY = "Python bindings for libparted"
+HOMEPAGE = "https://github.com/rhinstaller/pyparted"
+LICENSE = "GPL-2.0+"
+LIC_FILES_CHKSUM = "\
+ file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b \
+ file://src/_pedmodule.c;beginline=10;endline=22;md5=9e53304db812b80d0939e11bb69dcab2 \
+"
+DEPENDS += "parted"
+
+# upstream only publishes releases in github archives which are discouraged
+SRCREV = "1fdb15120f35f5da1dc7ec116522f0c796a8376a"
+SRC_URI = "git://github.com/rhinstaller/pyparted.git;protocol=https"
+
+S = "${WORKDIR}/git"
+
+RDEPENDS_${PN}_class-target += " \
+ parted (>= 2.3) \
+"
+RDEPENDS_${PN}_class-native = ""
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted_3.11.1.bb b/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted_3.11.1.bb
new file mode 100644
index 000000000..7d00fd7d9
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pyparted/python-pyparted_3.11.1.bb
@@ -0,0 +1,10 @@
+require python-pyparted.inc
+
+PV = "3.10.7+git${SRCPV}"
+
+inherit distutils
+
+RDEPENDS_${PN} += "python-stringold python-codecs python-math python-subprocess"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-extended/python-pyparted/python3-pyparted_3.11.1.bb b/meta-openembedded/meta-python/recipes-extended/python-pyparted/python3-pyparted_3.11.1.bb
new file mode 100644
index 000000000..4d6f97b59
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/python-pyparted/python3-pyparted_3.11.1.bb
@@ -0,0 +1,10 @@
+require python-pyparted.inc
+
+PV = "3.10.7+git${SRCPV}"
+
+inherit distutils3
+
+RDEPENDS_${PN} += "python3-stringold python3-codecs python3-math"
+RDEPENDS_${PN}_class-native = ""
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-python/recipes-extended/pywbem/pywbem_0.8.0.bb b/meta-openembedded/meta-python/recipes-extended/pywbem/pywbem_0.8.0.bb
new file mode 100644
index 000000000..7f1986e51
--- /dev/null
+++ b/meta-openembedded/meta-python/recipes-extended/pywbem/pywbem_0.8.0.bb
@@ -0,0 +1,36 @@
+SUMMARY = "Python WBEM Client and Provider Interface"
+DESCRIPTION = "\
+A Python library for making CIM (Common Information Model) operations over \
+HTTP using the WBEM CIM-XML protocol. It is based on the idea that a good \
+WBEM client should be easy to use and not necessarily require a large amount \
+of programming knowledge. It is suitable for a large range of tasks from \
+simply poking around to writing web and GUI applications. \
+\
+WBEM, or Web Based Enterprise Management is a manageability protocol, like \
+SNMP, standardised by the Distributed Management Task Force (DMTF) available \
+at http://www.dmtf.org/standards/wbem. \
+\
+It also provides a Python provider interface, and is the fastest and easiest \
+way to write providers on the planet."
+HOMEPAGE = "http://pywbem.sf.net/"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://pywbem/LICENSE.txt;md5=fbc093901857fcd118f065f900982c24"
+SECTION = "Development/Libraries"
+DEPENDS = "python-m2crypto-native python-typing-native"
+SRC_URI = "http://jaist.dl.sourceforge.net/project/${BPN}/${BPN}/${BP}/${BP}-dev.r704.zip"
+SRC_URI[md5sum] = "84072451dcdd1aa9ee82363848faf7ad"
+SRC_URI[sha256sum] = "898035866d3cc741bbcd62c4ac26e633ad07b7c11d89db2472b9f923f3fd3ed8"
+
+S = "${WORKDIR}/${BP}-dev"
+
+inherit setuptools python-dir
+
+do_install_append() {
+ mv ${D}${bindir}/wbemcli.py ${D}${bindir}/pywbemcli
+ mv ${D}${bindir}/mof_compiler.py ${D}${bindir}/mofcomp
+
+ rm ${D}${libdir}/python2.7/site-packages/${BPN}/wbemcli.py*
+ rm ${D}${libdir}/python2.7/site-packages/${BPN}/mof_compiler.py*
+}
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-webserver/COPYING.MIT b/meta-openembedded/meta-webserver/COPYING.MIT
new file mode 100644
index 000000000..fb950dc69
--- /dev/null
+++ b/meta-openembedded/meta-webserver/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-webserver/README b/meta-openembedded/meta-webserver/README
new file mode 100644
index 000000000..7b6063070
--- /dev/null
+++ b/meta-openembedded/meta-webserver/README
@@ -0,0 +1,68 @@
+meta-webserver
+==============
+
+This layer provides support for building web servers, web-based
+applications and related software.
+
+
+
+Dependencies
+------------
+
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+subdirectory: meta
+branch: master
+revision: HEAD
+
+For some recipes, the meta-oe layer is required:
+
+URI: git://github.com/openembedded/meta-oe.git
+subdirectory: meta-oe
+branch: master
+revision: HEAD
+
+
+
+Layout
+------
+
+recipes-httpd/ Web servers
+recipes-php/ PHP applications
+recipes-support/ Miscellaneous support recipes
+recipes-webadmin/ Standalone web administration interfaces
+
+
+Notes
+-----
+
+* This layer used to provide a modphp recipe that built mod_php, but
+ this is now built as part of the php recipe in meta-oe. However, since
+ apache2 is required to build mod_php, and apache2 recipe is in this
+ layer and recipes in meta-oe can't depend on it, mod_php is not built
+ by default. If you do wish to use mod_php, you need to add "apache2"
+ to the PACKAGECONFIG value for the php recipe in order to enable it.
+ See here for info on how to do that:
+
+ http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#var-PACKAGECONFIG
+
+
+Maintenance
+-----------
+
+Send patches / pull requests to openembedded-devel@lists.openembedded.org
+with '[meta-webserver]' in the subject.
+
+Layer maintainer: Derek Straka <derek@asterius.io>
+
+
+License
+-------
+
+All metadata is MIT licensed unless otherwise stated. Source code included
+in tree for individual recipes is under the LICENSE stated in each recipe
+(.bb file) unless otherwise stated.
+
+This README document is Copyright (C) 2012 Intel Corporation.
+
diff --git a/meta-openembedded/meta-webserver/conf/layer.conf b/meta-openembedded/meta-webserver/conf/layer.conf
new file mode 100644
index 000000000..f205ef23b
--- /dev/null
+++ b/meta-openembedded/meta-webserver/conf/layer.conf
@@ -0,0 +1,26 @@
+# Layer configuration for meta-webserver layer
+# Copyright 2012 Intel Corporation
+
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have various recipe-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "webserver"
+BBFILE_PATTERN_webserver := "^${LAYERDIR}/"
+BBFILE_PRIORITY_webserver = "6"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_webserver = "1"
+
+LAYERDEPENDS_webserver = "core openembedded-layer"
+
+LAYERSERIES_COMPAT_webserver = "sumo"
+
+LICENSE_PATH += "${LAYERDIR}/licenses"
+
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
+ phpmyadmin->bash \
+"
diff --git a/meta-openembedded/meta-webserver/licenses/OML b/meta-openembedded/meta-webserver/licenses/OML
new file mode 100644
index 000000000..7e6bdfded
--- /dev/null
+++ b/meta-openembedded/meta-webserver/licenses/OML
@@ -0,0 +1,28 @@
+This FastCGI application library source and object code (the
+"Software") and its documentation (the "Documentation") are
+copyrighted by Open Market, Inc ("Open Market"). The following terms
+apply to all files associated with the Software and Documentation
+unless explicitly disclaimed in individual files.
+
+Open Market permits you to use, copy, modify, distribute, and license
+this Software and the Documentation for any purpose, provided that
+existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written
+agreement, license, or royalty fee is required for any of the
+authorized uses. Modifications to this Software and Documentation may
+be copyrighted by their authors and need not follow the licensing
+terms described here. If modifications to this Software and
+Documentation have new licensing terms, the new terms must be clearly
+indicated on the first page of each file where they apply.
+
+OPEN MARKET MAKES NO EXPRESS OR IMPLIED WARRANTY WITH RESPECT TO THE
+SOFTWARE OR THE DOCUMENTATION, INCLUDING WITHOUT LIMITATION ANY
+WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN
+NO EVENT SHALL OPEN MARKET BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY
+DAMAGES ARISING FROM OR RELATING TO THIS SOFTWARE OR THE
+DOCUMENTATION, INCLUDING, WITHOUT LIMITATION, ANY INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES OR SIMILAR DAMAGES, INCLUDING LOST PROFITS OR
+LOST DATA, EVEN IF OPEN MARKET HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES. THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS".
+OPEN MARKET HAS NO LIABILITY IN CONTRACT, TORT, NEGLIGENCE OR
+OTHERWISE ARISING OUT OF THIS SOFTWARE OR THE DOCUMENTATION.
diff --git a/meta-openembedded/meta-webserver/licenses/Xdebug b/meta-openembedded/meta-webserver/licenses/Xdebug
new file mode 100644
index 000000000..3cdbf0598
--- /dev/null
+++ b/meta-openembedded/meta-webserver/licenses/Xdebug
@@ -0,0 +1,60 @@
+--------------------------------------------------------------------
+ The Xdebug License, version 1.01
+ (Based on "The PHP License", version 3.0)
+ Copyright (c) 2003-2012 Derick Rethans. All rights reserved.
+--------------------------------------------------------------------
+
+Redistribution and use in source and binary forms, with or without
+modification, is 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. The name "Xdebug" must not be used to endorse or promote products
+ derived from this software without prior written permission. For
+ written permission, please contact derick@xdebug.org.
+
+ 4. Products derived from this software may not be called "Xdebug", nor
+ may "Xdebug" appear in their name, without prior written permission
+ from derick@xdebug.org.
+
+ 5. Derick Rethans may publish revised and/or new versions of the
+ license from time to time. Each version will be given a
+ distinguishing version number. Once covered code has been
+ published under a particular version of the license, you may
+ always continue to use it under the terms of that version. You
+ may also choose to use such covered code under the terms of any
+ subsequent version of the license published by Derick Rethans. No
+ one other than Derick Rethans has the right to modify the terms
+ applicable to covered code created under this License.
+
+ 6. Redistributions of any form whatsoever must retain the following
+ acknowledgment: "This product includes Xdebug, freely available
+ from <http://xdebug.org/>".
+
+THIS SOFTWARE IS PROVIDED BY DERICK RETHANS ``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 PHP DEVELOPMENT TEAM OR
+ITS 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.
+
+--------------------------------------------------------------------
+
+This software consists of voluntary contributions made by some
+individuals on behalf of Derick Rethans.
+
+Derick Rethans can be contacted via e-mail at derick@xdebug.org.
+
+For more information Xdebug, please see <http://xdebug.org>.
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache-mod/apache-websocket_git.bb b/meta-openembedded/meta-webserver/recipes-httpd/apache-mod/apache-websocket_git.bb
new file mode 100644
index 000000000..0beb3ed04
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache-mod/apache-websocket_git.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Websocket module for Apache web server"
+DESCRIPTION = "Process requests using the WebSocket protocol (RFC 6455)"
+HOMEPAGE = "https://github.com/jchampio/${PN}/"
+SECTION = "net"
+LICENSE = "Apache-2.0"
+
+inherit autotools-brokensep pkgconfig
+
+DEPENDS = "apache2 apache2-native pbzip2-native"
+RDEPENDS_${PN} += "apache2"
+
+# Original (github.com/disconnect/apache-websocket) is dead since 2012, the
+# fork contains patches from the modules ML and fixes CVE compliance issues
+SRC_URI = "git://github.com/jchampio/apache-websocket.git"
+
+SRCREV = "f5230d8c520dccf8631da94bf90c23f3c1100dcc"
+
+PV = "0.1.1"
+
+S = "${WORKDIR}/git"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
+
+EXTRA_OECONF = "APACHECTL=${STAGING_DIR_TARGET}${sbindir}/apachectl \
+ LIBTOOL=${STAGING_DIR_TARGET}${bindir_crossscripts}/${HOST_SYS}-libtool"
+
+do_install() {
+ install -d ${D}${libdir}/apache2/modules/
+ install ${B}/.libs/mod_websocket.so ${D}${libdir}/apache2/modules/
+}
+
+FILES_${PN} += " ${libdir}/apache2/modules/* "
+FILES_${PN}-dbg += " ${libdir}/apache2/modules/.debug/* "
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2-native_2.4.29.bb b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2-native_2.4.29.bb
new file mode 100644
index 000000000..36f073c85
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2-native_2.4.29.bb
@@ -0,0 +1,45 @@
+DESCRIPTION = "The Apache HTTP Server is a powerful, efficient, and \
+extensible web server."
+SUMMARY = "Apache HTTP Server"
+HOMEPAGE = "http://httpd.apache.org/"
+DEPENDS = "expat-native pcre-native apr-native apr-util-native"
+SECTION = "net"
+LICENSE = "Apache-2.0"
+
+inherit autotools pkgconfig native
+
+SRC_URI = "${APACHE_MIRROR}/httpd/httpd-${PV}.tar.bz2 \
+ file://0001-configure-use-pkg-config-for-PCRE-detection.patch \
+ "
+
+S = "${WORKDIR}/httpd-${PV}"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a62b0c7623826ff99766ff13fb9007f8"
+SRC_URI[md5sum] = "0c599404ef6b69eee95bcd9fcd094407"
+SRC_URI[sha256sum] = "777753a5a25568a2a27428b2214980564bc1c38c1abf9ccc7630b639991f7f00"
+
+EXTRA_OECONF = "--with-apr=${STAGING_BINDIR_CROSS}/apr-1-config \
+ --with-apr-util=${STAGING_BINDIR_CROSS}/apu-1-config \
+ --prefix=${prefix} --datadir=${datadir}/apache2 \
+ "
+
+do_install () {
+ install -d ${D}${bindir} ${D}${libdir}
+ cp server/gen_test_char ${D}${bindir}
+ install -m 755 support/apxs ${D}${bindir}/
+ install -m 755 httpd ${D}${bindir}/
+ install -d ${D}${datadir}/apache2/build
+ cp ${S}/build/*.mk ${D}${datadir}/apache2/build
+ cp build/*.mk ${D}${datadir}/apache2/build
+ cp ${S}/build/instdso.sh ${D}${datadir}/apache2/build
+
+ install -d ${D}${includedir}/apache2
+ cp ${S}/include/* ${D}${includedir}/apache2
+ cp include/* ${D}${includedir}/apache2
+ cp ${S}/os/unix/os.h ${D}${includedir}/apache2
+ cp ${S}/os/unix/unixd.h ${D}${includedir}/apache2
+
+ cp support/envvars-std ${D}${bindir}/envvars
+ chmod 755 ${D}${bindir}/envvars
+}
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-configure_perlbin.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-configure_perlbin.patch
new file mode 100644
index 000000000..92c53f31d
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-configure_perlbin.patch
@@ -0,0 +1,22 @@
+# Author: echo <fei.geng@windriver.com>
+# Date: April 28 2009
+# Summary:Fix perl install directory to /usr/bin
+#
+# Upstream-Status: Inappropriate [configuration]
+
+Index: httpd-2.4.29/configure.in
+===================================================================
+--- httpd-2.4.29.orig/configure.in
++++ httpd-2.4.29/configure.in
+@@ -855,10 +855,7 @@ AC_DEFINE_UNQUOTED(SERVER_CONFIG_FILE, "
+ AC_DEFINE_UNQUOTED(AP_TYPES_CONFIG_FILE, "${rel_sysconfdir}/mime.types",
+ [Location of the MIME types config file, relative to the Apache root directory])
+
+-perlbin=`$ac_aux_dir/PrintPath perl`
+-if test "x$perlbin" = "x"; then
+- perlbin="/replace/with/path/to/perl/interpreter"
+-fi
++perlbin='/usr/bin/perl'
+ AC_SUBST(perlbin)
+
+ dnl If we are running on BSD/OS, we need to use the BSD .include syntax.
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-ssl-ltmain-rpath.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-ssl-ltmain-rpath.patch
new file mode 100644
index 000000000..f13da91f3
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/apache-ssl-ltmain-rpath.patch
@@ -0,0 +1,81 @@
+ build/ltmain.sh | 32 +++++++++++++++++++++++++++-----
+ 1 file changed, 27 insertions(+), 5 deletions(-)
+
+Index: httpd-2.4.29/build/ltmain.sh
+===================================================================
+--- httpd-2.4.29.orig/build/ltmain.sh
++++ httpd-2.4.29/build/ltmain.sh
+@@ -6969,7 +6969,7 @@ func_mode_link ()
+ dir=$func_resolve_sysroot_result
+ # We need an absolute path.
+ case $dir in
+- [\\/]* | [A-Za-z]:[\\/]*) ;;
++ =* | [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ test -z "$absdir" && \
+@@ -8167,7 +8167,7 @@ func_mode_link ()
+ $ECHO "*** $linklib is not portable!"
+ fi
+ if test lib = "$linkmode" &&
+- test yes = "$hardcode_into_libs"; then
++ test "x$wrs_use_rpaths" = "xyes" && test "$hardcode_into_libs" = yes; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+@@ -8434,7 +8434,7 @@ func_mode_link ()
+
+ if test lib = "$linkmode"; then
+ if test -n "$dependency_libs" &&
+- { test yes != "$hardcode_into_libs" ||
++ { test yes != "$hardcode_into_libs" || test "x$wrs_use_rpaths" != "xyes" ||
+ test yes = "$build_old_libs" ||
+ test yes = "$link_static"; }; then
+ # Extract -R from dependency_libs
+@@ -9086,7 +9086,8 @@ func_mode_link ()
+ *) func_append finalize_rpath " $libdir" ;;
+ esac
+ done
+- if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
++ if test yes != "$hardcode_into_libs" || test "x$wrs_use_rpaths" != "xyes" ||
++ test yes = "$build_old_libs"; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+@@ -9534,7 +9535,7 @@ EOF
+ case $archive_cmds in
+ *\$LD\ *) wl= ;;
+ esac
+- if test yes = "$hardcode_into_libs"; then
++ if test yes = "$hardcode_into_libs" && test "x$wrs_use_rpaths" = "xyes"; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+@@ -10272,6 +10273,27 @@ EOF
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
++
++ # short circuit putting rpaths in executables
++ #
++ if test "x$wrs_use_rpaths" != "xyes" ; then
++ flag=
++ for libdir in $compile_rpath; do
++ case $(echo $libdir | ${SED} 's,/[/]*,/,g') in
++ /usr/lib/* | /usr/lib32/* | /usr/lib64/* ) flag="$flag $libdir" ;;
++ esac
++ done
++ compile_rpath="$flag"
++
++ flag=
++ for libdir in $finalize_rpath; do
++ case $(echo $libdir | ${SED} 's,/[/]*,/,g') in
++ /usr/lib/* | /usr/lib32/* | /usr/lib64/* ) flag="$flag $libdir" ;;
++ esac
++ done
++ finalize_rpath="$flag"
++ fi
++
+ for libdir in $compile_rpath $finalize_rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-corelimit.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-corelimit.patch
new file mode 100644
index 000000000..18e4107ec
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-corelimit.patch
@@ -0,0 +1,37 @@
+
+Bump up the core size limit if CoreDumpDirectory is
+configured.
+
+Upstream-Status: Pending
+
+Note: upstreaming was discussed but there are competing desires;
+ there are portability oddities here too.
+
+--- httpd-2.4.1/server/core.c.corelimit
++++ httpd-2.4.1/server/core.c
+@@ -4433,6 +4433,25 @@ static int core_post_config(apr_pool_t *
+ }
+ apr_pool_cleanup_register(pconf, NULL, ap_mpm_end_gen_helper,
+ apr_pool_cleanup_null);
++
++#ifdef RLIMIT_CORE
++ if (ap_coredumpdir_configured) {
++ struct rlimit lim;
++
++ if (getrlimit(RLIMIT_CORE, &lim) == 0 && lim.rlim_cur == 0) {
++ lim.rlim_cur = lim.rlim_max;
++ if (setrlimit(RLIMIT_CORE, &lim) == 0) {
++ ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL,
++ "core dump file size limit raised to %lu bytes",
++ lim.rlim_cur);
++ } else {
++ ap_log_error(APLOG_MARK, APLOG_NOTICE, errno, NULL,
++ "core dump file size is zero, setrlimit failed");
++ }
++ }
++ }
++#endif
++
+ return OK;
+ }
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-selinux.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-selinux.patch
new file mode 100644
index 000000000..873328d9b
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.1-selinux.patch
@@ -0,0 +1,63 @@
+
+Log the SELinux context at startup.
+
+Upstream-Status: Inappropriate [other]
+
+Note: unlikely to be any interest in this upstream
+
+--- httpd-2.4.1/configure.in.selinux
++++ httpd-2.4.1/configure.in
+@@ -458,6 +458,11 @@ fopen64
+ dnl confirm that a void pointer is large enough to store a long integer
+ APACHE_CHECK_VOID_PTR_LEN
+
++AC_CHECK_LIB(selinux, is_selinux_enabled, [
++ AC_DEFINE(HAVE_SELINUX, 1, [Defined if SELinux is supported])
++ APR_ADDTO(AP_LIBS, [-lselinux])
++])
++
+ AC_CACHE_CHECK([for gettid()], ac_cv_gettid,
+ [AC_TRY_RUN(#define _GNU_SOURCE
+ #include <unistd.h>
+--- httpd-2.4.1/server/core.c.selinux
++++ httpd-2.4.1/server/core.c
+@@ -58,6 +58,10 @@
+ #include <unistd.h>
+ #endif
+
++#ifdef HAVE_SELINUX
++#include <selinux/selinux.h>
++#endif
++
+ /* LimitRequestBody handling */
+ #define AP_LIMIT_REQ_BODY_UNSET ((apr_off_t) -1)
+ #define AP_DEFAULT_LIMIT_REQ_BODY ((apr_off_t) 0)
+@@ -4452,6 +4456,28 @@ static int core_post_config(apr_pool_t *
+ }
+ #endif
+
++#ifdef HAVE_SELINUX
++ {
++ static int already_warned = 0;
++ int is_enabled = is_selinux_enabled() > 0;
++
++ if (is_enabled && !already_warned) {
++ security_context_t con;
++
++ if (getcon(&con) == 0) {
++
++ ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, NULL,
++ "SELinux policy enabled; "
++ "httpd running as context %s", con);
++
++ already_warned = 1;
++
++ freecon(con);
++ }
++ }
++ }
++#endif
++
+ return OK;
+ }
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.4-export.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.4-export.patch
new file mode 100644
index 000000000..afbed8e55
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/httpd-2.4.4-export.patch
@@ -0,0 +1,22 @@
+
+There is no need to "suck in" the apr/apr-util symbols when using
+a shared libapr{,util}, it just bloats the symbol table; so don't.
+
+Upstream-HEAD: needed
+Upstream-2.0: omit
+Upstream-Status: Pending
+
+Note: EXPORT_DIRS change is conditional on using shared apr
+
+--- httpd-2.4.4/server/Makefile.in.export
++++ httpd-2.4.4/server/Makefile.in
+@@ -57,9 +57,6 @@ export_files:
+ ( for dir in $(EXPORT_DIRS); do \
+ ls $$dir/*.h ; \
+ done; \
+- for dir in $(EXPORT_DIRS_APR); do \
+- ls $$dir/ap[ru].h $$dir/ap[ru]_*.h 2>/dev/null; \
+- done; \
+ ) | sed -e s,//,/,g | sort -u > $@
+
+ exports.c: export_files
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/replace-lynx-to-curl-in-apachectl-script.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/replace-lynx-to-curl-in-apachectl-script.patch
new file mode 100644
index 000000000..e4e01b2af
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/replace-lynx-to-curl-in-apachectl-script.patch
@@ -0,0 +1,49 @@
+From 760ccbb2fb046621a2aeaecabb2b1ef9aa280cf1 Mon Sep 17 00:00:00 2001
+From: Yulong Pei <Yulong.pei@windriver.com>
+Date: Thu, 1 Sep 2011 01:03:14 +0800
+Subject: [PATCH] replace lynx to curl in apachectl script
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Yulong Pei <Yulong.pei@windriver.com>
+---
+ support/apachectl.in | 14 ++++++++++----
+ 1 files changed, 10 insertions(+), 4 deletions(-)
+
+Index: httpd-2.4.29/support/apachectl.in
+===================================================================
+--- httpd-2.4.29.orig/support/apachectl.in
++++ httpd-2.4.29/support/apachectl.in
+@@ -52,11 +52,11 @@ fi
+ # a command that outputs a formatted text version of the HTML at the
+ # url given on the command line. Designed for lynx, however other
+ # programs may work.
+-LYNX="@LYNX_PATH@ -dump"
++CURL="/usr/bin/curl"
+ #
+ # the URL to your server's mod_status status page. If you do not
+ # have one, then status and fullstatus will not work.
+-STATUSURL="http://localhost:@PORT@/server-status"
++STATUSURL="http://localhost:@PORT@/"
+ #
+ # Set this variable to a command that increases the maximum
+ # number of file descriptors allowed per child process. This is
+@@ -92,10 +92,16 @@ configtest)
+ ERROR=$?
+ ;;
+ status)
+- $LYNX $STATUSURL | awk ' /process$/ { print; exit } { print } '
++ $CURL -s $STATUSURL | grep -o "It works!"
++ if [ $? != 0 ] ; then
++ echo The httpd server does not work!
++ fi
+ ;;
+ fullstatus)
+- $LYNX $STATUSURL
++ $CURL -s $STATUSURL | grep -o "It works!"
++ if [ $? != 0 ] ; then
++ echo The httpd server does not work!
++ fi
+ ;;
+ *)
+ $HTTPD "$@"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/server-makefile.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/server-makefile.patch
new file mode 100644
index 000000000..f1349cb6a
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2/server-makefile.patch
@@ -0,0 +1,11 @@
+--- http-2.0.54/server/Makefile.in-old 2005-12-20 13:26:56.000000000 -0500
++++ http-2.0.54/server/Makefile.in 2005-12-20 13:27:22.000000000 -0500
+@@ -27,7 +27,7 @@
+ $(LINK) $(EXTRA_LDFLAGS) $(gen_test_char_OBJECTS) $(EXTRA_LIBS)
+
+ test_char.h: gen_test_char
+- ./gen_test_char > test_char.h
++ gen_test_char > test_char.h
+
+ util.lo: test_char.h
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.29.bb b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.29.bb
new file mode 100644
index 000000000..f0298b91a
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/apache2_2.4.29.bb
@@ -0,0 +1,194 @@
+DESCRIPTION = "The Apache HTTP Server is a powerful, efficient, and \
+extensible web server."
+SUMMARY = "Apache HTTP Server"
+HOMEPAGE = "http://httpd.apache.org/"
+DEPENDS = "libtool-native apache2-native openssl expat pcre apr apr-util"
+SECTION = "net"
+LICENSE = "Apache-2.0"
+
+SRC_URI = "${APACHE_MIRROR}/httpd/httpd-${PV}.tar.bz2 \
+ file://server-makefile.patch \
+ file://httpd-2.4.1-corelimit.patch \
+ file://httpd-2.4.4-export.patch \
+ file://httpd-2.4.1-selinux.patch \
+ file://apache-configure_perlbin.patch \
+ file://replace-lynx-to-curl-in-apachectl-script.patch \
+ file://apache-ssl-ltmain-rpath.patch \
+ file://httpd-2.4.3-fix-race-issue-of-dir-install.patch \
+ file://0001-configure-use-pkg-config-for-PCRE-detection.patch \
+ file://configure-allow-to-disable-selinux-support.patch \
+ file://init \
+ file://apache2-volatile.conf \
+ file://apache2.service \
+ file://volatiles.04_apache2 \
+ "
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=a62b0c7623826ff99766ff13fb9007f8"
+SRC_URI[md5sum] = "0c599404ef6b69eee95bcd9fcd094407"
+SRC_URI[sha256sum] = "777753a5a25568a2a27428b2214980564bc1c38c1abf9ccc7630b639991f7f00"
+
+S = "${WORKDIR}/httpd-${PV}"
+
+inherit autotools update-rc.d pkgconfig systemd
+
+SYSTEMD_SERVICE_${PN} = "apache2.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "disable"
+
+SSTATE_SCAN_FILES += "apxs config_vars.mk config.nice"
+
+CFLAGS_append = " -DPATH_MAX=4096"
+CFLAGS_prepend = "-I${STAGING_INCDIR}/openssl "
+EXTRA_OECONF = "--enable-ssl \
+ --with-ssl=${STAGING_LIBDIR}/.. \
+ --with-expat=${STAGING_LIBDIR}/.. \
+ --with-apr=${STAGING_BINDIR_CROSS}/apr-1-config \
+ --with-apr-util=${STAGING_BINDIR_CROSS}/apu-1-config \
+ --enable-info \
+ --enable-rewrite \
+ --with-dbm=sdbm \
+ --with-berkeley-db=no \
+ --localstatedir=/var/${BPN} \
+ --with-gdbm=no \
+ --with-ndbm=no \
+ --includedir=${includedir}/${BPN} \
+ --datadir=${datadir}/${BPN} \
+ --sysconfdir=${sysconfdir}/${BPN} \
+ --libexecdir=${libdir}/${BPN}/modules \
+ ap_cv_void_ptr_lt_long=no \
+ --enable-mpms-shared \
+ ac_cv_have_threadsafe_pollset=no"
+
+PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)}"
+PACKAGECONFIG[selinux] = "--enable-selinux --enable-layout=Debian --prefix=${base_prefix}/,--disable-selinux,libselinux,libselinux"
+PACKAGECONFIG[openldap] = "--enable-ldap --enable-authnz-ldap,--disable-ldap --disable-authnz-ldap,openldap"
+
+do_configure_prepend() {
+ sed -i -e 's:$''{prefix}/usr/lib/cgi-bin:$''{libdir}/cgi-bin:g' ${S}/config.layout
+}
+
+do_install_append() {
+ install -d ${D}/${sysconfdir}/init.d
+ cat ${WORKDIR}/init | \
+ sed -e 's,/usr/sbin/,${sbindir}/,g' \
+ -e 's,/usr/bin/,${bindir}/,g' \
+ -e 's,/usr/lib,${libdir}/,g' \
+ -e 's,/etc/,${sysconfdir}/,g' \
+ -e 's,/usr/,${prefix}/,g' > ${D}/${sysconfdir}/init.d/${BPN}
+ chmod 755 ${D}/${sysconfdir}/init.d/${BPN}
+ # remove the goofy original files...
+ rm -rf ${D}/${sysconfdir}/${BPN}/original
+ # Expat should be found in the staging area via DEPENDS...
+ rm -f ${D}/${libdir}/libexpat.*
+
+ install -d ${D}${sysconfdir}/${BPN}/conf.d
+ install -d ${D}${sysconfdir}/${BPN}/modules.d
+
+ # Ensure configuration file pulls in conf.d and modules.d
+ printf "\nIncludeOptional ${sysconfdir}/${BPN}/conf.d/*.conf" >> ${D}/${sysconfdir}/${BPN}/httpd.conf
+ printf "\nIncludeOptional ${sysconfdir}/${BPN}/modules.d/*.load" >> ${D}/${sysconfdir}/${BPN}/httpd.conf
+ printf "\nIncludeOptional ${sysconfdir}/${BPN}/modules.d/*.conf\n\n" >> ${D}/${sysconfdir}/${BPN}/httpd.conf
+ # match with that is in init script
+ printf "\nPidFile /run/httpd.pid" >> ${D}/${sysconfdir}/${BPN}/httpd.conf
+ # Set 'ServerName' to fix error messages when restart apache service
+ sed -i 's/^#ServerName www.example.com/ServerName localhost/' ${D}/${sysconfdir}/${BPN}/httpd.conf
+
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d/
+ install -m 0644 ${WORKDIR}/apache2-volatile.conf ${D}${sysconfdir}/tmpfiles.d/
+ elif ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/volatiles.04_apache2 ${D}${sysconfdir}/default/volatiles/04_apache2
+ fi
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/apache2.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/apache2.service
+ sed -i -e 's,@BASE_BINDIR@,${base_bindir},g' ${D}${systemd_unitdir}/system/apache2.service
+
+ chown -R root:root ${D}
+}
+
+do_install_append_class-target() {
+ sed -i -e 's,${STAGING_DIR_HOST},,g' \
+ -e 's,APU_INCLUDEDIR = .*,APU_INCLUDEDIR = ,g' \
+ -e 's,APU_CONFIG = .*,APU_CONFIG = ,g' ${D}${datadir}/apache2/build/config_vars.mk
+
+ sed -i -e 's,${STAGING_DIR_HOST},,g' \
+ -e 's,".*/configure","configure",g' ${D}${datadir}/apache2/build/config.nice
+ rm -rf ${D}${localstatedir}/run
+}
+
+SYSROOT_PREPROCESS_FUNCS += "apache_sysroot_preprocess"
+
+apache_sysroot_preprocess () {
+ install -d ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -m 755 ${D}${bindir}/apxs ${SYSROOT_DESTDIR}${bindir_crossscripts}/
+ install -d ${SYSROOT_DESTDIR}${sbindir}/
+ install -m 755 ${D}${sbindir}/apachectl ${SYSROOT_DESTDIR}${sbindir}/
+ sed -i 's!my $installbuilddir = .*!my $installbuilddir = "${STAGING_DIR_HOST}/${datadir}/${BPN}/build";!' ${SYSROOT_DESTDIR}${bindir_crossscripts}/apxs
+ sed -i 's!my $libtool = .*!my $libtool = "${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool";!' ${SYSROOT_DESTDIR}${bindir_crossscripts}/apxs
+
+ sed -i 's!^APR_CONFIG = .*!APR_CONFIG = ${STAGING_BINDIR_CROSS}/apr-1-config!' ${SYSROOT_DESTDIR}${datadir}/${BPN}/build/config_vars.mk
+ sed -i 's!^APU_CONFIG = .*!APU_CONFIG = ${STAGING_BINDIR_CROSS}/apu-1-config!' ${SYSROOT_DESTDIR}${datadir}/${BPN}/build/config_vars.mk
+ sed -i 's!^includedir = .*!includedir = ${STAGING_INCDIR}/apache2!' ${SYSROOT_DESTDIR}${datadir}/${BPN}/build/config_vars.mk
+ sed -i 's!^CFLAGS = -I[^ ]*!CFLAGS = -I${STAGING_INCDIR}/openssl!' ${SYSROOT_DESTDIR}${datadir}/${BPN}/build/config_vars.mk
+ sed -i 's!^EXTRA_LDFLAGS = .*!EXTRA_LDFLAGS = -L${STAGING_LIBDIR}!' ${SYSROOT_DESTDIR}${datadir}/${BPN}/build/config_vars.mk
+ sed -i 's!^EXTRA_INCLUDES = .*!EXTRA_INCLUDES = -I$(includedir) -I. -I${STAGING_INCDIR}!' ${SYSROOT_DESTDIR}${datadir}/${BPN}/build/config_vars.mk
+ sed -i 's!--sysroot=[^ ]*!--sysroot=${STAGING_DIR_HOST}!' ${SYSROOT_DESTDIR}${datadir}/${BPN}/build/config_vars.mk
+}
+
+#
+# implications - used by update-rc.d scripts
+#
+INITSCRIPT_NAME = "apache2"
+INITSCRIPT_PARAMS = "defaults 91 20"
+LEAD_SONAME = "libapr-1.so.0"
+
+PACKAGES = "${PN}-scripts ${PN}-doc ${PN}-dev ${PN}-dbg ${PN}"
+
+CONFFILES_${PN} = "${sysconfdir}/${BPN}/httpd.conf \
+ ${sysconfdir}/${BPN}/magic \
+ ${sysconfdir}/${BPN}/mime.types \
+ ${sysconfdir}/init.d/${BPN} "
+
+# we override here rather than append so that .so links are
+# included in the runtime package rather than here (-dev)
+# and to get build, icons, error into the -dev package
+FILES_${PN}-dev = "${datadir}/${BPN}/build \
+ ${datadir}/${BPN}/icons \
+ ${datadir}/${BPN}/error \
+ ${bindir}/apr-config ${bindir}/apu-config \
+ ${libdir}/apr*.exp \
+ ${includedir}/${BPN} \
+ ${libdir}/*.la \
+ ${libdir}/*.a \
+ ${bindir}/apxs \
+ "
+
+
+# manual to manual
+FILES_${PN}-doc += " ${datadir}/${BPN}/manual"
+
+FILES_${PN}-scripts += "${bindir}/dbmmanage"
+
+#
+# override this too - here is the default, less datadir
+#
+FILES_${PN} = "${bindir} ${sbindir} ${libexecdir} ${libdir}/lib*.so.* ${sysconfdir} \
+ ${sharedstatedir} ${localstatedir} /bin /sbin /lib/*.so* \
+ ${libdir}/${BPN}"
+
+# we want htdocs and cgi-bin to go with the binary
+FILES_${PN} += "${datadir}/${BPN}/htdocs ${datadir}/${BPN}/cgi-bin"
+
+#make sure the lone .so links also get wrapped in the base package
+FILES_${PN} += "${libdir}/lib*.so ${libdir}/pkgconfig/*"
+
+FILES_${PN}-dbg += "${libdir}/${BPN}/modules/.debug"
+
+RDEPENDS_${PN} += "openssl libgcc"
+RDEPENDS_${PN}-scripts += "perl ${PN}"
+RDEPENDS_${PN}-dev = "perl"
+
+FILES_${PN} += "${libdir}/cgi-bin"
+FILES_${PN} += "${datadir}/${BPN}/"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/0001-configure-use-pkg-config-for-PCRE-detection.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/0001-configure-use-pkg-config-for-PCRE-detection.patch
new file mode 100644
index 000000000..63096db0a
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/0001-configure-use-pkg-config-for-PCRE-detection.patch
@@ -0,0 +1,52 @@
+From d8837756f2a48adcfe5d645c39cf163d96eac76c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen.kooi@linaro.org>
+Date: Tue, 17 Jun 2014 09:10:57 +0200
+Subject: [PATCH] configure: use pkg-config for PCRE detection
+
+Signed-off-by: Koen Kooi <koen.kooi@linaro.org>
+Upstream-Status: pending
+---
+ configure.in | 27 +++++----------------------
+ 1 file changed, 5 insertions(+), 22 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 864d7c7..da4138e 100644
+--- a/configure.in
++++ b/configure.in
+@@ -215,28 +215,11 @@ fi
+ AC_ARG_WITH(pcre,
+ APACHE_HELP_STRING(--with-pcre=PATH,Use external PCRE library))
+
+-AC_PATH_PROG(PCRE_CONFIG, pcre-config, false)
+-if test -d "$with_pcre" && test -x "$with_pcre/bin/pcre-config"; then
+- PCRE_CONFIG=$with_pcre/bin/pcre-config
+-elif test -x "$with_pcre"; then
+- PCRE_CONFIG=$with_pcre
+-fi
+-
+-if test "$PCRE_CONFIG" != "false"; then
+- if $PCRE_CONFIG --version >/dev/null 2>&1; then :; else
+- AC_MSG_ERROR([Did not find pcre-config script at $PCRE_CONFIG])
+- fi
+- case `$PCRE_CONFIG --version` in
+- [[1-5].*])
+- AC_MSG_ERROR([Need at least pcre version 6.0])
+- ;;
+- esac
+- AC_MSG_NOTICE([Using external PCRE library from $PCRE_CONFIG])
+- APR_ADDTO(PCRE_INCLUDES, [`$PCRE_CONFIG --cflags`])
+- APR_ADDTO(PCRE_LIBS, [`$PCRE_CONFIG --libs`])
+-else
+- AC_MSG_ERROR([pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/])
+-fi
++PKG_CHECK_MODULES([PCRE], [libpcre], [
++ AC_DEFINE([HAVE_PCRE], [1], [Define if you have PCRE library])
++], [
++ AC_MSG_ERROR([$PCRE_PKG_ERRORS])
++])
+ APACHE_SUBST(PCRE_LIBS)
+
+ AC_MSG_NOTICE([])
+--
+1.9.3
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2-volatile.conf b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2-volatile.conf
new file mode 100644
index 000000000..ff2c58704
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2-volatile.conf
@@ -0,0 +1,2 @@
+d /var/run/apache2 0755 root root -
+d /var/log/apache2 0755 root root -
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2.service b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2.service
new file mode 100644
index 000000000..9b5548c76
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/apache2.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=The Apache HTTP Server
+After=network.target remote-fs.target nss-lookup.target
+
+[Service]
+Type=simple
+Environment=LANG=C
+ExecStart=@SBINDIR@/httpd -DFOREGROUND -D SSL -D PHP5 -k start
+ExecStop=@BASE_BINDIR@/kill -WINCH ${MAINPID}
+KillSignal=SIGCONT
+PrivateTmp=true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/configure-allow-to-disable-selinux-support.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/configure-allow-to-disable-selinux-support.patch
new file mode 100644
index 000000000..5b5c29707
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/configure-allow-to-disable-selinux-support.patch
@@ -0,0 +1,40 @@
+From d23dd33e373340f6fddf11904839d1a118824401 Mon Sep 17 00:00:00 2001
+From: Wenzong Fan <wenzong.fan@windriver.com>
+Date: Mon, 1 Dec 2014 02:08:27 -0500
+Subject: [PATCH] apache2: allow to disable selinux support
+
+Upstream-Status: Pending
+
+Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
+---
+ configure.in | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index df94ee5..8c3ab21 100644
+--- a/configure.in
++++ b/configure.in
+@@ -466,10 +466,16 @@ getloadavg
+ dnl confirm that a void pointer is large enough to store a long integer
+ APACHE_CHECK_VOID_PTR_LEN
+
+-AC_CHECK_LIB(selinux, is_selinux_enabled, [
+- AC_DEFINE(HAVE_SELINUX, 1, [Defined if SELinux is supported])
+- APR_ADDTO(AP_LIBS, [-lselinux])
+-])
++# SELinux support
++AC_ARG_ENABLE(selinux,APACHE_HELP_STRING(--enable-selinux,Enable SELinux support [default=auto]),
++ [],[enable_selinux=auto])
++
++if test x$enable_selinux != xno; then
++ AC_CHECK_LIB(selinux, is_selinux_enabled, [
++ AC_DEFINE(HAVE_SELINUX, 1, [Defined if SELinux is supported])
++ APR_ADDTO(AP_LIBS, [-lselinux])
++ ])
++fi
+
+ AC_CACHE_CHECK([for gettid()], ac_cv_gettid,
+ [AC_TRY_RUN(#define _GNU_SOURCE
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/httpd-2.4.3-fix-race-issue-of-dir-install.patch b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/httpd-2.4.3-fix-race-issue-of-dir-install.patch
new file mode 100644
index 000000000..b948753b4
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/httpd-2.4.3-fix-race-issue-of-dir-install.patch
@@ -0,0 +1,21 @@
+Upstream-Status: Pending
+
+fix following race issue when do parallel install
+| mkdir: cannot create directory `/home/mypc/workspace/poky/build_p4080ds_release/tmp/work/ppce500mc-fsl_networking-linux/apache2/2.4.3-r1/image/usr/share/apache2': File exists
+...
+| mkdir: cannot create directory `/home/mypc/workspace/poky/build_p4080ds_release/tmp/work/ppce500mc-fsl_networking-linux/apache2/2.4.3-r1/image/usr/share/apache2': File exists
+| make[1]: *** [install-man] Error 1
+| make[1]: *** Waiting for unfinished jobs....
+
+-Signed-off-by: Zhenhua Luo <zhenhua.luo@freescale.com>
+--- httpd-2.4.3/build/mkdir.sh.orig 2013-01-25 03:47:21.565255420 -0600
++++ httpd-2.4.3/build/mkdir.sh 2013-01-25 03:46:17.833051230 -0600
+@@ -39,7 +39,7 @@
+ esac
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+- mkdir "$pathcomp" || errstatus=$?
++ mkdir -p "$pathcomp" || errstatus=$?
+ fi
+ pathcomp="$pathcomp/"
+ done
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/init b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/init
new file mode 100755
index 000000000..758d133b9
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/init
@@ -0,0 +1,230 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: httpd
+# Required-Start: $local_fs $remote_fs $network $named
+# Required-Stop: $local_fs $remote_fs $network
+# Should-Start: distcache
+# Short-Description: start and stop Apache HTTP Server
+# Description: The Apache HTTP Server is an extensible server
+# implementing the current HTTP standards.
+### END INIT INFO
+
+ARGS="-D SSL -D PHP5 -k start"
+NAME=apache2
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DAEMON=/usr/sbin/httpd
+SUEXEC=/usr/lib/apache/suexec
+PIDFILE=/run/httpd.pid
+CONF=/etc/apache2/httpd.conf
+APACHECTL=/usr/sbin/apachectl
+
+trap "" 1
+export LANG=C
+export PATH
+
+test -f $DAEMON || exit 0
+test -f $APACHECTL || exit 0
+
+# ensure we don't leak environment vars into apachectl
+APACHECTL="env -i LANG=${LANG} PATH=${PATH} $APACHECTL"
+
+apache_conftest() {
+ if $($APACHECTL configtest > /dev/null 2>&1 ); then
+ return 0
+ else
+ return 1
+ fi
+}
+
+apache_wait_start() {
+ local STATUS=$1
+
+ if [ $STATUS != 0 ] ; then
+ return $STATUS
+ fi
+
+ local i=0
+ while : ; do
+ PIDTMP=$(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
+ if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
+ return $STATUS
+ fi
+
+ if [ $i = "20" ] ; then
+ return 2
+ fi
+
+ sleep 1
+ i=$(($i+1))
+ done
+}
+
+apache_wait_stop() {
+ local STATUS=$1
+
+ if [ $STATUS != 0 ] ; then
+ return $STATUS
+ fi
+
+ PIDTMP=$(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
+ if [ -n "${PIDTMP:-}" ] && kill -0 "${PIDTMP:-}" 2> /dev/null; then
+ local i=0
+ while kill -0 "${PIDTMP:-}" 2> /dev/null; do
+ if [ $i = '60' ]; then
+ STATUS=2
+ break
+ fi
+ sleep 1
+ i=$(($i+1))
+ done
+ return $STATUS
+ else
+ return $STATUS
+ fi
+}
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+ # Return
+ # 0 if daemon has been started
+ # 1 if daemon was already running
+ # 2 if daemon could not be started
+
+ if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
+ return 1
+ fi
+
+ if apache_conftest ; then
+ $APACHECTL start
+ apache_wait_start $?
+ return $?
+ else
+ return 2
+ fi
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+ # 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
+
+ local AP_RET=0
+
+ if pidof $DAEMON > /dev/null 2>&1 ; then
+ if [ -e $PIDFILE ] && pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE) > /dev/null 2>&1 ; then
+ AP_RET=2
+ else
+ AP_RET=1
+ fi
+ else
+ AP_RET=0
+ fi
+
+ # AP_RET is:
+ # 0 if Apache (whichever) is not running
+ # 1 if Apache (whichever) is running
+ # 2 if Apache from the PIDFILE is running
+
+ if [ $AP_RET = 0 ] ; then
+ return 1
+ fi
+
+ if [ $AP_RET = 2 ] && apache_conftest ; then
+ $APACHECTL stop
+ apache_wait_stop $?
+ return $?
+ else
+ if [ $AP_RET = 2 ]; then
+ kill $(pidof $DAEMON | tr ' ' '\n' | grep -w $(cat $PIDFILE))
+ apache_wait_stop $?
+ return $?
+ elif [ $AP_RET = 1 ] ; then
+ return 2
+ fi
+ fi
+
+}
+
+case "$1" in
+ start)
+ echo -n "Starting web server: $NAME"
+ do_start
+ case $? in
+ 0|1)
+ echo .
+ exit 0
+ ;;
+ 2)
+ echo failed
+ exit 1
+ ;;
+ esac
+ ;;
+
+ stop)
+ echo -n "Stopping web server: $NAME"
+ do_stop
+ case $? in
+ 0|1)
+ echo .
+ exit 0
+ ;;
+ 2)
+ echo failed
+ exit 1
+ ;;
+ esac
+ ;;
+
+ reload)
+ echo -n "Reloading $NAME configuration"
+ kill -HUP `cat $PIDFILE`
+ ;;
+
+ reload-modules)
+ echo -n "Reloading $NAME modules"
+ $APACHECTL restart
+ ;;
+
+ restart)
+ echo "Restarting web server: $NAME"
+ do_stop
+ case "$?" in
+ 0|1)
+ do_start
+ exit $?
+ ;;
+ *)
+ # Failed to stop
+ exit 1
+ ;;
+ esac
+ ;;
+
+ force-reload)
+ $0 reload-modules
+ exit $?
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}"
+ exit 1
+ ;;
+esac
+
+if [ $? = 0 ]; then
+ echo .
+ exit 0
+else
+ echo failed
+ exit 1
+fi
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/volatiles.04_apache2 b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/volatiles.04_apache2
new file mode 100644
index 000000000..922075b1b
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/apache2/files/volatiles.04_apache2
@@ -0,0 +1,3 @@
+# <type> <owner> <group> <mode> <path> <linksource>
+d root root 0755 /var/run/apache2 none
+d root root 0755 /var/log/apache2 none
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-configure.ac-Add-foreign-to-AM_INIT_AUTOMAKE.patch b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-configure.ac-Add-foreign-to-AM_INIT_AUTOMAKE.patch
new file mode 100644
index 000000000..f3be7c6e5
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-configure.ac-Add-foreign-to-AM_INIT_AUTOMAKE.patch
@@ -0,0 +1,30 @@
+From 4591b5b40d66c19edc73b951ad091dac639454c9 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jul 2017 16:00:34 -0700
+Subject: [PATCH] configure.ac: Add foreign to AM_INIT_AUTOMAKE
+
+Fixes errors like
+| Makefile.am: error: required file './README' not found
+| Makefile.am: error: required file './ChangeLog' not found
+
+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 d6298f27..98cab791 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -32,7 +32,7 @@ dnl Init autoconf and automake
+ AC_INIT([cherokee], [cherokee_version], [http://bugs.cherokee-project.com/], [cherokee])
+ AC_CONFIG_SRCDIR([cherokee/server.c])
+ AC_CONFIG_MACRO_DIR([m4])
+-AM_INIT_AUTOMAKE([no-define])
++AM_INIT_AUTOMAKE([no-define foreign])
+
+ dnl Define version
+ AC_DEFINE(PACKAGE_MAJOR_VERSION, "cherokee_major_version", [Version string])
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-make-Do-not-build-po-files.patch b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-make-Do-not-build-po-files.patch
new file mode 100644
index 000000000..d4c0b6e8c
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/0001-make-Do-not-build-po-files.patch
@@ -0,0 +1,27 @@
+From e9ae3231ec188df801fe51aa95d6afec2e52db58 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 25 Jul 2017 16:14:19 -0700
+Subject: [PATCH] make: Do not build po files
+
+Target fails to build
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index f01278c3..eb864c36 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,6 +1,6 @@
+ ## Cherokee: Makefile.am -*- makefile -*-
+
+-SUBDIRS = po m4 www icons themes qa doc . admin contrib cherokee cget packages dbslayer
++SUBDIRS = m4 www icons themes qa doc . admin contrib cherokee cget packages dbslayer
+ SUFFIXES = .sample.pre .sample .h.pre .h .xml.pre .xml
+ ACLOCAL_AMFLAGS = -I m4
+
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee-install-configured.py-once.patch b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee-install-configured.py-once.patch
new file mode 100644
index 000000000..3336f7df7
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee-install-configured.py-once.patch
@@ -0,0 +1,40 @@
+From 98a0f19df0a31d5649ad89d395fd1b8de5591827 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Thu, 3 Apr 2014 21:33:25 +0800
+Subject: [PATCH] admin/Makefile.am: only install configured.py once
+
+Both the two rules install-adminpyDATA and install-generatedDATA will
+install the configured.py to the same location, they can run parallel,
+and they use "install -m", which would might build failures:
+
+/usr/bin/install: setting permissions for `/path/to/configured.py': No such file or directory
+
+This is because the first install is setting the permission while the
+second install is removing the file an re-install.
+
+Only install the configured.py once will fix the problem, I think that
+there is no side effect since it installed the same file to the same
+location twice in the past.
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ admin/Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/admin/Makefile.am b/admin/Makefile.am
+index ce5937b..6f96934 100644
+--- a/admin/Makefile.am
++++ b/admin/Makefile.am
+@@ -73,7 +73,6 @@ SystemStatsWidgets.py \
+ Wizard.py \
+ XMLServerDigest.py \
+ config_version.py \
+-configured.py \
+ consts.py \
+ util.py \
+ popen.py \
+--
+1.8.2.1
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.init b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.init
new file mode 100644
index 000000000..93603b84d
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.init
@@ -0,0 +1,32 @@
+#!/bin/sh
+DAEMON=/usr/sbin/cherokee
+CONFIG=/etc/cherokee/cherokee.conf
+PIDFILE=/var/run/cherokee.pid
+NAME="cherokee"
+DESC="Cherokee http server"
+
+test -r /etc/default/cherokee && . /etc/default/cherokee
+test -x "$DAEMON" || exit 0
+test ! -r "$CONFIG" && exit 0
+
+case "$1" in
+ start)
+ echo "Starting $DESC: "
+ start-stop-daemon --oknodo -S -x $DAEMON -- -d -C $CONFIG
+ ;;
+
+ stop)
+ echo "Stopping $DESC:"
+ start-stop-daemon -K -p $PIDFILE
+ ;;
+
+ restart)
+ $0 stop >/dev/null 2>&1
+ $0 start
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 0
+ ;;
+esac
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.service b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.service
new file mode 100644
index 000000000..a2d703185
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee/cherokee.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Cherokee web server
+After=syslog.target
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/cherokee -d -C /etc/cherokee/cherokee.conf
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee_git.bb b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee_git.bb
new file mode 100644
index 000000000..3f7eae4c1
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/cherokee/cherokee_git.bb
@@ -0,0 +1,71 @@
+SUMMARY = "Cherokee Web Server fast and secure"
+SUMMARY_cget = "Small downloader based in the Cherokee client library"
+HOMEPAGE = "http://www.cherokee-project.com/"
+SECTION = "network"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "unzip-native libpcre openssl mysql5 ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'libpam', '', d)}"
+
+SRCREV = "75f041e2255e6dd0692db2f14611c2647dbe8425"
+PV = "1.2.104+git${SRCPV}"
+SRC_URI = "git://github.com/cherokee/webserver \
+ file://cherokee.init \
+ file://cherokee.service \
+ file://cherokee-install-configured.py-once.patch \
+ file://0001-configure.ac-Add-foreign-to-AM_INIT_AUTOMAKE.patch \
+ file://0001-make-Do-not-build-po-files.patch \
+"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep pkgconfig binconfig update-rc.d systemd pythonnative
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ffmpeg] = "--with-ffmpeg,--without-ffmpeg,libav"
+PACKAGECONFIG[ldap] = "--with-ldap,--without-ldap,openldap"
+PACKAGECONFIG[geoip] = "--with-geoip,--without-geoip,geoip"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
+
+EXTRA_OECONF = "--disable-static \
+ --disable-nls \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', '--enable-pam', '--disable-pam', d)} \
+ --with-wwwroot=${localstatedir}/www/cherokee \
+"
+
+do_install_append () {
+ install -m 0755 -d ${D}${sysconfdir}/init.d
+ install -m 755 ${WORKDIR}/cherokee.init ${D}${sysconfdir}/init.d/cherokee
+
+ # clean up .la files for plugins
+ rm -f ${D}${libdir}/cherokee/*.la
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/cherokee.service ${D}${systemd_unitdir}/system
+ rmdir "${D}${localstatedir}/run"
+ rmdir --ignore-fail-on-non-empty "${D}${localstatedir}"
+}
+
+# Put -dev near the front so we can move the .la files into it with a wildcard
+PACKAGES =+ "libcherokee-server libcherokee-client libcherokee-base cget"
+
+FILES_cget = "${bindir}/cget"
+FILES_libcherokee-server = "${libdir}/libcherokee-server${SOLIBS}"
+FILES_libcherokee-client = "${libdir}/libcherokee-client${SOLIBS}"
+FILES_libcherokee-base = "${libdir}/libcherokee-base${SOLIBS}"
+
+# Pack the htdocs
+FILES_${PN} += "${localstatedir}/www/cherokee"
+
+CONFFILES_${PN} = " \
+ ${sysconfdir}/cherokee/cherokee.conf \
+ ${sysconfdir}/init.d/cherokee \
+"
+
+INITSCRIPT_NAME = "cherokee"
+INITSCRIPT_PARAMS = "defaults 91 91"
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "cherokee.service"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha-init b/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha-init
new file mode 100644
index 000000000..7427fcb90
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha-init
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: hiawatha httpd httpd-cgi
+# Required-Start: $syslog $network $remote_fs
+# Required-Stop: $syslog $network $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Hiawatha webserver
+# Description: Hiawatha, a secure and advanced webserver.
+### END INIT INFO
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=sed_sbin_path/hiawatha
+NAME=hiawatha
+DESC="Hiawatha Web Server"
+OPTS=""
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ mkdir -p /var/log/hiawatha &> /dev/null
+ start-stop-daemon --start -x "$DAEMON" -- $OPTS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --stop -x "$DAEMON"
+ echo "$NAME."
+ ;;
+ restart|force-reload)
+ echo -n "Restarting $DESC: "
+ start-stop-daemon --stop -x "$DAEMON"
+ sleep 1
+ start-stop-daemon --start -x "$DAEMON" -- $OPTS
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha.service b/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha.service
new file mode 100644
index 000000000..26cb8d03d
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/files/hiawatha.service
@@ -0,0 +1,16 @@
+[Unit]
+Description=Hiawatha Web Server
+After=network.target remote-fs.target nss-lookup.target
+
+[Service]
+Type=simple
+SyslogIdentifier=hiawatha
+ExecStartPre=/usr/sbin/hiawatha -k ; /usr/sbin/wigwam
+ExecStart= /usr/sbin/hiawatha -d
+TimeoutSec=10
+#(doesn't like this setting. Can't find files) PrivateTmp=true
+LimitNOFILE=infinity
+CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_CHOWN CAP_DAC_OVERRIDE CAP_FOWNER CAP_FSETID CAP_SETGID CAP_SETUID
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/hiawatha_10.7.bb b/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/hiawatha_10.7.bb
new file mode 100644
index 000000000..4c3ca556b
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/hiawatha/hiawatha_10.7.bb
@@ -0,0 +1,64 @@
+SUMMARY = "Lightweight secure web server"
+HOMEPAGE = "http://www.hiawatha-webserver.org"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe"
+DEPENDS = "libxml2 libxslt"
+
+SECTION = "net"
+
+SRC_URI = "http://hiawatha-webserver.org/files/${BP}.tar.gz \
+ file://hiawatha-init \
+ file://hiawatha.service "
+
+SRC_URI[md5sum] = "581aa71c831172ba06910deda717302f"
+SRC_URI[sha256sum] = "363e99d84a85dafbb74bcc30b3e30286053ec2abbc7afe08cd87193611735f74"
+
+INITSCRIPT_NAME = "hiawatha"
+INITSCRIPT_PARAMS = "defaults 70"
+
+SYSTEMD_SERVICE_${PN} = "hiawatha.service"
+
+inherit cmake update-rc.d systemd
+
+EXTRA_OECMAKE = " -DENABLE_IPV6=OFF \
+ -DENABLE_CACHE=OFF \
+ -DENABLE_DEBUG=OFF \
+ -DENABLE_SSL=OFF \
+ -DENABLE_TOOLKIT=OFF \
+ -DENABLE_CHROOT=OFF \
+ -DENABLE_XSLT=ON \
+ -DENABLE_TOMAHAWK=OFF \
+ -DCMAKE_INSTALL_MANDIR=${mandir} \
+ -DCMAKE_INSTALL_BINDIR=${bindir} \
+ -DCMAKE_INSTALL_SBINDIR=${sbindir} \
+ -DCMAKE_INSTALL_SYSCONFDIR=${sysconfdir} \
+ -DCMAKE_INSTALL_LIBDIR=${libdir} \
+ -DCMAKE_INSTALL_FULL_LOCALSTATEDIR=${localstatedir}"
+
+do_install_append() {
+ # Copy over init script and sed in the correct sbin path
+ sed -i 's,sed_sbin_path,${sbindir},' ${WORKDIR}/hiawatha-init
+ mkdir -p ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/hiawatha-init ${D}${sysconfdir}/init.d/hiawatha
+
+ # configure php-fcgi to have a working configuration
+ # by default if php is installed
+ echo "Server = ${bindir}/php-cgi ; 2 ; 127.0.0.1:2005 ; nobody:nobody ; ${sysconfdir}/php/hiawatha-php5/php.ini" >> ${D}${sysconfdir}/hiawatha/php-fcgi.conf
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}/${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/hiawatha.service ${D}/${systemd_unitdir}/system
+ fi
+
+ rmdir --ignore-fail-on-non-empty "${D}${localstatedir}" "${D}${localstatedir}/run"
+}
+
+CONFFILES_${PN} = " \
+ ${sysconfdir}/hiawatha/cgi-wrapper.conf \
+ ${sysconfdir}/hiawatha/hiawatha.conf \
+ ${sysconfdir}/hiawatha/index.xslt \
+ ${sysconfdir}/hiawatha/mimetype.conf \
+ ${sysconfdir}/hiawatha/php-fcgi.conf \
+"
+
+FILES_${PN}-dev = "${libdir}/hiawatha/*${SOLIBSDEV}"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/0001-configure-Respect-LIBS-variable-from-env.patch b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/0001-configure-Respect-LIBS-variable-from-env.patch
new file mode 100644
index 000000000..7a229513b
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/0001-configure-Respect-LIBS-variable-from-env.patch
@@ -0,0 +1,29 @@
+From b0526a9b5325bd4758dad8d14efd85c98ef2ebff Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Fri, 14 Jul 2017 18:25:23 -0700
+Subject: [PATCH] configure: Respect LIBS variable from env
+
+For musl we need to pass -lexecinfo from env
+this change accomodates that
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure b/configure
+index 4286c34..f1c65db 100755
+--- a/configure
++++ b/configure
+@@ -620,7 +620,7 @@ LIBDEFS = -DSHAREDLIB -fPIC \$(DEFS)
+ INCDIR = ./include
+ LDFLAGS = $LDFLAGS
+ DESTDIR = ../bin/monkey
+-LIBS = -ldl $libs
++LIBS = -ldl $libs ${LIBS}
+ OBJ = monkey.o mk_method.o mk_mimetype.o mk_vhost.o mk_request.o \\
+ mk_header.o mk_config.o mk_signals.o \\
+ mk_user.o mk_utils.o mk_epoll.o mk_scheduler.o \\
+--
+2.13.3
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init
new file mode 100644
index 000000000..40b21182e
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.init
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/bin/monkey
+NAME=monkey
+DESC="Monkey HTTP Server"
+OPTS="--daemon"
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start -x "$DAEMON" -- $OPTS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --stop -x "$DAEMON"
+ echo "$NAME."
+ ;;
+ restart|force-reload)
+ echo -n "Restarting $DESC: "
+ start-stop-daemon --stop -x "$DAEMON"
+ sleep 1
+ start-stop-daemon --start -x "$DAEMON" -- $OPTS
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service
new file mode 100644
index 000000000..f9aa57f91
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/monkey/files/monkey.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Monkey HTTP Server
+After=network.target remote-fs.target
+
+[Service]
+Type=forking
+ExecStart=/usr/bin/monkey --daemon
+PIDFile=/var/run/monkey.pid.2001
+TimeoutSec=10
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.5.6.bb b/meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.5.6.bb
new file mode 100644
index 000000000..559d251bd
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/monkey/monkey_1.5.6.bb
@@ -0,0 +1,77 @@
+SUMMARY = "Fast and Lightweight HTTP Server for Linux"
+HOMEPAGE = "http://monkey-project.com"
+BUGTRACKER = "https://github.com/monkey/monkey/issues"
+
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=2ee41112a44fe7014dce33e26468ba93"
+
+SECTION = "net"
+
+DEPENDS_append_libc-musl = " libexecinfo"
+
+SRC_URI = "http://monkey-project.com/releases/1.5/monkey-${PV}.tar.gz \
+ file://0001-configure-Respect-LIBS-variable-from-env.patch \
+ file://monkey.service \
+ file://monkey.init"
+
+SRC_URI[md5sum] = "9699e4c9ea6ce6b989907c252ae80254"
+SRC_URI[sha256sum] = "7c3d845306aa74ee6effd7ab6169d16ac4e6450e564954d0d0baa2d1e9be1a22"
+
+UPSTREAM_CHECK_URI = "https://github.com/monkey/monkey/releases"
+UPSTREAM_CHECK_REGEX = "v(?P<pver>\d+(\.\d+)+).tar.gz"
+
+EXTRA_OECONF = "--plugdir=${libdir}/monkey/ \
+ --logdir=${localstatedir}/log/monkey/ \
+ --pidfile=${localstatedir}/run/monkey.pid \
+ --default-user=www-data \
+ --datadir=${localstatedir}/www/monkey/ \
+ --sysconfdir=${sysconfdir}/monkey/ \
+ --enable-plugins=* \
+ --disable-plugins=mbedtls \
+ --debug \
+ --malloc-libc"
+
+do_configure_prepend_libc-musl() {
+ export LIBS="-lexecinfo"
+}
+
+DISABLE_STATIC = ""
+CLEANBROKEN = "1"
+
+inherit autotools-brokensep pkgconfig update-rc.d systemd
+
+INITSCRIPT_NAME = "monkey"
+INITSCRIPT_PARAMS = "defaults 70"
+
+SYSTEMD_SERVICE_${PN} = "monkey.service"
+
+FILES_${PN} += "${localstatedir}/www/monkey/"
+
+CONFFILES_${PN} = "${sysconfdir}/monkey/monkey.conf \
+ ${sysconfdir}/monkey/sites/default \
+ ${sysconfdir}/monkey/monkey.mime \
+ ${sysconfdir}/monkey/plugins.load \
+ ${sysconfdir}/monkey/plugins/proxy_reverse/proxy_reverse.conf \
+ ${sysconfdir}/monkey/plugins/mandril/mandril.conf \
+ ${sysconfdir}/monkey/plugins/fastcgi/fastcgi.conf \
+ ${sysconfdir}/monkey/plugins/logger/logger.conf \
+ ${sysconfdir}/monkey/plugins/cgi/cgi.conf \
+ ${sysconfdir}/monkey/plugins/cheetah/cheetah.conf \
+ ${sysconfdir}/monkey/plugins/dirlisting/dirhtml.conf \
+ ${sysconfdir}/monkey/plugins/dirlisting/themes/guineo/header.theme \
+ ${sysconfdir}/monkey/plugins/dirlisting/themes/guineo/footer.theme \
+ ${sysconfdir}/monkey/plugins/dirlisting/themes/guineo/entry.theme \
+ ${sysconfdir}/monkey/plugins/auth/README \
+ ${sysconfdir}/monkey/plugins/auth/monkey.users \
+ "
+
+do_install_append() {
+
+ mkdir -p ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/monkey.init ${D}${sysconfdir}/init.d/monkey
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 644 ${WORKDIR}/monkey.service ${D}/${systemd_unitdir}/system
+ fi
+}
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/0001-Allow-the-overriding-of-the-endianness-via-the-confi.patch b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/0001-Allow-the-overriding-of-the-endianness-via-the-confi.patch
new file mode 100644
index 000000000..ffd5ee3e9
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/0001-Allow-the-overriding-of-the-endianness-via-the-confi.patch
@@ -0,0 +1,80 @@
+From be9970aa16c5142ef814531d74a07990a8e9eb14 Mon Sep 17 00:00:00 2001
+From: Derek Straka <derek@asterius.io>
+Date: Fri, 1 Dec 2017 10:32:29 -0500
+Subject: [PATCH] Allow the overriding of the endianness via the configure flag
+ --with-endian
+
+The existing configure options contain the --with-endian; however, the command
+line flag does not actually function. It does not set the endianness and it
+appears to do nothing.
+
+Upstream-Status: Pending
+
+Signed-off-by: Derek Straka <derek@asterius.io>
+
+diff --git a/auto/endianness b/auto/endianness
+index 1b552b6..be84487 100644
+--- a/auto/endianness
++++ b/auto/endianness
+@@ -13,7 +13,13 @@ checking for system byte ordering
+ END
+
+
+-cat << END > $NGX_AUTOTEST.c
++if [ ".$NGX_WITH_ENDIAN" = ".little" ]; then
++ echo " little endian"
++ have=NGX_HAVE_LITTLE_ENDIAN . auto/have
++elif [ ".$NGX_WITH_ENDIAN" = ".big" ]; then
++ echo " big endian"
++else
++ cat << END > $NGX_AUTOTEST.c
+
+ int main(void) {
+ int i = 0x11223344;
+@@ -26,25 +32,26 @@ int main(void) {
+
+ END
+
+-ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
+- -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
++ ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
++ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
+
+-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
++ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+-if [ -x $NGX_AUTOTEST ]; then
+- if $NGX_AUTOTEST >/dev/null 2>&1; then
+- echo " little endian"
+- have=NGX_HAVE_LITTLE_ENDIAN . auto/have
+- else
+- echo " big endian"
+- fi
++ if [ -x $NGX_AUTOTEST ]; then
++ if $NGX_AUTOTEST >/dev/null 2>&1; then
++ echo " little endian"
++ have=NGX_HAVE_LITTLE_ENDIAN . auto/have
++ else
++ echo " big endian"
++ fi
+
+- rm -rf $NGX_AUTOTEST*
++ rm -rf $NGX_AUTOTEST*
+
+-else
+- rm -rf $NGX_AUTOTEST*
++ else
++ rm -rf $NGX_AUTOTEST*
+
+- echo
+- echo "$0: error: cannot detect system byte ordering"
+- exit 1
++ echo
++ echo "$0: error: cannot detect system byte ordering"
++ exit 1
++ fi
+ fi
+--
+2.7.4
+
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch
new file mode 100644
index 000000000..0a18bcd33
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-cross.patch
@@ -0,0 +1,215 @@
+We do not have capability to run binaries when cross compiling
+
+Upstream-Status: Pending
+
+
+Index: nginx-1.12.2/auto/feature
+===================================================================
+--- nginx-1.12.2.orig/auto/feature
++++ nginx-1.12.2/auto/feature
+@@ -49,12 +49,20 @@ eval "/bin/sh -c \"$ngx_test\" >> $NGX_A
+
+ if [ -x $NGX_AUTOTEST ]; then
+
++ if [ ".$NGX_CROSS_COMPILE" = ".yes" ]; then
++ NGX_AUTOTEST_EXEC="true"
++ NGX_FOUND_MSG=" (not tested, cross compiling)"
++ else
++ NGX_AUTOTEST_EXEC="$NGX_AUTOTEST"
++ NGX_FOUND_MSG=""
++ fi
++
+ case "$ngx_feature_run" in
+
+ yes)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+- echo " found"
++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; then
++ echo " found$NGX_FOUND_MSG"
+ ngx_found=yes
+
+ if test -n "$ngx_feature_name"; then
+@@ -68,17 +76,27 @@ if [ -x $NGX_AUTOTEST ]; then
+
+ value)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+- echo " found"
++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; then
++ echo " found$NGX_FOUND_MSG"
+ ngx_found=yes
+
+- cat << END >> $NGX_AUTO_CONFIG_H
++ if [ ".$NGX_CROSS_COMPILE" = ".yes" ]; then
++ cat << END >> $NGX_AUTO_CONFIG_H
+
+ #ifndef $ngx_feature_name
+-#define $ngx_feature_name `$NGX_AUTOTEST`
++#define $ngx_feature_name $(eval "echo \$NGX_WITH_${ngx_feature_name}")
+ #endif
+
+ END
++ else
++ cat << END >> $NGX_AUTO_CONFIG_H
++
++#ifndef $ngx_feature_name
++#define $ngx_feature_name `$NGX_AUTOTEST_EXEC`
++#endif
++
++END
++ fi
+ else
+ echo " found but is not working"
+ fi
+@@ -86,7 +104,7 @@ END
+
+ bug)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; then
+ echo " not found"
+
+ else
+Index: nginx-1.12.2/auto/options
+===================================================================
+--- nginx-1.12.2.orig/auto/options
++++ nginx-1.12.2/auto/options
+@@ -386,6 +386,18 @@ $0: warning: the \"--with-sha1-asm\" opt
+ --test-build-epoll) NGX_TEST_BUILD_EPOLL=YES ;;
+ --test-build-solaris-sendfilev) NGX_TEST_BUILD_SOLARIS_SENDFILEV=YES ;;
+
++ # cross compile support
++ --with-int=*) NGX_WITH_INT="$value" ;;
++ --with-long=*) NGX_WITH_LONG="$value" ;;
++ --with-long-long=*) NGX_WITH_LONG_LONG="$value" ;;
++ --with-ptr-size=*) NGX_WITH_PTR_SIZE="$value" ;;
++ --with-sig-atomic-t=*) NGX_WITH_SIG_ATOMIC_T="$value" ;;
++ --with-size-t=*) NGX_WITH_SIZE_T="$value" ;;
++ --with-off-t=*) NGX_WITH_OFF_T="$value" ;;
++ --with-time-t=*) NGX_WITH_TIME_T="$value" ;;
++ --with-sys-nerr=*) NGX_WITH_NGX_SYS_NERR="$value" ;;
++ --with-endian=*) NGX_WITH_ENDIAN="$value" ;;
++
+ *)
+ echo "$0: error: invalid option \"$option\""
+ exit 1
+@@ -568,6 +580,17 @@ cat << END
+
+ --with-debug enable debug logging
+
++ --with-int=VALUE force int size
++ --with-long=VALUE force long size
++ --with-long-long=VALUE force long long size
++ --with-ptr-size=VALUE force pointer size
++ --with-sig-atomic-t=VALUE force sig_atomic_t size
++ --with-size-t=VALUE force size_t size
++ --with-off-t=VALUE force off_t size
++ --with-time-t=VALUE force time_t size
++ --with-sys-nerr=VALUE force sys_nerr value
++ --with-endian=VALUE force system endianess
++
+ END
+
+ exit 1
+@@ -576,6 +599,8 @@ fi
+
+ if [ ".$NGX_PLATFORM" = ".win32" ]; then
+ NGX_WINE=$WINE
++elif [ ! -z "$NGX_PLATFORM" ]; then
++ NGX_CROSS_COMPILE="yes"
+ fi
+
+
+Index: nginx-1.12.2/auto/types/sizeof
+===================================================================
+--- nginx-1.12.2.orig/auto/types/sizeof
++++ nginx-1.12.2/auto/types/sizeof
+@@ -12,9 +12,12 @@ checking for $ngx_type size
+
+ END
+
+-ngx_size=
++ngx_size=$(eval "echo \$NGX_WITH_${ngx_param}")
+
+-cat << END > $NGX_AUTOTEST.c
++if [ ".$ngx_size" != "." ]; then
++ echo " $ngx_size bytes"
++else
++ cat << END > $NGX_AUTOTEST.c
+
+ #include <sys/types.h>
+ #include <sys/time.h>
+@@ -33,15 +36,16 @@ int main(void) {
+ END
+
+
+-ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
+- -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
++ ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
++ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
+
+-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
++ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+
+-if [ -x $NGX_AUTOTEST ]; then
+- ngx_size=`$NGX_AUTOTEST`
+- echo " $ngx_size bytes"
++ if [ -x $NGX_AUTOTEST ]; then
++ ngx_size=`$NGX_AUTOTEST`
++ echo " $ngx_size bytes"
++ fi
+ fi
+
+
+Index: nginx-1.12.2/auto/unix
+===================================================================
+--- nginx-1.12.2.orig/auto/unix
++++ nginx-1.12.2/auto/unix
+@@ -587,13 +587,13 @@ ngx_feature_libs=
+
+ # C types
+
+-ngx_type="int"; . auto/types/sizeof
++ngx_type="int"; ngx_param="INT"; . auto/types/sizeof
+
+-ngx_type="long"; . auto/types/sizeof
++ngx_type="long"; ngx_param="LONG"; . auto/types/sizeof
+
+-ngx_type="long long"; . auto/types/sizeof
++ngx_type="long long"; ngx_param="LONG_LONG"; . auto/types/sizeof
+
+-ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
++ngx_type="void *"; ngx_param="PTR_SIZE"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
+ ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
+
+
+@@ -604,7 +604,7 @@ NGX_INCLUDE_AUTO_CONFIG_H="#include \"ng
+ ngx_type="uint32_t"; ngx_types="u_int32_t"; . auto/types/typedef
+ ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
+
+-ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
++ngx_type="sig_atomic_t"; ngx_param="SIG_ATOMIC_T"; ngx_types="int"; . auto/types/typedef
+ . auto/types/sizeof
+ ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
+
+@@ -620,15 +620,15 @@ ngx_type="rlim_t"; ngx_types="int"; . au
+
+ . auto/endianness
+
+-ngx_type="size_t"; . auto/types/sizeof
++ngx_type="size_t"; ngx_param="SIZE_T"; . auto/types/sizeof
+ ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
+ ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+
+-ngx_type="off_t"; . auto/types/sizeof
++ngx_type="off_t"; ngx_param="OFF_T"; . auto/types/sizeof
+ ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
+ ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+
+-ngx_type="time_t"; . auto/types/sizeof
++ngx_type="time_t"; ngx_param="TIME_T"; . auto/types/sizeof
+ ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
+ ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+ ngx_param=NGX_MAX_TIME_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf
new file mode 100644
index 000000000..472fde16a
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx-volatile.conf
@@ -0,0 +1,2 @@
+d @NGINX_USER@ www-data 0755 /run/nginx none
+d root root 0755 /var/log/nginx none
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.conf b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.conf
new file mode 100644
index 000000000..69d3a2adc
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.conf
@@ -0,0 +1,118 @@
+
+user www;
+worker_processes 1;
+
+error_log /var/log/nginx/error.log;
+#error_log logs/error.log notice;
+#error_log logs/error.log info;
+
+pid /run/nginx/nginx.pid;
+
+
+events {
+ worker_connections 1024;
+}
+
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent" "$http_x_forwarded_for"';
+
+ access_log /var/log/nginx/access.log main;
+
+ sendfile on;
+ #tcp_nopush on;
+
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+
+ #gzip on;
+
+ server {
+ listen 80;
+ server_name localhost;
+
+ #charset koi8-r;
+
+ #access_log logs/host.access.log main;
+
+ location / {
+ root /var/www/localhost/html;
+ index index.html index.htm;
+ }
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ #
+ error_page 500 502 503 504 /50x.html;
+ location = /50x.html {
+ root /var/www/localhost/html;
+ }
+
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+ #
+ #location ~ \.php$ {
+ # proxy_pass http://127.0.0.1;
+ #}
+
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+ #
+ #location ~ \.php$ {
+ # root html;
+ # fastcgi_pass 127.0.0.1:9000;
+ # fastcgi_index index.php;
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
+ # include fastcgi_params;
+ #}
+
+ # deny access to .htaccess files, if Apache's document root
+ # concurs with nginx's one
+ #
+ #location ~ /\.ht {
+ # deny all;
+ #}
+ }
+
+
+ # another virtual host using mix of IP-, name-, and port-based configuration
+ #
+ #server {
+ # listen 8000;
+ # listen somename:8080;
+ # server_name somename alias another.alias;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+
+ # HTTPS server
+ #
+ #server {
+ # listen 443;
+ # server_name localhost;
+
+ # ssl on;
+ # ssl_certificate cert.pem;
+ # ssl_certificate_key cert.key;
+
+ # ssl_session_timeout 5m;
+
+ # ssl_protocols SSLv2 SSLv3 TLSv1;
+ # ssl_ciphers HIGH:!aNULL:!MD5;
+ # ssl_prefer_server_ciphers on;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+}
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.init b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.init
new file mode 100644
index 000000000..1a2bd7dff
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.init
@@ -0,0 +1,52 @@
+#! /bin/sh
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/nginx
+NAME=nginx
+DESC=nginx
+PID=/run/nginx/nginx.pid
+
+test -x $DAEMON || exit 0
+
+# Include nginx defaults if available
+if [ -f /etc/default/nginx ] ; then
+ . /etc/default/nginx
+fi
+
+set -e
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start --quiet --pidfile $PID \
+ --name $NAME --exec $DAEMON -- $DAEMON_OPTS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon -K --quiet --pidfile $PID \
+ --name $NAME
+ echo "$NAME."
+ ;;
+ restart|force-reload)
+ echo -n "Restarting $DESC: "
+ start-stop-daemon -K --quiet --pidfile $PID \
+ --name $NAME
+ sleep 1
+ start-stop-daemon --start --quiet --pidfile $PID \
+ --name $NAME --exec $DAEMON -- $DAEMON_OPTS
+ echo "$NAME."
+ ;;
+ reload)
+ echo -n "Reloading $DESC configuration: "
+ start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \
+ --exec $DAEMON
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.service b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.service
new file mode 100644
index 000000000..ce9906171
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/files/nginx.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Nginx Server
+After=network.target
+[Service]
+Type=forking
+PIDFile=/run/nginx/nginx.pid
+ExecStart=@SBINDIR@/nginx
+ExecStop=@SBINDIR@/nginx -s stop
+ExecReload=@SBINDIR@/nginx -s reload
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx.inc b/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx.inc
new file mode 100644
index 000000000..e6ae52a09
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx.inc
@@ -0,0 +1,156 @@
+SUMMARY = "HTTP and reverse proxy server"
+
+DESCRIPTION = "Nginx is a web server and a reverse proxy server for \
+HTTP, SMTP, POP3 and IMAP protocols, with a strong focus on high \
+concurrency, performance and low memory usage."
+
+HOMEPAGE = "http://nginx.org/"
+LICENSE = "BSD-2-Clause"
+
+SECTION = "net"
+
+DEPENDS = "libpcre zlib openssl"
+
+SRC_URI = " \
+ http://nginx.org/download/nginx-${PV}.tar.gz \
+ file://nginx-cross.patch \
+ file://0001-Allow-the-overriding-of-the-endianness-via-the-confi.patch \
+ file://nginx.conf \
+ file://nginx.init \
+ file://nginx-volatile.conf \
+ file://nginx.service \
+"
+
+inherit siteinfo update-rc.d useradd systemd
+
+SYSTEMD_SERVICE_${PN} = "nginx.service"
+
+CFLAGS_append = " -fPIE -pie"
+CXXFLAGS_append = " -fPIE -pie"
+
+NGINX_WWWDIR ?= "${localstatedir}/www/localhost"
+NGINX_USER ?= "www"
+
+EXTRA_OECONF = ""
+DISABLE_STATIC = ""
+
+PACKAGECONFIG[http2] = "--with-http_v2_module,,"
+
+do_configure () {
+ if [ "${SITEINFO_BITS}" = "64" ]; then
+ PTRSIZE=8
+ else
+ PTRSIZE=4
+ fi
+
+ echo $CFLAGS
+ echo $LDFLAGS
+
+ # Add the LDFLAGS to the main nginx link to avoid issues with missing GNU_HASH
+ echo "MAIN_LINK=\"\${MAIN_LINK} ${LDFLAGS}\"" >> auto/cc/conf
+
+ ./configure \
+ --crossbuild=Linux:${TUNE_ARCH} \
+ --with-endian=${@oe.utils.conditional('SITEINFO_ENDIANNESS', 'le', 'little', 'big', d)} \
+ --with-int=4 \
+ --with-long=${PTRSIZE} \
+ --with-long-long=8 \
+ --with-ptr-size=${PTRSIZE} \
+ --with-sig-atomic-t=${PTRSIZE} \
+ --with-size-t=${PTRSIZE} \
+ --with-off-t=${PTRSIZE} \
+ --with-time-t=${PTRSIZE} \
+ --with-sys-nerr=132 \
+ --conf-path=${sysconfdir}/nginx/nginx.conf \
+ --http-log-path=${localstatedir}/log/nginx/access.log \
+ --error-log-path=${localstatedir}/log/nginx/error.log \
+ --http-client-body-temp-path=/run/nginx/client_body_temp \
+ --http-proxy-temp-path=/run/nginx/proxy_temp \
+ --http-fastcgi-temp-path=/run/nginx/fastcgi_temp \
+ --http-uwsgi-temp-path=/run/nginx/uwsgi_temp \
+ --http-scgi-temp-path=/run/nginx/scgi_temp \
+ --pid-path=/run/nginx/nginx.pid \
+ --prefix=${prefix} \
+ --with-http_ssl_module \
+ --with-http_gzip_static_module \
+ ${EXTRA_OECONF} ${PACKAGECONFIG_CONFARGS}
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+ rm -fr ${D}${localstatedir}/run ${D}/run
+ 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/${BPN}.conf
+ echo "d /${localstatedir}/log/${BPN} 0755 root root -" \
+ >> ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+ fi
+ install -d ${D}${sysconfdir}/${BPN}
+ ln -snf ${localstatedir}/run/${BPN} ${D}${sysconfdir}/${BPN}/run
+ install -d ${D}${NGINX_WWWDIR}
+ mv ${D}/usr/html ${D}${NGINX_WWWDIR}/
+ chown ${NGINX_USER}:www-data -R ${D}${NGINX_WWWDIR}
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/nginx.init ${D}${sysconfdir}/init.d/nginx
+ sed -i 's,/usr/sbin/,${sbindir}/,g' ${D}${sysconfdir}/init.d/nginx
+ sed -i 's,/etc/,${sysconfdir}/,g' ${D}${sysconfdir}/init.d/nginx
+
+ install -d ${D}${sysconfdir}/nginx
+ install -m 0644 ${WORKDIR}/nginx.conf ${D}${sysconfdir}/nginx/nginx.conf
+ sed -i 's,/var/,${localstatedir}/,g' ${D}${sysconfdir}/nginx/nginx.conf
+ sed -i 's/^user.*/user ${NGINX_USER};/g' ${D}${sysconfdir}/nginx/nginx.conf
+ install -d ${D}${sysconfdir}/nginx/sites-enabled
+
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/nginx-volatile.conf ${D}${sysconfdir}/default/volatiles/99_nginx
+ sed -i 's,/var/,${localstatedir}/,g' ${D}${sysconfdir}/default/volatiles/99_nginx
+ sed -i 's,@NGINX_USER@,${NGINX_USER},g' ${D}${sysconfdir}/default/volatiles/99_nginx
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)};then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/nginx.service ${D}${systemd_unitdir}/system/
+ sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@LOCALSTATEDIR@,${localstatedir},g' \
+ -e 's,@SBINDIR@,${sbindir},g' \
+ ${D}${systemd_unitdir}/system/nginx.service
+ fi
+}
+
+pkg_postinst_${PN} () {
+ if [ -z "$D" ]; then
+ if type systemd-tmpfiles >/dev/null; then
+ systemd-tmpfiles --create
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+ fi
+}
+
+FILES_${PN} += " \
+ ${localstatedir}/ \
+ ${systemd_unitdir}/system/nginx.service \
+"
+
+CONFFILES_${PN} = " \
+ ${sysconfdir}/nginx/nginx.conf \
+ ${sysconfdir}/nginx/fastcgi.conf \
+ ${sysconfdir}/nginx/fastcgi_params \
+ ${sysconfdir}/nginx/koi-utf \
+ ${sysconfdir}/nginx/koi-win \
+ ${sysconfdir}/nginx/mime.types \
+ ${sysconfdir}/nginx/scgi_params \
+ ${sysconfdir}/nginx/uwsgi_params \
+ ${sysconfdir}/nginx/win-utf \
+"
+
+INITSCRIPT_NAME = "nginx"
+INITSCRIPT_PARAMS = "defaults 92 20"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = " \
+ --system --no-create-home \
+ --home ${NGINX_WWWDIR} \
+ --groups www-data \
+ --user-group ${NGINX_USER}"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.12.2.bb b/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.12.2.bb
new file mode 100644
index 000000000..85ad29b08
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.12.2.bb
@@ -0,0 +1,6 @@
+require nginx.inc
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=903753de5f86a1ee0341fd2f9491b282"
+
+SRC_URI[md5sum] = "4d2fc76211435f029271f1cf6d7eeae3"
+SRC_URI[sha256sum] = "305f379da1d5fb5aefa79e45c829852ca6983c7cd2a79328f8e084a324cf0416"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.13.9.bb b/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.13.9.bb
new file mode 100644
index 000000000..923479447
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nginx/nginx_1.13.9.bb
@@ -0,0 +1,10 @@
+require nginx.inc
+
+# 1.12.x branch is the current stable branch, the recommended default
+# 1.13.x is the current mainline branches containing all new features
+DEFAULT_PREFERENCE = "-1"
+
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3691402cc54ce09f800ca348634a2dfe"
+
+SRC_URI[md5sum] = "dcd482dd98d2022659212f183e8fe81b"
+SRC_URI[sha256sum] = "5faea18857516fe68d30be39c3032bd22ed9cf85e1a6fdf32e3721d96ff7fa42"
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/0001-GNUmakefile-add-possibility-to-override-variables.patch b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/0001-GNUmakefile-add-possibility-to-override-variables.patch
new file mode 100644
index 000000000..8cd468235
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/0001-GNUmakefile-add-possibility-to-override-variables.patch
@@ -0,0 +1,145 @@
+From 7fa0d31ec5c0be9dca84a03851b2d44f61527ec8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Eric=20B=C3=A9nard?= <eric@eukrea.com>
+Date: Sun, 4 Dec 2011 16:01:04 +0100
+Subject: [PATCH] GNUmakefile: add possibility to override variables
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+this is useful for cross compilation
+
+Signed-off-by: Eric Bénard <eric@eukrea.com>
+---
+Upstream-Status: Inappropriate [embedded specific]
+ src/libbsd/GNUmakefile | 10 +++++-----
+ src/libmy/GNUmakefile | 26 +++++++++++++-------------
+ src/nhttpd/GNUmakefile | 12 ++++++------
+ src/tools/GNUmakefile | 8 ++++----
+ 4 files changed, 28 insertions(+), 28 deletions(-)
+
+diff --git a/src/libbsd/GNUmakefile b/src/libbsd/GNUmakefile
+index e2d01a3..b034bc6 100644
+--- a/src/libbsd/GNUmakefile
++++ b/src/libbsd/GNUmakefile
+@@ -1,12 +1,12 @@
+-CCFLAGS = -O2 -pipe -Wall -Werror -Wstrict-prototypes -c
++CFLAGS := -O2 -pipe -Wall -Werror -Wstrict-prototypes -c
+
+ libbsd.a: strlcpy.o strlcat.o
+- ar -r libbsd.a strlcpy.o strlcat.o
+- ranlib libbsd.a
++ $(AR) -r libbsd.a strlcpy.o strlcat.o
++ $(RANLIB) libbsd.a
+
+ strlcpy.o: strlcpy.c
+- cc ${CCFLAGS} strlcpy.c
++ $(CC) $(CFLAGS) strlcpy.c
+ strlcat.o: strlcat.c
+- cc ${CCFLAGS} strlcat.c
++ $(CC) $(CFLAGS) strlcat.c
+ clean:
+ rm -f libbsd.a *.o
+diff --git a/src/libmy/GNUmakefile b/src/libmy/GNUmakefile
+index ce90dd9..891ffea 100644
+--- a/src/libmy/GNUmakefile
++++ b/src/libmy/GNUmakefile
+@@ -1,30 +1,30 @@
+-CCFLAGS = -O2 -Wall -Werror -Wstrict-prototypes -c
++CFLAGS := -O2 -Wall -Werror -Wstrict-prototypes -c
+
+ libmy.a: strcutl.o strcutw.o strcuts.o strcuti.o strcutf.o flog.o flogd.o fparse.o strlower.o strb64d.o
+- ar -r libmy.a strcutl.o strcutw.o strcuts.o strcuti.o strcutf.o flog.o flogd.o fparse.o strlower.o strb64d.o
+- ranlib libmy.a
++ $(AR) -r libmy.a strcutl.o strcutw.o strcuts.o strcuti.o strcutf.o flog.o flogd.o fparse.o strlower.o strb64d.o
++ $(RANLIB) libmy.a
+
+ strcutl.o: strcutl.c
+- cc ${CCFLAGS} strcutl.c
++ $(CC) $(CFLAGS) strcutl.c
+ strcutw.o: strcutw.c
+- cc ${CCFLAGS} strcutw.c
++ $(CC) $(CFLAGS) strcutw.c
+ strcuts.o: strcuts.c
+- cc ${CCFLAGS} strcuts.c
++ $(CC) $(CFLAGS) strcuts.c
+ strcuti.o: strcuti.c
+- cc ${CCFLAGS} strcuti.c
++ $(CC) $(CFLAGS) strcuti.c
+ strcutf.o: strcutf.c
+- cc ${CCFLAGS} strcutf.c
++ $(CC) $(CFLAGS) strcutf.c
+ strlower.o: strlower.c
+- cc ${CCFLAGS} strlower.c
++ $(CC) $(CFLAGS) strlower.c
+ strb64d.o: strb64d.c
+- cc ${CCFLAGS} strb64d.c
++ $(CC) $(CFLAGS) strb64d.c
+
+ flog.o: flog.c
+- cc ${CCFLAGS} flog.c
++ $(CC) $(CFLAGS) flog.c
+ flogd.o: flogd.c
+- cc ${CCFLAGS} flogd.c
++ $(CC) $(CFLAGS) flogd.c
+ fparse.o: fparse.c
+- cc ${CCFLAGS} fparse.c
++ $(CC) $(CFLAGS) fparse.c
+
+ clean:
+ rm -f libmy.a *.o
+diff --git a/src/nhttpd/GNUmakefile b/src/nhttpd/GNUmakefile
+index f6d12de..9524911 100644
+--- a/src/nhttpd/GNUmakefile
++++ b/src/nhttpd/GNUmakefile
+@@ -1,20 +1,20 @@
+ # $nostromo: GNUmakefile,v 1.6 2016/04/12 19:02:06 hacki Exp $
+
+-CCFLAGS = -O2 -pipe -Wall -Wstrict-prototypes -c
++CFLAGS := -O2 -pipe -Wall -Wstrict-prototypes -c
+
+ nhttpd: main.o http.o sys.o
+- cc -L../libmy -L../libbsd -o nhttpd main.o http.o sys.o -lmy -lbsd -lssl -lcrypt
+- strip nhttpd
++ $(CC) -L../libmy -L../libbsd -o nhttpd main.o http.o sys.o -lmy -lbsd -lssl -lcrypt
++# $(STRIP) nhttpd
+ nroff -Tascii -c -mandoc nhttpd.8 > nhttpd.cat8
+
+ main.o: main.c
+- cc ${CCFLAGS} main.c
++ $(CC) $(CFLAGS) main.c
+
+ http.o: http.c
+- cc ${CCFLAGS} http.c
++ $(CC) $(CFLAGS) http.c
+
+ sys.o: sys.c
+- cc ${CCFLAGS} sys.c
++ $(CC) $(CFLAGS) sys.c
+
+ clean:
+ rm -f nhttpd nhttpd.cat8 *.o
+diff --git a/src/tools/GNUmakefile b/src/tools/GNUmakefile
+index 15bea61..663ddb5 100644
+--- a/src/tools/GNUmakefile
++++ b/src/tools/GNUmakefile
+@@ -1,13 +1,13 @@
+ # $nostromo: GNUmakefile,v 1.3 2016/04/12 19:02:58 hacki Exp $
+
+-CCFLAGS = -O2 -pipe -Wall -Werror -Wstrict-prototypes -c
++CFLAGS = -O2 -pipe -Wall -Werror -Wstrict-prototypes
+
+ crypt: crypt.o
+- cc -L../libbsd -o crypt crypt.o -lcrypt -lbsd
+- strip crypt
++ $(CC) $(CFLAGS) -L../libbsd -o crypt crypt.o -lcrypt -lbsd
++# $(STRIP) crypt
+
+ crypt.o: crypt.c
+- cc ${CCFLAGS} crypt.c
++ $(CC) $(CFLAGS) -c crypt.c
+
+ clean:
+ rm -f crypt *.o
+--
+1.7.6.4
+
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nhttpd.conf b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nhttpd.conf
new file mode 100644
index 000000000..6674bb696
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nhttpd.conf
@@ -0,0 +1,55 @@
+# MAIN [MANDATORY]
+
+servername localhost
+#servername www.nazgul.ch:8080
+serverlisten *
+#serverlisten 81.221.21.250 127.0.0.1 ::1
+serveradmin webmaster@localhost
+serverroot /var/nostromo
+servermimes /var/nostromo/conf/mimes
+docroot /var/nostromo/htdocs
+docindex index.html
+
+# LOGS [OPTIONAL]
+
+logpid /var/run/nostromo/nhttpd.pid
+#logaccess /var/log/nostromo/access_log
+
+# SETUID [RECOMMENDED]
+
+user www-data
+
+# BASIC AUTHENTICATION [OPTIONAL]
+
+#htaccess .htaccess
+#htpasswd /var/nostromo/conf/.htpasswd
+#htpasswd +bsdauth
+#htpasswd +bsdauthnossl
+
+# SSL [OPTIONAL]
+
+#sslport 443
+#sslcert /etc/ssl/server.crt
+#sslcertkey /etc/ssl/server.key
+
+# CUSTOM RESPONSES [OPTIONAL]
+#
+# The custom responses are searched in the corresponding document root.
+
+#custom_401 custom_401.html
+#custom_403 custom_403.html
+#custom_404 custom_404.html
+
+# ALIASES [OPTIONAL]
+
+/icons /var/nostromo/icons
+
+# VIRTUAL HOSTS [OPTIONAL]
+
+#www.rahel.ch /var/nostromo/htdocs/www.rahel.ch
+#www.rahel.ch:8080 /var/nostromo/htdocs/www.rahel.ch
+
+# HOMEDIRS [OPTIONAL]
+
+#homedirs /home
+#homedirs_public public_www
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nostromo b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nostromo
new file mode 100644
index 000000000..8a2886882
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/nostromo
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=nhttpd
+NAME=nhttpd
+DESC="Nostromo Web Server"
+OPTS="-c /etc/nhttpd.conf"
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start -x "$DAEMON" -- $OPTS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon --stop -x "$DAEMON"
+ echo "$NAME."
+ ;;
+ restart|force-reload)
+ echo -n "Restarting $DESC: "
+ start-stop-daemon --stop -x "$DAEMON"
+ sleep 1
+ start-stop-daemon --start -x "$DAEMON" -- $OPTS
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/tmpfiles.conf b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/tmpfiles.conf
new file mode 100644
index 000000000..b7a9f4886
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/tmpfiles.conf
@@ -0,0 +1 @@
+d /run/nostromo - www-data www-data -
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/volatiles b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/volatiles
new file mode 100644
index 000000000..40924960c
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/files/volatiles
@@ -0,0 +1,2 @@
+d www-data www-data 0775 /var/run/nostromo none
+d www-data www-data 0775 /var/log/nostromo none
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/nostromo/nostromo_1.9.6.bb b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/nostromo_1.9.6.bb
new file mode 100644
index 000000000..16f45ce66
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/nostromo/nostromo_1.9.6.bb
@@ -0,0 +1,64 @@
+SUMMARY = "A simple, fast and secure HTTP server"
+HOMEPAGE = "http://www.nazgul.ch/dev_nostromo.html"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://src/nhttpd/main.c;beginline=2;endline=14;md5=0bb3711a867b9704d3bfabcf5529b64e"
+
+SRC_URI = "http://www.nazgul.ch/dev/${BPN}-${PV}.tar.gz \
+ file://0001-GNUmakefile-add-possibility-to-override-variables.patch \
+ file://nhttpd.conf \
+ file://volatiles \
+ file://tmpfiles.conf \
+ file://nostromo \
+"
+
+SRC_URI[md5sum] = "27aa241d78ff78920354c3e03a5026ea"
+SRC_URI[sha256sum] = "541494ecfeafec58c0876ccc90cc23b06e0144f6f42029af44c7cdb1f411e8eb"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
+
+DEPENDS = "openssl groff-native base-passwd"
+
+inherit update-rc.d
+
+INITSCRIPT_NAME = "nostromo"
+INITSCRIPT_PARAMS = "defaults 70"
+
+do_compile() {
+ oe_runmake
+}
+
+do_install() {
+ install -d ${D}/${sbindir}
+ install -m 0755 src/nhttpd/nhttpd ${D}/${sbindir}/nhttpd
+ install -m 0755 src/tools/crypt ${D}/${sbindir}/crypt
+ install -d ${D}/${mandir}/man8
+ install -m 0444 src/nhttpd/nhttpd.8 ${D}/${mandir}/man8/nhttpd.8
+ install -d ${D}${localstatedir}/nostromo/conf
+ install -d ${D}${localstatedir}/nostromo/htdocs/cgi-bin
+ install -d ${D}${localstatedir}/nostromo/icons
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0644 conf/mimes ${D}${localstatedir}/nostromo/conf/mimes
+ install -m 0644 ${WORKDIR}/nhttpd.conf ${D}${sysconfdir}
+ install -m 0755 ${WORKDIR}/nostromo ${D}${sysconfdir}/init.d
+ install -D -m 0644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/nostromo
+ if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -D -m 0644 ${WORKDIR}/tmpfiles.conf ${D}${sysconfdir}/tmpfiles.d/nostromo.conf
+ fi
+ install -m 0644 htdocs/index.html ${D}${localstatedir}/nostromo/htdocs/index.html
+ install -m 0644 htdocs/nostromo.gif ${D}${localstatedir}/nostromo/htdocs/nostromo.gif
+ install -m 0644 icons/dir.gif ${D}${localstatedir}/nostromo/icons/dir.gif
+ install -m 0644 icons/file.gif ${D}${localstatedir}/nostromo/icons/file.gif
+ chown -R www-data:www-data ${D}/${localstatedir}/nostromo
+}
+
+CONFFILES_${PN} += "/var/nostromo/conf/mimes ${sysconfdir}/nhttpd.conf"
+
+pkg_postinst_${PN} () {
+ if [ -z "$D" ]; then
+ if [ -e /sys/fs/cgroup/systemd ]; then
+ systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/nostromo.conf
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+ fi
+}
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/init b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/init
new file mode 100644
index 000000000..f5f7b0124
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/init
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+### BEGIN INIT INFO
+# Provides: thttpd
+# Required-Start: $remote_fs $syslog
+# Required-Stop: $remote_fs $syslog
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Small http server
+# Description: thttpd is a simple, small, portable, fast, and secure HTTP server.
+### END INIT INFO
+
+
+thttpd=/usr/sbin/thttpd
+test -x "$thttpd" || exit 0
+
+
+case "$1" in
+ start)
+ echo -n "Starting thttpd"
+ start-stop-daemon --start --quiet --exec $thttpd -- -C @@CONFFILE
+ echo "."
+ ;;
+ stop)
+ echo -n "Stopping thttpd"
+ start-stop-daemon --stop --quiet --exec $thttpd
+ echo "."
+ ;;
+ reload|force-reload)
+ start-stop-daemon --stop --quiet --signal 1 --exec $thttpd
+ ;;
+ restart)
+ echo -n "Stopping thttpd"
+ start-stop-daemon --stop --quiet --exec $thttpd -- -C @@CONFFILE
+ echo "."
+ echo -n "Waiting for thttpd to die off"
+ for i in 1 2 3 ;
+ do
+ sleep 1
+ echo -n "."
+ done
+ echo ""
+ echo -n "Starting thttpd"
+ start-stop-daemon --start --quiet --exec $thttpd -- -C @@CONFFILE
+ echo "."
+ ;;
+ *)
+ echo "Usage: /etc/init.d/thttpd {start|stop|reload|restart|force-reload}"
+ exit 1
+esac
+
+exit 0
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.conf b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.conf
new file mode 100644
index 000000000..397984f36
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.conf
@@ -0,0 +1 @@
+dir=@@SRVDIR
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.service b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.service
new file mode 100644
index 000000000..f1095007c
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd/thttpd.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Tiny/Turbo/Throttling Web Server
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/thttpd -C @@CONFFILE -c cgi-bin/* -i /var/run/thttpd.pid
+PIDFile=/var/run/thttpd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd_2.27.1.bb b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd_2.27.1.bb
new file mode 100644
index 000000000..37bd7537d
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-httpd/sthttpd/sthttpd_2.27.1.bb
@@ -0,0 +1,56 @@
+SUMMARY = "A simple, small, portable, fast, and secure HTTP server"
+DESCRIPTION = "A simple, small, portable, fast, and secure HTTP server (supported fork of thttpd)."
+HOMEPAGE = "http://opensource.dyc.edu/sthttpd"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://src/thttpd.c;beginline=1;endline=26;md5=0c5762c2c34dcbe9eb18815516502872"
+
+DEPENDS += "base-passwd"
+
+SRC_URI = "https://github.com/blueness/${BPN}/archive/v${PV}.tar.gz;downloadfilename=${BP}.tar.gz \
+ file://thttpd.service \
+ file://thttpd.conf \
+ file://init"
+
+SRC_URI[md5sum] = "3cda1b6c8c8542b1510eadb8e540d8b6"
+SRC_URI[sha256sum] = "a1ee2806432eaf5b5dd267a0523701f9f1fa00fefd499d5bec42165a41e05846"
+
+UPSTREAM_CHECK_URI = "https://github.com/blueness/sthttpd/releases/"
+UPSTREAM_CHECK_REGEX = "v(?P<pver>\d+(\.\d+)+).tar.gz"
+
+S = "${WORKDIR}/sthttpd-${PV}"
+
+inherit autotools update-rc.d systemd
+
+SRV_DIR ?= "${servicedir}/www"
+
+# Note that `${sbindir}/makeweb' is installed setgid to this group,
+# but ${SRV_DIR} is not installed chgrp'd to the group by default.
+WEBGROUP ?= "www-data"
+
+do_configure_prepend () {
+ export WEBDIR=${SRV_DIR}
+ export WEBGROUP=${WEBGROUP}
+}
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/init.d
+ install -c -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/thttpd
+ install -c -m 755 ${WORKDIR}/thttpd.conf ${D}${sysconfdir}
+ sed -i -e 's,@@CONFFILE,${sysconfdir}/thttpd.conf,g' ${D}${sysconfdir}/init.d/thttpd
+ sed -i -e 's,@@SRVDIR,${SRV_DIR},g' ${D}${sysconfdir}/thttpd.conf
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${sysconfdir}/init.d/thttpd
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/thttpd.service ${D}${systemd_unitdir}/system
+ sed -i 's!/usr/sbin/!${sbindir}/!g' ${D}${systemd_unitdir}/system/thttpd.service
+ sed -i 's!/var/!${localstatedir}/!g' ${D}${systemd_unitdir}/system/thttpd.service
+ sed -i -e 's,@@CONFFILE,${sysconfdir}/thttpd.conf,g' ${D}${systemd_unitdir}/system/thttpd.service
+}
+
+INITSCRIPT_NAME = "thttpd"
+INITSCRIPT_PARAMS = "defaults"
+
+SYSTEMD_SERVICE_${PN} = "thttpd.service"
+
+FILES_${PN} += "${SRV_DIR}"
+FILES_${PN}-dbg += "${SRV_DIR}/cgi-bin/.debug"
diff --git a/meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin/apache.conf b/meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin/apache.conf
new file mode 100644
index 000000000..94cbd865c
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin/apache.conf
@@ -0,0 +1,42 @@
+# phpMyAdmin default Apache configuration
+
+Alias /phpmyadmin /usr/share/phpmyadmin
+
+<Directory /usr/share/phpmyadmin>
+ Options FollowSymLinks
+ DirectoryIndex index.php
+ Require all granted
+
+ <IfModule mod_php5.c>
+ AddType application/x-httpd-php .php
+
+ php_flag magic_quotes_gpc Off
+ php_flag track_vars On
+ php_flag register_globals Off
+ php_admin_flag allow_url_fopen Off
+ php_value include_path .
+ php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
+ php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/
+ </IfModule>
+</Directory>
+
+# Authorize for setup
+<Directory /usr/share/phpmyadmin/setup>
+ <IfModule mod_authn_file.c>
+ AuthType Basic
+ AuthName "phpMyAdmin Setup"
+ AuthUserFile /etc/phpmyadmin/htpasswd.setup
+ </IfModule>
+ Require valid-user
+</Directory>
+
+# Disallow web access to directories that don't need it
+<Directory /usr/share/phpmyadmin/libraries>
+ Order Deny,Allow
+ Deny from All
+</Directory>
+<Directory /usr/share/phpmyadmin/setup/lib>
+ Order Deny,Allow
+ Deny from All
+</Directory>
+
diff --git a/meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin_4.7.9.bb b/meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin_4.7.9.bb
new file mode 100644
index 000000000..071572d69
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-php/phpmyadmin/phpmyadmin_4.7.9.bb
@@ -0,0 +1,41 @@
+SUMMARY = "Web-based MySQL administration interface"
+HOMEPAGE = "http://www.phpmyadmin.net"
+# Main code is GPLv2, vendor/tecnickcom/tcpdf is under LGPLv3, js/jquery is under MIT
+LICENSE = "GPLv2 & LGPLv3 & MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+ file://vendor/tecnickcom/tcpdf/LICENSE.TXT;md5=5c87b66a5358ebcc495b03e0afcd342c \
+ file://js/jquery/MIT-LICENSE.txt;md5=e43aa437a6a1ba421653bd5034333bf9 \
+"
+
+SRC_URI = "https://files.phpmyadmin.net/phpMyAdmin/${PV}/phpMyAdmin-${PV}-all-languages.tar.xz \
+ file://apache.conf \
+"
+
+SRC_URI[md5sum] = "0a862e3fa52c8b9078e0441ee82be831"
+SRC_URI[sha256sum] = "f19b503f0afb0dd3389d4bb11dab3f438d36e85eef11a5c400c592fd5f539398"
+
+UPSTREAM_CHECK_URI = "https://www.phpmyadmin.net/downloads/"
+UPSTREAM_CHECK_REGEX = "phpMyAdmin-(?P<pver>\d+(\.\d+)+)-all-languages.tar.xz"
+
+S = "${WORKDIR}/phpMyAdmin-${PV}-all-languages"
+
+inherit allarch
+
+do_install() {
+ install -d ${D}${datadir}/${BPN}
+ cp -R --no-dereference --preserve=mode,links -v * ${D}${datadir}/${BPN}
+ chown -R root:root ${D}${datadir}/${BPN}
+ # Don't install patches to target
+ rm -rf ${D}${datadir}/${BPN}/patches
+
+ install -d ${D}${sysconfdir}/apache2/conf.d
+ install -m 0644 ${WORKDIR}/apache.conf ${D}${sysconfdir}/apache2/conf.d/phpmyadmin.conf
+
+ # Remove a few scripts that explicitly require bash (!)
+ rm -f ${D}${datadir}/phpmyadmin/libraries/transformations/*.sh
+}
+
+FILES_${PN} = "${datadir}/${BPN} \
+ ${sysconfdir}/apache2/conf.d"
+
+RDEPENDS_${PN} += "bash"
diff --git a/meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_2.6.0.bb b/meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_2.6.0.bb
new file mode 100644
index 000000000..6516988d7
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-php/xdebug/xdebug_2.6.0.bb
@@ -0,0 +1,33 @@
+SUMMARY = "Debugging and profiling extension for PHP"
+LICENSE = "Xdebug"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=34df3a274aa12b795417c65634c07f16"
+
+DEPENDS = "php re2c-native"
+
+SRC_URI = "http://xdebug.org/files/xdebug-${PV}.tgz"
+
+SRC_URI[md5sum] = "ed3545852e6f4a00fb8730362d0431ee"
+SRC_URI[sha256sum] = "b5264cc03bf68fcbb04b97229f96dca505d7b87ec2fb3bd4249896783d29cbdc"
+
+inherit autotools
+
+EXTRA_OECONF += "--enable-xdebug -with-php-config=${STAGING_BINDIR_CROSS}/php-config"
+
+do_configure() {
+ cd ${S}
+ ${STAGING_BINDIR_CROSS}/phpize
+ cd ${B}
+
+ # Running autoreconf as autotools_do_configure would do here
+ # breaks the libtool configuration resulting in a failure later
+ # in do_compile. It's possible this may be fixable, however the
+ # easiest course of action for the moment is to avoid doing that.
+ oe_runconf
+}
+
+do_install() {
+ oe_runmake install INSTALL_ROOT=${D}
+}
+
+FILES_${PN} += "${libdir}/php*/extensions/*/*.so"
+FILES_${PN}-dbg += "${libdir}/php*/extensions/*/.debug"
diff --git a/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/Fix_EOF_not_declared_issue.patch b/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/Fix_EOF_not_declared_issue.patch
new file mode 100644
index 000000000..51ddeaac2
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/Fix_EOF_not_declared_issue.patch
@@ -0,0 +1,17 @@
+Upstream-Status: Pending
+
+Fix EOF not declared issue, following is the error log.
+fcgio.cpp:70:72: error: 'EOF' was not declared in this scope
+ if (FCGX_PutStr(pbase(), plen, this->fcgx) != plen) return EOF;
+
+Signed-off-by: Yang Haibo <b40869@freescale.com>
+--- fcgi-ori/libfcgi/fcgio.cpp 2014-07-28 18:01:00.000000000 +0800
++++ fcgi-2.4.0/libfcgi/fcgio.cpp 2014-07-28 18:01:22.000000000 +0800
+@@ -22,6 +22,7 @@
+ #define DLLAPI __declspec(dllexport)
+ #endif
+
++#include <stdio.h>
+ #include <limits.h>
+ #include "fcgio.h"
+
diff --git a/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/add_foreign_to_AM_INIT_AUTOMAKE.patch b/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/add_foreign_to_AM_INIT_AUTOMAKE.patch
new file mode 100644
index 000000000..eca694adc
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi/add_foreign_to_AM_INIT_AUTOMAKE.patch
@@ -0,0 +1,18 @@
+Upstream-Status: Pending
+
+use automake options "foreign" to set the strictness as appropriate
+
+Signed-off-by: Yang Haibo <b40869@freescale.com>
+--- fcgi-ori/configure.in 2014-08-05 14:58:35.000000000 +0800
++++ fcgi-2.4.0/configure.in 2014-08-05 14:59:08.000000000 +0800
+@@ -4,8 +4,8 @@
+ dnl generate the file "configure", which is run during the build
+ dnl to configure the system for the local environment.
+
+-AC_INIT
+-AM_INIT_AUTOMAKE(fcgi, 2.4.0)
++AC_INIT([fcgi], [2.4.0])
++AM_INIT_AUTOMAKE([foreign])
+
+ AM_CONFIG_HEADER(fcgi_config.h)
+
diff --git a/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi_2.4.0.bb b/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi_2.4.0.bb
new file mode 100644
index 000000000..48c594483
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-support/fcgi/fcgi_2.4.0.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "FastCGI is a protocol for interfacing interactive programs with a web server."
+HOMEPAGE = "http://www.fastcgi.com"
+LICENSE = "OML"
+LIC_FILES_CHKSUM = "file://LICENSE.TERMS;md5=e3aacac3a647af6e7e31f181cda0a06a"
+
+SRC_URI = "http://fossies.org/linux/www/old/${BP}.tar.gz \
+ file://Fix_EOF_not_declared_issue.patch \
+ file://add_foreign_to_AM_INIT_AUTOMAKE.patch \
+"
+SRC_URI[md5sum] = "d15060a813b91383a9f3c66faf84867e"
+SRC_URI[sha256sum] = "66fc45c6b36a21bf2fbbb68e90f780cc21a9da1fffbae75e76d2b4402d3f05b9"
+
+inherit autotools
+
+PARALLEL_MAKE = ""
diff --git a/meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi-1.6.4/fix_configure_ipv6_test.patch b/meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi-1.6.4/fix_configure_ipv6_test.patch
new file mode 100644
index 000000000..9409dd2b1
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi-1.6.4/fix_configure_ipv6_test.patch
@@ -0,0 +1,35 @@
+Testing for IPv6 support got broken by configure.ac changes in 1.6.4
+As a temp workaround, revert back to the 1.6.3 version.
+
+Upstream-Status: Pending
+
+--- spawn-fcgi-1.6.4/configure.ac
++++ spawn-fcgi-1.6.3/configure.ac
+@@ -66,8 +47,8 @@
+ # Check for IPv6 support
+
+ AC_ARG_ENABLE(ipv6,
+- AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
+- [case "${enableval}" in
++ AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
++ [case "${enableval}" in
+ yes) ipv6=true ;;
+ no) ipv6=false ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-ipv6) ;;
+@@ -75,13 +56,10 @@
+
+ if test x$ipv6 = xtrue; then
+ AC_CACHE_CHECK([for IPv6 support], ac_cv_ipv6_support,
+- [AC_TRY_LINK([[
+-#include <sys/types.h>
++ [AC_TRY_LINK([ #include <sys/types.h>
+ #include <sys/socket.h>
+-#include <netinet/in.h>
+- ]], [[
+-struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;
+- ]], [ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])])
++#include <netinet/in.h>], [struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0; ],
++ [ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])])
+
+ if test "$ac_cv_ipv6_support" = yes; then
+ AC_DEFINE(HAVE_IPV6,1,[Whether to enable IPv6 support])
diff --git a/meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi_1.6.4.bb b/meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi_1.6.4.bb
new file mode 100644
index 000000000..8b2ff44c0
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-support/spawn-fcgi/spawn-fcgi_1.6.4.bb
@@ -0,0 +1,16 @@
+SUMMARRY = "spawn-fcgi is used to spawn FastCGI applications"
+HOMEPAGE = "http://redmine.lighttpd.net/projects/spawn-fcgi"
+
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e4dac5c6ab169aa212feb5028853a579"
+
+SRC_URI = "http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-${PV}.tar.gz \
+ file://fix_configure_ipv6_test.patch"
+
+SRC_URI[md5sum] = "e970de4efe8045c01dd76280f39901aa"
+SRC_URI[sha256sum] = "ab327462cb99894a3699f874425a421d934f957cb24221f00bb888108d9dd09e"
+
+inherit autotools
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-Correct-Timeout-issue.patch b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-Correct-Timeout-issue.patch
new file mode 100644
index 000000000..abea0d66b
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-Correct-Timeout-issue.patch
@@ -0,0 +1,21 @@
+Index: git/plugins.d/charts.d.plugin
+===================================================================
+--- git.orig/plugins.d/charts.d.plugin
++++ git/plugins.d/charts.d.plugin
+@@ -246,16 +246,6 @@ else
+ info "configuration file '$myconfig' not found. Using defaults."
+ fi
+
+-# we check for the timeout command, after we load our
+-# configuration, so that the user may overwrite the
+-# timeout command we use, providing a function that
+-# can emulate the timeout command we need:
+-# > timeout SECONDS command ...
+-if [ $check_for_timeout -eq 1 ]
+- then
+- require_cmd timeout || exit 1
+-fi
+-
+ # -----------------------------------------------------------------------------
+ # internal checks
+
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-makefile-Do-not-build-contrib-dir.patch b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-makefile-Do-not-build-contrib-dir.patch
new file mode 100644
index 000000000..6a0d75e37
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/0001-makefile-Do-not-build-contrib-dir.patch
@@ -0,0 +1,27 @@
+From 87f868918a9ae1dcf93e01f3e177d185c19a149a Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 13 Jul 2017 14:32:09 -0700
+Subject: [PATCH] makefile: Do not build contrib dir
+
+It contains debian build iteams anyway
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ Makefile.am | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 2ea9e40..acb1bd8 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -56,7 +56,6 @@ SUBDIRS = \
+ src \
+ system \
+ web \
+- contrib \
+ tests \
+ $(NULL)
+
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.conf b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.conf
new file mode 100644
index 000000000..a2b3999c6
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.conf
@@ -0,0 +1,5083 @@
+# NetData Configuration
+# You can uncomment and change any of the options below.
+# The value shown in the commented settings, is the default value.
+
+# global netdata configuration
+
+[global]
+ debug flags = 0x10000000
+ hostname = netdata
+ history = 86400
+ config directory = @@sysconfdir/netdata
+ plugins directory = @@libdir/netdata/plugins.d
+ web files directory = @@datadir/netdata/web
+ cache directory = /var/cache/netdata
+ log directory = /var/log/netdata
+ # host access prefix =
+ # memory deduplication (ksm) = yes
+ # debug log = /var/log/netdata/debug.log
+ # error log = /var/log/netdata/error.log
+ # access log = /var/log/netdata/access.log
+ # memory mode = save
+ # update every = 1
+ # pthread stack size = 8388608
+ # run as user = netdata
+ # web files owner = netdata
+ # http port listen backlog = 100
+ # port = 19999
+ # ip version = any
+ # disconnect idle web clients after seconds = 60
+ # enable web responses gzip compression = yes
+
+[plugins]
+ # tc = yes
+ tc = no
+ # idlejitter = yes
+ proc = yes
+ checks = no
+ plugins directory = @@libdir/netdata/plugins.d
+ nable running new plugins = yes
+ check for new plugins every = 60
+ charts.d = yes
+ sma_webbox = no
+ apps = yes
+ node.d = yes
+
+
+# per plugin configuration
+
+[plugin:proc:/proc/net/dev]
+ # filename to monitor = /proc/net/dev
+ # enable new interfaces detected at runtime = on demand
+ # enable ifb interfaces = no
+ # bandwidth for all interfaces = on demand
+ # packets for all interfaces = on demand
+ # errors for all interfaces = on demand
+ # drops for all interfaces = on demand
+ # fifo for all interfaces = on demand
+ # compressed packets for all interfaces = on demand
+ # frames, collisions, carrier counters for all interfaces = on demand
+
+[plugin:proc]
+ # /proc/net/dev = yes
+ # /proc/diskstats = yes
+ # /proc/net/snmp = yes
+ # /proc/net/snmp6 = yes
+ # /proc/net/netstat = yes
+ # /proc/net/stat/conntrack = yes
+ # /proc/net/ip_vs/stats = yes
+ # /proc/stat = yes
+ # /proc/meminfo = yes
+ # /proc/vmstat = yes
+ # /proc/net/rpc/nfsd = yes
+ # /proc/sys/kernel/random/entropy_avail = yes
+ # /proc/interrupts = yes
+ # /proc/softirqs = yes
+ # /proc/loadavg = yes
+ # /sys/kernel/mm/ksm = yes
+ # netdata server resources = yes
+
+[plugin:tc]
+ # script to run to get tc values = /usr/lib/netdata/netdata/plugins.d/tc-qos-helper.sh
+ # enable new interfaces detected at runtime = yes
+ # qos for eth1-ifb = yes
+ # cleanup unused classes every = 60
+ # qos for eth0 = yes
+ # qos for eth1 = yes
+ # qos for eth0-ifb = yes
+
+[plugin:charts.d]
+ # update every = 1
+ # command options =
+
+[plugin:apps]
+ # update every = 1
+ # command options =
+
+[plugin:idlejitter]
+ # loop time in ms = 20
+
+[plugin:proc:/proc/interrupts]
+ # interrupts per core = yes
+ # filename to monitor = /proc/interrupts
+
+[plugin:proc:/proc/sys/kernel/random/entropy_avail]
+ # filename to monitor = /proc/sys/kernel/random/entropy_avail
+
+[plugin:proc:/proc/diskstats]
+ # enable new disks detected at runtime = on demand
+ # bandwidth for all disks = on demand
+ # operations for all disks = on demand
+ # merged operations for all disks = on demand
+ # i/o time for all disks = on demand
+ # queued operations for all disks = on demand
+ # utilization percentage for all disks = on demand
+ # backlog for all disks = on demand
+ # filename to monitor = /proc/diskstats
+ # path to get h/w sector size = /sys/block/%s/queue/hw_sector_size
+
+[plugin:proc:/proc/net/snmp]
+ # ipv4 packets = yes
+ # ipv4 fragments sent = yes
+ # ipv4 fragments assembly = yes
+ # ipv4 errors = yes
+ # ipv4 TCP connections = yes
+ # ipv4 TCP packets = yes
+ # ipv4 TCP errors = yes
+ # ipv4 TCP handshake issues = yes
+ # ipv4 UDP packets = yes
+ # ipv4 UDP errors = yes
+ # filename to monitor = /proc/net/snmp
+
+[plugin:proc:/proc/net/netstat]
+ # bandwidth = on demand
+ # input errors = on demand
+ # multicast bandwidth = on demand
+ # broadcast bandwidth = on demand
+ # multicast packets = on demand
+ # broadcast packets = on demand
+ # filename to monitor = /proc/net/netstat
+
+[plugin:proc:/proc/net/stat/nf_conntrack]
+ # netfilter connections = yes
+ # netfilter new connections = yes
+ # netfilter connection changes = yes
+ # netfilter connection expectations = yes
+ # netfilter connection searches = yes
+ # netfilter errors = yes
+ # filename to monitor = /proc/net/stat/nf_conntrack
+
+[plugin:proc:/proc/net/ip_vs_stats]
+ # IPVS bandwidth = yes
+ # IPVS connections = yes
+ # IPVS packets = yes
+ # filename to monitor = /proc/net/ip_vs_stats
+
+[plugin:proc:/proc/stat]
+ # cpu utilization = yes
+ # per cpu core utilization = yes
+ # cpu interrupts = yes
+ # context switches = yes
+ # processes started = yes
+ # processes running = yes
+ # filename to monitor = /proc/stat
+
+[plugin:proc:/proc/meminfo]
+ # system ram = yes
+ # system swap = yes
+ # hardware corrupted ECC = on demand
+ # committed memory = yes
+ # writeback memory = yes
+ # kernel memory = yes
+ # slab memory = yes
+ # filename to monitor = /proc/meminfo
+
+[plugin:proc:/proc/vmstat]
+ # swap i/o = yes
+ # disk i/o = yes
+ # memory page faults = yes
+ # filename to monitor = /proc/vmstat
+
+[plugin:proc:/proc/net/rpc/nfsd]
+ # filename to monitor = /proc/net/rpc/nfsd
+ # read cache = yes
+ # file handles = yes
+ # I/O = yes
+ # threads = yes
+ # read ahead = yes
+ # network = yes
+ # rpc = yes
+ # NFS v2 procedures = yes
+ # NFS v3 procedures = yes
+ # NFS v4 procedures = yes
+ # NFS v4 operations = yes
+
+[plugin:proc:/proc/net/dev:lo]
+ # enabled = no
+
+[plugin:proc:/proc/net/dev:fireqos_monitor]
+ # enabled = no
+
+[plugin:sma_webbox]
+ # update every = 1
+ # command options =
+
+[plugin:node.d]
+ # update every = 1
+ # command options =
+
+[plugin:proc:/sys/kernel/mm/ksm]
+ # /sys/kernel/mm/ksm/pages_shared = /sys/kernel/mm/ksm/pages_shared
+ # /sys/kernel/mm/ksm/pages_sharing = /sys/kernel/mm/ksm/pages_sharing
+ # /sys/kernel/mm/ksm/pages_unshared = /sys/kernel/mm/ksm/pages_unshared
+ # /sys/kernel/mm/ksm/pages_volatile = /sys/kernel/mm/ksm/pages_volatile
+ # /sys/kernel/mm/ksm/pages_to_scan = /sys/kernel/mm/ksm/pages_to_scan
+
+[plugin:proc:/proc/loadavg]
+ # filename to monitor = /proc/loadavg
+ # enable load average = yes
+ # enable total processes = yes
+
+[plugin:proc:/proc/softirqs]
+ # interrupts per core = yes
+ # filename to monitor = /proc/softirqs
+
+[plugin:proc:/proc/net/dev:eth1-ifb]
+ # enabled = no
+
+[plugin:proc:/proc/net/dev:eth0]
+ # enabled = on demand
+ # bandwidth = on demand
+ # packets = on demand
+ # errors = on demand
+ # drops = on demand
+ # fifo = on demand
+ # compressed = on demand
+ # events = on demand
+
+[plugin:proc:/proc/net/dev:eth1]
+ # enabled = on demand
+ # bandwidth = on demand
+ # packets = on demand
+ # errors = on demand
+ # drops = on demand
+ # fifo = on demand
+ # compressed = on demand
+ # events = on demand
+
+[plugin:proc:/proc/net/dev:eth0-ifb]
+ # enabled = no
+
+[plugin:proc:/proc/diskstats:fd0]
+ # enabled = no
+
+[plugin:proc:/proc/diskstats:sda]
+ # enabled = on demand
+ # bandwidth = on demand
+ # operations = on demand
+ # merged operations = on demand
+ # i/o time = on demand
+ queued operations = yes
+ # utilization percentage = on demand
+ # backlog = on demand
+
+[plugin:proc:/proc/diskstats:sda1]
+ # enabled = no
+
+[plugin:proc:/proc/diskstats:sda2]
+ # enabled = no
+
+[plugin:proc:/proc/diskstats:sda5]
+ # enabled = no
+
+[plugin:proc:/proc/diskstats:sr0]
+ # enabled = no
+
+[plugin:proc:/proc/net/snmp6]
+ # ipv6 packets = on demand
+ # ipv6 fragments sent = on demand
+ # ipv6 fragments assembly = on demand
+ # ipv6 errors = on demand
+ # ipv6 UDP packets = on demand
+ # ipv6 UDP errors = on demand
+ # ipv6 UDPlite packets = on demand
+ # ipv6 UDPlite errors = on demand
+ # bandwidth = on demand
+ # multicast bandwidth = on demand
+ # broadcast bandwidth = on demand
+ # multicast packets = on demand
+ # icmp = on demand
+ # icmp redirects = on demand
+ # icmp errors = on demand
+ # icmp echos = on demand
+ # icmp group membership = on demand
+ # icmp router = on demand
+ # icmp neighbor = on demand
+ # icmp mldv2 = on demand
+ # icmp types = on demand
+ # ect = on demand
+ # filename to monitor = /proc/net/snmp6
+
+
+# per chart configuration
+
+[system.idlejitter]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/system.idlejitter
+ # chart type = line
+ # type = system
+ # family = processes
+ # context = system.idlejitter
+ # units = microseconds lost/s
+ # priority = 9999
+ # gap when lost iterations above = 1
+ # name = system.idlejitter
+ # title = CPU Idle Jitter (system.idlejitter)
+ # dim jitter name = jitter
+ # dim jitter algorithm = absolute
+ # dim jitter multiplier = 1
+ # dim jitter divisor = 1
+
+[system.interrupts]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/system.interrupts
+ # chart type = stacked
+ # type = system
+ # family = interrupts
+ # context = system.interrupts
+ # units = interrupts/s
+ # priority = 1000
+ # gap when lost iterations above = 1
+ # name = system.interrupts
+ # title = System interrupts (system.interrupts)
+ # dim 0 name = timer_0
+ # dim 0 algorithm = incremental
+ # dim 0 multiplier = 1
+ # dim 0 divisor = 1
+ # dim 1 name = i8042_1
+ # dim 1 algorithm = incremental
+ # dim 1 multiplier = 1
+ # dim 1 divisor = 1
+ # dim 6 name = floppy_6
+ # dim 6 algorithm = incremental
+ # dim 6 multiplier = 1
+ # dim 6 divisor = 1
+ # dim 8 name = rtc0_8
+ # dim 8 algorithm = incremental
+ # dim 8 multiplier = 1
+ # dim 8 divisor = 1
+ # dim 9 name = acpi_9
+ # dim 9 algorithm = incremental
+ # dim 9 multiplier = 1
+ # dim 9 divisor = 1
+ # dim 12 name = i8042_12
+ # dim 12 algorithm = incremental
+ # dim 12 multiplier = 1
+ # dim 12 divisor = 1
+ # dim 14 name = ata_piix_14
+ # dim 14 algorithm = incremental
+ # dim 14 multiplier = 1
+ # dim 14 divisor = 1
+ # dim 15 name = ata_piix_15
+ # dim 15 algorithm = incremental
+ # dim 15 multiplier = 1
+ # dim 15 divisor = 1
+ # dim NMI name = NMI
+ # dim NMI algorithm = incremental
+ # dim NMI multiplier = 1
+ # dim NMI divisor = 1
+ # dim LOC name = LOC
+ # dim LOC algorithm = incremental
+ # dim LOC multiplier = 1
+ # dim LOC divisor = 1
+ # dim SPU name = SPU
+ # dim SPU algorithm = incremental
+ # dim SPU multiplier = 1
+ # dim SPU divisor = 1
+ # dim PMI name = PMI
+ # dim PMI algorithm = incremental
+ # dim PMI multiplier = 1
+ # dim PMI divisor = 1
+ # dim IWI name = IWI
+ # dim IWI algorithm = incremental
+ # dim IWI multiplier = 1
+ # dim IWI divisor = 1
+ # dim RTR name = RTR
+ # dim RTR algorithm = incremental
+ # dim RTR multiplier = 1
+ # dim RTR divisor = 1
+ # dim RES name = RES
+ # dim RES algorithm = incremental
+ # dim RES multiplier = 1
+ # dim RES divisor = 1
+ # dim CAL name = CAL
+ # dim CAL algorithm = incremental
+ # dim CAL multiplier = 1
+ # dim CAL divisor = 1
+ # dim TLB name = TLB
+ # dim TLB algorithm = incremental
+ # dim TLB multiplier = 1
+ # dim TLB divisor = 1
+ # dim TRM name = TRM
+ # dim TRM algorithm = incremental
+ # dim TRM multiplier = 1
+ # dim TRM divisor = 1
+ # dim THR name = THR
+ # dim THR algorithm = incremental
+ # dim THR multiplier = 1
+ # dim THR divisor = 1
+ # dim MCE name = MCE
+ # dim MCE algorithm = incremental
+ # dim MCE multiplier = 1
+ # dim MCE divisor = 1
+ # dim MCP name = MCP
+ # dim MCP algorithm = incremental
+ # dim MCP multiplier = 1
+ # dim MCP divisor = 1
+ # dim HYP name = HYP
+ # dim HYP algorithm = incremental
+ # dim HYP multiplier = 1
+ # dim HYP divisor = 1
+ # dim ERR name = ERR
+ # dim ERR algorithm = incremental
+ # dim ERR multiplier = 1
+ # dim ERR divisor = 1
+ # dim MIS name = MIS
+ # dim MIS algorithm = incremental
+ # dim MIS multiplier = 1
+ # dim MIS divisor = 1
+
+[system.entropy]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/system.entropy
+ # chart type = line
+ # type = system
+ # family = entropy
+ # context = system.entropy
+ # units = entropy
+ # priority = 1000
+ # gap when lost iterations above = 1
+ # name = system.entropy
+ # title = Available Entropy (system.entropy)
+ # dim entropy name = entropy
+ # dim entropy algorithm = absolute
+ # dim entropy multiplier = 1
+ # dim entropy divisor = 1
+
+[net.eth0]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/net.eth0
+ # chart type = area
+ # type = net
+ # family = eth0
+ # context = net.net
+ # units = kilobits/s
+ # priority = 7000
+ # gap when lost iterations above = 1
+ # name = net.eth0
+ # title = Bandwidth (net.eth0)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 8
+ # dim received divisor = 1024
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -8
+ # dim sent divisor = 1024
+
+[net_packets.eth0]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/net_packets.eth0
+ # chart type = line
+ # type = net_packets
+ # family = eth0
+ # context = net.packets
+ # units = packets/s
+ # priority = 7001
+ # gap when lost iterations above = 1
+ # name = net_packets.eth0
+ # title = Packets (net_packets.eth0)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+ # dim multicast name = multicast
+ # dim multicast algorithm = incremental
+ # dim multicast multiplier = 1
+ # dim multicast divisor = 1
+
+[net_drops.eth0]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/net_drops.eth0
+ # chart type = line
+ # type = net_drops
+ # family = eth0
+ # context = net.drops
+ # units = drops/s
+ # priority = 7003
+ # gap when lost iterations above = 1
+ # name = net_drops.eth0
+ # title = Interface Drops (net_drops.eth0)
+ # dim inbound name = inbound
+ # dim inbound algorithm = incremental
+ # dim inbound multiplier = 1
+ # dim inbound divisor = 1
+ # dim outbound name = outbound
+ # dim outbound algorithm = incremental
+ # dim outbound multiplier = -1
+ # dim outbound divisor = 1
+
+[net.eth1]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/net.eth1
+ # chart type = area
+ # type = net
+ # family = eth1
+ # context = net.net
+ # units = kilobits/s
+ # priority = 7000
+ # gap when lost iterations above = 1
+ # name = net.eth1
+ # title = Bandwidth (net.eth1)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 8
+ # dim received divisor = 1024
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -8
+ # dim sent divisor = 1024
+
+[net_packets.eth1]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/net_packets.eth1
+ # chart type = line
+ # type = net_packets
+ # family = eth1
+ # context = net.packets
+ # units = packets/s
+ # priority = 7001
+ # gap when lost iterations above = 1
+ # name = net_packets.eth1
+ # title = Packets (net_packets.eth1)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+ # dim multicast name = multicast
+ # dim multicast algorithm = incremental
+ # dim multicast multiplier = 1
+ # dim multicast divisor = 1
+
+[disk.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk.sda
+ # chart type = area
+ # type = disk
+ # family = sda
+ # context = disk.io
+ # units = kilobytes/s
+ # priority = 2000
+ # gap when lost iterations above = 1
+ # name = disk.sda
+ # title = Disk I/O Bandwidth (disk.sda)
+ # dim reads name = reads
+ # dim reads algorithm = incremental
+ # dim reads multiplier = 512
+ # dim reads divisor = 1024
+ # dim writes name = writes
+ # dim writes algorithm = incremental
+ # dim writes multiplier = -512
+ # dim writes divisor = 1024
+
+[disk_ops.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_ops.sda
+ # chart type = line
+ # type = disk_ops
+ # family = sda
+ # context = disk.ops
+ # units = operations/s
+ # priority = 2001
+ # gap when lost iterations above = 1
+ # name = disk_ops.sda
+ # title = Disk Completed I/O Operations (disk_ops.sda)
+ # dim reads name = reads
+ # dim reads algorithm = incremental
+ # dim reads multiplier = 1
+ # dim reads divisor = 1
+ # dim writes name = writes
+ # dim writes algorithm = incremental
+ # dim writes multiplier = -1
+ # dim writes divisor = 1
+
+[disk_qops.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_qops.sda
+ # chart type = line
+ # type = disk_qops
+ # family = sda
+ # context = disk.qops
+ # units = operations
+ # priority = 2002
+ # gap when lost iterations above = 1
+ # name = disk_qops.sda
+ # title = Disk Current I/O Operations (disk_qops.sda)
+ # dim operations name = operations
+ # dim operations algorithm = absolute
+ # dim operations multiplier = 1
+ # dim operations divisor = 1
+
+[disk_backlog.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_backlog.sda
+ # chart type = area
+ # type = disk_backlog
+ # family = sda
+ # context = disk.backlog
+ # units = backlog (ms)
+ # priority = 2003
+ # gap when lost iterations above = 1
+ # name = disk_backlog.sda
+ # title = Disk Backlog (disk_backlog.sda)
+ # dim backlog name = backlog
+ # dim backlog algorithm = incremental
+ # dim backlog multiplier = 1
+ # dim backlog divisor = 10
+
+[disk_util.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_util.sda
+ # chart type = area
+ # type = disk_util
+ # family = sda
+ # context = disk.util
+ # units = % of time working
+ # priority = 2004
+ # gap when lost iterations above = 1
+ # name = disk_util.sda
+ # title = Disk Utilization Time (disk_util.sda)
+ # dim utilization name = utilization
+ # dim utilization algorithm = incremental
+ # dim utilization multiplier = 1
+ # dim utilization divisor = 10
+
+[disk_mops.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_mops.sda
+ # chart type = line
+ # type = disk_mops
+ # family = sda
+ # context = disk.mops
+ # units = merged operations/s
+ # priority = 2021
+ # gap when lost iterations above = 1
+ # name = disk_mops.sda
+ # title = Disk Merged Operations (disk_mops.sda)
+ # dim reads name = reads
+ # dim reads algorithm = incremental
+ # dim reads multiplier = 1
+ # dim reads divisor = 1
+ # dim writes name = writes
+ # dim writes algorithm = incremental
+ # dim writes multiplier = -1
+ # dim writes divisor = 1
+
+[disk_iotime.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_iotime.sda
+ # chart type = line
+ # type = disk_iotime
+ # family = sda
+ # context = disk.iotime
+ # units = milliseconds/s
+ # priority = 2022
+ # gap when lost iterations above = 1
+ # name = disk_iotime.sda
+ # title = Disk Total I/O Time (disk_iotime.sda)
+ # dim reads name = reads
+ # dim reads algorithm = incremental
+ # dim reads multiplier = 1
+ # dim reads divisor = 1
+ # dim writes name = writes
+ # dim writes algorithm = incremental
+ # dim writes multiplier = -1
+ # dim writes divisor = 1
+
+[ipv4.packets]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/ipv4.packets
+ # chart type = line
+ # type = ipv4
+ # family = packets
+ # context = ipv4.packets
+ # units = packets/s
+ # priority = 3000
+ # gap when lost iterations above = 1
+ # name = ipv4.packets
+ # title = IPv4 Packets (ipv4.packets)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+ # dim forwarded name = forwarded
+ # dim forwarded algorithm = incremental
+ # dim forwarded multiplier = 1
+ # dim forwarded divisor = 1
+
+[ipv4.fragsout]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.fragsout
+ # chart type = line
+ # type = ipv4
+ # family = fragments
+ # context = ipv4.fragsout
+ # units = packets/s
+ # priority = 3010
+ # gap when lost iterations above = 1
+ # name = ipv4.fragsout
+ # title = IPv4 Fragments Sent (ipv4.fragsout)
+ # dim ok name = ok
+ # dim ok algorithm = incremental
+ # dim ok multiplier = 1
+ # dim ok divisor = 1
+ # dim failed name = failed
+ # dim failed algorithm = incremental
+ # dim failed multiplier = -1
+ # dim failed divisor = 1
+ # dim all name = all
+ # dim all algorithm = incremental
+ # dim all multiplier = 1
+ # dim all divisor = 1
+
+[ipv4.fragsin]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.fragsin
+ # chart type = line
+ # type = ipv4
+ # family = fragments
+ # context = ipv4.fragsin
+ # units = packets/s
+ # priority = 3011
+ # gap when lost iterations above = 1
+ # name = ipv4.fragsin
+ # title = IPv4 Fragments Reassembly (ipv4.fragsin)
+ # dim ok name = ok
+ # dim ok algorithm = incremental
+ # dim ok multiplier = 1
+ # dim ok divisor = 1
+ # dim failed name = failed
+ # dim failed algorithm = incremental
+ # dim failed multiplier = -1
+ # dim failed divisor = 1
+ # dim all name = all
+ # dim all algorithm = incremental
+ # dim all multiplier = 1
+ # dim all divisor = 1
+
+[ipv4.errors]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.errors
+ # chart type = line
+ # type = ipv4
+ # family = errors
+ # context = ipv4.errors
+ # units = packets/s
+ # priority = 3002
+ # gap when lost iterations above = 1
+ # name = ipv4.errors
+ # title = IPv4 Errors (ipv4.errors)
+ # dim InDiscards name = InDiscards
+ # dim InDiscards algorithm = incremental
+ # dim InDiscards multiplier = 1
+ # dim InDiscards divisor = 1
+ # dim OutDiscards name = OutDiscards
+ # dim OutDiscards algorithm = incremental
+ # dim OutDiscards multiplier = -1
+ # dim OutDiscards divisor = 1
+ # dim InHdrErrors name = InHdrErrors
+ # dim InHdrErrors algorithm = incremental
+ # dim InHdrErrors multiplier = 1
+ # dim InHdrErrors divisor = 1
+ # dim InAddrErrors name = InAddrErrors
+ # dim InAddrErrors algorithm = incremental
+ # dim InAddrErrors multiplier = 1
+ # dim InAddrErrors divisor = 1
+ # dim InUnknownProtos name = InUnknownProtos
+ # dim InUnknownProtos algorithm = incremental
+ # dim InUnknownProtos multiplier = 1
+ # dim InUnknownProtos divisor = 1
+ # dim OutNoRoutes name = OutNoRoutes
+ # dim OutNoRoutes algorithm = incremental
+ # dim OutNoRoutes multiplier = -1
+ # dim OutNoRoutes divisor = 1
+
+[ipv4.tcpsock]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.tcpsock
+ # chart type = line
+ # type = ipv4
+ # family = tcp
+ # context = ipv4.tcpsock
+ # units = active connections
+ # priority = 2500
+ # gap when lost iterations above = 1
+ # name = ipv4.tcpsock
+ # title = IPv4 TCP Connections (ipv4.tcpsock)
+ # dim connections name = connections
+ # dim connections algorithm = absolute
+ # dim connections multiplier = 1
+ # dim connections divisor = 1
+
+[ipv4.tcppackets]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.tcppackets
+ # chart type = line
+ # type = ipv4
+ # family = tcp
+ # context = ipv4.tcppackets
+ # units = packets/s
+ # priority = 2600
+ # gap when lost iterations above = 1
+ # name = ipv4.tcppackets
+ # title = IPv4 TCP Packets (ipv4.tcppackets)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+
+[ipv4.tcperrors]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.tcperrors
+ # chart type = line
+ # type = ipv4
+ # family = tcp
+ # context = ipv4.tcperrors
+ # units = packets/s
+ # priority = 2700
+ # gap when lost iterations above = 1
+ # name = ipv4.tcperrors
+ # title = IPv4 TCP Errors (ipv4.tcperrors)
+ # dim InErrs name = InErrs
+ # dim InErrs algorithm = incremental
+ # dim InErrs multiplier = 1
+ # dim InErrs divisor = 1
+ # dim RetransSegs name = RetransSegs
+ # dim RetransSegs algorithm = incremental
+ # dim RetransSegs multiplier = -1
+ # dim RetransSegs divisor = 1
+
+[ipv4.tcphandshake]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.tcphandshake
+ # chart type = line
+ # type = ipv4
+ # family = tcp
+ # context = ipv4.tcphandshake
+ # units = events/s
+ # priority = 2900
+ # gap when lost iterations above = 1
+ # name = ipv4.tcphandshake
+ # title = IPv4 TCP Handshake Issues (ipv4.tcphandshake)
+ # dim EstabResets name = EstabResets
+ # dim EstabResets algorithm = incremental
+ # dim EstabResets multiplier = 1
+ # dim EstabResets divisor = 1
+ # dim OutRsts name = OutRsts
+ # dim OutRsts algorithm = incremental
+ # dim OutRsts multiplier = -1
+ # dim OutRsts divisor = 1
+ # dim ActiveOpens name = ActiveOpens
+ # dim ActiveOpens algorithm = incremental
+ # dim ActiveOpens multiplier = 1
+ # dim ActiveOpens divisor = 1
+ # dim PassiveOpens name = PassiveOpens
+ # dim PassiveOpens algorithm = incremental
+ # dim PassiveOpens multiplier = 1
+ # dim PassiveOpens divisor = 1
+ # dim AttemptFails name = AttemptFails
+ # dim AttemptFails algorithm = incremental
+ # dim AttemptFails multiplier = 1
+ # dim AttemptFails divisor = 1
+
+[ipv4.udppackets]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.udppackets
+ # chart type = line
+ # type = ipv4
+ # family = udp
+ # context = ipv4.udppackets
+ # units = packets/s
+ # priority = 2601
+ # gap when lost iterations above = 1
+ # name = ipv4.udppackets
+ # title = IPv4 UDP Packets (ipv4.udppackets)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+
+[ipv4.udperrors]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.udperrors
+ # chart type = line
+ # type = ipv4
+ # family = udp
+ # context = ipv4.udperrors
+ # units = events/s
+ # priority = 2701
+ # gap when lost iterations above = 1
+ # name = ipv4.udperrors
+ # title = IPv4 UDP Errors (ipv4.udperrors)
+ # dim RcvbufErrors name = RcvbufErrors
+ # dim RcvbufErrors algorithm = incremental
+ # dim RcvbufErrors multiplier = 1
+ # dim RcvbufErrors divisor = 1
+ # dim SndbufErrors name = SndbufErrors
+ # dim SndbufErrors algorithm = incremental
+ # dim SndbufErrors multiplier = -1
+ # dim SndbufErrors divisor = 1
+ # dim InErrors name = InErrors
+ # dim InErrors algorithm = incremental
+ # dim InErrors multiplier = 1
+ # dim InErrors divisor = 1
+ # dim NoPorts name = NoPorts
+ # dim NoPorts algorithm = incremental
+ # dim NoPorts multiplier = 1
+ # dim NoPorts divisor = 1
+
+[system.ipv4]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/system.ipv4
+ # chart type = area
+ # type = system
+ # family = network
+ # context = system.ipv4
+ # units = kilobits/s
+ # priority = 500
+ # gap when lost iterations above = 1
+ # name = system.ipv4
+ # title = IPv4 Bandwidth (system.ipv4)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 8
+ # dim received divisor = 1024
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -8
+ # dim sent divisor = 1024
+
+[ipv4.bcast]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.bcast
+ # chart type = area
+ # type = ipv4
+ # family = broadcast
+ # context = ipv4.bcast
+ # units = kilobits/s
+ # priority = 8000
+ # gap when lost iterations above = 1
+ # name = ipv4.bcast
+ # title = IPv4 Broadcast Bandwidth (ipv4.bcast)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 8
+ # dim received divisor = 1024
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -8
+ # dim sent divisor = 1024
+
+[ipv4.bcastpkts]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv4.bcastpkts
+ # chart type = line
+ # type = ipv4
+ # family = broadcast
+ # context = ipv4.bcastpkts
+ # units = packets/s
+ # priority = 8500
+ # gap when lost iterations above = 1
+ # name = ipv4.bcastpkts
+ # title = IPv4 Broadcast Packets (ipv4.bcastpkts)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+
+[system.cpu]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/system.cpu
+ # chart type = stacked
+ # type = system
+ # family = cpu
+ # context = system.cpu
+ # units = percentage
+ # priority = 100
+ # gap when lost iterations above = 1
+ # name = system.cpu
+ # title = Total CPU utilization (system.cpu)
+ # dim guest_nice name = guest_nice
+ # dim guest_nice algorithm = percentage-of-incremental-row
+ # dim guest_nice multiplier = 1
+ # dim guest_nice divisor = 1
+ # dim guest name = guest
+ # dim guest algorithm = percentage-of-incremental-row
+ # dim guest multiplier = 1
+ # dim guest divisor = 1
+ # dim steal name = steal
+ # dim steal algorithm = percentage-of-incremental-row
+ # dim steal multiplier = 1
+ # dim steal divisor = 1
+ # dim softirq name = softirq
+ # dim softirq algorithm = percentage-of-incremental-row
+ # dim softirq multiplier = 1
+ # dim softirq divisor = 1
+ # dim irq name = irq
+ # dim irq algorithm = percentage-of-incremental-row
+ # dim irq multiplier = 1
+ # dim irq divisor = 1
+ # dim user name = user
+ # dim user algorithm = percentage-of-incremental-row
+ # dim user multiplier = 1
+ # dim user divisor = 1
+ # dim system name = system
+ # dim system algorithm = percentage-of-incremental-row
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim nice name = nice
+ # dim nice algorithm = percentage-of-incremental-row
+ # dim nice multiplier = 1
+ # dim nice divisor = 1
+ # dim iowait name = iowait
+ # dim iowait algorithm = percentage-of-incremental-row
+ # dim iowait multiplier = 1
+ # dim iowait divisor = 1
+ # dim idle name = idle
+ # dim idle algorithm = percentage-of-incremental-row
+ # dim idle multiplier = 1
+ # dim idle divisor = 1
+
+[cpu.cpu0]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/cpu.cpu0
+ # chart type = stacked
+ # type = cpu
+ # family = utilization
+ # context = cpu.cpu
+ # units = percentage
+ # priority = 1000
+ # gap when lost iterations above = 1
+ # name = cpu.cpu0
+ # title = Core utilization (cpu.cpu0)
+ # dim guest_nice name = guest_nice
+ # dim guest_nice algorithm = percentage-of-incremental-row
+ # dim guest_nice multiplier = 1
+ # dim guest_nice divisor = 1
+ # dim guest name = guest
+ # dim guest algorithm = percentage-of-incremental-row
+ # dim guest multiplier = 1
+ # dim guest divisor = 1
+ # dim steal name = steal
+ # dim steal algorithm = percentage-of-incremental-row
+ # dim steal multiplier = 1
+ # dim steal divisor = 1
+ # dim softirq name = softirq
+ # dim softirq algorithm = percentage-of-incremental-row
+ # dim softirq multiplier = 1
+ # dim softirq divisor = 1
+ # dim irq name = irq
+ # dim irq algorithm = percentage-of-incremental-row
+ # dim irq multiplier = 1
+ # dim irq divisor = 1
+ # dim user name = user
+ # dim user algorithm = percentage-of-incremental-row
+ # dim user multiplier = 1
+ # dim user divisor = 1
+ # dim system name = system
+ # dim system algorithm = percentage-of-incremental-row
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim nice name = nice
+ # dim nice algorithm = percentage-of-incremental-row
+ # dim nice multiplier = 1
+ # dim nice divisor = 1
+ # dim iowait name = iowait
+ # dim iowait algorithm = percentage-of-incremental-row
+ # dim iowait multiplier = 1
+ # dim iowait divisor = 1
+ # dim idle name = idle
+ # dim idle algorithm = percentage-of-incremental-row
+ # dim idle multiplier = 1
+ # dim idle divisor = 1
+
+[cpu.cpu1]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/cpu.cpu1
+ # chart type = stacked
+ # type = cpu
+ # family = utilization
+ # context = cpu.cpu
+ # units = percentage
+ # priority = 1000
+ # gap when lost iterations above = 1
+ # name = cpu.cpu1
+ # title = Core utilization (cpu.cpu1)
+ # dim guest_nice name = guest_nice
+ # dim guest_nice algorithm = percentage-of-incremental-row
+ # dim guest_nice multiplier = 1
+ # dim guest_nice divisor = 1
+ # dim guest name = guest
+ # dim guest algorithm = percentage-of-incremental-row
+ # dim guest multiplier = 1
+ # dim guest divisor = 1
+ # dim steal name = steal
+ # dim steal algorithm = percentage-of-incremental-row
+ # dim steal multiplier = 1
+ # dim steal divisor = 1
+ # dim softirq name = softirq
+ # dim softirq algorithm = percentage-of-incremental-row
+ # dim softirq multiplier = 1
+ # dim softirq divisor = 1
+ # dim irq name = irq
+ # dim irq algorithm = percentage-of-incremental-row
+ # dim irq multiplier = 1
+ # dim irq divisor = 1
+ # dim user name = user
+ # dim user algorithm = percentage-of-incremental-row
+ # dim user multiplier = 1
+ # dim user divisor = 1
+ # dim system name = system
+ # dim system algorithm = percentage-of-incremental-row
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim nice name = nice
+ # dim nice algorithm = percentage-of-incremental-row
+ # dim nice multiplier = 1
+ # dim nice divisor = 1
+ # dim iowait name = iowait
+ # dim iowait algorithm = percentage-of-incremental-row
+ # dim iowait multiplier = 1
+ # dim iowait divisor = 1
+ # dim idle name = idle
+ # dim idle algorithm = percentage-of-incremental-row
+ # dim idle multiplier = 1
+ # dim idle divisor = 1
+
+[system.intr]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.intr
+ # chart type = line
+ # type = system
+ # family = interrupts
+ # context = system.intr
+ # units = interrupts/s
+ # priority = 900
+ # gap when lost iterations above = 1
+ # name = system.intr
+ # title = CPU Interrupts (system.intr)
+ # dim interrupts name = interrupts
+ # dim interrupts algorithm = incremental
+ # dim interrupts multiplier = 1
+ # dim interrupts divisor = 1
+
+[system.ctxt]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.ctxt
+ # chart type = line
+ # type = system
+ # family = processes
+ # context = system.ctxt
+ # units = context switches/s
+ # priority = 800
+ # gap when lost iterations above = 1
+ # name = system.ctxt
+ # title = CPU Context Switches (system.ctxt)
+ # dim switches name = switches
+ # dim switches algorithm = incremental
+ # dim switches multiplier = 1
+ # dim switches divisor = 1
+
+[system.forks]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.forks
+ # chart type = line
+ # type = system
+ # family = processes
+ # context = system.forks
+ # units = processes/s
+ # priority = 700
+ # gap when lost iterations above = 1
+ # name = system.forks
+ # title = Started Processes (system.forks)
+ # dim started name = started
+ # dim started algorithm = incremental
+ # dim started multiplier = 1
+ # dim started divisor = 1
+
+[system.processes]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.processes
+ # chart type = line
+ # type = system
+ # family = processes
+ # context = system.processes
+ # units = processes
+ # priority = 600
+ # gap when lost iterations above = 1
+ # name = system.processes
+ # title = System Processes (system.processes)
+ # dim running name = running
+ # dim running algorithm = absolute
+ # dim running multiplier = 1
+ # dim running divisor = 1
+ # dim blocked name = blocked
+ # dim blocked algorithm = absolute
+ # dim blocked multiplier = -1
+ # dim blocked divisor = 1
+
+[system.ram]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.ram
+ # chart type = stacked
+ # type = system
+ # family = ram
+ # context = system.ram
+ # units = MB
+ # priority = 200
+ # gap when lost iterations above = 1
+ # name = system.ram
+ # title = System RAM (system.ram)
+ # dim buffers name = buffers
+ # dim buffers algorithm = absolute
+ # dim buffers multiplier = 1
+ # dim buffers divisor = 1024
+ # dim used name = used
+ # dim used algorithm = absolute
+ # dim used multiplier = 1
+ # dim used divisor = 1024
+ # dim cached name = cached
+ # dim cached algorithm = absolute
+ # dim cached multiplier = 1
+ # dim cached divisor = 1024
+ # dim free name = free
+ # dim free algorithm = absolute
+ # dim free multiplier = 1
+ # dim free divisor = 1024
+
+[system.swap]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.swap
+ # chart type = stacked
+ # type = system
+ # family = swap
+ # context = system.swap
+ # units = MB
+ # priority = 201
+ # gap when lost iterations above = 1
+ # name = system.swap
+ # title = System Swap (system.swap)
+ # dim free name = free
+ # dim free algorithm = absolute
+ # dim free multiplier = 1
+ # dim free divisor = 1024
+ # dim used name = used
+ # dim used algorithm = absolute
+ # dim used multiplier = 1
+ # dim used divisor = 1024
+
+[mem.committed]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/mem.committed
+ # chart type = area
+ # type = mem
+ # family = system
+ # context = mem.committed
+ # units = MB
+ # priority = 5000
+ # gap when lost iterations above = 1
+ # name = mem.committed
+ # title = Committed (Allocated) Memory (mem.committed)
+ # dim Committed_AS name = Committed_AS
+ # dim Committed_AS algorithm = absolute
+ # dim Committed_AS multiplier = 1
+ # dim Committed_AS divisor = 1024
+
+[mem.writeback]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mem.writeback
+ # chart type = line
+ # type = mem
+ # family = kernel
+ # context = mem.writeback
+ # units = MB
+ # priority = 4000
+ # gap when lost iterations above = 1
+ # name = mem.writeback
+ # title = Writeback Memory (mem.writeback)
+ # dim Dirty name = Dirty
+ # dim Dirty algorithm = absolute
+ # dim Dirty multiplier = 1
+ # dim Dirty divisor = 1024
+ # dim Writeback name = Writeback
+ # dim Writeback algorithm = absolute
+ # dim Writeback multiplier = 1
+ # dim Writeback divisor = 1024
+ # dim FuseWriteback name = FuseWriteback
+ # dim FuseWriteback algorithm = absolute
+ # dim FuseWriteback multiplier = 1
+ # dim FuseWriteback divisor = 1024
+ # dim NfsWriteback name = NfsWriteback
+ # dim NfsWriteback algorithm = absolute
+ # dim NfsWriteback multiplier = 1
+ # dim NfsWriteback divisor = 1024
+ # dim Bounce name = Bounce
+ # dim Bounce algorithm = absolute
+ # dim Bounce multiplier = 1
+ # dim Bounce divisor = 1024
+
+[mem.kernel]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/mem.kernel
+ # chart type = stacked
+ # type = mem
+ # family = kernel
+ # context = mem.kernel
+ # units = MB
+ # priority = 6000
+ # gap when lost iterations above = 1
+ # name = mem.kernel
+ # title = Memory Used by Kernel (mem.kernel)
+ # dim Slab name = Slab
+ # dim Slab algorithm = absolute
+ # dim Slab multiplier = 1
+ # dim Slab divisor = 1024
+ # dim KernelStack name = KernelStack
+ # dim KernelStack algorithm = absolute
+ # dim KernelStack multiplier = 1
+ # dim KernelStack divisor = 1024
+ # dim PageTables name = PageTables
+ # dim PageTables algorithm = absolute
+ # dim PageTables multiplier = 1
+ # dim PageTables divisor = 1024
+ # dim VmallocUsed name = VmallocUsed
+ # dim VmallocUsed algorithm = absolute
+ # dim VmallocUsed multiplier = 1
+ # dim VmallocUsed divisor = 1024
+
+[mem.slab]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mem.slab
+ # chart type = stacked
+ # type = mem
+ # family = slab
+ # context = mem.slab
+ # units = MB
+ # priority = 6500
+ # gap when lost iterations above = 1
+ # name = mem.slab
+ # title = Reclaimable Kernel Memory (mem.slab)
+ # dim reclaimable name = reclaimable
+ # dim reclaimable algorithm = absolute
+ # dim reclaimable multiplier = 1
+ # dim reclaimable divisor = 1024
+ # dim unreclaimable name = unreclaimable
+ # dim unreclaimable algorithm = absolute
+ # dim unreclaimable multiplier = 1
+ # dim unreclaimable divisor = 1024
+
+[system.swapio]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/system.swapio
+ # chart type = area
+ # type = system
+ # family = swap
+ # context = system.swapio
+ # units = kilobytes/s
+ # priority = 250
+ # gap when lost iterations above = 1
+ # name = system.swapio
+ # title = Swap I/O (system.swapio)
+ # dim in name = in
+ # dim in algorithm = incremental
+ # dim in multiplier = 4096
+ # dim in divisor = 1024
+ # dim out name = out
+ # dim out algorithm = incremental
+ # dim out multiplier = -4096
+ # dim out divisor = 1024
+
+[system.io]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.io
+ # chart type = area
+ # type = system
+ # family = disk
+ # context = system.io
+ # units = kilobytes/s
+ # priority = 150
+ # gap when lost iterations above = 1
+ # name = system.io
+ # title = Disk I/O (system.io)
+ # dim in name = in
+ # dim in algorithm = incremental
+ # dim in multiplier = 1
+ # dim in divisor = 1
+ # dim out name = out
+ # dim out algorithm = incremental
+ # dim out multiplier = -1
+ # dim out divisor = 1
+
+[netdata.plugin_proc_cpu]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/netdata.plugin_proc_cpu
+ # chart type = stacked
+ # type = netdata
+ # family = proc.internal
+ # context = netdata.plugin_proc_cpu
+ # units = milliseconds/s
+ # priority = 131000
+ # gap when lost iterations above = 1
+ # name = netdata.plugin_proc_cpu
+ # title = NetData Proc Plugin CPU usage (netdata.plugin_proc_cpu)
+ # dim user name = user
+ # dim user algorithm = incremental
+ # dim user multiplier = 1
+ # dim user divisor = 1000
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1000
+
+[netdata.server_cpu]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/netdata.server_cpu
+ # chart type = stacked
+ # type = netdata
+ # family = netdata
+ # context = netdata.server_cpu
+ # units = milliseconds/s
+ # priority = 130000
+ # gap when lost iterations above = 1
+ # name = netdata.server_cpu
+ # title = NetData CPU usage (netdata.server_cpu)
+ # dim user name = user
+ # dim user algorithm = incremental
+ # dim user multiplier = 1
+ # dim user divisor = 1000
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1000
+
+[netdata.clients]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/netdata.clients
+ # chart type = line
+ # type = netdata
+ # family = netdata
+ # context = netdata.clients
+ # units = connected clients
+ # priority = 131000
+ # gap when lost iterations above = 1
+ # name = netdata.clients
+ # title = NetData Web Clients (netdata.clients)
+ # dim clients name = clients
+ # dim clients algorithm = absolute
+ # dim clients multiplier = 1
+ # dim clients divisor = 1
+
+[netdata.requests]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/netdata.requests
+ # chart type = line
+ # type = netdata
+ # family = netdata
+ # context = netdata.requests
+ # units = requests/s
+ # priority = 131100
+ # gap when lost iterations above = 1
+ # name = netdata.requests
+ # title = NetData Web Requests (netdata.requests)
+ # dim requests name = requests
+ # dim requests algorithm = incremental
+ # dim requests multiplier = 1
+ # dim requests divisor = 1
+
+[netdata.net]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/netdata.net
+ # chart type = area
+ # type = netdata
+ # family = netdata
+ # context = netdata.net
+ # units = kilobits/s
+ # priority = 131200
+ # gap when lost iterations above = 1
+ # name = netdata.net
+ # title = NetData Network Traffic (netdata.net)
+ # dim in name = in
+ # dim in algorithm = incremental
+ # dim in multiplier = 8
+ # dim in divisor = 1024
+ # dim out name = out
+ # dim out algorithm = incremental
+ # dim out multiplier = -8
+ # dim out divisor = 1024
+
+[apps.cpu]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.cpu
+ # chart type = stacked
+ # type = apps
+ # family = cpu
+ # context = apps.cpu
+ # units = cpu time %
+ # priority = 20001
+ # gap when lost iterations above = 1
+ # name = apps.cpu
+ # title = Apps CPU Time (200% = 2 cores) (apps.cpu)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 100
+ # dim other divisor = 100
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 100
+ # dim ksmd divisor = 100
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 100
+ # dim system divisor = 100
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 100
+ # dim netdata divisor = 100
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 100
+ # dim kernel divisor = 100
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 100
+ # dim cron divisor = 100
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 100
+ # dim inetd divisor = 100
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 100
+ # dim nms divisor = 100
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 100
+ # dim log divisor = 100
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 100
+ # dim ntp divisor = 100
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 100
+ # dim named divisor = 100
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 100
+ # dim ssh divisor = 100
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 100
+ # dim nfs divisor = 100
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 100
+ # dim nginx divisor = 100
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 100
+ # dim postfix divisor = 100
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 100
+ # dim mysql divisor = 100
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 100
+ # dim rsync divisor = 100
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 100
+ # dim compile divisor = 100
+
+[apps.mem]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.mem
+ # chart type = stacked
+ # type = apps
+ # family = mem
+ # context = apps.mem
+ # units = MB
+ # priority = 20003
+ # gap when lost iterations above = 1
+ # name = apps.mem
+ # title = Apps Dedicated Memory (w/o shared) (apps.mem)
+ # dim other name = other
+ # dim other algorithm = absolute
+ # dim other multiplier = 4096
+ # dim other divisor = 1048576
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = absolute
+ # dim ksmd multiplier = 4096
+ # dim ksmd divisor = 1048576
+ # dim system name = system
+ # dim system algorithm = absolute
+ # dim system multiplier = 4096
+ # dim system divisor = 1048576
+ # dim netdata name = netdata
+ # dim netdata algorithm = absolute
+ # dim netdata multiplier = 4096
+ # dim netdata divisor = 1048576
+ # dim kernel name = kernel
+ # dim kernel algorithm = absolute
+ # dim kernel multiplier = 4096
+ # dim kernel divisor = 1048576
+ # dim cron name = cron
+ # dim cron algorithm = absolute
+ # dim cron multiplier = 4096
+ # dim cron divisor = 1048576
+ # dim inetd name = inetd
+ # dim inetd algorithm = absolute
+ # dim inetd multiplier = 4096
+ # dim inetd divisor = 1048576
+ # dim nms name = nms
+ # dim nms algorithm = absolute
+ # dim nms multiplier = 4096
+ # dim nms divisor = 1048576
+ # dim log name = log
+ # dim log algorithm = absolute
+ # dim log multiplier = 4096
+ # dim log divisor = 1048576
+ # dim ntp name = ntp
+ # dim ntp algorithm = absolute
+ # dim ntp multiplier = 4096
+ # dim ntp divisor = 1048576
+ # dim named name = named
+ # dim named algorithm = absolute
+ # dim named multiplier = 4096
+ # dim named divisor = 1048576
+ # dim ssh name = ssh
+ # dim ssh algorithm = absolute
+ # dim ssh multiplier = 4096
+ # dim ssh divisor = 1048576
+ # dim nfs name = nfs
+ # dim nfs algorithm = absolute
+ # dim nfs multiplier = 4096
+ # dim nfs divisor = 1048576
+ # dim nginx name = nginx
+ # dim nginx algorithm = absolute
+ # dim nginx multiplier = 4096
+ # dim nginx divisor = 1048576
+ # dim postfix name = postfix
+ # dim postfix algorithm = absolute
+ # dim postfix multiplier = 4096
+ # dim postfix divisor = 1048576
+ # dim mysql name = mysql
+ # dim mysql algorithm = absolute
+ # dim mysql multiplier = 4096
+ # dim mysql divisor = 1048576
+ # dim rsync name = rsync
+ # dim rsync algorithm = absolute
+ # dim rsync multiplier = 4096
+ # dim rsync divisor = 1048576
+ # dim compile name = compile
+ # dim compile algorithm = absolute
+ # dim compile multiplier = 4096
+ # dim compile divisor = 1048576
+
+[apps.threads]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.threads
+ # chart type = stacked
+ # type = apps
+ # family = processes
+ # context = apps.threads
+ # units = threads
+ # priority = 20005
+ # gap when lost iterations above = 1
+ # name = apps.threads
+ # title = Apps Threads (apps.threads)
+ # dim other name = other
+ # dim other algorithm = absolute
+ # dim other multiplier = 1
+ # dim other divisor = 1
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = absolute
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1
+ # dim system name = system
+ # dim system algorithm = absolute
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim netdata name = netdata
+ # dim netdata algorithm = absolute
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1
+ # dim kernel name = kernel
+ # dim kernel algorithm = absolute
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1
+ # dim cron name = cron
+ # dim cron algorithm = absolute
+ # dim cron multiplier = 1
+ # dim cron divisor = 1
+ # dim inetd name = inetd
+ # dim inetd algorithm = absolute
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1
+ # dim nms name = nms
+ # dim nms algorithm = absolute
+ # dim nms multiplier = 1
+ # dim nms divisor = 1
+ # dim log name = log
+ # dim log algorithm = absolute
+ # dim log multiplier = 1
+ # dim log divisor = 1
+ # dim ntp name = ntp
+ # dim ntp algorithm = absolute
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1
+ # dim named name = named
+ # dim named algorithm = absolute
+ # dim named multiplier = 1
+ # dim named divisor = 1
+ # dim ssh name = ssh
+ # dim ssh algorithm = absolute
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1
+ # dim nfs name = nfs
+ # dim nfs algorithm = absolute
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1
+ # dim nginx name = nginx
+ # dim nginx algorithm = absolute
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1
+ # dim postfix name = postfix
+ # dim postfix algorithm = absolute
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1
+ # dim mysql name = mysql
+ # dim mysql algorithm = absolute
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1
+ # dim rsync name = rsync
+ # dim rsync algorithm = absolute
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1
+ # dim compile name = compile
+ # dim compile algorithm = absolute
+ # dim compile multiplier = 1
+ # dim compile divisor = 1
+
+[apps.processes]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.processes
+ # chart type = stacked
+ # type = apps
+ # family = processes
+ # context = apps.processes
+ # units = processes
+ # priority = 20004
+ # gap when lost iterations above = 1
+ # name = apps.processes
+ # title = Apps Processes (apps.processes)
+ # dim other name = other
+ # dim other algorithm = absolute
+ # dim other multiplier = 1
+ # dim other divisor = 1
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = absolute
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1
+ # dim system name = system
+ # dim system algorithm = absolute
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim netdata name = netdata
+ # dim netdata algorithm = absolute
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1
+ # dim kernel name = kernel
+ # dim kernel algorithm = absolute
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1
+ # dim cron name = cron
+ # dim cron algorithm = absolute
+ # dim cron multiplier = 1
+ # dim cron divisor = 1
+ # dim inetd name = inetd
+ # dim inetd algorithm = absolute
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1
+ # dim nms name = nms
+ # dim nms algorithm = absolute
+ # dim nms multiplier = 1
+ # dim nms divisor = 1
+ # dim log name = log
+ # dim log algorithm = absolute
+ # dim log multiplier = 1
+ # dim log divisor = 1
+ # dim ntp name = ntp
+ # dim ntp algorithm = absolute
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1
+ # dim named name = named
+ # dim named algorithm = absolute
+ # dim named multiplier = 1
+ # dim named divisor = 1
+ # dim ssh name = ssh
+ # dim ssh algorithm = absolute
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1
+ # dim nfs name = nfs
+ # dim nfs algorithm = absolute
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1
+ # dim nginx name = nginx
+ # dim nginx algorithm = absolute
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1
+ # dim postfix name = postfix
+ # dim postfix algorithm = absolute
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1
+ # dim mysql name = mysql
+ # dim mysql algorithm = absolute
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1
+ # dim rsync name = rsync
+ # dim rsync algorithm = absolute
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1
+ # dim compile name = compile
+ # dim compile algorithm = absolute
+ # dim compile multiplier = 1
+ # dim compile divisor = 1
+
+[apps.cpu_user]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.cpu_user
+ # chart type = stacked
+ # type = apps
+ # family = cpu
+ # context = apps.cpu_user
+ # units = cpu time %
+ # priority = 20020
+ # gap when lost iterations above = 1
+ # name = apps.cpu_user
+ # title = Apps CPU User Time (200% = 2 cores) (apps.cpu_user)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 100
+ # dim other divisor = 200
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 100
+ # dim ksmd divisor = 200
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 100
+ # dim system divisor = 200
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 100
+ # dim netdata divisor = 200
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 100
+ # dim kernel divisor = 200
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 100
+ # dim cron divisor = 200
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 100
+ # dim inetd divisor = 200
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 100
+ # dim nms divisor = 200
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 100
+ # dim log divisor = 200
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 100
+ # dim ntp divisor = 200
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 100
+ # dim named divisor = 200
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 100
+ # dim ssh divisor = 200
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 100
+ # dim nfs divisor = 200
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 100
+ # dim nginx divisor = 200
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 100
+ # dim postfix divisor = 200
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 100
+ # dim mysql divisor = 200
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 100
+ # dim rsync divisor = 200
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 100
+ # dim compile divisor = 200
+
+[apps.cpu_system]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.cpu_system
+ # chart type = stacked
+ # type = apps
+ # family = cpu
+ # context = apps.cpu_system
+ # units = cpu time %
+ # priority = 20021
+ # gap when lost iterations above = 1
+ # name = apps.cpu_system
+ # title = Apps CPU System Time (200% = 2 cores) (apps.cpu_system)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 100
+ # dim other divisor = 200
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 100
+ # dim ksmd divisor = 200
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 100
+ # dim system divisor = 200
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 100
+ # dim netdata divisor = 200
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 100
+ # dim kernel divisor = 200
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 100
+ # dim cron divisor = 200
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 100
+ # dim inetd divisor = 200
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 100
+ # dim nms divisor = 200
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 100
+ # dim log divisor = 200
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 100
+ # dim ntp divisor = 200
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 100
+ # dim named divisor = 200
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 100
+ # dim ssh divisor = 200
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 100
+ # dim nfs divisor = 200
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 100
+ # dim nginx divisor = 200
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 100
+ # dim postfix divisor = 200
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 100
+ # dim mysql divisor = 200
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 100
+ # dim rsync divisor = 200
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 100
+ # dim compile divisor = 200
+
+[apps.major_faults]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.major_faults
+ # chart type = stacked
+ # type = apps
+ # family = swap
+ # context = apps.major_faults
+ # units = page faults/s
+ # priority = 20010
+ # gap when lost iterations above = 1
+ # name = apps.major_faults
+ # title = Apps Major Page Faults (swap read) (apps.major_faults)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 1
+ # dim other divisor = 1
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 1
+ # dim cron divisor = 1
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 1
+ # dim nms divisor = 1
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 1
+ # dim log divisor = 1
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 1
+ # dim named divisor = 1
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 1
+ # dim compile divisor = 1
+
+[apps.minor_faults]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/apps.minor_faults
+ # chart type = stacked
+ # type = apps
+ # family = mem
+ # context = apps.minor_faults
+ # units = page faults/s
+ # priority = 20011
+ # gap when lost iterations above = 1
+ # name = apps.minor_faults
+ # title = Apps Minor Page Faults (apps.minor_faults)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 1
+ # dim other divisor = 1
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 1
+ # dim cron divisor = 1
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 1
+ # dim nms divisor = 1
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 1
+ # dim log divisor = 1
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 1
+ # dim named divisor = 1
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 1
+ # dim compile divisor = 1
+
+[apps.lreads]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/apps.lreads
+ # chart type = stacked
+ # type = apps
+ # family = disk
+ # context = apps.lreads
+ # units = kilobytes/s
+ # priority = 20042
+ # gap when lost iterations above = 1
+ # name = apps.lreads
+ # title = Apps Disk Logical Reads (apps.lreads)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 1
+ # dim other divisor = 1024
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1024
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1024
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1024
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1024
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 1
+ # dim cron divisor = 1024
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1024
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 1
+ # dim nms divisor = 1024
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 1
+ # dim log divisor = 1024
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1024
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 1
+ # dim named divisor = 1024
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1024
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1024
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1024
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1024
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1024
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1024
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 1
+ # dim compile divisor = 1024
+
+[apps.lwrites]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/apps.lwrites
+ # chart type = stacked
+ # type = apps
+ # family = disk
+ # context = apps.lwrites
+ # units = kilobytes/s
+ # priority = 20042
+ # gap when lost iterations above = 1
+ # name = apps.lwrites
+ # title = Apps I/O Logical Writes (apps.lwrites)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 1
+ # dim other divisor = 1024
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1024
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1024
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1024
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1024
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 1
+ # dim cron divisor = 1024
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1024
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 1
+ # dim nms divisor = 1024
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 1
+ # dim log divisor = 1024
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1024
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 1
+ # dim named divisor = 1024
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1024
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1024
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1024
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1024
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1024
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1024
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 1
+ # dim compile divisor = 1024
+
+[apps.preads]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/apps.preads
+ # chart type = stacked
+ # type = apps
+ # family = disk
+ # context = apps.preads
+ # units = kilobytes/s
+ # priority = 20002
+ # gap when lost iterations above = 1
+ # name = apps.preads
+ # title = Apps Disk Reads (apps.preads)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 1
+ # dim other divisor = 1024
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1024
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1024
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1024
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1024
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 1
+ # dim cron divisor = 1024
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1024
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 1
+ # dim nms divisor = 1024
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 1
+ # dim log divisor = 1024
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1024
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 1
+ # dim named divisor = 1024
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1024
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1024
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1024
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1024
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1024
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1024
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 1
+ # dim compile divisor = 1024
+
+[apps.pwrites]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/apps.pwrites
+ # chart type = stacked
+ # type = apps
+ # family = disk
+ # context = apps.pwrites
+ # units = kilobytes/s
+ # priority = 20002
+ # gap when lost iterations above = 1
+ # name = apps.pwrites
+ # title = Apps Disk Writes (apps.pwrites)
+ # dim other name = other
+ # dim other algorithm = incremental
+ # dim other multiplier = 1
+ # dim other divisor = 1024
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = incremental
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1024
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1024
+ # dim netdata name = netdata
+ # dim netdata algorithm = incremental
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1024
+ # dim kernel name = kernel
+ # dim kernel algorithm = incremental
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1024
+ # dim cron name = cron
+ # dim cron algorithm = incremental
+ # dim cron multiplier = 1
+ # dim cron divisor = 1024
+ # dim inetd name = inetd
+ # dim inetd algorithm = incremental
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1024
+ # dim nms name = nms
+ # dim nms algorithm = incremental
+ # dim nms multiplier = 1
+ # dim nms divisor = 1024
+ # dim log name = log
+ # dim log algorithm = incremental
+ # dim log multiplier = 1
+ # dim log divisor = 1024
+ # dim ntp name = ntp
+ # dim ntp algorithm = incremental
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1024
+ # dim named name = named
+ # dim named algorithm = incremental
+ # dim named multiplier = 1
+ # dim named divisor = 1024
+ # dim ssh name = ssh
+ # dim ssh algorithm = incremental
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1024
+ # dim nfs name = nfs
+ # dim nfs algorithm = incremental
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1024
+ # dim nginx name = nginx
+ # dim nginx algorithm = incremental
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1024
+ # dim postfix name = postfix
+ # dim postfix algorithm = incremental
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1024
+ # dim mysql name = mysql
+ # dim mysql algorithm = incremental
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1024
+ # dim rsync name = rsync
+ # dim rsync algorithm = incremental
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1024
+ # dim compile name = compile
+ # dim compile algorithm = incremental
+ # dim compile multiplier = 1
+ # dim compile divisor = 1024
+
+[apps.files]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/apps.files
+ # chart type = stacked
+ # type = apps
+ # family = disk
+ # context = apps.files
+ # units = open files
+ # priority = 20050
+ # gap when lost iterations above = 1
+ # name = apps.files
+ # title = Apps Open Files (apps.files)
+ # dim other name = other
+ # dim other algorithm = absolute
+ # dim other multiplier = 1
+ # dim other divisor = 1
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = absolute
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1
+ # dim system name = system
+ # dim system algorithm = absolute
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim netdata name = netdata
+ # dim netdata algorithm = absolute
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1
+ # dim kernel name = kernel
+ # dim kernel algorithm = absolute
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1
+ # dim cron name = cron
+ # dim cron algorithm = absolute
+ # dim cron multiplier = 1
+ # dim cron divisor = 1
+ # dim inetd name = inetd
+ # dim inetd algorithm = absolute
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1
+ # dim nms name = nms
+ # dim nms algorithm = absolute
+ # dim nms multiplier = 1
+ # dim nms divisor = 1
+ # dim log name = log
+ # dim log algorithm = absolute
+ # dim log multiplier = 1
+ # dim log divisor = 1
+ # dim ntp name = ntp
+ # dim ntp algorithm = absolute
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1
+ # dim named name = named
+ # dim named algorithm = absolute
+ # dim named multiplier = 1
+ # dim named divisor = 1
+ # dim ssh name = ssh
+ # dim ssh algorithm = absolute
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1
+ # dim nfs name = nfs
+ # dim nfs algorithm = absolute
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1
+ # dim nginx name = nginx
+ # dim nginx algorithm = absolute
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1
+ # dim postfix name = postfix
+ # dim postfix algorithm = absolute
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1
+ # dim mysql name = mysql
+ # dim mysql algorithm = absolute
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1
+ # dim rsync name = rsync
+ # dim rsync algorithm = absolute
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1
+ # dim compile name = compile
+ # dim compile algorithm = absolute
+ # dim compile multiplier = 1
+ # dim compile divisor = 1
+
+[apps.sockets]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/apps.sockets
+ # chart type = stacked
+ # type = apps
+ # family = net
+ # context = apps.sockets
+ # units = open sockets
+ # priority = 20051
+ # gap when lost iterations above = 1
+ # name = apps.sockets
+ # title = Apps Open Sockets (apps.sockets)
+ # dim other name = other
+ # dim other algorithm = absolute
+ # dim other multiplier = 1
+ # dim other divisor = 1
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = absolute
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1
+ # dim system name = system
+ # dim system algorithm = absolute
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim netdata name = netdata
+ # dim netdata algorithm = absolute
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1
+ # dim kernel name = kernel
+ # dim kernel algorithm = absolute
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1
+ # dim cron name = cron
+ # dim cron algorithm = absolute
+ # dim cron multiplier = 1
+ # dim cron divisor = 1
+ # dim inetd name = inetd
+ # dim inetd algorithm = absolute
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1
+ # dim nms name = nms
+ # dim nms algorithm = absolute
+ # dim nms multiplier = 1
+ # dim nms divisor = 1
+ # dim log name = log
+ # dim log algorithm = absolute
+ # dim log multiplier = 1
+ # dim log divisor = 1
+ # dim ntp name = ntp
+ # dim ntp algorithm = absolute
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1
+ # dim named name = named
+ # dim named algorithm = absolute
+ # dim named multiplier = 1
+ # dim named divisor = 1
+ # dim ssh name = ssh
+ # dim ssh algorithm = absolute
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1
+ # dim nfs name = nfs
+ # dim nfs algorithm = absolute
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1
+ # dim nginx name = nginx
+ # dim nginx algorithm = absolute
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1
+ # dim postfix name = postfix
+ # dim postfix algorithm = absolute
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1
+ # dim mysql name = mysql
+ # dim mysql algorithm = absolute
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1
+ # dim rsync name = rsync
+ # dim rsync algorithm = absolute
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1
+ # dim compile name = compile
+ # dim compile algorithm = absolute
+ # dim compile multiplier = 1
+ # dim compile divisor = 1
+
+[apps.pipes]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/apps.pipes
+ # chart type = stacked
+ # type = apps
+ # family = processes
+ # context = apps.pipes
+ # units = open pipes
+ # priority = 20053
+ # gap when lost iterations above = 1
+ # name = apps.pipes
+ # title = Apps Pipes (apps.pipes)
+ # dim other name = other
+ # dim other algorithm = absolute
+ # dim other multiplier = 1
+ # dim other divisor = 1
+ # dim ksmd name = ksmd
+ # dim ksmd algorithm = absolute
+ # dim ksmd multiplier = 1
+ # dim ksmd divisor = 1
+ # dim system name = system
+ # dim system algorithm = absolute
+ # dim system multiplier = 1
+ # dim system divisor = 1
+ # dim netdata name = netdata
+ # dim netdata algorithm = absolute
+ # dim netdata multiplier = 1
+ # dim netdata divisor = 1
+ # dim kernel name = kernel
+ # dim kernel algorithm = absolute
+ # dim kernel multiplier = 1
+ # dim kernel divisor = 1
+ # dim cron name = cron
+ # dim cron algorithm = absolute
+ # dim cron multiplier = 1
+ # dim cron divisor = 1
+ # dim inetd name = inetd
+ # dim inetd algorithm = absolute
+ # dim inetd multiplier = 1
+ # dim inetd divisor = 1
+ # dim nms name = nms
+ # dim nms algorithm = absolute
+ # dim nms multiplier = 1
+ # dim nms divisor = 1
+ # dim log name = log
+ # dim log algorithm = absolute
+ # dim log multiplier = 1
+ # dim log divisor = 1
+ # dim ntp name = ntp
+ # dim ntp algorithm = absolute
+ # dim ntp multiplier = 1
+ # dim ntp divisor = 1
+ # dim named name = named
+ # dim named algorithm = absolute
+ # dim named multiplier = 1
+ # dim named divisor = 1
+ # dim ssh name = ssh
+ # dim ssh algorithm = absolute
+ # dim ssh multiplier = 1
+ # dim ssh divisor = 1
+ # dim nfs name = nfs
+ # dim nfs algorithm = absolute
+ # dim nfs multiplier = 1
+ # dim nfs divisor = 1
+ # dim nginx name = nginx
+ # dim nginx algorithm = absolute
+ # dim nginx multiplier = 1
+ # dim nginx divisor = 1
+ # dim postfix name = postfix
+ # dim postfix algorithm = absolute
+ # dim postfix multiplier = 1
+ # dim postfix divisor = 1
+ # dim mysql name = mysql
+ # dim mysql algorithm = absolute
+ # dim mysql multiplier = 1
+ # dim mysql divisor = 1
+ # dim rsync name = rsync
+ # dim rsync algorithm = absolute
+ # dim rsync multiplier = 1
+ # dim rsync divisor = 1
+ # dim compile name = compile
+ # dim compile algorithm = absolute
+ # dim compile multiplier = 1
+ # dim compile divisor = 1
+
+[netdata.apps_cpu]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/netdata.apps_cpu
+ # chart type = stacked
+ # type = netdata
+ # family = apps.plugin
+ # context = netdata.apps_cpu
+ # units = milliseconds/s
+ # priority = 140000
+ # gap when lost iterations above = 1
+ # name = netdata.apps_cpu
+ # title = Apps Plugin CPU (netdata.apps_cpu)
+ # dim user name = user
+ # dim user algorithm = incremental
+ # dim user multiplier = 1
+ # dim user divisor = 1000
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1000
+
+[netdata.apps_files]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netdata.apps_files
+ # chart type = line
+ # type = netdata
+ # family = apps.plugin
+ # context = netdata.apps_files
+ # units = files/s
+ # priority = 140001
+ # gap when lost iterations above = 1
+ # name = netdata.apps_files
+ # title = Apps Plugin Files (netdata.apps_files)
+ # dim files name = files
+ # dim files algorithm = incremental
+ # dim files multiplier = 1
+ # dim files divisor = 1
+ # dim pids name = pids
+ # dim pids algorithm = absolute
+ # dim pids multiplier = 1
+ # dim pids divisor = 1
+ # dim fds name = fds
+ # dim fds algorithm = absolute
+ # dim fds multiplier = 1
+ # dim fds divisor = 1
+ # dim targets name = targets
+ # dim targets algorithm = absolute
+ # dim targets multiplier = 1
+ # dim targets divisor = 1
+
+[netdata.plugin_tc_cpu]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netdata.plugin_tc_cpu
+ # chart type = stacked
+ # type = netdata
+ # family = tc.helper
+ # context = netdata.plugin_tc_cpu
+ # units = milliseconds/s
+ # priority = 135000
+ # gap when lost iterations above = 1
+ # name = netdata.plugin_tc_cpu
+ # title = NetData TC CPU usage (netdata.plugin_tc_cpu)
+ # dim user name = user
+ # dim user algorithm = incremental
+ # dim user multiplier = 1
+ # dim user divisor = 1000
+ # dim system name = system
+ # dim system algorithm = incremental
+ # dim system multiplier = 1
+ # dim system divisor = 1000
+
+[netdata.plugin_tc_time]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netdata.plugin_tc_time
+ # chart type = area
+ # type = netdata
+ # family = tc.helper
+ # context = netdata.plugin_tc_time
+ # units = milliseconds/run
+ # priority = 135001
+ # gap when lost iterations above = 1
+ # name = netdata.plugin_tc_time
+ # title = NetData TC script execution (netdata.plugin_tc_time)
+ # dim run_time name = run time
+ # dim run_time algorithm = absolute
+ # dim run_time multiplier = 1
+ # dim run_time divisor = 1
+
+[example.random]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/example.random
+ # chart type = stacked
+ # type = example
+ # family = random
+ # context = random
+ # units = % of random numbers
+ # priority = 150000
+ # gap when lost iterations above = 1
+ # name = example.random
+ # title = Random Numbers Stacked Chart (example.random)
+ # dim random1 name = random1
+ # dim random1 algorithm = percentage-of-absolute-row
+ # dim random1 multiplier = 1
+ # dim random1 divisor = 1
+ # dim random2 name = random2
+ # dim random2 algorithm = percentage-of-absolute-row
+ # dim random2 multiplier = 1
+ # dim random2 divisor = 1
+ # dim random3 name = random3
+ # dim random3 algorithm = percentage-of-absolute-row
+ # dim random3 multiplier = 1
+ # dim random3 divisor = 1
+
+[postfix.qemails]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/postfix.qemails
+ # chart type = line
+ # type = postfix
+ # family = queue
+ # context = postfix.queued.emails
+ # units = emails
+ # priority = 60001
+ # gap when lost iterations above = 1
+ # name = postfix.qemails
+ # title = Postfix Queue Emails (postfix.qemails)
+ # dim emails name = emails
+ # dim emails algorithm = absolute
+ # dim emails multiplier = 1
+ # dim emails divisor = 1
+
+[postfix.qsize]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/postfix.qsize
+ # chart type = area
+ # type = postfix
+ # family = queue
+ # context = postfix.queued.size
+ # units = emails size in KB
+ # priority = 60002
+ # gap when lost iterations above = 1
+ # name = postfix.qsize
+ # title = Postfix Queue Emails Size (postfix.qsize)
+ # dim size name = size
+ # dim size algorithm = absolute
+ # dim size multiplier = 1
+ # dim size divisor = 1
+
+[disk_await.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_await.sda
+ # chart type = line
+ # type = disk_await
+ # family = sda
+ # context = disk.await
+ # units = ms per operation
+ # priority = 2005
+ # gap when lost iterations above = 1
+ # name = disk_await.sda
+ # title = Average Completed I/O Operation Time (disk_await.sda)
+ # dim reads name = reads
+ # dim reads algorithm = absolute
+ # dim reads multiplier = 1
+ # dim reads divisor = 1
+ # dim writes name = writes
+ # dim writes algorithm = absolute
+ # dim writes multiplier = -1
+ # dim writes divisor = 1
+
+[disk_avgsz.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_avgsz.sda
+ # chart type = area
+ # type = disk_avgsz
+ # family = sda
+ # context = disk.avgsz
+ # units = kilobytes per operation
+ # priority = 2006
+ # gap when lost iterations above = 1
+ # name = disk_avgsz.sda
+ # title = Average Completed I/O Operation Bandwidth (disk_avgsz.sda)
+ # dim reads name = reads
+ # dim reads algorithm = absolute
+ # dim reads multiplier = 512
+ # dim reads divisor = 1024
+ # dim writes name = writes
+ # dim writes algorithm = absolute
+ # dim writes multiplier = -512
+ # dim writes divisor = 1024
+
+[disk_svctm.sda]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/disk_svctm.sda
+ # chart type = line
+ # type = disk_svctm
+ # family = sda
+ # context = disk.svctm
+ # units = ms per operation
+ # priority = 2007
+ # gap when lost iterations above = 1
+ # name = disk_svctm.sda
+ # title = Average Service Time (disk_svctm.sda)
+ # dim svctm name = svctm
+ # dim svctm algorithm = absolute
+ # dim svctm multiplier = 1
+ # dim svctm divisor = 1
+
+[tc.eth1-ifb]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/tc.eth1_ifb
+ # chart type = stacked
+ # type = tc
+ # family = eth1
+ # context = tc.qos
+ # units = kilobits/s
+ # priority = 7000
+ # gap when lost iterations above = 1
+ # name = tc.mng_in
+ # title = Class Usage (tc.mng_in)
+ # dim 1:18 name = client
+ # dim 1:18 algorithm = incremental
+ # dim 1:18 multiplier = 8
+ # dim 1:18 divisor = 1024
+ # dim 1:19 name = nms
+ # dim 1:19 algorithm = incremental
+ # dim 1:19 multiplier = 8
+ # dim 1:19 divisor = 1024
+ # dim 1:8000 name = default
+ # dim 1:8000 algorithm = incremental
+ # dim 1:8000 multiplier = 8
+ # dim 1:8000 divisor = 1024
+ # dim 1:16 name = rsync
+ # dim 1:16 algorithm = incremental
+ # dim 1:16 multiplier = 8
+ # dim 1:16 divisor = 1024
+ # dim 1:17 name = web_server
+ # dim 1:17 algorithm = incremental
+ # dim 1:17 multiplier = 8
+ # dim 1:17 divisor = 1024
+ # dim 1:14 name = ntp
+ # dim 1:14 algorithm = incremental
+ # dim 1:14 multiplier = 8
+ # dim 1:14 divisor = 1024
+ # dim 1:15 name = ssh
+ # dim 1:15 algorithm = incremental
+ # dim 1:15 multiplier = 8
+ # dim 1:15 divisor = 1024
+ # dim 1:12 name = icmp
+ # dim 1:12 algorithm = incremental
+ # dim 1:12 multiplier = 8
+ # dim 1:12 divisor = 1024
+ # dim 1:13 name = dns
+ # dim 1:13 algorithm = incremental
+ # dim 1:13 multiplier = 8
+ # dim 1:13 divisor = 1024
+ # dim 1:11 name = arp
+ # dim 1:11 algorithm = incremental
+ # dim 1:11 multiplier = 8
+ # dim 1:11 divisor = 1024
+
+[tc.eth0]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/tc.eth0
+ # chart type = stacked
+ # type = tc
+ # family = eth0
+ # context = tc.qos
+ # units = kilobits/s
+ # priority = 7000
+ # gap when lost iterations above = 1
+ # name = tc.world_out
+ # title = Class Usage (tc.world_out)
+ # dim 1:18 name = client
+ # dim 1:18 algorithm = incremental
+ # dim 1:18 multiplier = 8
+ # dim 1:18 divisor = 1024
+ # dim 1:19 name = nms
+ # dim 1:19 algorithm = incremental
+ # dim 1:19 multiplier = 8
+ # dim 1:19 divisor = 1024
+ # dim 1:8000 name = default
+ # dim 1:8000 algorithm = incremental
+ # dim 1:8000 multiplier = 8
+ # dim 1:8000 divisor = 1024
+ # dim 1:16 name = rsync
+ # dim 1:16 algorithm = incremental
+ # dim 1:16 multiplier = 8
+ # dim 1:16 divisor = 1024
+ # dim 1:17 name = web_server
+ # dim 1:17 algorithm = incremental
+ # dim 1:17 multiplier = 8
+ # dim 1:17 divisor = 1024
+ # dim 1:14 name = ntp
+ # dim 1:14 algorithm = incremental
+ # dim 1:14 multiplier = 8
+ # dim 1:14 divisor = 1024
+ # dim 1:15 name = ssh
+ # dim 1:15 algorithm = incremental
+ # dim 1:15 multiplier = 8
+ # dim 1:15 divisor = 1024
+ # dim 1:12 name = icmp
+ # dim 1:12 algorithm = incremental
+ # dim 1:12 multiplier = 8
+ # dim 1:12 divisor = 1024
+ # dim 1:13 name = dns
+ # dim 1:13 algorithm = incremental
+ # dim 1:13 multiplier = 8
+ # dim 1:13 divisor = 1024
+ # dim 1:11 name = arp
+ # dim 1:11 algorithm = incremental
+ # dim 1:11 multiplier = 8
+ # dim 1:11 divisor = 1024
+
+[tc.eth1]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/tc.eth1
+ # chart type = stacked
+ # type = tc
+ # family = eth1
+ # context = tc.qos
+ # units = kilobits/s
+ # priority = 7000
+ # gap when lost iterations above = 1
+ # name = tc.mng_out
+ # title = Class Usage (tc.mng_out)
+ # dim 1:18 name = client
+ # dim 1:18 algorithm = incremental
+ # dim 1:18 multiplier = 8
+ # dim 1:18 divisor = 1024
+ # dim 1:19 name = nms
+ # dim 1:19 algorithm = incremental
+ # dim 1:19 multiplier = 8
+ # dim 1:19 divisor = 1024
+ # dim 1:8000 name = default
+ # dim 1:8000 algorithm = incremental
+ # dim 1:8000 multiplier = 8
+ # dim 1:8000 divisor = 1024
+ # dim 1:16 name = rsync
+ # dim 1:16 algorithm = incremental
+ # dim 1:16 multiplier = 8
+ # dim 1:16 divisor = 1024
+ # dim 1:17 name = web_server
+ # dim 1:17 algorithm = incremental
+ # dim 1:17 multiplier = 8
+ # dim 1:17 divisor = 1024
+ # dim 1:14 name = ntp
+ # dim 1:14 algorithm = incremental
+ # dim 1:14 multiplier = 8
+ # dim 1:14 divisor = 1024
+ # dim 1:15 name = ssh
+ # dim 1:15 algorithm = incremental
+ # dim 1:15 multiplier = 8
+ # dim 1:15 divisor = 1024
+ # dim 1:12 name = icmp
+ # dim 1:12 algorithm = incremental
+ # dim 1:12 multiplier = 8
+ # dim 1:12 divisor = 1024
+ # dim 1:13 name = dns
+ # dim 1:13 algorithm = incremental
+ # dim 1:13 multiplier = 8
+ # dim 1:13 divisor = 1024
+ # dim 1:11 name = arp
+ # dim 1:11 algorithm = incremental
+ # dim 1:11 multiplier = 8
+ # dim 1:11 divisor = 1024
+
+[mem.ksm]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/mem.ksm
+ # chart type = area
+ # type = mem
+ # family = ksm
+ # context = mem.ksm
+ # units = MB
+ # priority = 5000
+ # gap when lost iterations above = 1
+ # name = mem.ksm
+ # title = Kernel Same Page Merging (mem.ksm)
+ # dim shared name = shared
+ # dim shared algorithm = absolute
+ # dim shared multiplier = 1
+ # dim shared divisor = 1048576
+ # dim unshared name = unshared
+ # dim unshared algorithm = absolute
+ # dim unshared multiplier = -1
+ # dim unshared divisor = 1048576
+ # dim sharing name = sharing
+ # dim sharing algorithm = absolute
+ # dim sharing multiplier = 1
+ # dim sharing divisor = 1048576
+ # dim volatile name = volatile
+ # dim volatile algorithm = absolute
+ # dim volatile multiplier = -1
+ # dim volatile divisor = 1048576
+ # dim to_scan name = to scan
+ # dim to_scan algorithm = absolute
+ # dim to_scan multiplier = -1
+ # dim to_scan divisor = 1048576
+
+[mem.ksm_savings]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/mem.ksm_savings
+ # chart type = area
+ # type = mem
+ # family = ksm
+ # context = mem.ksm_savings
+ # units = MB
+ # priority = 5001
+ # gap when lost iterations above = 1
+ # name = mem.ksm_savings
+ # title = Kernel Same Page Merging Savings (mem.ksm_savings)
+ # dim savings name = savings
+ # dim savings algorithm = absolute
+ # dim savings multiplier = -1
+ # dim savings divisor = 1048576
+ # dim offered name = offered
+ # dim offered algorithm = absolute
+ # dim offered multiplier = 1
+ # dim offered divisor = 1048576
+
+[mem.ksm_ratios]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/mem.ksm_ratios
+ # chart type = line
+ # type = mem
+ # family = ksm
+ # context = mem.ksm_ratios
+ # units = percentage
+ # priority = 5002
+ # gap when lost iterations above = 1
+ # name = mem.ksm_ratios
+ # title = Kernel Same Page Merging Effectiveness (mem.ksm_ratios)
+ # dim savings name = savings
+ # dim savings algorithm = absolute
+ # dim savings multiplier = 1
+ # dim savings divisor = 10000
+
+[system.load]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.load
+ # chart type = line
+ # type = system
+ # family = load
+ # context = system.load
+ # units = load
+ # priority = 100
+ # gap when lost iterations above = 1
+ # name = system.load
+ # title = System Load Average (system.load)
+ # dim load1 name = load1
+ # dim load1 algorithm = absolute
+ # dim load1 multiplier = 1
+ # dim load1 divisor = 1000
+ # dim load5 name = load5
+ # dim load5 algorithm = absolute
+ # dim load5 multiplier = 1
+ # dim load5 divisor = 1000
+ # dim load15 name = load15
+ # dim load15 algorithm = absolute
+ # dim load15 multiplier = 1
+ # dim load15 divisor = 1000
+
+[tc.eth0-ifb]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/tc.eth0_ifb
+ # chart type = stacked
+ # type = tc
+ # family = eth0
+ # context = tc.qos
+ # units = kilobits/s
+ # priority = 7000
+ # gap when lost iterations above = 1
+ # name = tc.world_in
+ # title = Class Usage (tc.world_in)
+ # dim 1:18 name = client
+ # dim 1:18 algorithm = incremental
+ # dim 1:18 multiplier = 8
+ # dim 1:18 divisor = 1024
+ # dim 1:19 name = nms
+ # dim 1:19 algorithm = incremental
+ # dim 1:19 multiplier = 8
+ # dim 1:19 divisor = 1024
+ # dim 1:8000 name = default
+ # dim 1:8000 algorithm = incremental
+ # dim 1:8000 multiplier = 8
+ # dim 1:8000 divisor = 1024
+ # dim 1:16 name = rsync
+ # dim 1:16 algorithm = incremental
+ # dim 1:16 multiplier = 8
+ # dim 1:16 divisor = 1024
+ # dim 1:17 name = web_server
+ # dim 1:17 algorithm = incremental
+ # dim 1:17 multiplier = 8
+ # dim 1:17 divisor = 1024
+ # dim 1:14 name = ntp
+ # dim 1:14 algorithm = incremental
+ # dim 1:14 multiplier = 8
+ # dim 1:14 divisor = 1024
+ # dim 1:15 name = ssh
+ # dim 1:15 algorithm = incremental
+ # dim 1:15 multiplier = 8
+ # dim 1:15 divisor = 1024
+ # dim 1:12 name = icmp
+ # dim 1:12 algorithm = incremental
+ # dim 1:12 multiplier = 8
+ # dim 1:12 divisor = 1024
+ # dim 1:13 name = dns
+ # dim 1:13 algorithm = incremental
+ # dim 1:13 multiplier = 8
+ # dim 1:13 divisor = 1024
+ # dim 1:11 name = arp
+ # dim 1:11 algorithm = incremental
+ # dim 1:11 multiplier = 8
+ # dim 1:11 divisor = 1024
+
+[system.active_processes]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.active_processes
+ # chart type = line
+ # type = system
+ # family = processes
+ # context = system.active_processes
+ # units = processes
+ # priority = 750
+ # gap when lost iterations above = 1
+ # name = system.active_processes
+ # title = System Active Processes (system.active_processes)
+ # dim active name = active
+ # dim active algorithm = absolute
+ # dim active multiplier = 1
+ # dim active divisor = 1
+
+[cpu.cpu0_interrupts]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/cpu.cpu0_interrupts
+ # chart type = stacked
+ # type = cpu
+ # family = interrupts
+ # context = cpu.interrupts
+ # units = interrupts/s
+ # priority = 2000
+ # gap when lost iterations above = 1
+ # name = cpu.cpu0_interrupts
+ # title = CPU0 Interrupts (cpu.cpu0_interrupts)
+ # dim 0 name = timer_0
+ # dim 0 algorithm = incremental
+ # dim 0 multiplier = 1
+ # dim 0 divisor = 1
+ # dim 1 name = i8042_1
+ # dim 1 algorithm = incremental
+ # dim 1 multiplier = 1
+ # dim 1 divisor = 1
+ # dim 6 name = floppy_6
+ # dim 6 algorithm = incremental
+ # dim 6 multiplier = 1
+ # dim 6 divisor = 1
+ # dim 8 name = rtc0_8
+ # dim 8 algorithm = incremental
+ # dim 8 multiplier = 1
+ # dim 8 divisor = 1
+ # dim 9 name = acpi_9
+ # dim 9 algorithm = incremental
+ # dim 9 multiplier = 1
+ # dim 9 divisor = 1
+ # dim 12 name = i8042_12
+ # dim 12 algorithm = incremental
+ # dim 12 multiplier = 1
+ # dim 12 divisor = 1
+ # dim 14 name = ata_piix_14
+ # dim 14 algorithm = incremental
+ # dim 14 multiplier = 1
+ # dim 14 divisor = 1
+ # dim 15 name = ata_piix_15
+ # dim 15 algorithm = incremental
+ # dim 15 multiplier = 1
+ # dim 15 divisor = 1
+ # dim NMI name = NMI
+ # dim NMI algorithm = incremental
+ # dim NMI multiplier = 1
+ # dim NMI divisor = 1
+ # dim LOC name = LOC
+ # dim LOC algorithm = incremental
+ # dim LOC multiplier = 1
+ # dim LOC divisor = 1
+ # dim SPU name = SPU
+ # dim SPU algorithm = incremental
+ # dim SPU multiplier = 1
+ # dim SPU divisor = 1
+ # dim PMI name = PMI
+ # dim PMI algorithm = incremental
+ # dim PMI multiplier = 1
+ # dim PMI divisor = 1
+ # dim IWI name = IWI
+ # dim IWI algorithm = incremental
+ # dim IWI multiplier = 1
+ # dim IWI divisor = 1
+ # dim RTR name = RTR
+ # dim RTR algorithm = incremental
+ # dim RTR multiplier = 1
+ # dim RTR divisor = 1
+ # dim RES name = RES
+ # dim RES algorithm = incremental
+ # dim RES multiplier = 1
+ # dim RES divisor = 1
+ # dim CAL name = CAL
+ # dim CAL algorithm = incremental
+ # dim CAL multiplier = 1
+ # dim CAL divisor = 1
+ # dim TLB name = TLB
+ # dim TLB algorithm = incremental
+ # dim TLB multiplier = 1
+ # dim TLB divisor = 1
+ # dim TRM name = TRM
+ # dim TRM algorithm = incremental
+ # dim TRM multiplier = 1
+ # dim TRM divisor = 1
+ # dim THR name = THR
+ # dim THR algorithm = incremental
+ # dim THR multiplier = 1
+ # dim THR divisor = 1
+ # dim MCE name = MCE
+ # dim MCE algorithm = incremental
+ # dim MCE multiplier = 1
+ # dim MCE divisor = 1
+ # dim MCP name = MCP
+ # dim MCP algorithm = incremental
+ # dim MCP multiplier = 1
+ # dim MCP divisor = 1
+ # dim HYP name = HYP
+ # dim HYP algorithm = incremental
+ # dim HYP multiplier = 1
+ # dim HYP divisor = 1
+ # dim ERR name = ERR
+ # dim ERR algorithm = incremental
+ # dim ERR multiplier = 1
+ # dim ERR divisor = 1
+ # dim MIS name = MIS
+ # dim MIS algorithm = incremental
+ # dim MIS multiplier = 1
+ # dim MIS divisor = 1
+
+[cpu.cpu1_interrupts]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/cpu.cpu1_interrupts
+ # chart type = stacked
+ # type = cpu
+ # family = interrupts
+ # context = cpu.interrupts
+ # units = interrupts/s
+ # priority = 2001
+ # gap when lost iterations above = 1
+ # name = cpu.cpu1_interrupts
+ # title = CPU1 Interrupts (cpu.cpu1_interrupts)
+ # dim 0 name = timer_0
+ # dim 0 algorithm = incremental
+ # dim 0 multiplier = 1
+ # dim 0 divisor = 1
+ # dim 1 name = i8042_1
+ # dim 1 algorithm = incremental
+ # dim 1 multiplier = 1
+ # dim 1 divisor = 1
+ # dim 6 name = floppy_6
+ # dim 6 algorithm = incremental
+ # dim 6 multiplier = 1
+ # dim 6 divisor = 1
+ # dim 8 name = rtc0_8
+ # dim 8 algorithm = incremental
+ # dim 8 multiplier = 1
+ # dim 8 divisor = 1
+ # dim 9 name = acpi_9
+ # dim 9 algorithm = incremental
+ # dim 9 multiplier = 1
+ # dim 9 divisor = 1
+ # dim 12 name = i8042_12
+ # dim 12 algorithm = incremental
+ # dim 12 multiplier = 1
+ # dim 12 divisor = 1
+ # dim 14 name = ata_piix_14
+ # dim 14 algorithm = incremental
+ # dim 14 multiplier = 1
+ # dim 14 divisor = 1
+ # dim 15 name = ata_piix_15
+ # dim 15 algorithm = incremental
+ # dim 15 multiplier = 1
+ # dim 15 divisor = 1
+ # dim NMI name = NMI
+ # dim NMI algorithm = incremental
+ # dim NMI multiplier = 1
+ # dim NMI divisor = 1
+ # dim LOC name = LOC
+ # dim LOC algorithm = incremental
+ # dim LOC multiplier = 1
+ # dim LOC divisor = 1
+ # dim SPU name = SPU
+ # dim SPU algorithm = incremental
+ # dim SPU multiplier = 1
+ # dim SPU divisor = 1
+ # dim PMI name = PMI
+ # dim PMI algorithm = incremental
+ # dim PMI multiplier = 1
+ # dim PMI divisor = 1
+ # dim IWI name = IWI
+ # dim IWI algorithm = incremental
+ # dim IWI multiplier = 1
+ # dim IWI divisor = 1
+ # dim RTR name = RTR
+ # dim RTR algorithm = incremental
+ # dim RTR multiplier = 1
+ # dim RTR divisor = 1
+ # dim RES name = RES
+ # dim RES algorithm = incremental
+ # dim RES multiplier = 1
+ # dim RES divisor = 1
+ # dim CAL name = CAL
+ # dim CAL algorithm = incremental
+ # dim CAL multiplier = 1
+ # dim CAL divisor = 1
+ # dim TLB name = TLB
+ # dim TLB algorithm = incremental
+ # dim TLB multiplier = 1
+ # dim TLB divisor = 1
+ # dim TRM name = TRM
+ # dim TRM algorithm = incremental
+ # dim TRM multiplier = 1
+ # dim TRM divisor = 1
+ # dim THR name = THR
+ # dim THR algorithm = incremental
+ # dim THR multiplier = 1
+ # dim THR divisor = 1
+ # dim MCE name = MCE
+ # dim MCE algorithm = incremental
+ # dim MCE multiplier = 1
+ # dim MCE divisor = 1
+ # dim MCP name = MCP
+ # dim MCP algorithm = incremental
+ # dim MCP multiplier = 1
+ # dim MCP divisor = 1
+ # dim HYP name = HYP
+ # dim HYP algorithm = incremental
+ # dim HYP multiplier = 1
+ # dim HYP divisor = 1
+ # dim ERR name = ERR
+ # dim ERR algorithm = incremental
+ # dim ERR multiplier = 1
+ # dim ERR divisor = 1
+ # dim MIS name = MIS
+ # dim MIS algorithm = incremental
+ # dim MIS multiplier = 1
+ # dim MIS divisor = 1
+
+[example.random2]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/example.random2
+ # chart type = area
+ # type = example
+ # family = random
+ # context = random
+ # units = random number
+ # priority = 150001
+ # gap when lost iterations above = 1
+ # name = example.random2
+ # title = A random number (example.random2)
+ # dim random name = random
+ # dim random algorithm = absolute
+ # dim random multiplier = 1
+ # dim random divisor = 1
+
+[mysql_local.net]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.net
+ # chart type = area
+ # type = mysql_local
+ # family = bandwidth
+ # context = mysql.net
+ # units = kilobits/s
+ # priority = 60001
+ # gap when lost iterations above = 1
+ # name = mysql_local.net
+ # title = mysql Bandwidth (mysql_local.net)
+ # dim Bytes_received name = in
+ # dim Bytes_received algorithm = incremental
+ # dim Bytes_received multiplier = 8
+ # dim Bytes_received divisor = 1024
+ # dim Bytes_sent name = out
+ # dim Bytes_sent algorithm = incremental
+ # dim Bytes_sent multiplier = -8
+ # dim Bytes_sent divisor = 1024
+
+[mysql_local.queries]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.queries
+ # chart type = line
+ # type = mysql_local
+ # family = queries
+ # context = mysql.queries
+ # units = queries/s
+ # priority = 60002
+ # gap when lost iterations above = 1
+ # name = mysql_local.queries
+ # title = mysql Queries (mysql_local.queries)
+ # dim Queries name = queries
+ # dim Queries algorithm = incremental
+ # dim Queries multiplier = 1
+ # dim Queries divisor = 1
+ # dim Questions name = questions
+ # dim Questions algorithm = incremental
+ # dim Questions multiplier = 1
+ # dim Questions divisor = 1
+ # dim Slow_queries name = slow_queries
+ # dim Slow_queries algorithm = incremental
+ # dim Slow_queries multiplier = -1
+ # dim Slow_queries divisor = 1
+
+[mysql_local.handlers]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.handlers
+ # chart type = line
+ # type = mysql_local
+ # family = handlers
+ # context = mysql.handlers
+ # units = handlers/s
+ # priority = 60003
+ # gap when lost iterations above = 1
+ # name = mysql_local.handlers
+ # title = mysql Handlers (mysql_local.handlers)
+ # dim Handler_commit name = commit
+ # dim Handler_commit algorithm = incremental
+ # dim Handler_commit multiplier = 1
+ # dim Handler_commit divisor = 1
+ # dim Handler_delete name = delete
+ # dim Handler_delete algorithm = incremental
+ # dim Handler_delete multiplier = 1
+ # dim Handler_delete divisor = 1
+ # dim Handler_prepare name = prepare
+ # dim Handler_prepare algorithm = incremental
+ # dim Handler_prepare multiplier = 1
+ # dim Handler_prepare divisor = 1
+ # dim Handler_read_first name = read_first
+ # dim Handler_read_first algorithm = incremental
+ # dim Handler_read_first multiplier = 1
+ # dim Handler_read_first divisor = 1
+ # dim Handler_read_key name = read_key
+ # dim Handler_read_key algorithm = incremental
+ # dim Handler_read_key multiplier = 1
+ # dim Handler_read_key divisor = 1
+ # dim Handler_read_next name = read_next
+ # dim Handler_read_next algorithm = incremental
+ # dim Handler_read_next multiplier = 1
+ # dim Handler_read_next divisor = 1
+ # dim Handler_read_prev name = read_prev
+ # dim Handler_read_prev algorithm = incremental
+ # dim Handler_read_prev multiplier = 1
+ # dim Handler_read_prev divisor = 1
+ # dim Handler_read_rnd name = read_rnd
+ # dim Handler_read_rnd algorithm = incremental
+ # dim Handler_read_rnd multiplier = 1
+ # dim Handler_read_rnd divisor = 1
+ # dim Handler_read_rnd_next name = read_rnd_next
+ # dim Handler_read_rnd_next algorithm = incremental
+ # dim Handler_read_rnd_next multiplier = 1
+ # dim Handler_read_rnd_next divisor = 1
+ # dim Handler_rollback name = rollback
+ # dim Handler_rollback algorithm = incremental
+ # dim Handler_rollback multiplier = 1
+ # dim Handler_rollback divisor = 1
+ # dim Handler_savepoint name = savepoint
+ # dim Handler_savepoint algorithm = incremental
+ # dim Handler_savepoint multiplier = 1
+ # dim Handler_savepoint divisor = 1
+ # dim Handler_savepoint_rollback name = savepoint_rollback
+ # dim Handler_savepoint_rollback algorithm = incremental
+ # dim Handler_savepoint_rollback multiplier = 1
+ # dim Handler_savepoint_rollback divisor = 1
+ # dim Handler_update name = update
+ # dim Handler_update algorithm = incremental
+ # dim Handler_update multiplier = 1
+ # dim Handler_update divisor = 1
+ # dim Handler_write name = write
+ # dim Handler_write algorithm = incremental
+ # dim Handler_write multiplier = 1
+ # dim Handler_write divisor = 1
+
+[system.softirqs]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/system.softirqs
+ # chart type = stacked
+ # type = system
+ # family = softirqs
+ # context = system.softirqs
+ # units = softirqs/s
+ # priority = 950
+ # gap when lost iterations above = 1
+ # name = system.softirqs
+ # title = System softirqs (system.softirqs)
+ # dim HI name = HI
+ # dim HI algorithm = incremental
+ # dim HI multiplier = 1
+ # dim HI divisor = 1
+ # dim TIMER name = TIMER
+ # dim TIMER algorithm = incremental
+ # dim TIMER multiplier = 1
+ # dim TIMER divisor = 1
+ # dim NET_TX name = NET_TX
+ # dim NET_TX algorithm = incremental
+ # dim NET_TX multiplier = 1
+ # dim NET_TX divisor = 1
+ # dim NET_RX name = NET_RX
+ # dim NET_RX algorithm = incremental
+ # dim NET_RX multiplier = 1
+ # dim NET_RX divisor = 1
+ # dim BLOCK name = BLOCK
+ # dim BLOCK algorithm = incremental
+ # dim BLOCK multiplier = 1
+ # dim BLOCK divisor = 1
+ # dim BLOCK_IOPOLL name = BLOCK_IOPOLL
+ # dim BLOCK_IOPOLL algorithm = incremental
+ # dim BLOCK_IOPOLL multiplier = 1
+ # dim BLOCK_IOPOLL divisor = 1
+ # dim TASKLET name = TASKLET
+ # dim TASKLET algorithm = incremental
+ # dim TASKLET multiplier = 1
+ # dim TASKLET divisor = 1
+ # dim SCHED name = SCHED
+ # dim SCHED algorithm = incremental
+ # dim SCHED multiplier = 1
+ # dim SCHED divisor = 1
+ # dim HRTIMER name = HRTIMER
+ # dim HRTIMER algorithm = incremental
+ # dim HRTIMER multiplier = 1
+ # dim HRTIMER divisor = 1
+ # dim RCU name = RCU
+ # dim RCU algorithm = incremental
+ # dim RCU multiplier = 1
+ # dim RCU divisor = 1
+
+[cpu.cpu0_softirqs]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/cpu.cpu0_softirqs
+ # chart type = stacked
+ # type = cpu
+ # family = softirqs
+ # context = cpu.softirqs
+ # units = softirqs/s
+ # priority = 3000
+ # gap when lost iterations above = 1
+ # name = cpu.cpu0_softirqs
+ # title = CPU0 softirqs (cpu.cpu0_softirqs)
+ # dim HI name = HI
+ # dim HI algorithm = incremental
+ # dim HI multiplier = 1
+ # dim HI divisor = 1
+ # dim TIMER name = TIMER
+ # dim TIMER algorithm = incremental
+ # dim TIMER multiplier = 1
+ # dim TIMER divisor = 1
+ # dim NET_TX name = NET_TX
+ # dim NET_TX algorithm = incremental
+ # dim NET_TX multiplier = 1
+ # dim NET_TX divisor = 1
+ # dim NET_RX name = NET_RX
+ # dim NET_RX algorithm = incremental
+ # dim NET_RX multiplier = 1
+ # dim NET_RX divisor = 1
+ # dim BLOCK name = BLOCK
+ # dim BLOCK algorithm = incremental
+ # dim BLOCK multiplier = 1
+ # dim BLOCK divisor = 1
+ # dim BLOCK_IOPOLL name = BLOCK_IOPOLL
+ # dim BLOCK_IOPOLL algorithm = incremental
+ # dim BLOCK_IOPOLL multiplier = 1
+ # dim BLOCK_IOPOLL divisor = 1
+ # dim TASKLET name = TASKLET
+ # dim TASKLET algorithm = incremental
+ # dim TASKLET multiplier = 1
+ # dim TASKLET divisor = 1
+ # dim SCHED name = SCHED
+ # dim SCHED algorithm = incremental
+ # dim SCHED multiplier = 1
+ # dim SCHED divisor = 1
+ # dim HRTIMER name = HRTIMER
+ # dim HRTIMER algorithm = incremental
+ # dim HRTIMER multiplier = 1
+ # dim HRTIMER divisor = 1
+ # dim RCU name = RCU
+ # dim RCU algorithm = incremental
+ # dim RCU multiplier = 1
+ # dim RCU divisor = 1
+
+[mysql_local.table_locks]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.table_locks
+ # chart type = line
+ # type = mysql_local
+ # family = locks
+ # context = mysql.table_locks
+ # units = locks/s
+ # priority = 60004
+ # gap when lost iterations above = 1
+ # name = mysql_local.table_locks
+ # title = mysql Tables Locks (mysql_local.table_locks)
+ # dim Table_locks_immediate name = immediate
+ # dim Table_locks_immediate algorithm = incremental
+ # dim Table_locks_immediate multiplier = 1
+ # dim Table_locks_immediate divisor = 1
+ # dim Table_locks_waited name = waited
+ # dim Table_locks_waited algorithm = incremental
+ # dim Table_locks_waited multiplier = -1
+ # dim Table_locks_waited divisor = 1
+
+[mysql_local.join_issues]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.join_issues
+ # chart type = line
+ # type = mysql_local
+ # family = issues
+ # context = mysql.join_issues
+ # units = joins/s
+ # priority = 60005
+ # gap when lost iterations above = 1
+ # name = mysql_local.join_issues
+ # title = mysql Select Join Issues (mysql_local.join_issues)
+ # dim Select_full_join name = full_join
+ # dim Select_full_join algorithm = incremental
+ # dim Select_full_join multiplier = 1
+ # dim Select_full_join divisor = 1
+ # dim Select_full_range_join name = full_range_join
+ # dim Select_full_range_join algorithm = incremental
+ # dim Select_full_range_join multiplier = 1
+ # dim Select_full_range_join divisor = 1
+ # dim Select_range name = range
+ # dim Select_range algorithm = incremental
+ # dim Select_range multiplier = 1
+ # dim Select_range divisor = 1
+ # dim Select_range_check name = range_check
+ # dim Select_range_check algorithm = incremental
+ # dim Select_range_check multiplier = 1
+ # dim Select_range_check divisor = 1
+ # dim Select_scan name = scan
+ # dim Select_scan algorithm = incremental
+ # dim Select_scan multiplier = 1
+ # dim Select_scan divisor = 1
+
+[cpu.cpu1_softirqs]
+ # history = 86400
+ # enabled = yes
+ # cache directory = /var/cache/netdata/cpu.cpu1_softirqs
+ # chart type = stacked
+ # type = cpu
+ # family = softirqs
+ # context = cpu.softirqs
+ # units = softirqs/s
+ # priority = 3001
+ # gap when lost iterations above = 1
+ # name = cpu.cpu1_softirqs
+ # title = CPU1 softirqs (cpu.cpu1_softirqs)
+ # dim HI name = HI
+ # dim HI algorithm = incremental
+ # dim HI multiplier = 1
+ # dim HI divisor = 1
+ # dim TIMER name = TIMER
+ # dim TIMER algorithm = incremental
+ # dim TIMER multiplier = 1
+ # dim TIMER divisor = 1
+ # dim NET_TX name = NET_TX
+ # dim NET_TX algorithm = incremental
+ # dim NET_TX multiplier = 1
+ # dim NET_TX divisor = 1
+ # dim NET_RX name = NET_RX
+ # dim NET_RX algorithm = incremental
+ # dim NET_RX multiplier = 1
+ # dim NET_RX divisor = 1
+ # dim BLOCK name = BLOCK
+ # dim BLOCK algorithm = incremental
+ # dim BLOCK multiplier = 1
+ # dim BLOCK divisor = 1
+ # dim BLOCK_IOPOLL name = BLOCK_IOPOLL
+ # dim BLOCK_IOPOLL algorithm = incremental
+ # dim BLOCK_IOPOLL multiplier = 1
+ # dim BLOCK_IOPOLL divisor = 1
+ # dim TASKLET name = TASKLET
+ # dim TASKLET algorithm = incremental
+ # dim TASKLET multiplier = 1
+ # dim TASKLET divisor = 1
+ # dim SCHED name = SCHED
+ # dim SCHED algorithm = incremental
+ # dim SCHED multiplier = 1
+ # dim SCHED divisor = 1
+ # dim HRTIMER name = HRTIMER
+ # dim HRTIMER algorithm = incremental
+ # dim HRTIMER multiplier = 1
+ # dim HRTIMER divisor = 1
+ # dim RCU name = RCU
+ # dim RCU algorithm = incremental
+ # dim RCU multiplier = 1
+ # dim RCU divisor = 1
+
+[mysql_local.sort_issues]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.sort_issues
+ # chart type = line
+ # type = mysql_local
+ # family = issues
+ # context = mysql.sort.issues
+ # units = issues/s
+ # priority = 60006
+ # gap when lost iterations above = 1
+ # name = mysql_local.sort_issues
+ # title = mysql Sort Issues (mysql_local.sort_issues)
+ # dim Sort_merge_passes name = merge_passes
+ # dim Sort_merge_passes algorithm = incremental
+ # dim Sort_merge_passes multiplier = 1
+ # dim Sort_merge_passes divisor = 1
+ # dim Sort_range name = range
+ # dim Sort_range algorithm = incremental
+ # dim Sort_range multiplier = 1
+ # dim Sort_range divisor = 1
+ # dim Sort_scan name = scan
+ # dim Sort_scan algorithm = incremental
+ # dim Sort_scan multiplier = 1
+ # dim Sort_scan divisor = 1
+
+[mysql_local.tmp]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.tmp
+ # chart type = line
+ # type = mysql_local
+ # family = temporaries
+ # context = mysql.tmp
+ # units = counter
+ # priority = 60007
+ # gap when lost iterations above = 1
+ # name = mysql_local.tmp
+ # title = mysql Tmp Operations (mysql_local.tmp)
+ # dim Created_tmp_disk_tables name = disk_tables
+ # dim Created_tmp_disk_tables algorithm = incremental
+ # dim Created_tmp_disk_tables multiplier = 1
+ # dim Created_tmp_disk_tables divisor = 1
+ # dim Created_tmp_files name = files
+ # dim Created_tmp_files algorithm = incremental
+ # dim Created_tmp_files multiplier = 1
+ # dim Created_tmp_files divisor = 1
+ # dim Created_tmp_tables name = tables
+ # dim Created_tmp_tables algorithm = incremental
+ # dim Created_tmp_tables multiplier = 1
+ # dim Created_tmp_tables divisor = 1
+
+[mysql_local.connections]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.connections
+ # chart type = line
+ # type = mysql_local
+ # family = connections
+ # context = mysql.connections
+ # units = connections/s
+ # priority = 60008
+ # gap when lost iterations above = 1
+ # name = mysql_local.connections
+ # title = mysql Connections (mysql_local.connections)
+ # dim Connections name = all
+ # dim Connections algorithm = incremental
+ # dim Connections multiplier = 1
+ # dim Connections divisor = 1
+ # dim Aborted_connects name = aborded
+ # dim Aborted_connects algorithm = incremental
+ # dim Aborted_connects multiplier = 1
+ # dim Aborted_connects divisor = 1
+
+[mysql_local.binlog_cache]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.binlog_cache
+ # chart type = line
+ # type = mysql_local
+ # family = binlog
+ # context = mysql.binlog_cache
+ # units = transactions/s
+ # priority = 60009
+ # gap when lost iterations above = 1
+ # name = mysql_local.binlog_cache
+ # title = mysql Binlog Cache (mysql_local.binlog_cache)
+ # dim Binlog_cache_disk_use name = disk
+ # dim Binlog_cache_disk_use algorithm = incremental
+ # dim Binlog_cache_disk_use multiplier = 1
+ # dim Binlog_cache_disk_use divisor = 1
+ # dim Binlog_cache_use name = all
+ # dim Binlog_cache_use algorithm = incremental
+ # dim Binlog_cache_use multiplier = 1
+ # dim Binlog_cache_use divisor = 1
+
+[mysql_local.threads]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.threads
+ # chart type = line
+ # type = mysql_local
+ # family = threads
+ # context = mysql.threads
+ # units = threads
+ # priority = 60010
+ # gap when lost iterations above = 1
+ # name = mysql_local.threads
+ # title = mysql Threads (mysql_local.threads)
+ # dim Threads_connected name = connected
+ # dim Threads_connected algorithm = absolute
+ # dim Threads_connected multiplier = 1
+ # dim Threads_connected divisor = 1
+ # dim Threads_created name = created
+ # dim Threads_created algorithm = incremental
+ # dim Threads_created multiplier = 1
+ # dim Threads_created divisor = 1
+ # dim Threads_cached name = cached
+ # dim Threads_cached algorithm = absolute
+ # dim Threads_cached multiplier = -1
+ # dim Threads_cached divisor = 1
+ # dim Threads_running name = running
+ # dim Threads_running algorithm = absolute
+ # dim Threads_running multiplier = 1
+ # dim Threads_running divisor = 1
+
+[mysql_local.thread_cache_misses]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.thread_cache_misses
+ # chart type = area
+ # type = mysql_local
+ # family = threads
+ # context = mysql.thread_cache_misses
+ # units = misses
+ # priority = 60011
+ # gap when lost iterations above = 1
+ # name = mysql_local.thread_cache_misses
+ # title = mysql Threads Cache Misses (mysql_local.thread_cache_misses)
+ # dim misses name = misses
+ # dim misses algorithm = absolute
+ # dim misses multiplier = 1
+ # dim misses divisor = 100
+
+[mysql_local.innodb_io]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_io
+ # chart type = area
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_io
+ # units = kilobytes/s
+ # priority = 60012
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_io
+ # title = mysql InnoDB I/O Bandwidth (mysql_local.innodb_io)
+ # dim Innodb_data_read name = read
+ # dim Innodb_data_read algorithm = incremental
+ # dim Innodb_data_read multiplier = 1
+ # dim Innodb_data_read divisor = 1024
+ # dim Innodb_data_written name = write
+ # dim Innodb_data_written algorithm = incremental
+ # dim Innodb_data_written multiplier = -1
+ # dim Innodb_data_written divisor = 1024
+
+[mysql_local.innodb_io_ops]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_io_ops
+ # chart type = line
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_io_ops
+ # units = operations/s
+ # priority = 60013
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_io_ops
+ # title = mysql InnoDB I/O Operations (mysql_local.innodb_io_ops)
+ # dim Innodb_data_reads name = reads
+ # dim Innodb_data_reads algorithm = incremental
+ # dim Innodb_data_reads multiplier = 1
+ # dim Innodb_data_reads divisor = 1
+ # dim Innodb_data_writes name = writes
+ # dim Innodb_data_writes algorithm = incremental
+ # dim Innodb_data_writes multiplier = -1
+ # dim Innodb_data_writes divisor = 1
+ # dim Innodb_data_fsyncs name = fsyncs
+ # dim Innodb_data_fsyncs algorithm = incremental
+ # dim Innodb_data_fsyncs multiplier = 1
+ # dim Innodb_data_fsyncs divisor = 1
+
+[mysql_local.innodb_io_pending_ops]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_io_pending_ops
+ # chart type = line
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_io_pending_ops
+ # units = operations
+ # priority = 60014
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_io_pending_ops
+ # title = mysql InnoDB Pending I/O Operations (mysql_local.innodb_io_pending_ops)
+ # dim Innodb_data_pending_reads name = reads
+ # dim Innodb_data_pending_reads algorithm = absolute
+ # dim Innodb_data_pending_reads multiplier = 1
+ # dim Innodb_data_pending_reads divisor = 1
+ # dim Innodb_data_pending_writes name = writes
+ # dim Innodb_data_pending_writes algorithm = absolute
+ # dim Innodb_data_pending_writes multiplier = -1
+ # dim Innodb_data_pending_writes divisor = 1
+ # dim Innodb_data_pending_fsyncs name = fsyncs
+ # dim Innodb_data_pending_fsyncs algorithm = absolute
+ # dim Innodb_data_pending_fsyncs multiplier = 1
+ # dim Innodb_data_pending_fsyncs divisor = 1
+
+[mysql_local.innodb_log]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_log
+ # chart type = line
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_log
+ # units = operations/s
+ # priority = 60015
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_log
+ # title = mysql InnoDB Log Operations (mysql_local.innodb_log)
+ # dim Innodb_log_waits name = waits
+ # dim Innodb_log_waits algorithm = incremental
+ # dim Innodb_log_waits multiplier = 1
+ # dim Innodb_log_waits divisor = 1
+ # dim Innodb_log_write_requests name = write_requests
+ # dim Innodb_log_write_requests algorithm = incremental
+ # dim Innodb_log_write_requests multiplier = -1
+ # dim Innodb_log_write_requests divisor = 1
+ # dim Innodb_log_writes name = writes
+ # dim Innodb_log_writes algorithm = incremental
+ # dim Innodb_log_writes multiplier = -1
+ # dim Innodb_log_writes divisor = 1
+
+[mysql_local.innodb_os_log]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_os_log
+ # chart type = line
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_os_log
+ # units = operations
+ # priority = 60016
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_os_log
+ # title = mysql InnoDB OS Log Operations (mysql_local.innodb_os_log)
+ # dim Innodb_os_log_fsyncs name = fsyncs
+ # dim Innodb_os_log_fsyncs algorithm = incremental
+ # dim Innodb_os_log_fsyncs multiplier = 1
+ # dim Innodb_os_log_fsyncs divisor = 1
+ # dim Innodb_os_log_pending_fsyncs name = pending_fsyncs
+ # dim Innodb_os_log_pending_fsyncs algorithm = absolute
+ # dim Innodb_os_log_pending_fsyncs multiplier = 1
+ # dim Innodb_os_log_pending_fsyncs divisor = 1
+ # dim Innodb_os_log_pending_writes name = pending_writes
+ # dim Innodb_os_log_pending_writes algorithm = absolute
+ # dim Innodb_os_log_pending_writes multiplier = -1
+ # dim Innodb_os_log_pending_writes divisor = 1
+
+[mysql_local.innodb_os_log_io]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_os_log_io
+ # chart type = area
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_os_log_io
+ # units = kilobytes/s
+ # priority = 60017
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_os_log_io
+ # title = mysql InnoDB OS Log Bandwidth (mysql_local.innodb_os_log_io)
+ # dim Innodb_os_log_written name = write
+ # dim Innodb_os_log_written algorithm = incremental
+ # dim Innodb_os_log_written multiplier = -1
+ # dim Innodb_os_log_written divisor = 1024
+
+[mysql_local.innodb_cur_row_lock]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_cur_row_lock
+ # chart type = area
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_cur_row_lock
+ # units = operations
+ # priority = 60018
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_cur_row_lock
+ # title = mysql InnoDB Current Row Locks (mysql_local.innodb_cur_row_lock)
+ # dim Innodb_row_lock_current_waits name = current_waits
+ # dim Innodb_row_lock_current_waits algorithm = absolute
+ # dim Innodb_row_lock_current_waits multiplier = 1
+ # dim Innodb_row_lock_current_waits divisor = 1
+
+[mysql_local.innodb_rows]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.innodb_rows
+ # chart type = area
+ # type = mysql_local
+ # family = innodb
+ # context = mysql.innodb_rows
+ # units = operations/s
+ # priority = 60019
+ # gap when lost iterations above = 1
+ # name = mysql_local.innodb_rows
+ # title = mysql InnoDB Row Operations (mysql_local.innodb_rows)
+ # dim Innodb_rows_read name = read
+ # dim Innodb_rows_read algorithm = incremental
+ # dim Innodb_rows_read multiplier = 1
+ # dim Innodb_rows_read divisor = 1
+ # dim Innodb_rows_deleted name = deleted
+ # dim Innodb_rows_deleted algorithm = incremental
+ # dim Innodb_rows_deleted multiplier = -1
+ # dim Innodb_rows_deleted divisor = 1
+ # dim Innodb_rows_inserted name = inserted
+ # dim Innodb_rows_inserted algorithm = incremental
+ # dim Innodb_rows_inserted multiplier = 1
+ # dim Innodb_rows_inserted divisor = 1
+ # dim Innodb_rows_updated name = updated
+ # dim Innodb_rows_updated algorithm = incremental
+ # dim Innodb_rows_updated multiplier = -1
+ # dim Innodb_rows_updated divisor = 1
+
+[mysql_local.binlog_stmt_cache]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mysql_local.binlog_stmt_cache
+ # chart type = line
+ # type = mysql_local
+ # family = binlog
+ # context = mysql.binlog_stmt_cache
+ # units = statements/s
+ # priority = 60020
+ # gap when lost iterations above = 1
+ # name = mysql_local.binlog_stmt_cache
+ # title = mysql Binlog Statement Cache (mysql_local.binlog_stmt_cache)
+ # dim Binlog_stmt_cache_disk_use name = disk
+ # dim Binlog_stmt_cache_disk_use algorithm = incremental
+ # dim Binlog_stmt_cache_disk_use multiplier = 1
+ # dim Binlog_stmt_cache_disk_use divisor = 1
+ # dim Binlog_stmt_cache_use name = all
+ # dim Binlog_stmt_cache_use algorithm = incremental
+ # dim Binlog_stmt_cache_use multiplier = 1
+ # dim Binlog_stmt_cache_use divisor = 1
+
+[system.ipv6]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/system.ipv6
+ # chart type = area
+ # type = system
+ # family = network
+ # context = system.ipv6
+ # units = kilobits/s
+ # priority = 500
+ # gap when lost iterations above = 1
+ # name = system.ipv6
+ # title = IPv6 Bandwidth (system.ipv6)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 8
+ # dim received divisor = 1024
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -8
+ # dim sent divisor = 1024
+
+[ipv6.packets]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/ipv6.packets
+ # chart type = line
+ # type = ipv6
+ # family = packets
+ # context = ipv6.packets
+ # units = packets/s
+ # priority = 3000
+ # gap when lost iterations above = 1
+ # name = ipv6.packets
+ # title = IPv6 Packets (ipv6.packets)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+ # dim forwarded name = forwarded
+ # dim forwarded algorithm = incremental
+ # dim forwarded multiplier = 1
+ # dim forwarded divisor = 1
+ # dim delivers name = delivers
+ # dim delivers algorithm = incremental
+ # dim delivers multiplier = -1
+ # dim delivers divisor = 1
+
+[ipv6.udppackets]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.udppackets
+ # chart type = line
+ # type = ipv6
+ # family = udp
+ # context = ipv6.udppackets
+ # units = packets/s
+ # priority = 3601
+ # gap when lost iterations above = 1
+ # name = ipv6.udppackets
+ # title = IPv6 UDP Packets (ipv6.udppackets)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+
+[ipv6.mcast]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.mcast
+ # chart type = area
+ # type = ipv6
+ # family = multicast
+ # context = ipv6.mcast
+ # units = kilobits/s
+ # priority = 9000
+ # gap when lost iterations above = 1
+ # name = ipv6.mcast
+ # title = IPv6 Multicast Bandwidth (ipv6.mcast)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 8
+ # dim received divisor = 1024
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -8
+ # dim sent divisor = 1024
+
+[ipv6.mcastpkts]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.mcastpkts
+ # chart type = line
+ # type = ipv6
+ # family = multicast
+ # context = ipv6.mcastpkts
+ # units = packets/s
+ # priority = 9500
+ # gap when lost iterations above = 1
+ # name = ipv6.mcastpkts
+ # title = IPv6 Multicast Packets (ipv6.mcastpkts)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+
+[nginx.connections]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/nginx.connections
+ # chart type = line
+ # type = nginx
+ # family = nginx
+ # context = nginx.connections
+ # units = connections
+ # priority = 60001
+ # gap when lost iterations above = 1
+ # name = nginx.connections
+ # title = nginx Active Connections (nginx.connections)
+ # dim active name = active
+ # dim active algorithm = absolute
+ # dim active multiplier = 1
+ # dim active divisor = 1
+
+[ipv6.icmp]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.icmp
+ # chart type = line
+ # type = ipv6
+ # family = icmp
+ # context = ipv6.icmp
+ # units = messages/s
+ # priority = 10000
+ # gap when lost iterations above = 1
+ # name = ipv6.icmp
+ # title = IPv6 ICMP Messages (ipv6.icmp)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+
+[ipv6.icmprouter]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.icmprouter
+ # chart type = line
+ # type = ipv6
+ # family = icmp
+ # context = ipv6.icmprouter
+ # units = messages/s
+ # priority = 10400
+ # gap when lost iterations above = 1
+ # name = ipv6.icmprouter
+ # title = IPv6 Router Messages (ipv6.icmprouter)
+ # dim InSolicits name = InSolicits
+ # dim InSolicits algorithm = incremental
+ # dim InSolicits multiplier = 1
+ # dim InSolicits divisor = 1
+ # dim OutSolicits name = OutSolicits
+ # dim OutSolicits algorithm = incremental
+ # dim OutSolicits multiplier = -1
+ # dim OutSolicits divisor = 1
+ # dim InAdvertisements name = InAdvertisements
+ # dim InAdvertisements algorithm = incremental
+ # dim InAdvertisements multiplier = 1
+ # dim InAdvertisements divisor = 1
+ # dim OutAdvertisements name = OutAdvertisements
+ # dim OutAdvertisements algorithm = incremental
+ # dim OutAdvertisements multiplier = -1
+ # dim OutAdvertisements divisor = 1
+
+[ipv6.icmpneighbor]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.icmpneighbor
+ # chart type = line
+ # type = ipv6
+ # family = icmp
+ # context = ipv6.icmpneighbor
+ # units = messages/s
+ # priority = 10500
+ # gap when lost iterations above = 1
+ # name = ipv6.icmpneighbor
+ # title = IPv6 Neighbor Messages (ipv6.icmpneighbor)
+ # dim InSolicits name = InSolicits
+ # dim InSolicits algorithm = incremental
+ # dim InSolicits multiplier = 1
+ # dim InSolicits divisor = 1
+ # dim OutSolicits name = OutSolicits
+ # dim OutSolicits algorithm = incremental
+ # dim OutSolicits multiplier = -1
+ # dim OutSolicits divisor = 1
+ # dim InAdvertisements name = InAdvertisements
+ # dim InAdvertisements algorithm = incremental
+ # dim InAdvertisements multiplier = 1
+ # dim InAdvertisements divisor = 1
+ # dim OutAdvertisements name = OutAdvertisements
+ # dim OutAdvertisements algorithm = incremental
+ # dim OutAdvertisements multiplier = -1
+ # dim OutAdvertisements divisor = 1
+
+[ipv6.icmpmldv2]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.icmpmldv2
+ # chart type = line
+ # type = ipv6
+ # family = icmp
+ # context = ipv6.icmpmldv2
+ # units = reports/s
+ # priority = 10600
+ # gap when lost iterations above = 1
+ # name = ipv6.icmpmldv2
+ # title = IPv6 ICMP MLDv2 Reports (ipv6.icmpmldv2)
+ # dim received name = received
+ # dim received algorithm = incremental
+ # dim received multiplier = 1
+ # dim received divisor = 1
+ # dim sent name = sent
+ # dim sent algorithm = incremental
+ # dim sent multiplier = -1
+ # dim sent divisor = 1
+
+[ipv6.icmptypes]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.icmptypes
+ # chart type = line
+ # type = ipv6
+ # family = icmp
+ # context = ipv6.icmptypes
+ # units = messages/s
+ # priority = 10700
+ # gap when lost iterations above = 1
+ # name = ipv6.icmptypes
+ # title = IPv6 ICMP Types (ipv6.icmptypes)
+ # dim InType1 name = InType1
+ # dim InType1 algorithm = incremental
+ # dim InType1 multiplier = 1
+ # dim InType1 divisor = 1
+ # dim InType128 name = InType128
+ # dim InType128 algorithm = incremental
+ # dim InType128 multiplier = 1
+ # dim InType128 divisor = 1
+ # dim InType129 name = InType129
+ # dim InType129 algorithm = incremental
+ # dim InType129 multiplier = 1
+ # dim InType129 divisor = 1
+ # dim InType136 name = InType136
+ # dim InType136 algorithm = incremental
+ # dim InType136 multiplier = 1
+ # dim InType136 divisor = 1
+ # dim OutType1 name = OutType1
+ # dim OutType1 algorithm = incremental
+ # dim OutType1 multiplier = -1
+ # dim OutType1 divisor = 1
+ # dim OutType128 name = OutType128
+ # dim OutType128 algorithm = incremental
+ # dim OutType128 multiplier = -1
+ # dim OutType128 divisor = 1
+ # dim OutType129 name = OutType129
+ # dim OutType129 algorithm = incremental
+ # dim OutType129 multiplier = -1
+ # dim OutType129 divisor = 1
+ # dim OutType133 name = OutType133
+ # dim OutType133 algorithm = incremental
+ # dim OutType133 multiplier = -1
+ # dim OutType133 divisor = 1
+ # dim OutType135 name = OutType135
+ # dim OutType135 algorithm = incremental
+ # dim OutType135 multiplier = -1
+ # dim OutType135 divisor = 1
+ # dim OutType143 name = OutType143
+ # dim OutType143 algorithm = incremental
+ # dim OutType143 multiplier = -1
+ # dim OutType143 divisor = 1
+
+[ipv6.ect]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/ipv6.ect
+ # chart type = line
+ # type = ipv6
+ # family = packets
+ # context = ipv6.ect
+ # units = packets/s
+ # priority = 10800
+ # gap when lost iterations above = 1
+ # name = ipv6.ect
+ # title = IPv6 ECT Packets (ipv6.ect)
+ # dim InNoECTPkts name = InNoECTPkts
+ # dim InNoECTPkts algorithm = incremental
+ # dim InNoECTPkts multiplier = 1
+ # dim InNoECTPkts divisor = 1
+ # dim InECT1Pkts name = InECT1Pkts
+ # dim InECT1Pkts algorithm = incremental
+ # dim InECT1Pkts multiplier = 1
+ # dim InECT1Pkts divisor = 1
+ # dim InECT0Pkts name = InECT0Pkts
+ # dim InECT0Pkts algorithm = incremental
+ # dim InECT0Pkts multiplier = 1
+ # dim InECT0Pkts divisor = 1
+ # dim InCEPkts name = InCEPkts
+ # dim InCEPkts algorithm = incremental
+ # dim InCEPkts multiplier = 1
+ # dim InCEPkts divisor = 1
+
+[nginx.requests]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/nginx.requests
+ # chart type = line
+ # type = nginx
+ # family = nginx
+ # context = nginx.requests
+ # units = requests/s
+ # priority = 60002
+ # gap when lost iterations above = 1
+ # name = nginx.requests
+ # title = nginx Requests (nginx.requests)
+ # dim requests name = requests
+ # dim requests algorithm = incremental
+ # dim requests multiplier = 1
+ # dim requests divisor = 1
+
+[nginx.connections_status]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/nginx.connections_status
+ # chart type = line
+ # type = nginx
+ # family = nginx
+ # context = nginx.connections.status
+ # units = connections
+ # priority = 60003
+ # gap when lost iterations above = 1
+ # name = nginx.connections_status
+ # title = nginx Active Connections by Status (nginx.connections_status)
+ # dim reading name = reading
+ # dim reading algorithm = absolute
+ # dim reading multiplier = 1
+ # dim reading divisor = 1
+ # dim writing name = writing
+ # dim writing algorithm = absolute
+ # dim writing multiplier = 1
+ # dim writing divisor = 1
+ # dim waiting name = idle
+ # dim waiting algorithm = absolute
+ # dim waiting multiplier = 1
+ # dim waiting divisor = 1
+
+[netfilter.sockets]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netfilter.sockets
+ # chart type = line
+ # type = netfilter
+ # family = netfilter
+ # context = netfilter.sockets
+ # units = active connections
+ # priority = 1000
+ # gap when lost iterations above = 1
+ # name = netfilter.sockets
+ # title = Netfilter Connections (netfilter.sockets)
+ # dim connections name = connections
+ # dim connections algorithm = absolute
+ # dim connections multiplier = 1
+ # dim connections divisor = 1
+
+[nginx.connect_rate]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/nginx.connect_rate
+ # chart type = line
+ # type = nginx
+ # family = nginx
+ # context = nginx.connections.rate
+ # units = connections/s
+ # priority = 60004
+ # gap when lost iterations above = 1
+ # name = nginx.connect_rate
+ # title = nginx Connections Rate (nginx.connect_rate)
+ # dim accepts name = accepted
+ # dim accepts algorithm = incremental
+ # dim accepts multiplier = 1
+ # dim accepts divisor = 1
+ # dim handled name = handled
+ # dim handled algorithm = incremental
+ # dim handled multiplier = 1
+ # dim handled divisor = 1
+
+[netfilter.new]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netfilter.new
+ # chart type = line
+ # type = netfilter
+ # family = netfilter
+ # context = netfilter.new
+ # units = connections/s
+ # priority = 1001
+ # gap when lost iterations above = 1
+ # name = netfilter.new
+ # title = Netfilter New Connections (netfilter.new)
+ # dim new name = new
+ # dim new algorithm = incremental
+ # dim new multiplier = 1
+ # dim new divisor = 1
+ # dim ignore name = ignore
+ # dim ignore algorithm = incremental
+ # dim ignore multiplier = -1
+ # dim ignore divisor = 1
+ # dim invalid name = invalid
+ # dim invalid algorithm = incremental
+ # dim invalid multiplier = -1
+ # dim invalid divisor = 1
+
+[netfilter.changes]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netfilter.changes
+ # chart type = line
+ # type = netfilter
+ # family = netfilter
+ # context = netfilter.changes
+ # units = changes/s
+ # priority = 1002
+ # gap when lost iterations above = 1
+ # name = netfilter.changes
+ # title = Netfilter Connection Changes (netfilter.changes)
+ # dim inserted name = inserted
+ # dim inserted algorithm = incremental
+ # dim inserted multiplier = 1
+ # dim inserted divisor = 1
+ # dim deleted name = deleted
+ # dim deleted algorithm = incremental
+ # dim deleted multiplier = -1
+ # dim deleted divisor = 1
+ # dim delete_list name = delete_list
+ # dim delete_list algorithm = incremental
+ # dim delete_list multiplier = -1
+ # dim delete_list divisor = 1
+
+[netdata.plugin_chartsd_example]
+ # history = 86400
+ # enabled = yes
+ enabled = yes
+ # cache directory = /var/cache/netdata/netdata.plugin_chartsd_example
+ # chart type = area
+ # type = netdata
+ # family = charts.d
+ # context = netdata.plugin_charts
+ # units = milliseconds / run
+ # priority = 145000
+ # gap when lost iterations above = 1
+ # name = netdata.plugin_chartsd_example
+ # title = Execution time for example plugin (netdata.plugin_chartsd_example)
+ # dim run_time name = run time
+ # dim run_time algorithm = absolute
+ # dim run_time multiplier = 1
+ # dim run_time divisor = 1
+
+[netdata.plugin_chartsd_mysql]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netdata.plugin_chartsd_mysql
+ # chart type = area
+ # type = netdata
+ # family = charts.d
+ # context = netdata.plugin_charts
+ # units = milliseconds / run
+ # priority = 145000
+ # gap when lost iterations above = 1
+ # name = netdata.plugin_chartsd_mysql
+ # title = Execution time for mysql plugin (netdata.plugin_chartsd_mysql)
+ # dim run_time name = run time
+ # dim run_time algorithm = absolute
+ # dim run_time multiplier = 1
+ # dim run_time divisor = 1
+
+[netdata.plugin_chartsd_nginx]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netdata.plugin_chartsd_nginx
+ # chart type = area
+ # type = netdata
+ # family = charts.d
+ # context = netdata.plugin_charts
+ # units = milliseconds / run
+ # priority = 145000
+ # gap when lost iterations above = 1
+ # name = netdata.plugin_chartsd_nginx
+ # title = Execution time for nginx plugin (netdata.plugin_chartsd_nginx)
+ # dim run_time name = run time
+ # dim run_time algorithm = absolute
+ # dim run_time multiplier = 1
+ # dim run_time divisor = 1
+
+[netfilter.expect]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netfilter.expect
+ # chart type = line
+ # type = netfilter
+ # family = netfilter
+ # context = netfilter.expect
+ # units = expectations/s
+ # priority = 1003
+ # gap when lost iterations above = 1
+ # name = netfilter.expect
+ # title = Netfilter Connection Expectations (netfilter.expect)
+ # dim created name = created
+ # dim created algorithm = incremental
+ # dim created multiplier = 1
+ # dim created divisor = 1
+ # dim deleted name = deleted
+ # dim deleted algorithm = incremental
+ # dim deleted multiplier = -1
+ # dim deleted divisor = 1
+ # dim new name = new
+ # dim new algorithm = incremental
+ # dim new multiplier = 1
+ # dim new divisor = 1
+
+[netdata.plugin_chartsd_postfix]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netdata.plugin_chartsd_postfix
+ # chart type = area
+ # type = netdata
+ # family = charts.d
+ # context = netdata.plugin_charts
+ # units = milliseconds / run
+ # priority = 145000
+ # gap when lost iterations above = 1
+ # name = netdata.plugin_chartsd_postfix
+ # title = Execution time for postfix plugin (netdata.plugin_chartsd_postfix)
+ # dim run_time name = run time
+ # dim run_time algorithm = absolute
+ # dim run_time multiplier = 1
+ # dim run_time divisor = 1
+
+[netfilter.search]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netfilter.search
+ # chart type = line
+ # type = netfilter
+ # family = netfilter
+ # context = netfilter.search
+ # units = searches/s
+ # priority = 1010
+ # gap when lost iterations above = 1
+ # name = netfilter.search
+ # title = Netfilter Connection Searches (netfilter.search)
+ # dim searched name = searched
+ # dim searched algorithm = incremental
+ # dim searched multiplier = 1
+ # dim searched divisor = 1
+ # dim restarted name = restarted
+ # dim restarted algorithm = incremental
+ # dim restarted multiplier = -1
+ # dim restarted divisor = 1
+ # dim found name = found
+ # dim found algorithm = incremental
+ # dim found multiplier = 1
+ # dim found divisor = 1
+
+[netfilter.errors]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/netfilter.errors
+ # chart type = line
+ # type = netfilter
+ # family = netfilter
+ # context = netfilter.errors
+ # units = events/s
+ # priority = 1005
+ # gap when lost iterations above = 1
+ # name = netfilter.errors
+ # title = Netfilter Errors (netfilter.errors)
+ # dim icmp_error name = icmp_error
+ # dim icmp_error algorithm = incremental
+ # dim icmp_error multiplier = 1
+ # dim icmp_error divisor = 1
+ # dim insert_failed name = insert_failed
+ # dim insert_failed algorithm = incremental
+ # dim insert_failed multiplier = -1
+ # dim insert_failed divisor = 1
+ # dim drop name = drop
+ # dim drop algorithm = incremental
+ # dim drop multiplier = -1
+ # dim drop divisor = 1
+ # dim early_drop name = early_drop
+ # dim early_drop algorithm = incremental
+ # dim early_drop multiplier = -1
+ # dim early_drop divisor = 1
+
+[mem.pgfaults]
+ # history = 86400
+ # enabled = yes
+ enabled = no
+ # cache directory = /var/cache/netdata/mem.pgfaults
+ # chart type = line
+ # type = mem
+ # family = system
+ # context = mem.pgfaults
+ # units = page faults/s
+ # priority = 500
+ # gap when lost iterations above = 1
+ # name = mem.pgfaults
+ # title = Memory Page Faults (mem.pgfaults)
+ # dim minor name = minor
+ # dim minor algorithm = incremental
+ # dim minor multiplier = 1
+ # dim minor divisor = 1
+ # dim major name = major
+ # dim major algorithm = incremental
+ # dim major multiplier = -1
+ # dim major divisor = 1
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service
new file mode 100644
index 000000000..b244d1866
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata/netdata.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Netdata, Real-time performance monitoring
+RequiresMountsFor=/var
+
+[Service]
+User=root
+ExecStartPre=/bin/mkdir -p /var/log/netdata
+ExecStartPre=/bin/chown -R nobody.netdata @@datadir/netdata/web
+ExecStartPre=/bin/chown -R nobody.netdata /var/cache/netdata
+ExecStart=/usr/sbin/netdata -nd
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_git.bb b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_git.bb
new file mode 100644
index 000000000..b0f160252
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/netdata/netdata_git.bb
@@ -0,0 +1,59 @@
+HOMEPAGE = "https://github.com/firehol/netdata/"
+SUMMARY = "Real-time performance monitoring"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE.md;md5=95b49e9ea979a337578f13c2a3ab9535 \
+ file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \
+ "
+
+SRC_URI = "git://github.com/firehol/netdata.git;protocol=https \
+ file://0001-makefile-Do-not-build-contrib-dir.patch \
+"
+SRCREV = "89ed309252981ddd50f697fde4fe93019cb3e652"
+PV = "1.8.0+git${SRCPV}"
+
+# patch to disable timeout because timeout are not available with actual version
+# of core-utils
+SRC_URI += "file://0001-Correct-Timeout-issue.patch"
+
+# default netdata.conf for netdata configuration
+SRC_URI += "file://netdata.conf"
+
+# file for providing systemd service support
+SRC_URI += "file://netdata.service"
+
+S = "${WORKDIR}/git"
+
+DEPENDS += "zlib util-linux"
+
+inherit pkgconfig autotools useradd systemd
+
+#systemd
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "netdata.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "enable"
+
+#User specific
+USERADD_PACKAGES = "${PN}"
+GROUPADD_PARAM_${PN} = "--system netdata"
+
+do_install_append() {
+ #set S UID for plugins
+ chmod 4755 ${D}${libexecdir}/netdata/plugins.d/apps.plugin
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
+ # Install systemd unit files
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/netdata.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@@datadir,${datadir_native},g' ${D}${systemd_unitdir}/system/netdata.service
+ fi
+
+ # Install default netdata.conf
+ install -d ${D}${sysconfdir}/netdata
+ install -m 0644 ${WORKDIR}/netdata.conf ${D}${sysconfdir}/netdata/
+ sed -i -e 's,@@sysconfdir,${sysconfdir},g' ${D}${sysconfdir}/netdata/netdata.conf
+ sed -i -e 's,@@libdir,${libexecdir},g' ${D}${sysconfdir}/netdata/netdata.conf
+ sed -i -e 's,@@datadir,${datadir},g' ${D}${sysconfdir}/netdata/netdata.conf
+}
+
+FILES_${PN}-dbg += "${libexecdir}/netdata/plugins.d/.debug"
+RDEPENDS_${PN} = "bash zlib"
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/disable-version-check.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/disable-version-check.patch
new file mode 100644
index 000000000..9aad894e0
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/disable-version-check.patch
@@ -0,0 +1,64 @@
+Disable OS version check in status screen
+
+The code is not able to accurately detect the correct distro/version at
+the moment.
+
+Upstream-status: Inappropriate
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Index: webmin-1.850/webmin/webmin-lib.pl
+===================================================================
+--- webmin-1.850.orig/webmin/webmin-lib.pl
++++ webmin-1.850/webmin/webmin-lib.pl
+@@ -1112,28 +1112,28 @@ my %miniserv;
+ &load_theme_library(); # So that UI functions work
+
+ # Need OS upgrade
+-my %realos = &detect_operating_system(undef, 1);
+-if (($realos{'os_version'} ne $gconfig{'os_version'} ||
+- $realos{'os_type'} ne $gconfig{'os_type'}) &&
+- $realos{'os_version'} && $realos{'os_type'} &&
+- &foreign_available("webmin")) {
+- my ($realminor) = split(/\./, $realos{'os_version'});
+- my ($minor) = split(/\./, $gconfig{'os_version'});
+- if ($realos{'os_type'} eq $gconfig{'os_type'} &&
+- $realminor == $minor) {
+- # Only the minor version number changed - no need to apply
+- &apply_new_os_version(\%realos);
+- }
+- else {
+- # Large enough change to tell the user
+- push(@notifs,
+- &ui_form_start("$gconfig{'webprefix'}/webmin/fix_os.cgi").
+- &text('os_incorrect', $realos{'real_os_type'},
+- $realos{'real_os_version'})."<p>\n".
+- &ui_form_end([ [ undef, $text{'os_fix'} ] ])
+- );
+- }
+- }
++#my %realos = &detect_operating_system(undef, 1);
++#if (($realos{'os_version'} ne $gconfig{'os_version'} ||
++# $realos{'os_type'} ne $gconfig{'os_type'}) &&
++# $realos{'os_version'} && $realos{'os_type'} &&
++# &foreign_available("webmin")) {
++# my ($realminor) = split(/\./, $realos{'os_version'});
++# my ($minor) = split(/\./, $gconfig{'os_version'});
++# if ($realos{'os_type'} eq $gconfig{'os_type'} &&
++# $realminor == $minor) {
++# # Only the minor version number changed - no need to apply
++# &apply_new_os_version(\%realos);
++# }
++# else {
++# # Large enough change to tell the user
++# push(@notifs,
++# &ui_form_start("$gconfig{'webprefix'}/webmin/fix_os.cgi").
++# &text('os_incorrect', $realos{'real_os_type'},
++# $realos{'real_os_version'})."<p>\n".
++# &ui_form_end([ [ undef, $text{'os_fix'} ] ])
++# );
++# }
++# }
+
+ # Password close to expiry
+ my $warn_days = $config{'warn_days'};
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/exports-lib.pl.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/exports-lib.pl.patch
new file mode 100644
index 000000000..d5dfed5ad
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/exports-lib.pl.patch
@@ -0,0 +1,29 @@
+From 7eba4c98c6953fa6ea76c1620d19524bcfa3a576 Mon Sep 17 00:00:00 2001
+From: Kevin Strasser <kevin.strasser@linux.intel.com>
+Date: Wed, 1 Aug 2012 11:51:26 -0700
+Subject: [PATCH] nfs export: remove nfsd check
+
+nfsd runs as a kernel process and does not have a pid. This means
+that the command assigned to apply_cmd will never be executed when
+the user tries to apply changes to nfs exports.
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Kevin Strasser <kevin.strasser@linux.intel.com>
+---
+ exports/exports-lib.pl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: webmin-1.850/exports/exports-lib.pl
+===================================================================
+--- webmin-1.850.orig/exports/exports-lib.pl
++++ webmin-1.850/exports/exports-lib.pl
+@@ -301,7 +301,7 @@ return !&has_command("rpc.nfsd") && !&ha
+ sub restart_mountd
+ {
+ # Try exportfs -r first
+-if ($config{'apply_cmd'} && &find_byname("nfsd") && &find_byname("mountd")) {
++if ($config{'apply_cmd'} && &find_byname("mountd")) {
+ my $out = &backquote_logged("$config{'apply_cmd'} 2>&1 </dev/null");
+ if (!$? && $out !~ /invalid|error|failed/i) {
+ # Looks like it worked!
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/init-exclude.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/init-exclude.patch
new file mode 100644
index 000000000..4212917f6
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/init-exclude.patch
@@ -0,0 +1,75 @@
+# Hack in support for an "exclude" config option for the init module, so
+# we can hide certain system services that shouldn't really be configurable
+# via the web interface
+#
+# Upstream-status: Pending
+#
+# Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+# Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ init/index.cgi | 27 ++++++++++++++-------------
+ init/init-lib.pl | 5 +++--
+ 2 files changed, 17 insertions(+), 15 deletions(-)
+
+Index: webmin-1.850/init/index.cgi
+===================================================================
+--- webmin-1.850.orig/init/index.cgi
++++ webmin-1.850/init/index.cgi
+@@ -45,19 +45,20 @@ elsif ($init_mode eq "init" && $access{'
+ : "$config{'init_dir'}/$ac[0]");
+ }
+ @runlevels = &list_runlevels();
+- foreach $r (@runlevels) {
+- foreach $w ("S", "K") {
+- foreach $a (&runlevel_actions($r, $w)) {
+- @ac = split(/\s+/, $a);
+- if (!$nodemap{$ac[2]}) {
+- push(@acts, $ac[1]);
+- push(@actsl,
+- "1+$r+$ac[0]+$ac[1]+$ac[2]+$w");
+- push(@actsf, "$config{'init_base'}/rc$r.d/$w$ac[0]$ac[1]");
+- }
+- }
+- }
+- }
++ # Assume there won't be any of these broken actions
++ #foreach $r (@runlevels) {
++ # foreach $w ("S", "K") {
++ # foreach $a (&runlevel_actions($r, $w)) {
++ # @ac = split(/\s+/, $a);
++ # if (!$nodemap{$ac[2]}) {
++ # push(@acts, $ac[1]);
++ # push(@actsl,
++ # "1+$r+$ac[0]+$ac[1]+$ac[2]+$w");
++ # push(@actsf, "$config{'init_base'}/rc$r.d/$w$ac[0]$ac[1]");
++ # }
++ # }
++ # }
++ # }
+
+ # For each action, look at /etc/rc*.d/* files to see if it is
+ # started at boot
+Index: webmin-1.850/init/init-lib.pl
+===================================================================
+--- webmin-1.850.orig/init/init-lib.pl
++++ webmin-1.850/init/init-lib.pl
+@@ -124,8 +124,9 @@ List boot time action names from init.d,
+ =cut
+ sub list_actions
+ {
+-local($dir, $f, @stbuf, @rv);
++local($dir, $f, @stbuf, @rv, @exclude);
+ $dir = $config{init_dir};
++@exclude = split(/,/, $config{exclude});
+ opendir(DIR, $dir);
+ foreach $f (sort { lc($a) cmp lc($b) } readdir(DIR)) {
+ if ($f eq "." || $f eq ".." || $f =~ /\.bak$/ || $f eq "functions" ||
+@@ -133,7 +134,7 @@ foreach $f (sort { lc($a) cmp lc($b) } r
+ -d "$dir/$f" || $f =~ /\.swp$/ || $f eq "skeleton" ||
+ $f =~ /\.lock$/ || $f =~ /\.dpkg-(old|dist)$/ ||
+ $f =~ /^\.depend\./ || $f eq '.legacy-bootordering' ||
+- $f =~ /^mandrake/) { next; }
++ $f =~ /^mandrake/ || grep {$_ eq $f} @exclude ) { next; }
+ if (@stbuf = stat("$dir/$f")) {
+ push(@rv, "$f $stbuf[1]");
+ }
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/media-tomb.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/media-tomb.patch
new file mode 100644
index 000000000..46f310979
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/media-tomb.patch
@@ -0,0 +1,65 @@
+diff -Nru webmin-1.570.bak/mediatomb/index.cgi webmin-1.570/mediatomb/index.cgi
+--- webmin-1.570.bak/mediatomb/index.cgi 1969-12-31 16:00:00.000000000 -0800
++++ webmin-1.570/mediatomb/index.cgi 2011-10-26 10:00:05.992522036 -0700
+@@ -0,0 +1,13 @@
++#!/usr/bin/perl
++# index.cgi
++# Display MediaTomb option categories
++
++require './mediatomb-lib.pl';
++
++ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1);
++
++
++$ipaddress = &get_my_address();
++print &text('index_desc', $ipaddress),"<p>\n";
++
++ui_print_footer("/", $text{'index'});
+diff -Nru webmin-1.570.bak/mediatomb/lang/en webmin-1.570/mediatomb/lang/en
+--- webmin-1.570.bak/mediatomb/lang/en 1969-12-31 16:00:00.000000000 -0800
++++ webmin-1.570/mediatomb/lang/en 2011-10-26 10:01:13.340522186 -0700
+@@ -0,0 +1,2 @@
++index_title=MediaTomb
++index_desc=MediaTomb is an open source (GPL) UPnP MediaServer with a nice web user interface. You can access it via <a href='http://$1:49153'>here</a>.
+diff -Nru webmin-1.570.bak/mediatomb/mediatomb-lib.pl webmin-1.570/mediatomb/mediatomb-lib.pl
+--- webmin-1.570.bak/mediatomb/mediatomb-lib.pl 1969-12-31 16:00:00.000000000 -0800
++++ webmin-1.570/mediatomb/mediatomb-lib.pl 2011-10-26 10:01:34.692522079 -0700
+@@ -0,0 +1,31 @@
++#!/usr/bin/perl
++# mediatomb-lib.pl
++# Common functions for the MediaTomb module
++
++BEGIN { push(@INC, ".."); };
++use WebminCore;
++&init_config();
++
++sub get_my_address
++{
++my $myip;
++if (&foreign_check("net")) {
++ # Try to get ethernet interface
++ &foreign_require("net", "net-lib.pl");
++ my @act = &net::active_interfaces();
++ my @ifaces = grep { &net::iface_type($_->{'fullname'}) =~ /ether/i }
++ @act;
++ @ifaces = ( $act[0] ) if (!@ifaces && @act);
++ if (@ifaces) {
++ return wantarray ? ( map { $_->{'address'} } @ifaces )
++ : $ifaces[0]->{'address'};
++ }
++ }
++$myip = &to_ipaddress(&get_system_hostname());
++if ($myip) {
++ # Can resolve hostname .. use that
++ return wantarray ? ( $myip ) : $myip;
++ }
++return wantarray ? ( ) : undef;
++}
++
+diff -Nru webmin-1.570.bak/mediatomb/module.info webmin-1.570/mediatomb/module.info
+--- webmin-1.570.bak/mediatomb/module.info 1969-12-31 16:00:00.000000000 -0800
++++ webmin-1.570/mediatomb/module.info 2011-10-26 09:59:50.428528369 -0700
+@@ -0,0 +1,3 @@
++desc=MediaTomb
++category=others
++longdesc=MediaTomb access module
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mount-excludefs.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mount-excludefs.patch
new file mode 100644
index 000000000..8cb74c4b1
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mount-excludefs.patch
@@ -0,0 +1,25 @@
+Add excludefs config option to mount module
+
+Adds a configuration option (currently hidden) to allow the distro to
+hide certain filesystems from the mount module within Webmin (e.g. /dev)
+since these shouldn't be modified from the web interface.
+
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-status: Pending
+
+--- webmin-1.570.orig/mount/index.cgi
++++ webmin-1.570/mount/index.cgi
+@@ -33,10 +33,12 @@ elsif ($config{'sort_mode'} == 1) {
+ }
+
+ # Build visible filesystems list
++@excludefs = split(/,/, $config{excludefs});
+ foreach $m (@all) {
+ @minfo = @$m;
+ $p = &simplify_mount_path($minfo[0], $minfo[2]);
+ next if ($ignore{$minfo[2]});
++ next if (grep {$_ eq $minfo[2]} @excludefs);
+ @mmodes = &mount_modes($minfo[2], $minfo[0], $minfo[1]);
+ $canedit = $can_edit{$minfo[2]} && !$mmodes[4] &&
+ &can_edit_fs(@minfo);
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mysql-config-fix.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mysql-config-fix.patch
new file mode 100644
index 000000000..2cbc62707
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/mysql-config-fix.patch
@@ -0,0 +1,50 @@
+From 719206df606acd7a623e8d75da293c25489b7884 Mon Sep 17 00:00:00 2001
+From: Diego Rondini <diego.ml@zoho.com>
+Date: Thu, 18 Feb 2016 15:44:06 +0100
+Subject: [PATCH] Adjust Mysql config defaults
+
+Upstream-status: Inappropriate [configuration]
+
+Signed-off-by: Diego Rondini <diego.ml@zoho.com>
+---
+ mysql/config | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/mysql/config b/mysql/config
+index e5b6fb3..77bfe69 100644
+--- a/mysql/config
++++ b/mysql/config
+@@ -1,13 +1,13 @@
+-start_cmd=cd /usr/local/mysql ; (./bin/safe_mysqld || ./bin/mysqld_safe) &
++start_cmd=/usr/bin/mysqld_safe
+ perpage=25
+-mysql=/usr/local/mysql/bin/mysql
+-mysqldump=/usr/local/mysql/bin/mysqldump
+-mysqlimport=/usr/local/mysql/bin/mysqlimport
+-pass=foo
+-mysqlshow=/usr/local/mysql/bin/mysqlshow
++mysql=/usr/bin/mysql
++mysqldump=/usr/bin/mysqldump
++mysqlimport=/usr/bin/mysqlimport
++pass=
++mysqlshow=/usr/bin/mysqlshow
+ login=root
+-mysql_libs=/usr/local/mysql/lib
+-mysqladmin=/usr/local/mysql/bin/mysqladmin
++mysql_libs=/usr/lib
++mysqladmin=/usr/bin/mysqladmin
+ style=0
+ add_mode=1
+ nodbi=0
+@@ -15,7 +15,7 @@ access=*: *
+ blob_mode=0
+ date_subs=0
+ passwd_mode=0
+-mysql_data=/usr/local/mysql/var
++mysql_data=/var/lib/mysql
+ max_dbs=50
+ my_cnf=/etc/my.cnf
+ max_text=1000
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-generic.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-generic.patch
new file mode 100644
index 000000000..554939285
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-generic.patch
@@ -0,0 +1,25 @@
+# Add support for configuring network interfaces on a generic linux system
+#
+# Upstream-status: Not appropriate [config]
+#
+# Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+Index: webmin-1.850/net/module.info
+===================================================================
+--- webmin-1.850.orig/net/module.info
++++ webmin-1.850/net/module.info
+@@ -14,7 +14,7 @@ desc_ko_KR.UTF-8=네트워크 구성
+ name=Networking
+ desc_tr=A Yaplandrmas
+ desc_de=Netzwerkkonfiguration
+-os_support=solaris coherent-linux redhat-linux/5.0-* mandrake-linux united-linux suse-linux/6.0-* open-linux unixware turbo-linux/4.0 freebsd/3.2-* openbsd debian-linux/2.2-* cobalt-linux/2.2-* msc-linux gentoo-linux macos/1.5-* trustix-linux slackware-linux/8.0-* openmamba-linux cygwin windows pardus-linux
++os_support=generic-linux solaris coherent-linux redhat-linux/5.0-* mandrake-linux united-linux suse-linux/6.0-* open-linux unixware turbo-linux/4.0 freebsd/3.2-* openbsd debian-linux/2.2-* cobalt-linux/2.2-* msc-linux gentoo-linux macos/1.5-* trustix-linux slackware-linux/8.0-* openmamba-linux cygwin windows pardus-linux
+ desc_sk=Konfigurcia siete
+ desc_zh_CN=
+ risk=low medium high
+Index: webmin-1.850/net/generic-linux-lib.pl
+===================================================================
+--- /dev/null
++++ webmin-1.850/net/generic-linux-lib.pl
+@@ -0,0 +1,2 @@
++do 'linux-lib.pl';
++
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-lib.pl.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-lib.pl.patch
new file mode 100644
index 000000000..bdba5e73f
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/net-lib.pl.patch
@@ -0,0 +1,19 @@
+Upstream-Status: Inappropriate [config]
+
+XXX: need to work out a better fix.
+
+Signed-off-by: Dexuan Cui <dexuan.cui@intel.com>
+
+diff -Nru webmin-1.570.orig//net/net-lib.pl webmin-1.570/net/net-lib.pl
+--- webmin-1.570.orig//net/net-lib.pl 2011-10-03 09:01:48.000000000 +0800
++++ webmin-1.570/net/net-lib.pl 2011-10-28 13:52:56.138873664 +0800
+@@ -21,7 +21,8 @@
+ do "$gconfig{'os_type'}-9.1-ALL-lib.pl";
+ }
+ else {
+- do "$gconfig{'os_type'}-lib.pl";
++ #do "$gconfig{'os_type'}-lib.pl";
++ do "debian-linux-lib.pl";
+ }
+
+ # list_hosts()
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/nfs-export.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/nfs-export.patch
new file mode 100644
index 000000000..426d63737
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/nfs-export.patch
@@ -0,0 +1,39 @@
+commit e48f61d2f6df32a518bcb84db8c6eacfe5435c32
+Author: Yu Ke <ke.yu@intel.com>
+Date: Fri Oct 28 14:40:51 2011 +0800
+
+NFS export: fix syntax issue
+
+fix two syntax issue in /etc/exports:
+1. if it is exported to everyone, should use "*", e.g. "/export *(xxx)"
+2. explicitly specify subtree_check or no_subtree_check, required by latest nfs-utils
+
+Upstream-Status: Pending
+
+Signed-off-by: Yu Ke <ke.yu@intel.com>
+
+Index: webmin-1.850/exports/save_export.cgi
+===================================================================
+--- webmin-1.850.orig/exports/save_export.cgi
++++ webmin-1.850/exports/save_export.cgi
+@@ -50,7 +50,7 @@ else {
+ &error(&text('save_enetmask', $in{'netmask'}));
+ $exp{'host'} = $in{'network'}."/".$in{'netmask'};
+ }
+- elsif ($in{'mode'} == 3) { $exp{'host'} = ""; }
++ elsif ($in{'mode'} == 3) { $exp{'host'} = "*"; }
+ else {
+ $in{'host'} =~ /\*/ || &to_ipaddress($in{'host'}) ||
+ &error(&text('save_ehost', $in{'host'}));
+@@ -87,6 +87,11 @@ else {
+ delete($opts{'no_subtree_check'});
+ delete($opts{'subtree_check'});
+ $opts{'no_subtree_check'} = "" if ($in{'no_subtree_check'});
++ if ($in{'no_subtree_check'}) {
++ $opts{'no_subtree_check'} = "";
++ } else {
++ $opts{'subtree_check'} = "";
++ }
+
+ delete($opts{'nohide'});
+ delete($opts{'hide'});
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/proftpd-config-fix.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/proftpd-config-fix.patch
new file mode 100644
index 000000000..492a652d4
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/proftpd-config-fix.patch
@@ -0,0 +1,18 @@
+Upstream-status: Inappropriate [configuration]
+
+Signed-off-by: Zhai Edwin <edwin.zhai@intel.com>
+
+Index: webmin-1.570/proftpd/config
+===================================================================
+--- webmin-1.570.orig/proftpd/config 2011-10-25 20:18:37.000000000 +0800
++++ webmin-1.570/proftpd/config 2011-10-25 20:21:13.000000000 +0800
+@@ -1,6 +1,6 @@
+-proftpd_path=/usr/local/sbin/proftpd
+-proftpd_conf=/usr/local/etc/proftpd.conf
+-pid_file=/usr/local/var/proftpd.pid
++proftpd_path=/usr/sbin/proftpd
++proftpd_conf=/etc/proftpd.conf
++pid_file=/var/proftpd.pid
+ ftpusers=/etc/ftpusers
+ test_config=1
+ test_always=0
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-python2.3.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-python2.3.patch
new file mode 100644
index 000000000..75e5bd1ea
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-python2.3.patch
@@ -0,0 +1,25 @@
+From 6f04699d5d417122b67e8118fd1955c769f17e76 Mon Sep 17 00:00:00 2001
+From: Robert Yang <liezhi.yang@windriver.com>
+Date: Tue, 2 Sep 2014 00:11:05 -0700
+Subject: [PATCH] ajaxterm/ajaxterm/qweb.py: fix hardcode of python2.3
+
+Upstream-Status: Pending
+
+Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
+---
+ ajaxterm/ajaxterm/qweb.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/ajaxterm/ajaxterm/qweb.py b/ajaxterm/ajaxterm/qweb.py
+index 20c5092..c658a6b 100644
+--- a/ajaxterm/ajaxterm/qweb.py
++++ b/ajaxterm/ajaxterm/qweb.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python2.3
++#!/usr/bin/env python
+ #
+ # vim:set et ts=4 fdc=0 fdn=2 fdl=0:
+ #
+--
+1.7.9.5
+
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-startup-option.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-startup-option.patch
new file mode 100644
index 000000000..d957f4a3b
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/remove-startup-option.patch
@@ -0,0 +1,29 @@
+# Remove "start on boot" option from webmin configuration, as
+# end-users should not need to configure this from the web interface
+#
+# Upstream-status: Inappropriate
+#
+# Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+--- webmin-1.570.orig/webmin/index.cgi
++++ webmin-1.570/webmin/index.cgi
+@@ -79,20 +79,6 @@ print &ui_buttons_start();
+ my %miniserv;
+ &get_miniserv_config(\%miniserv);
+
+-if (&foreign_check("init")) {
+- &foreign_require("init");
+- my $starting = &init::action_status("webmin");
+- print &ui_buttons_row("bootup.cgi",
+- $text{'index_boot'},
+- $text{'index_bootmsg'}.
+- ($miniserv{'inetd'} ? "<b>$text{'index_inetd'}</b>" :
+- !$ENV{'MINISERV_CONFIG'} ? "<b>$text{'index_apache'}</b>" : ""),
+- &ui_hidden("starting", $starting),
+- &ui_radio("boot", $starting == 2 ? 1 : 0,
+- [ [ 1, $text{'yes'} ],
+- [ 0, $text{'no'} ] ]));
+- }
+-
+ # Restart Webmin
+ if (!$miniserv{'inetd'} && $ENV{'MINISERV_CONFIG'}) {
+ print &ui_buttons_row("restart.cgi",
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/samba-config-fix.patch b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/samba-config-fix.patch
new file mode 100644
index 000000000..46645ac30
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/samba-config-fix.patch
@@ -0,0 +1,32 @@
+Upstream-status: Inappropriate [configuration]
+
+Signed-off-by: Zhai Edwin <edwin.zhai@intel.com>
+
+Index: webmin-1.570/samba/config-generic-linux
+===================================================================
+--- webmin-1.570.orig/samba/config-generic-linux 2011-10-25 20:11:35.000000000 +0800
++++ webmin-1.570/samba/config-generic-linux 2011-10-25 20:15:41.000000000 +0800
+@@ -1,15 +1,15 @@
+ list_printers_command=lpc status | grep "[A-z0-9]:" | sed -e 's/://g'
+-smb_passwd=/usr/local/samba/private/smbpasswd
++smb_passwd=/usr/bin/smbpasswd
+ text_lists=0
+ dont_convert=-499
+-name_server=/usr/local/samba/bin/nmbd
+-smb_conf=/usr/local/samba/lib/smb.conf
+-samba_server=/usr/local/samba/bin/smbd
++name_server=/usr/sbin/nmbd
++smb_conf=/etc/samba/smb.conf
++samba_server=/usr/sbin/smbd
+ run_from_inetd=0
+-samba_password_program=/usr/local/samba/bin/smbpasswd
+-samba_status_program=/usr/local/samba/bin/smbstatus
++samba_password_program=/usr/bin/smbpasswd
++samba_status_program=/usr/bin/smbstatus
+ swat_path=/usr/local/samba/bin/swat
+ sort_mode=0
+ smbgroupedit=/usr/local/samba/bin/smbgroupedit
+-pdbedit=/usr/local/samba/bin/pdbedit
+-net=/usr/local/samba/bin/net
++pdbedit=/usr/bin/pdbedit
++net=/usr/bin/net
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/setup.sh b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/setup.sh
new file mode 100755
index 000000000..8d24f928f
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/setup.sh
@@ -0,0 +1,340 @@
+#!/bin/sh
+# Modified version of setup.sh distributed with webmin
+
+if [ "$wadir" = "" ]; then
+ echo "ERROR: wadir not specified"
+ echo ""
+ exit 1
+fi
+
+config_dir_runtime=$config_dir
+config_dir=$prefix$config_dir
+
+wadir_runtime=$wadir
+wadir=$prefix$wadir
+
+ver=`cat "$wadir/version"`
+
+cd "$wadir"
+
+# Work out perl library path
+PERLLIB=$wadir
+
+# Validate source directory
+allmods=`cd "$wadir"; echo */module.info | sed -e 's/\/module.info//g'`
+if [ "$allmods" = "" ]; then
+ echo "ERROR: Failed to get module list"
+ echo ""
+ exit 1
+fi
+echo ""
+
+if [ "$login" = "webmin" ]; then
+ echo "ERROR: Username 'webmin' is reserved for internal use"
+ echo ""
+ exit 14
+fi
+
+# Create webserver config file
+echo $perl > $config_dir/perl-path
+echo $var_dir > $config_dir/var-path
+echo "Creating web server config files.."
+cfile=$config_dir/miniserv.conf
+echo "port=$port" >> $cfile
+echo "root=$wadir_runtime" >> $cfile
+echo "mimetypes=$wadir_runtime/mime.types" >> $cfile
+echo "addtype_cgi=internal/cgi" >> $cfile
+echo "realm=Webmin Server" >> $cfile
+echo "logfile=$var_dir/miniserv.log" >> $cfile
+echo "errorlog=$var_dir/miniserv.error" >> $cfile
+echo "pidfile=$var_dir/miniserv.pid" >> $cfile
+echo "logtime=168" >> $cfile
+echo "ppath=$ppath" >> $cfile
+echo "ssl=$ssl" >> $cfile
+echo "env_WEBMIN_CONFIG=$config_dir_runtime" >> $cfile
+echo "env_WEBMIN_VAR=$var_dir" >> $cfile
+echo "atboot=$atboot" >> $cfile
+echo "logout=$config_dir_runtime/logout-flag" >> $cfile
+if [ "$listen" != "" ]; then
+ echo "listen=$listen" >> $cfile
+else
+ echo "listen=10000" >> $cfile
+fi
+echo "denyfile=\\.pl\$" >> $cfile
+echo "log=1" >> $cfile
+echo "blockhost_failures=5" >> $cfile
+echo "blockhost_time=60" >> $cfile
+echo "syslog=1" >> $cfile
+if [ "$allow" != "" ]; then
+ echo "allow=$allow" >> $cfile
+fi
+if [ "$session" != "" ]; then
+ echo "session=$session" >> $cfile
+else
+ echo "session=1" >> $cfile
+fi
+if [ "$pam" != "" ]; then
+ echo "pam=$pam" >> $cfile
+fi
+if [ "$no_pam" != "" ]; then
+ echo "no_pam=$no_pam" >> $cfile
+fi
+echo premodules=WebminCore >> $cfile
+echo "server=MiniServ/$ver" >> $cfile
+
+md5pass=`$perl -e 'print crypt("test", "\\$1\\$A9wB3O18\\$zaZgqrEmb9VNltWTL454R/") eq "\\$1\\$A9wB3O18\\$zaZgqrEmb9VNltWTL454R/" ? "1\n" : "0\n"'`
+
+ufile=$config_dir/miniserv.users
+if [ "$crypt" != "" ]; then
+ echo "$login:$crypt:0" > $ufile
+else
+ if [ "$md5pass" = "1" ]; then
+ $perl -e 'print "$ARGV[0]:",crypt($ARGV[1], "\$1\$XXXXXXXX"),":0\n"' "$login" "$password" > $ufile
+ else
+ $perl -e 'print "$ARGV[0]:",crypt($ARGV[1], "XX"),":0\n"' "$login" "$password" > $ufile
+ fi
+fi
+chmod 600 $ufile
+echo "userfile=$config_dir_runtime/miniserv.users" >> $cfile
+
+kfile=$config_dir/miniserv.pem
+openssl version >/dev/null 2>&1
+if [ "$?" = "0" ]; then
+ # We can generate a new SSL key for this host
+ host=`hostname`
+ openssl req -newkey rsa:512 -x509 -nodes -out $tempdir/cert -keyout $tempdir/key -days 1825 >/dev/null 2>&1 <<EOF
+.
+.
+.
+Webmin Webserver on $host
+.
+*
+root@$host
+EOF
+ if [ "$?" = "0" ]; then
+ cat $tempdir/cert $tempdir/key >$kfile
+ fi
+ rm -f $tempdir/cert $tempdir/key
+fi
+if [ ! -r $kfile ]; then
+ # Fall back to the built-in key
+ cp "$wadir/miniserv.pem" $kfile
+fi
+chmod 600 $kfile
+echo "keyfile=$config_dir_runtime/miniserv.pem" >> $cfile
+
+chmod 600 $cfile
+echo "..done"
+echo ""
+
+echo "Creating access control file.."
+afile=$config_dir/webmin.acl
+rm -f $afile
+if [ "$defaultmods" = "" ]; then
+ echo "$login: $allmods" >> $afile
+else
+ echo "$login: $defaultmods" >> $afile
+fi
+chmod 600 $afile
+echo "..done"
+echo ""
+
+if [ "$login" != "root" -a "$login" != "admin" ]; then
+ # Allow use of RPC by this user
+ echo rpc=1 >>$config_dir/$login.acl
+fi
+
+if [ "$noperlpath" = "" ]; then
+ echo "Inserting path to perl into scripts.."
+ (find "$wadir" -name '*.cgi' -print ; find "$wadir" -name '*.pl' -print) | $perl "$wadir/perlpath.pl" $perl_runtime -
+ echo "..done"
+ echo ""
+fi
+
+echo "Creating start and stop scripts.."
+rm -f $config_dir/stop $config_dir/start $config_dir/restart $config_dir/reload
+echo "#!/bin/sh" >>$config_dir/start
+echo "echo Starting Webmin server in $wadir_runtime" >>$config_dir/start
+echo "trap '' 1" >>$config_dir/start
+echo "LANG=" >>$config_dir/start
+echo "export LANG" >>$config_dir/start
+echo "#PERLIO=:raw" >>$config_dir/start
+echo "unset PERLIO" >>$config_dir/start
+echo "export PERLIO" >>$config_dir/start
+echo "PERLLIB=$PERLLIB" >>$config_dir/start
+echo "export PERLLIB" >>$config_dir/start
+uname -a | grep -i 'HP/*UX' >/dev/null
+if [ $? = "0" ]; then
+ echo "exec '$wadir_runtime/miniserv.pl' $config_dir_runtime/miniserv.conf &" >>$config_dir/start
+else
+ echo "exec '$wadir_runtime/miniserv.pl' $config_dir_runtime/miniserv.conf" >>$config_dir/start
+fi
+
+echo "#!/bin/sh" >>$config_dir/stop
+echo "echo Stopping Webmin server in $wadir_runtime" >>$config_dir/stop
+echo "pidfile=\`grep \"^pidfile=\" $config_dir_runtime/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/stop
+echo "kill \`cat \$pidfile\`" >>$config_dir/stop
+
+echo "#!/bin/sh" >>$config_dir/restart
+echo "$config_dir_runtime/stop && $config_dir_runtime/start" >>$config_dir/restart
+
+echo "#!/bin/sh" >>$config_dir/reload
+echo "echo Reloading Webmin server in $wadir_runtime" >>$config_dir/reload
+echo "pidfile=\`grep \"^pidfile=\" $config_dir_runtime/miniserv.conf | sed -e 's/pidfile=//g'\`" >>$config_dir/reload
+echo "kill -USR1 \`cat \$pidfile\`" >>$config_dir/reload
+
+chmod 755 $config_dir/start $config_dir/stop $config_dir/restart $config_dir/reload
+echo "..done"
+echo ""
+
+if [ "$upgrading" = 1 ]; then
+ echo "Updating config files.."
+else
+ echo "Copying config files.."
+fi
+newmods=`$perl "$wadir/copyconfig.pl" "$os_type/$real_os_type" "$os_version/$real_os_version" "$wadir" $config_dir "" $allmods`
+# Store the OS and version
+echo "os_type=$os_type" >> $config_dir/config
+echo "os_version=$os_version" >> $config_dir/config
+echo "real_os_type=$real_os_type" >> $config_dir/config
+echo "real_os_version=$real_os_version" >> $config_dir/config
+if [ -r /etc/system.cnf ]; then
+ # Found a caldera system config file .. get the language
+ source /etc/system.cnf
+ if [ "$CONF_LST_LANG" = "us" ]; then
+ CONF_LST_LANG=en
+ elif [ "$CONF_LST_LANG" = "uk" ]; then
+ CONF_LST_LANG=en
+ fi
+ grep "lang=$CONF_LST_LANG," "$wadir/lang_list.txt" >/dev/null 2>&1
+ if [ "$?" = 0 ]; then
+ echo "lang=$CONF_LST_LANG" >> $config_dir/config
+ fi
+fi
+
+# Turn on logging by default
+echo "log=1" >> $config_dir/config
+
+# Use licence module specified by environment variable
+if [ "$licence_module" != "" ]; then
+ echo licence_module=$licence_module >>$config_dir/config
+fi
+
+# Disallow unknown referers by default
+echo "referers_none=1" >>$config_dir/config
+echo $ver > $config_dir/version
+echo "..done"
+echo ""
+
+# Set passwd_ fields in miniserv.conf from global config
+for field in passwd_file passwd_uindex passwd_pindex passwd_cindex passwd_mindex; do
+ grep $field= $config_dir/miniserv.conf >/dev/null
+ if [ "$?" != "0" ]; then
+ grep $field= $config_dir/config >> $config_dir/miniserv.conf
+ fi
+done
+grep passwd_mode= $config_dir/miniserv.conf >/dev/null
+if [ "$?" != "0" ]; then
+ echo passwd_mode=0 >> $config_dir/miniserv.conf
+fi
+
+# If Perl crypt supports MD5, then make it the default
+if [ "$md5pass" = "1" ]; then
+ echo md5pass=1 >> $config_dir/config
+fi
+
+# Set a special theme if none was set before
+if [ "$theme" = "" ]; then
+ theme=`cat "$wadir/defaulttheme" 2>/dev/null`
+fi
+oldthemeline=`grep "^theme=" $config_dir/config`
+oldtheme=`echo $oldthemeline | sed -e 's/theme=//g'`
+if [ "$theme" != "" ] && [ "$oldthemeline" = "" ] && [ -d "$wadir/$theme" ]; then
+ themelist=$theme
+fi
+
+# Set a special overlay if none was set before
+if [ "$overlay" = "" ]; then
+ overlay=`cat "$wadir/defaultoverlay" 2>/dev/null`
+fi
+if [ "$overlay" != "" ] && [ "$theme" != "" ] && [ -d "$wadir/$overlay" ]; then
+ themelist="$themelist $overlay"
+fi
+
+# Apply the theme and maybe overlay
+if [ "$themelist" != "" ]; then
+ echo "theme=$themelist" >> $config_dir/config
+ echo "preroot=$themelist" >> $config_dir/miniserv.conf
+fi
+
+# Set the product field in the global config
+grep product= $config_dir/config >/dev/null
+if [ "$?" != "0" ]; then
+ echo product=webmin >> $config_dir/config
+fi
+
+if [ "$makeboot" = "1" ]; then
+ echo "Configuring Webmin to start at boot time.."
+ (cd "$wadir/init" ; WEBMIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir "$wadir/init/atboot.pl" $bootscript)
+ echo "..done"
+ echo ""
+fi
+
+# If password delays are not specifically disabled, enable them
+grep passdelay= $config_dir/miniserv.conf >/dev/null
+if [ "$?" != "0" ]; then
+ echo passdelay=1 >> $config_dir/miniserv.conf
+fi
+
+echo "Changing ownership and permissions .."
+# Make all config dirs non-world-readable
+for m in $newmods; do
+ chown -R root $config_dir/$m
+ chgrp -R bin $config_dir/$m
+ chmod -R og-rw $config_dir/$m
+done
+# Make miniserv config files non-world-readable
+for f in miniserv.conf miniserv.pem miniserv.users; do
+ chown -R root $config_dir/$f
+ chgrp -R bin $config_dir/$f
+ chmod -R og-rw $config_dir/$f
+done
+chmod +r $config_dir/version
+if [ "$nochown" = "" ]; then
+ # Make program directory non-world-writable, but executable
+ chown -R root "$wadir"
+ chgrp -R bin "$wadir"
+ chmod -R og-w "$wadir"
+ chmod -R a+rx "$wadir"
+fi
+if [ $var_dir != "/var" ]; then
+ # Make log directory non-world-readable or writable
+ chown -R root $prefix$var_dir
+ chgrp -R bin $prefix$var_dir
+ chmod -R og-rwx $prefix$var_dir
+fi
+# Fix up bad permissions from some older installs
+for m in ldap-client ldap-server ldap-useradmin mailboxes mysql postgresql servers virtual-server; do
+ if [ -d "$config_dir/$m" ]; then
+ chown root $config_dir/$m
+ chgrp bin $config_dir/$m
+ chmod og-rw $config_dir/$m
+ chmod og-rw $config_dir/$m/config 2>/dev/null
+ fi
+done
+
+if [ "$nopostinstall" = "" ]; then
+ echo "Running postinstall scripts .."
+ (cd "$wadir" ; WEBMIN_CONFIG=$config_dir WEBMIN_VAR=$var_dir "$wadir/run-postinstalls.pl")
+ echo "..done"
+ echo ""
+fi
+
+# Enable background collection
+if [ "$upgrading" != 1 -a -r $config_dir/system-status/enable-collection.pl ]; then
+ echo "Enabling background status collection .."
+ $config_dir/system-status/enable-collection.pl 5
+ echo "..done"
+ echo ""
+fi
+
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/webmin.service b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/webmin.service
new file mode 100644
index 000000000..87cf4f99d
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/files/webmin.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Webmin Admin Tool
+Requires=local-fs.target
+After=basic.target
+Conflicts=shutdown.target
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=@SYSCONFDIR@/webmin/start
+ExecStop=@SYSCONFDIR@/webmin/stop
+ExecReload=@SYSCONFDIR@/webmin/reload
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-openembedded/meta-webserver/recipes-webadmin/webmin/webmin_1.850.bb b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/webmin_1.850.bb
new file mode 100644
index 000000000..ce9bc9280
--- /dev/null
+++ b/meta-openembedded/meta-webserver/recipes-webadmin/webmin/webmin_1.850.bb
@@ -0,0 +1,170 @@
+SUMMARY = "Web-based administration interface"
+HOMEPAGE = "http://www.webmin.com"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://LICENCE;md5=0373ac9f611e542ddebe1ec6394afc3c"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/webadmin/webmin-${PV}.tar.gz \
+ file://setup.sh \
+ file://init-exclude.patch \
+ file://net-generic.patch \
+ file://remove-startup-option.patch \
+ file://disable-version-check.patch \
+ file://nfs-export.patch \
+ file://exports-lib.pl.patch \
+ file://mount-excludefs.patch \
+ file://samba-config-fix.patch \
+ file://proftpd-config-fix.patch \
+ file://net-lib.pl.patch \
+ file://media-tomb.patch \
+ file://remove-python2.3.patch \
+ file://mysql-config-fix.patch \
+ file://webmin.service \
+ "
+
+SRC_URI[md5sum] = "cd6ee98f73f9418562197675b952d81b"
+SRC_URI[sha256sum] = "c66caa9e4cb50d5447bc8aceb7989d2284dde060278f404b13e171c7ce1690e1"
+
+UPSTREAM_CHECK_URI = "http://www.webmin.com/download.html"
+UPSTREAM_CHECK_REGEX = "webmin-(?P<pver>\d+(\.\d+)+).tar.gz"
+
+inherit perlnative update-rc.d systemd
+
+do_configure() {
+ # Remove binaries and plugins for other platforms
+ rm -rf acl/Authen-SolarisRBAC-0.1*
+ rm -rf format bsdexports hpuxexports sgiexports
+ rm -rf zones rbac smf ipfw ipfilter dfsadmin
+ rm -f mount/freebsd-mounts* mount/netbsd-mounts*
+ rm -f mount/openbsd-mounts* mount/macos-mounts*
+
+ # Remove some plugins for the moment
+ rm -rf lilo frox wuftpd telnet pserver cpan shorewall webalizer cfengine fsdump pap
+ rm -rf majordomo fetchmail sendmail mailboxes procmail filter mailcap dovecot exim spam qmailadmin postfix
+ rm -rf stunnel squid sarg pptp-client pptp-server jabber openslp sentry cluster-* vgetty burner heartbeat
+
+ # Adjust configs
+ [ -f init/config-debian-linux ] && mv init/config-debian-linux init/config-generic-linux
+ sed -i "s/shutdown_command=.*/shutdown_command=poweroff/" init/config-generic-linux
+ echo "exclude=bootmisc.sh,single,halt,reboot,hostname.sh,modutils.sh,mountall.sh,mountnfs.sh,networking,populate-volatile.sh,rmnologin.sh,save-rtc.sh,umountfs,umountnfs.sh,hwclock.sh,checkroot.sh,banner.sh,udev,udev-cache,devpts.sh,psplash.sh,sendsigs,fbsetup,bootlogd,stop-bootlogd,sysfs.sh,syslog,syslog.busybox,urandom,webmin,functions.initscripts,read-only-rootfs-hook.sh" >> init/config-generic-linux
+ echo "excludefs=devpts,devtmpfs,usbdevfs,proc,tmpfs,sysfs,debugfs" >> mount/config-generic-linux
+
+ [ -f exports/config-debian-linux ] && mv exports/config-debian-linux exports/config-generic-linux
+ sed -i "s/killall -HUP rpc.nfsd && //" exports/config-generic-linux
+ sed -i "s/netstd_nfs/nfsserver/g" exports/config-generic-linux
+
+ # Fix insane naming that causes problems at packaging time (must be done before deleting below)
+ find . -name "*\**" | while read from
+ do
+ to=`echo "$from" | sed "s/*/ALL/"`
+ mv "$from" "$to"
+ done
+
+ # Remove some other files we don't need
+ find . -name "config-*" -a \! -name "config-generic-linux" -a \! -name "config-ALL-linux" -a \! -name "*.pl" -delete
+ find . -regextype posix-extended -regex ".*/(openserver|aix|osf1|osf|openbsd|netbsd|freebsd|unixware|solaris|macos|irix|hpux|cygwin|windows)-lib\.pl" -delete
+ rm -f webmin-gentoo-init webmin-caldera-init webmin-debian-pam webmin-pam
+
+ # Don't need these at runtime (and we have our own setup script)
+ rm -f setup.sh
+ rm -f setup.pl
+
+ # Use pidof for finding PIDs
+ sed -i "s/find_pid_command=.*/find_pid_command=pidof NAME/" config-generic-linux
+}
+
+WEBMIN_LOGIN ?= "admin"
+WEBMIN_PASSWORD ?= "password"
+
+do_install() {
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/webmin
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 webmin-init ${D}${sysconfdir}/init.d/webmin
+
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/webmin.service ${D}${systemd_unitdir}/system
+ sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ ${D}${systemd_unitdir}/system/webmin.service
+
+ install -d ${D}${localstatedir}
+ install -d ${D}${localstatedir}/webmin
+
+ install -d ${D}${libexecdir}/webmin
+ cd ${S} || exit 1
+ tar --no-same-owner --exclude='./patches' --exclude='./.pc' -cpf - . \
+ | tar --no-same-owner -xpf - -C ${D}${libexecdir}/webmin
+
+ rm -f ${D}${libexecdir}/webmin/webmin-init
+ rm -f ${D}${libexecdir}/webmin/ajaxterm/ajaxterm/configure.initd.gentoo
+ rm -rf ${D}${libexecdir}/webmin/patches
+
+ # Run setup script
+ export perl=perl
+ export perl_runtime=${bindir}/perl
+ export prefix=${D}
+ export tempdir=${S}/install_tmp
+ export wadir=${libexecdir}/webmin
+ export config_dir=${sysconfdir}/webmin
+ export var_dir=${localstatedir}/webmin
+ export os_type=generic-linux
+ export os_version=0
+ export real_os_type="${DISTRO_NAME}"
+ export real_os_version="${DISTRO_VERSION}"
+ export port=10000
+ export login=${WEBMIN_LOGIN}
+ export password=${WEBMIN_PASSWORD}
+ export ssl=0
+ export atboot=1
+ export no_pam=1
+ mkdir -p $tempdir
+ ${S}/../setup.sh
+
+ # Ensure correct PERLLIB path
+ sed -i -e 's#${D}##g' ${D}${sysconfdir}/webmin/start
+}
+
+INITSCRIPT_NAME = "webmin"
+INITSCRIPT_PARAMS = "start 99 5 3 2 . stop 10 0 1 6 ."
+
+SYSTEMD_SERVICE_${PN} = "webmin.service"
+SYSTEMD_AUTO_ENABLE_${PN} = "disable"
+
+# FIXME: some of this should be figured out automatically
+RDEPENDS_${PN} += "perl perl-module-socket perl-module-exporter perl-module-exporter-heavy perl-module-carp perl-module-strict"
+RDEPENDS_${PN} += "perl-module-warnings perl-module-xsloader perl-module-posix perl-module-autoloader"
+RDEPENDS_${PN} += "perl-module-fcntl perl-module-tie-hash perl-module-vars perl-module-time-local perl-module-config perl-module-constant"
+RDEPENDS_${PN} += "perl-module-file-glob perl-module-file-copy perl-module-sdbm-file perl-module-feature"
+
+PACKAGES_DYNAMIC += "webmin-module-* webmin-theme-*"
+RRECOMMENDS_${PN} += "webmin-module-system-status"
+
+PACKAGES += "${PN}-module-proc ${PN}-module-raid ${PN}-module-exports ${PN}-module-fdisk ${PN}-module-lvm"
+RDEPENDS_${PN}-module-proc = "procps"
+RDEPENDS_${PN}-module-raid = "mdadm"
+RDEPENDS_${PN}-module-exports = "perl-module-file-basename perl-module-file-path perl-module-cwd perl-module-file-spec perl-module-file-spec-unix"
+RRECOMMENDS_${PN}-module-fdisk = "parted"
+RRECOMMENDS_${PN}-module-lvm = "lvm2"
+
+python populate_packages_prepend() {
+ import os, os.path
+
+ wadir = bb.data.expand('${libexecdir}/webmin', d)
+ wadir_image = bb.data.expand('${D}', d) + wadir
+ modules = []
+ themes = []
+ for mod in os.listdir(wadir_image):
+ modinfo = os.path.join(wadir_image, mod, "module.info")
+ themeinfo = os.path.join(wadir_image, mod, "theme.info")
+ if os.path.exists(modinfo):
+ modules.append(mod)
+ elif os.path.exists(themeinfo):
+ themes.append(mod)
+
+ do_split_packages(d, wadir, '^(%s)$' % "|".join(modules), 'webmin-module-%s', 'Webmin module for %s', allow_dirs=True, prepend=True)
+ do_split_packages(d, wadir, '^(%s)$' % "|".join(themes), 'webmin-theme-%s', 'Webmin theme for %s', allow_dirs=True, prepend=True)
+}
+
+# Time-savers
+package_do_pkgconfig() {
+ :
+}
diff --git a/meta-openembedded/meta-xfce/README b/meta-openembedded/meta-xfce/README
new file mode 100644
index 000000000..7431e8b7c
--- /dev/null
+++ b/meta-openembedded/meta-xfce/README
@@ -0,0 +1,22 @@
+This layer depends on:
+
+URI: git://github.com/openembedded/oe-core.git
+branch: master
+revision: HEAD
+
+URI: git://github.com/openembedded/meta-oe.git
+branch: master
+revision: HEAD
+meta-xfce depends on meta-oe, meta-gnome and meta-multimedia in this repository.
+
+To avoid dependencies on meta-multimedia you need to mask recipes by adding
+this to local.conf:
+
+BBMASK = "meta-xfce/recipes-multimedia"
+
+Send pull requests to openembedded-devel@lists.openembedded.org with '[meta-xfce]' in the subject'
+
+When sending single patches, please using something like:
+'git send-email -M -1 --to openembedded-devel@lists.openembedded.org --subject-prefix=meta-xfce][PATCH'
+
+Layer maintainer: Andreas Müller <schnitzeltony@googlemail.com>
diff --git a/meta-openembedded/meta-xfce/classes/thunar-plugin.bbclass b/meta-openembedded/meta-xfce/classes/thunar-plugin.bbclass
new file mode 100644
index 000000000..95f7d0088
--- /dev/null
+++ b/meta-openembedded/meta-xfce/classes/thunar-plugin.bbclass
@@ -0,0 +1,12 @@
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+DEPENDS += "thunar"
+
+SRC_URI = "http://archive.xfce.org/src/thunar-plugins/${BPN}/${@'${PV}'[0:3]}/${BPN}-${PV}.tar.bz2"
+
+FILES_${PN} += "${libdir}/thunarx-2/*.so"
+FILES_${PN}-dbg += "${libdir}/thunarx-2/.debug"
+FILES_${PN}-dev += "${libdir}/thunarx-2/*.la"
+
diff --git a/meta-openembedded/meta-xfce/classes/xfce-app.bbclass b/meta-openembedded/meta-xfce/classes/xfce-app.bbclass
new file mode 100644
index 000000000..1c31c2faa
--- /dev/null
+++ b/meta-openembedded/meta-xfce/classes/xfce-app.bbclass
@@ -0,0 +1,6 @@
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://archive.xfce.org/src/apps/${BPN}/${@xfce_verdir("${PV}")}/${BPN}-${PV}.tar.bz2"
+
diff --git a/meta-openembedded/meta-xfce/classes/xfce-git.bbclass b/meta-openembedded/meta-xfce/classes/xfce-git.bbclass
new file mode 100644
index 000000000..3fc18d275
--- /dev/null
+++ b/meta-openembedded/meta-xfce/classes/xfce-git.bbclass
@@ -0,0 +1,7 @@
+do_configure_prepend() {
+ cd ${S}
+ NOCONFIGURE=yes ./autogen.sh
+ cd ${B}
+}
+
+AUTOTOOLS_COPYACLOCAL = "1"
diff --git a/meta-openembedded/meta-xfce/classes/xfce-panel-plugin.bbclass b/meta-openembedded/meta-xfce/classes/xfce-panel-plugin.bbclass
new file mode 100644
index 000000000..6515dc0d4
--- /dev/null
+++ b/meta-openembedded/meta-xfce/classes/xfce-panel-plugin.bbclass
@@ -0,0 +1,13 @@
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+DEPENDS += "libxfce4ui libxfce4util xfce4-panel"
+
+SRC_URI = "http://archive.xfce.org/src/panel-plugins/${BPN}/${@'${PV}'[0:3]}/${BPN}-${PV}.tar.bz2"
+
+FILES_${PN} += "${datadir}/xfce4/panel-plugins/"
+FILES_${PN} += "${datadir}/xfce4/panel/plugins/"
+FILES_${PN} += "${libdir}/xfce4/panel-plugins/*.so"
+FILES_${PN} += "${libdir}/xfce4/panel/plugins/*.so"
+FILES_${PN}-dbg += "${libexecdir}/xfce4/panel-plugins/.debug"
diff --git a/meta-openembedded/meta-xfce/classes/xfce.bbclass b/meta-openembedded/meta-xfce/classes/xfce.bbclass
new file mode 100644
index 000000000..b49bba19b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/classes/xfce.bbclass
@@ -0,0 +1,22 @@
+def xfce_verdir(v):
+ import re
+ m = re.match("^([0-9]+)\.([0-9]+)", v)
+ return "%s.%s" % (m.group(1), m.group(2))
+
+HOMEPAGE = "http://www.xfce.org"
+SRC_URI = "http://archive.xfce.org/src/xfce/${BPN}/${@xfce_verdir("${PV}")}/${BPN}-${PV}.tar.bz2"
+
+inherit autotools gettext gtk-icon-cache pkgconfig
+
+DEPENDS += "intltool-native"
+
+FILES_${PN} += "${datadir}/icons/* ${datadir}/applications/* ${libdir}/xfce4/modules/*.so*"
+FILES_${PN}-doc += "${datadir}/xfce4/doc"
+
+FILES_${PN}-dev += "${libdir}/xfce4/*/*.la"
+FILES_${PN}-dev += "${libdir}/xfce4/*/*/*.la"
+FILES_${PN}-staticdev += "${libdir}/xfce4/*/*.a"
+FILES_${PN}-staticdev += "${libdir}/xfce4/*/*/*.a"
+FILES_${PN}-dbg += "${libdir}/xfce4/*/.debug"
+FILES_${PN}-dbg += "${libdir}/xfce4/*/*/.debug"
+
diff --git a/meta-openembedded/meta-xfce/conf/layer.conf b/meta-openembedded/meta-xfce/conf/layer.conf
new file mode 100644
index 000000000..bee8e7044
--- /dev/null
+++ b/meta-openembedded/meta-xfce/conf/layer.conf
@@ -0,0 +1,25 @@
+# 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 += "xfce-layer"
+BBFILE_PATTERN_xfce-layer := "^${LAYERDIR}/"
+BBFILE_PRIORITY_xfce-layer = "7"
+
+# This should only be incremented on significant changes that will
+# cause compatibility issues with other layers
+LAYERVERSION_xfce-layer = "1"
+
+LAYERDEPENDS_xfce-layer = "core"
+LAYERDEPENDS_xfce-layer += "openembedded-layer"
+LAYERDEPENDS_xfce-layer += "gnome-layer"
+LAYERDEPENDS_xfce-layer += "multimedia-layer"
+LAYERDEPENDS_xfce-layer += "meta-python"
+
+LAYERSERIES_COMPAT_xfce-layer = "sumo"
+
+SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
+ xfce4-session->machine-host \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.4.2.bb b/meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.4.2.bb
new file mode 100644
index 000000000..c846e7802
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/gigolo/gigolo_0.4.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Gigolo is a frontend to easily manage connections to remote filesystems using GIO/GVfs"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "gtk+ intltool-native xfce4-dev-tools-native"
+
+inherit xfce-app
+
+SRC_URI[md5sum] = "4abc6fde56572adf3ec3a0181092584c"
+SRC_URI[sha256sum] = "553fc78fe4e7bd2f01f3851baea7e63f6414fe652dfb4b08c60b5c4b2b909164"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.1.5.bb b/meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.1.5.bb
new file mode 100644
index 000000000..d1f3471d6
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/menulibre/menulibre_2.1.5.bb
@@ -0,0 +1,41 @@
+DESCRIPTION = "An advanced menu editor"
+HOMEPAGE = "https://launchpad.net/menulibre"
+SECTION = "x11/graphics"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+DEPENDS = " \
+ python3-distutils-extra-native \
+ intltool-native \
+"
+
+inherit distutils3 gtk-icon-cache distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "https://launchpad.net/menulibre/2.1/${PV}/+download/${PN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "efc7edb49bb0e5fea49e158b40573334"
+SRC_URI[sha256sum] = "ef05b2722bab2acb7070d6c8ed0e7bd58bd4a4540bf498af9e889944f9da08b5"
+
+do_compile() {
+}
+
+do_install_append() {
+ sed -i 's:${D}::g' ${D}${datadir}/applications/menulibre.desktop
+ sed -i 's:share/share:share:g' ${D}${PYTHON_SITEPACKAGES_DIR}/menulibre_lib/menulibreconfig.py
+}
+
+FILES_${PN} += " \
+ ${datadir}/applications \
+ ${datadir}/menulibre \
+ ${datadir}/icons \
+"
+
+RDEPENDS_${PN} += " \
+ gtk+3 \
+ gtksourceview3 \
+ python3-pygobject \
+ gnome-menus3 \
+ python3-unixadmin \
+ python3-psutil \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.4.0.bb b/meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.4.0.bb
new file mode 100644
index 000000000..4ca21a6bc
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/mousepad/mousepad_0.4.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "A simple text editor for Xfce"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+# intltool to provide intltool.m4 with AC_PROG_INTLTOOL
+# xfce4-dev-tools-native for XDT_I18N macro and more importantly XDT_CHECK_OPTIONAL_PACKAGE
+# which fixes mousepad/Makefile.am:72: error: HAVE_DBUS does not appear in AM_CONDITIONAL
+DEPENDS = "gtk+ dbus dbus-glib gtksourceview2 intltool-native xfce4-dev-tools-native"
+
+inherit xfce-app gsettings
+
+SRC_URI[md5sum] = "f55314c5dda6323883241e6cf01550a7"
+SRC_URI[sha256sum] = "60114431eac8db6bb6ce18bd38f1630cccb684375b97a445a1b6fd619848d132"
+
+# we have no gtksourceview 3.x around
+EXTRA_OECONF = "--disable-gtk3"
+
+FILES_${PN} += "${datadir}/glib-2.0/schemas"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.12.1.bb b/meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.12.1.bb
new file mode 100644
index 000000000..a2f25682b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/orage/orage_4.12.1.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Xfce Calender"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
+DEPENDS = "gtk+ xfce4-panel libical popt"
+
+inherit xfce-app
+
+SRC_URI[md5sum] = "2b7f5d38cb5c6edbcc65d0f52a742e46"
+SRC_URI[sha256sum] = "3cf9aa441ae83c8688865f82217025cdf3ebaa152cce4571777b8c2aa8dd9062"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[notify] = "--enable-libnotify,--disable-libnotify,libnotify"
+
+PACKAGES =+ "xfce4-orageclock-plugin"
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dbg += "${libdir}/xfce4/panel/plugins/.debug"
+FILES_xfce4-orageclock-plugin = "${libdir}/xfce4/panel/plugins/*.so ${datadir}/xfce4/panel/plugins"
+
diff --git a/meta-openembedded/meta-xfce/recipes-apps/ristretto/ristretto_0.8.2.bb b/meta-openembedded/meta-xfce/recipes-apps/ristretto/ristretto_0.8.2.bb
new file mode 100644
index 000000000..c4baa727e
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/ristretto/ristretto_0.8.2.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Tiny image-viewer"
+HOMEPAGE = "http://goodies.xfce.org/projects/applications/ristretto"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=35d145429ad3cbf5308d1dc93f66376b"
+DEPENDS = "exo libexif gtk+ dbus-glib libxfce4ui libxfce4util xfconf cairo file"
+
+inherit xfce-app
+
+RRECOMMENDS_${PN} += "tumbler"
+
+SRC_URI[md5sum] = "a8d8bb6b8fa7f868cfa3ae778630946e"
+SRC_URI[sha256sum] = "f8f3b77ca6fc77ddf8cff1bb52e5c5802c462663f72f324393b3a0360f6901b8"
+
+FILES_${PN} += "${datadir}/appdata"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_git.bb b/meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_git.bb
new file mode 100644
index 000000000..a27c8f553
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xarchiver/xarchiver_git.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Lightweight, desktop independent GTK+ archive manager"
+HOMEPAGE = "http://xarchiver.sourceforge.net"
+SECTION = "x11"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "gtk+ glib-2.0 xfce4-dev-tools-native intltool-native"
+
+SRC_URI = "git://github.com/schnitzeltony/xarchiver.git;branch=master"
+SRCREV = "5a26dd8ceab0af71b30c83286d7c7398a858c814"
+PV = "0.5.3"
+S = "${WORKDIR}/git"
+
+inherit xfce-git gettext pkgconfig autotools gtk-icon-cache distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+# install tap files for thunar-archive-plugin in ${libdir}/thunar-archive-plugin
+EXTRA_OECONF += "--libexecdir=${libdir}"
+
+EXTRA_OECONF += "--enable-maintainer-mode"
+
+FILES_${PN} += "${libdir}/thunar-archive-plugin"
+
+RRECOMMENDS_${PN} = "lzop zip tar bzip2 unzip xz"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/files/0001-fix-Name-Comment-fields.patch b/meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/files/0001-fix-Name-Comment-fields.patch
new file mode 100644
index 000000000..e872249d5
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/files/0001-fix-Name-Comment-fields.patch
@@ -0,0 +1,34 @@
+From fb1f83c04dd5262897b09e60fa8b39090d0d4619 Mon Sep 17 00:00:00 2001
+From: Rex Dieter <rdieter@math.unl.edu>
+Date: Thu, 12 Nov 2015 13:53:03 -0600
+Subject: [PATCH] fix Name/Comment fields
+
+Validate as a valid .desktop file per
+http://standards.freedesktop.org/desktop-entry-spec/latest/
+
+See also issue #2
+
+Upstream-Status: Applied [1]
+
+[1] https://github.com/ncopa/xfce-polkit/commit/fb1f83c04dd5262897b09e60fa8b39090d0d4619
+---
+ xfce-polkit.desktop.in | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/xfce-polkit.desktop.in b/xfce-polkit.desktop.in
+index 8575896..dd9f09c 100644
+--- a/xfce-polkit.desktop.in
++++ b/xfce-polkit.desktop.in
+@@ -1,7 +1,7 @@
+ [Desktop Entry]
+ Type=Application
+-_Name=XFCE PolKit
+-_Comment=Policykit Authentication Agent
++Name=XFCE PolKit
++Comment=Policykit Authentication Agent
+ Exec=@xfce_polkit_libexecdir@/xfce-polkit
+ Icon=gtk-dialog-authentication
+ NotShowIn=GNOME;KDE;
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/xfce-polkit_0.2.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/xfce-polkit_0.2.bb
new file mode 100644
index 000000000..54bf7c752
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce-polkit/xfce-polkit_0.2.bb
@@ -0,0 +1,14 @@
+SUMMARY = "A simple PolicyKit authentication agent for XFCE"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=758b03f872a88c99fc36d50c5932091c"
+
+DEPENDS = "libxfce4ui polkit"
+
+inherit xfce-app
+
+SRC_URI = " \
+ git://github.com/ncopa/${BPN}.git \
+ file://0001-fix-Name-Comment-fields.patch \
+"
+SRCREV = "6ad1ee833c9e22e4dd72a8f7d54562d046965283"
+S = "${WORKDIR}/git"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-mixer/xfce4-mixer_4.11.0.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-mixer/xfce4-mixer_4.11.0.bb
new file mode 100644
index 000000000..bdbec458b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-mixer/xfce4-mixer_4.11.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "A volume control application based on GStreamer"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "glib-2.0 gst-plugins-base gtk+ xfconf libunique"
+
+SRC_URI = "http://archive.xfce.org/src/apps/${BPN}/${@xfce_verdir("${PV}")}/${BPN}-${PV}.tar.bz2"
+
+SRC_URI[md5sum] = "1b3753b91224867a3a2dfddda239c28d"
+SRC_URI[sha256sum] = "fb0c1df201ed1130f54f15b914cbe5a59286e994a137acda5609570c57112de2"
+
+RDEPENDS_${PN} = "gst-meta-audio"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-notifyd/xfce4-notifyd_0.4.2.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-notifyd/xfce4-notifyd_0.4.2.bb
new file mode 100644
index 000000000..15ec51b2b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-notifyd/xfce4-notifyd_0.4.2.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Easily themable notification daemon with transparency effects"
+HOMEPAGE = "http://goodies.xfce.org/projects/applications/xfce4-notifyd"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = " \
+ dbus \
+ dbus-glib \
+ dbus-glib-native \
+ libnotify \
+ libxfce4util \
+ libxfce4ui \
+ xfconf \
+ xfce4-panel \
+"
+
+inherit xfce-app
+
+SRC_URI[md5sum] = "ecb930ef6ae6e1f310a5afe5f638eff8"
+SRC_URI[sha256sum] = "f6f28af47fdfb41db84bd003f0d76f5f4abf2137d1e27e9d378f063bb8f82356"
+
+# Avoid trouble with other desktops e.g KDE which also ships dbus service named
+# org.freedesktop.Notifications
+EXTRA_OECONF = "--disable-dbus-start-daemon"
+
+do_compile_prepend() {
+ mkdir -p xfce4-notifyd xfce4-notifyd-config
+}
+
+FILES_${PN} += " \
+ ${systemd_user_unitdir} \
+ ${datadir}/xfce4 \
+ ${datadir}/themes \
+ ${datadir}/dbus-1 \
+ ${libdir}/xfce4 \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.9.1.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.9.1.bb
new file mode 100644
index 000000000..e449dceed
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-screenshooter/xfce4-screenshooter_1.9.1.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Application to take screenshots"
+HOMEPAGE = "http://goodies.xfce.org/projects/applications/xfce4-screenshooter"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d791728a073bc009b4ffaf00b7599855"
+DEPENDS = "xfce4-panel libxfce4util libxfce4ui gdk-pixbuf gtk+ glib-2.0 libsoup-2.4 exo libxfixes xext virtual/libx11"
+
+inherit xfce-app
+
+SRC_URI[md5sum] = "75e1501418f904769e4fd25eff6a3946"
+SRC_URI[sha256sum] = "e62b31d9cf06a7414a26400c2ebe7a2ae7c2b22aa60f997f25145ea9ebe6e0db"
+
+do_compile_prepend() {
+ mkdir -p lib
+ mkdir -p src
+}
+
+FILES_${PN} += " \
+ ${datadir}/appdata \
+ ${datadir}/xfce4/panel/plugins \
+ ${libdir}/xfce4/panel/plugins \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.2.0.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.2.0.bb
new file mode 100644
index 000000000..f9555852d
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-taskmanager/xfce4-taskmanager_1.2.0.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Easy to use task manager"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit xfce-app
+
+DEPENDS += "gtk+ cairo libwnck libxmu xfce4-dev-tools-native exo-native"
+
+SRC_URI[md5sum] = "6f30ce3c688454812008281065a6e05c"
+SRC_URI[sha256sum] = "5746d473ad428b13db7c05cfcbc8099fbea13da6be26d3a9359bcb4de971ba69"
diff --git a/meta-openembedded/meta-xfce/recipes-apps/xfce4-terminal/xfce4-terminal_0.8.7.3.bb b/meta-openembedded/meta-xfce/recipes-apps/xfce4-terminal/xfce4-terminal_0.8.7.3.bb
new file mode 100644
index 000000000..7630abc6b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-apps/xfce4-terminal/xfce4-terminal_0.8.7.3.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Terminal emulator for the Xfce desktop environment"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "glib-2.0 gtk+3 vte libxfce4ui"
+
+inherit xfce-app
+
+FILES_${PN} += "${datadir}/xfce4 \
+ ${datadir}/gnome-control-center"
+
+SRC_URI[md5sum] = "f014d613438848b452f1f9eecbf7027d"
+SRC_URI[sha256sum] = "dafa155177934fc7dce2d4efb33402f74b1a593a17ff17d2187a6429f599dfd6"
diff --git a/meta-openembedded/meta-xfce/recipes-art/cursor-themes/openzone_1.2.3.bb b/meta-openembedded/meta-xfce/recipes-art/cursor-themes/openzone_1.2.3.bb
new file mode 100644
index 000000000..df0ed50c7
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-art/cursor-themes/openzone_1.2.3.bb
@@ -0,0 +1,31 @@
+SUMMARY = "X11 Mouse Theme"
+HOMEPAGE = "http://xfce-look.org/content/show.php/OpenZone?content=111343"
+SECTION = "x11/wm"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a2f562fb8fb1e138b810d69521c4bcd7"
+
+inherit allarch gtk-icon-cache
+
+SRC_URI = "http://xfce-look.org/CONTENT/content-files/111343-OpenZone-${PV}.tar.xz"
+SRC_URI[md5sum] = "4dae968cbd525072664ef7a4fc7c4154"
+SRC_URI[sha256sum] = "dc20f97a49e1ff1becf7853ef5f137ed30a4c27490540e755021d78d339efd92"
+
+S = "${WORKDIR}/OpenZone"
+
+do_compile() {
+}
+
+do_install() {
+ install -d ${D}${datadir}/icons
+ for theme in `find -name '*.tar.xz'`; do
+ tar -Jxf ${theme} -C ${D}${datadir}/icons
+ done
+}
+
+python populate_packages_prepend () {
+ icondir = bb.data.expand('${datadir}/icons', d)
+ do_split_packages(d, icondir, '^(.*)', '%s', 'Open Zone cursors %s', allow_dirs=True)
+}
+
+PACKAGES_DYNAMIC += "^openzone-.*"
+ALLOW_EMPTY_${PN} = "1"
diff --git a/meta-openembedded/meta-xfce/recipes-art/rodent-icon-theme/rodent-icon-theme_5.0.bb b/meta-openembedded/meta-xfce/recipes-art/rodent-icon-theme/rodent-icon-theme_5.0.bb
new file mode 100644
index 000000000..40ba340f2
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-art/rodent-icon-theme/rodent-icon-theme_5.0.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Rodent-icon-theme (was xfce4-icon-theme) is a svg icon theme"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b"
+
+inherit allarch autotools gtk-icon-cache
+
+SRC_URI = "http://sourceforge.net/projects/xffm/files/${BPN}/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "4b097d344a160d6497c6498985c8df15"
+SRC_URI[sha256sum] = "6ed00d16faa1f55b3bb7b13862de1d7f5cfd978b93e42487ded21595d0dbe208"
+
+FILES_${PN} += "${datadir}/icons"
+
+RREPLACES_${PN} += "xfce4-icon-theme"
+RPROVIDES_${PN} += "xfce4-icon-theme"
+RCONFLICTS_${PN} += "xfce4-icon-theme"
+
diff --git a/meta-openembedded/meta-xfce/recipes-art/xfce-dusk-gtk3/xfce-dusk-gtk3_1.3.bb b/meta-openembedded/meta-xfce/recipes-art/xfce-dusk-gtk3/xfce-dusk-gtk3_1.3.bb
new file mode 100644
index 000000000..b05c74852
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-art/xfce-dusk-gtk3/xfce-dusk-gtk3_1.3.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Modified version of the xfce-dusk theme to support also gtk 3.x too"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=8f0e2cd40e05189ec81232da84bd6e1a"
+
+inherit allarch
+
+SRC_URI = "http://xfce-look.org/CONTENT/content-files/141404-xfce_dusk_gtk3-1_3.tar.gz;subdir=${BPN}-${PV}"
+SRC_URI[md5sum] = "b3ad37ad8173b14ec090e60a80e65d8f"
+SRC_URI[sha256sum] = "bfa8a88607d1a1da5bd0b9e4e075767c54400a3c5a0fae88b619ed71532f30b4"
+
+do_configure() {
+}
+
+do_install() {
+ install -d ${D}${datadir}/themes
+ cp -r Xfce-dusk-gtk3 ${D}${datadir}/themes/Xfce-dusk-gtk3
+}
+
+FILES_${PN} = "${datadir}/themes"
diff --git a/meta-openembedded/meta-xfce/recipes-art/xfwm4-themes/xfwm4-themes_4.10.0.bb b/meta-openembedded/meta-xfce/recipes-art/xfwm4-themes/xfwm4-themes_4.10.0.bb
new file mode 100644
index 000000000..7030f7a26
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-art/xfwm4-themes/xfwm4-themes_4.10.0.bb
@@ -0,0 +1,19 @@
+SUMMARY = "Additional (old) themes for Xfwm4"
+SECTION = "x11/wm"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit xfce
+
+SRC_URI = "http://archive.xfce.org/src/art/${BPN}/${@'${PV}'[0:4]}/${BP}.tar.bz2"
+SRC_URI[md5sum] = "eaa58362053a3549c8be0b32efd3c54f"
+SRC_URI[sha256sum] = "3214d5f00e9703b5e8c9e7c3287d606dedec7285ceb4d5db332e93ada66fd575"
+
+# using xfwm4-theme as in xfwm4 might cause warnings of packages supplied by
+# multiple providers. So we use xfwm4-old-theme here.
+python populate_packages_prepend () {
+ themedir = d.expand('${datadir}/themes')
+ do_split_packages(d, themedir, '^(.*)', 'xfwm4-old-theme-%s', 'XFWM4 theme %s', allow_dirs=True)
+}
+
+PACKAGES_DYNAMIC += "^xfwm4-old-theme-.*"
diff --git a/meta-openembedded/meta-xfce/recipes-bindings/vala/xfce4-vala_4.10.3.bb b/meta-openembedded/meta-xfce/recipes-bindings/vala/xfce4-vala_4.10.3.bb
new file mode 100644
index 000000000..28f9cde97
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-bindings/vala/xfce4-vala_4.10.3.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Xfce4 Vala provides bindings for the Xfce framework"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=243b725d71bb5df4a1e5920b344b86ad"
+DEPENDS = "libxfce4util garcon xfconf libxfce4ui xfce4-panel exo vala xfce4-dev-tools-native"
+
+inherit xfce pkgconfig distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://archive.xfce.org/src/bindings/${BPN}/${@xfce_verdir("${PV}")}/${BPN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "0bbb1d6e473e0fe9b335b7b1b49d8a71"
+SRC_URI[sha256sum] = "07a8f2b7c09fcdd3d86e0c52adea3c58ca011d0142a93997a01b4af77260ae7b"
+
+EXTRA_OECONF = "-with-vala-api=0.38"
+
+FILES_${PN} += "${datadir}/vala-*/vapi"
+
+RDEPENDS_${PN} = "vala"
diff --git a/meta-openembedded/meta-xfce/recipes-core/images/core-image-minimal-xfce.bb b/meta-openembedded/meta-xfce/recipes-core/images/core-image-minimal-xfce.bb
new file mode 100644
index 000000000..21930ba14
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-core/images/core-image-minimal-xfce.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "A XFCE minimal demo image."
+
+IMAGE_INSTALL = "packagegroup-core-boot \
+ packagegroup-core-x11 \
+ packagegroup-xfce-base \
+ kernel-modules \
+"
+
+inherit distro_features_check
+REQUIRED_DISTRO_FEATURES = "x11"
+
+IMAGE_LINGUAS ?= " "
+
+LICENSE = "MIT"
+
+export IMAGE_BASENAME = "core-image-minimal-xfce"
+
+inherit core-image
diff --git a/meta-openembedded/meta-xfce/recipes-extended/imsettings/imsettings_1.7.3.bb b/meta-openembedded/meta-xfce/recipes-extended/imsettings/imsettings_1.7.3.bb
new file mode 100644
index 000000000..8f622bf6f
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-extended/imsettings/imsettings_1.7.3.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Delivery framework for general Input Method configuration"
+DESCRIPTION = "IMSettings is a framework that delivers Input Method \
+settings and applies the changes so they take effect \
+immediately without any need to restart applications \
+or the desktop. \
+This package contains the core DBus services and some utilities."
+HOMEPAGE = "http://code.google.com/p/imsettings/"
+SECTION = "Applications/System"
+
+inherit autotools gtk-doc gobject-introspection distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "https://bitbucket.org/tagoh/imsettings/downloads/${BPN}-${PV}.tar.bz2 \
+ "
+
+SRC_URI[md5sum] = "c6c65a2b2654fe9dfe9ab2e8b80c079a"
+SRC_URI[sha256sum] = "196d3a74cef254ff812c32682d1818d740e36a68b976fef9e99748d23a71a71a"
+
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+EXTRA_OECONF = "--with-xinputsh=50-xinput.sh \
+ --disable-static \
+ "
+
+DEPENDS = "gtk+ gconf libnotify dbus-glib libgxim xfconf intltool-native"
+
+RDEPENDS_${PN} += "bash"
+
+FILES_${PN} += "${datadir}/dbus-1/* ${datadir}/gir-1.0/* ${libdir}/girepository-1.0/*"
diff --git a/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-Makefile.am-use-LIBTOOL-instead-of-hardcoded-libtool.patch b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-Makefile.am-use-LIBTOOL-instead-of-hardcoded-libtool.patch
new file mode 100644
index 000000000..2b5eda0d1
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-Makefile.am-use-LIBTOOL-instead-of-hardcoded-libtool.patch
@@ -0,0 +1,27 @@
+From f39bcd5af79aa3efe2cecb2212793c5b596890a8 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin <alex.kanavin@gmail.com>
+Date: Thu, 18 Feb 2016 17:40:45 +0200
+Subject: [PATCH] Makefile.am: use $(LIBTOOL) instead of hardcoded libtool name
+
+Upstream-Status: Pending
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ unique/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/unique/Makefile.am b/unique/Makefile.am
+index 6475a87..734f431 100644
+--- a/unique/Makefile.am
++++ b/unique/Makefile.am
+@@ -114,7 +114,7 @@ Unique-1.0.gir: $(INTROSPECTION_SCANNER) libunique-1.0.la
+ --include=GObject-2.0 \
+ --include=Gtk-2.0 \
+ --library=libunique-1.0.la \
+- --libtool="$(top_builddir)/libtool" \
++ --libtool="$(LIBTOOL)" \
+ --pkg gobject-2.0 \
+ --pkg gtk+-2.0 \
+ --output $@ \
+--
+2.7.0
+
diff --git a/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-test-unique-Add-format-qualifier-s-for-string.patch b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-test-unique-Add-format-qualifier-s-for-string.patch
new file mode 100644
index 000000000..7f9fdf397
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/0001-test-unique-Add-format-qualifier-s-for-string.patch
@@ -0,0 +1,32 @@
+From 37632aca00d48c53e91f08bc7435c721ba81b2cd Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 30 Mar 2017 14:32:55 -0700
+Subject: [PATCH] test-unique: Add format qualifier %s for string
+
+Fixes potential security issues that compiler flags
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ tests/test-unique.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/tests/test-unique.c b/tests/test-unique.c
+index b7cde45..82ee81b 100644
+--- a/tests/test-unique.c
++++ b/tests/test-unique.c
+@@ -82,10 +82,10 @@ app_message_cb (UniqueApp *app,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_CLOSE,
+- title);
++ "%s",title);
+ if (message)
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+- message);
++ "%s",message);
+
+ gtk_window_set_urgency_hint (GTK_WINDOW (dialog), TRUE);
+
+--
+2.12.1
+
diff --git a/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/build.patch b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/build.patch
new file mode 100644
index 000000000..46a5c62e4
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/build.patch
@@ -0,0 +1,421 @@
+Upstream-Status: Backport [http://git.gnome.org/browse/unique/commit/?h=unique-1.1&id=f75ca2d7aad7d27686acca6090c1c569a79d7e63]
+Signed-off-By: Ross Burton <ross.burton@intel.com>
+
+From f75ca2d7aad7d27686acca6090c1c569a79d7e63 Mon Sep 17 00:00:00 2001
+From: Emmanuele Bassi <ebassi@gnome.org>
+Date: Sat, 08 May 2010 11:17:21 +0000
+Subject: build: Update the build environment
+
+Require autoconf 2.63, automake 1.11 and libtool 2.2.6 to remove Shave.
+
+Also bump up the requirement for gobject-introspection to 0.6.7.
+---
+diff --git a/build/autotools/Makefile.am b/build/autotools/Makefile.am
+index 5f35b85..b78428f 100644
+--- a/build/autotools/Makefile.am
++++ b/build/autotools/Makefile.am
+@@ -1,7 +1,4 @@
+ EXTRA_DIST = \
+- shave-libtool.in \
+- shave.in \
+- shave.m4 \
+ as-compiler-flag.m4 \
+ introspection.m4 \
+ Makefile.am.enums \
+diff --git a/build/autotools/Makefile.am.silent b/build/autotools/Makefile.am.silent
+index 249f6af..8576846 100644
+--- a/build/autotools/Makefile.am.silent
++++ b/build/autotools/Makefile.am.silent
+@@ -1,10 +1,5 @@
+ # custom rules for quiet builds
+
+-if USE_SHAVE
+-QUIET_GEN = $(Q:@=@echo ' GEN '$@;)
+-QUIET_LN = $(Q:@=@echo ' LN '$@;)
+-QUIET_RM = $(Q:@=@echo ' RM '$@;)
+-else
+ QUIET_GEN = $(AM_V_GEN)
+
+ QUIET_LN = $(QUIET_LN_$(V))
+@@ -14,4 +9,3 @@ QUIET_LN_0 = @echo ' LN '$@;
+ QUIET_RM = $(QUIET_RM_$(V))
+ QUIET_RM_ = $(QUIET_RM_$(AM_DEFAULT_VERBOSITY))
+ QUIET_RM_0 = @echo ' RM '$@;
+-endif # USE_SHAVE
+diff --git a/build/autotools/introspection.m4 b/build/autotools/introspection.m4
+index f9ce49c..589721c 100644
+--- a/build/autotools/introspection.m4
++++ b/build/autotools/introspection.m4
+@@ -59,12 +59,18 @@ m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
+ INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
+ INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
+ INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
++ INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
++ INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
++ INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
+ fi
+ AC_SUBST(INTROSPECTION_SCANNER)
+ AC_SUBST(INTROSPECTION_COMPILER)
+ AC_SUBST(INTROSPECTION_GENERATE)
+ AC_SUBST(INTROSPECTION_GIRDIR)
+ AC_SUBST(INTROSPECTION_TYPELIBDIR)
++ AC_SUBST(INTROSPECTION_CFLAGS)
++ AC_SUBST(INTROSPECTION_LIBS)
++ AC_SUBST(INTROSPECTION_MAKEFILE)
+
+ AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
+ ])
+diff --git a/build/autotools/shave-libtool.in b/build/autotools/shave-libtool.in
+deleted file mode 100644
+index 1f3a720..0000000
+--- a/build/autotools/shave-libtool.in
++++ b/dev/null
+@@ -1,69 +0,0 @@
+-#!/bin/sh
+-
+-# we need sed
+-SED=@SED@
+-if test -z "$SED" ; then
+-SED=sed
+-fi
+-
+-lt_unmangle ()
+-{
+- last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
+-}
+-
+-# the real libtool to use
+-LIBTOOL="$1"
+-shift
+-
+-# if 1, don't print anything, the underlaying wrapper will do it
+-pass_though=0
+-
+-# scan the arguments, keep the right ones for libtool, and discover the mode
+-preserved_args=
+-while test "$#" -gt 0; do
+- opt="$1"
+- shift
+-
+- case $opt in
+- --mode=*)
+- mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
+- preserved_args="$preserved_args $opt"
+- ;;
+- -o)
+- lt_output="$1"
+- preserved_args="$preserved_args $opt"
+- ;;
+- *)
+- preserved_args="$preserved_args $opt"
+- ;;
+- esac
+-done
+-
+-case "$mode" in
+-compile)
+- # shave will be called and print the actual CC/CXX/LINK line
+- preserved_args="$preserved_args --shave-mode=$mode"
+- pass_though=1
+- ;;
+-link)
+- preserved_args="$preserved_args --shave-mode=$mode"
+- Q=" LINK "
+- ;;
+-*)
+- # let's u
+- # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
+- ;;
+-esac
+-
+-lt_unmangle "$lt_output"
+-output=$last_result
+-
+-if test -z $V; then
+- if test $pass_though -eq 0; then
+- echo "$Q$output"
+- fi
+- $LIBTOOL --silent $preserved_args
+-else
+- echo $LIBTOOL $preserved_args
+- $LIBTOOL $preserved_args
+-fi
+diff --git a/build/autotools/shave.in b/build/autotools/shave.in
+deleted file mode 100644
+index 5c16f27..0000000
+--- a/build/autotools/shave.in
++++ b/dev/null
+@@ -1,79 +0,0 @@
+-#!/bin/sh
+-
+-# we need sed
+-SED=@SED@
+-if test -z "$SED" ; then
+-SED=sed
+-fi
+-
+-lt_unmangle ()
+-{
+- last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
+-}
+-
+-# the tool to wrap (cc, cxx, ar, ranlib, ..)
+-tool="$1"
+-shift
+-
+-# the reel tool (to call)
+-REEL_TOOL="$1"
+-shift
+-
+-pass_through=0
+-preserved_args=
+-while test "$#" -gt 0; do
+- opt="$1"
+- shift
+-
+- case $opt in
+- --shave-mode=*)
+- mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
+- ;;
+- -o)
+- lt_output="$1"
+- preserved_args="$preserved_args $opt"
+- ;;
+- *)
+- preserved_args="$preserved_args $opt"
+- ;;
+- esac
+-done
+-
+-# mode=link is handled in the libtool wrapper
+-case "$mode,$tool" in
+-link,*)
+- pass_through=1
+- ;;
+-*,cxx)
+- Q=" CXX "
+- ;;
+-*,cc)
+- Q=" CC "
+- ;;
+-*,fc)
+- Q=" FC "
+- ;;
+-*,f77)
+- Q=" F77 "
+- ;;
+-*,objc)
+- Q=" OBJC "
+- ;;
+-*,*)
+- # should not happen
+- Q=" CC "
+- ;;
+-esac
+-
+-lt_unmangle "$lt_output"
+-output=$last_result
+-
+-if test -z $V; then
+- if test $pass_through -eq 0; then
+- echo "$Q$output"
+- fi
+- $REEL_TOOL $preserved_args
+-else
+- echo $REEL_TOOL $preserved_args
+- $REEL_TOOL $preserved_args
+-fi
+diff --git a/build/autotools/shave.m4 b/build/autotools/shave.m4
+deleted file mode 100644
+index 0a3509e..0000000
+--- a/build/autotools/shave.m4
++++ b/dev/null
+@@ -1,77 +0,0 @@
+-dnl Make automake/libtool output more friendly to humans
+-dnl Damien Lespiau <damien.lespiau@gmail.com>
+-dnl
+-dnl SHAVE_INIT([shavedir],[default_mode])
+-dnl
+-dnl shavedir: the directory where the shave scripts are, it defaults to
+-dnl $(top_builddir)
+-dnl default_mode: (enable|disable) default shave mode. This parameter
+-dnl controls shave's behaviour when no option has been
+-dnl given to configure. It defaults to disable.
+-dnl
+-dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
+-dnl before AC_CONFIG_FILE/AC_OUTPUT is perfect. This macro rewrites CC and
+-dnl LIBTOOL, you don't want the configure tests to have these variables
+-dnl re-defined.
+-dnl * This macro requires GNU make's -s option.
+-
+-AC_DEFUN([_SHAVE_ARG_ENABLE],
+-[
+- AC_ARG_ENABLE([shave],
+- AS_HELP_STRING(
+- [--enable-shave],
+- [use shave to make the build pretty [[default=$1]]]),,
+- [enable_shave=$1]
+- )
+-])
+-
+-AC_DEFUN([SHAVE_INIT],
+-[
+- dnl you can tweak the default value of enable_shave
+- m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
+-
+- if test x"$enable_shave" = xyes; then
+- dnl where can we find the shave scripts?
+- m4_if([$1],,
+- [shavedir="$ac_pwd"],
+- [shavedir="$ac_pwd/$1"])
+- AC_SUBST(shavedir)
+-
+- dnl make is now quiet
+- AC_SUBST([MAKEFLAGS], [-s])
+- AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
+-
+- dnl we need sed
+- AC_CHECK_PROG(SED,sed,sed,false)
+-
+- dnl substitute libtool
+- SHAVE_SAVED_LIBTOOL=$LIBTOOL
+- LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
+- AC_SUBST(LIBTOOL)
+-
+- dnl substitute cc/cxx
+- SHAVE_SAVED_CC=$CC
+- SHAVE_SAVED_CXX=$CXX
+- SHAVE_SAVED_FC=$FC
+- SHAVE_SAVED_F77=$F77
+- SHAVE_SAVED_OBJC=$OBJC
+- CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
+- CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
+- FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
+- F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
+- OBJC="${SHELL} ${shavedir}/shave objc ${SHAVE_SAVED_OBJC}"
+- AC_SUBST(CC)
+- AC_SUBST(CXX)
+- AC_SUBST(FC)
+- AC_SUBST(F77)
+- AC_SUBST(OBJC)
+-
+- V=@
+- else
+- V=1
+- fi
+- Q='$(V:1=)'
+- AC_SUBST(V)
+- AC_SUBST(Q)
+-])
+-
+diff --git a/configure.ac b/configure.ac
+index a3ed3ee..bc3163a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -14,7 +14,7 @@ m4_define([unique_api_version], [1.0])
+ # This is the X.Y used in the protocol negotiation
+ m4_define([unique_protocol_version], [1.0])
+
+-AC_PREREQ([2.59])
++AC_PREREQ([2.63])
+
+ AC_INIT([unique], [unique_version],
+ [http://bugzilla.gnome.org/enter_bug.cgi?product=libunique],
+@@ -23,9 +23,21 @@ AC_INIT([unique], [unique_version],
+ AC_CONFIG_SRCDIR([unique/unique.h])
+ AC_CONFIG_MACRO_DIR([build/autotools])
+
+-AM_INIT_AUTOMAKE([1.10])
++AM_INIT_AUTOMAKE([1.11 no-define -Wno-portability dist-bzip2])
+ AM_CONFIG_HEADER([config.h])
+
++AM_SILENT_RULES([yes])
++
++AC_PROG_CC_C_O
++
++AM_PATH_GLIB_2_0
++
++LT_PREREQ([2.2.6])
++LT_INIT([disable-static])
++
++# Honor aclocal flags
++ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
++
+ # version symbols
+ UNIQUE_MAJOR_VERSION=unique_major_version
+ UNIQUE_MINOR_VERSION=unique_minor_version
+@@ -49,21 +61,6 @@ UNIQUE_LT_CURRENT_MINUS_AGE=m4_eval(lt_current - lt_age)
+ AC_SUBST(UNIQUE_LT_VERSION_INFO)
+ AC_SUBST(UNIQUE_LT_CURRENT_MINUS_AGE)
+
+-AC_ISC_POSIX
+-AC_PROG_CC
+-AC_PROG_INSTALL
+-AC_PROG_MAKE_SET
+-AC_C_CONST
+-AC_PROG_LIBTOOL
+-AC_PATH_PROG(GLIB_MKENUMS, [glib-mkenums])
+-AC_PATH_PROG(GLIB_GENMARSHAL, [glib-genmarshal])
+-
+-AM_SANITY_CHECK
+-AM_PROG_CC_STDC
+-
+-# Honor aclocal flags
+-ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
+-
+ m4_define([glib_required], [2.12.0])
+ m4_define([gtk_required], [2.11.0])
+ m4_define([dbus_required], [0.70])
+@@ -122,7 +119,6 @@ AM_CONDITIONAL([HAVE_DBUS], [test "x$have_dbus" = "xyes"])
+ dnl Bacon backend
+ dnl This is the fallback backend, so we *need* these headers and functions
+ dnl even if we end up using D-Bus
+-dnl D-Bus backend dependencies
+ m4_define([have_bacon_default], [yes])
+ AC_ARG_ENABLE([bacon],
+ [AC_HELP_STRING([--enable-bacon=@<:@yes/no@:>@],
+@@ -178,9 +174,9 @@ AC_ARG_ENABLE([maintainer-flags],
+ AS_IF([test "x$enable_maintainer_flags" = "xyes" && test "x$GCC" = "xyes"],
+ [
+ AS_COMPILER_FLAGS([MAINTAINER_CFLAGS],
+- ["-Werror -Wall -Wshadow -Wcast-align
+- -Wno-uninitialized -Wempty-body -Wformat-security
+- -Winit-self"])
++ ["-Wall -Wshadow -Wcast-align
++ -Wno-uninitialized -Wempty-body
++ -Wformat-security -Winit-self"])
+ ]
+ )
+
+@@ -230,27 +226,10 @@ AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],
+ AM_GLIB_DEFINE_LOCALEDIR(UNIQUE_LOCALEDIR)
+
+ # introspection
+-GOBJECT_INTROSPECTION_CHECK([0.6.3])
++GOBJECT_INTROSPECTION_CHECK([0.6.7])
+
+ # gtk-doc
+-GTK_DOC_CHECK([1.11])
+-
+-# nice builds
+-m4_ifdef([AM_SILENT_RULES],
+- [
+- AM_SILENT_RULES([yes])
+- use_shave=no
+- ],
+- [
+- SHAVE_INIT([build/autotools], [enable])
+- AC_CONFIG_FILES([
+- build/autotools/shave-libtool
+- build/autotools/shave
+- ])
+- use_shave=yes
+- ])
+-
+-AM_CONDITIONAL([USE_SHAVE], [test "x$use_shave" = "xyes"])
++GTK_DOC_CHECK([1.13])
+
+ AC_CONFIG_FILES([
+ Makefile
+--
+cgit v0.9.0.2
diff --git a/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/fix_for_compile_with_gcc-4.6.0.patch b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/fix_for_compile_with_gcc-4.6.0.patch
new file mode 100644
index 000000000..d75de93fc
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/fix_for_compile_with_gcc-4.6.0.patch
@@ -0,0 +1,36 @@
+Upstream-Status: Pending
+
+Fix Following compilation errors with gcc 4.6.0
+
+Nitin A Kamble <nitin.a.kamble@intel.com> 2011/05/10
+
+| uniquebackend-dbus.c: In function 'unique_backend_dbus_request_name':
+| uniquebackend-dbus.c:87:22: error: variable 'backend_dbus' set but not used [-Werror=unused-but-set-variable]
+| uniquebackend-dbus.c: In function 'unique_backend_dbus_send_message':
+| uniquebackend-dbus.c:189:12: error: variable 'res' set but not used [-Werror=unused-but-set-variable]
+| cc1: all warnings being treated as errors
+|
+| make[5]: *** [libunique_dbus_la-uniquebackend-dbus.lo] Error 1
+
+Index: libunique-1.1.6/unique/dbus/uniquebackend-dbus.c
+===================================================================
+--- libunique-1.1.6.orig/unique/dbus/uniquebackend-dbus.c
++++ libunique-1.1.6/unique/dbus/uniquebackend-dbus.c
+@@ -84,7 +84,7 @@ unique_backend_dbus_register_proxy (Uniq
+ static gboolean
+ unique_backend_dbus_request_name (UniqueBackend *backend)
+ {
+- UniqueBackendDBus *backend_dbus;
++ UniqueBackendDBus __attribute__((__unused__)) *backend_dbus;
+ const gchar *name;
+ DBusGConnection *connection;
+ DBusGProxy *proxy;
+@@ -186,7 +186,7 @@ unique_backend_dbus_send_message (Unique
+ GValueArray *data;
+ gchar *cmd;
+ gchar *resp;
+- gboolean res;
++ gboolean __attribute__((__unused__)) res;
+ GError *error;
+ UniqueResponse response;
+
diff --git a/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/noconst.patch b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/noconst.patch
new file mode 100644
index 000000000..2cc03473c
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique/noconst.patch
@@ -0,0 +1,130 @@
+G_CONST_RETURN is deprecated in glib 2.30 so remove to to avoid
+build failures.
+
+RP 2011/10/12
+
+Upstream-Status: Pending
+
+Index: libunique-1.1.6/unique/uniqueapp.c
+===================================================================
+--- libunique-1.1.6.orig/unique/uniqueapp.c 2011-10-12 01:21:25.842046488 +0100
++++ libunique-1.1.6/unique/uniqueapp.c 2011-10-12 01:21:55.062046796 +0100
+@@ -781,7 +781,7 @@
+ }
+
+
+-G_CONST_RETURN gchar *
++const gchar *
+ unique_command_to_string (UniqueApp *app,
+ gint command)
+ {
+@@ -863,7 +863,7 @@
+ return retval;
+ }
+
+-G_CONST_RETURN gchar *
++const gchar *
+ unique_response_to_string (UniqueResponse response)
+ {
+ GEnumClass *enum_class;
+Index: libunique-1.1.6/unique/uniquebackend.c
+===================================================================
+--- libunique-1.1.6.orig/unique/uniquebackend.c 2011-10-12 01:21:25.742046323 +0100
++++ libunique-1.1.6/unique/uniquebackend.c 2011-10-12 01:21:55.062046796 +0100
+@@ -111,7 +111,7 @@
+ *
+ * Return value: FIXME
+ */
+-G_CONST_RETURN gchar *
++const gchar *
+ unique_backend_get_name (UniqueBackend *backend)
+ {
+ g_return_val_if_fail (UNIQUE_IS_BACKEND (backend), NULL);
+@@ -154,7 +154,7 @@
+ *
+ * Return value: FIXME
+ */
+-G_CONST_RETURN gchar *
++const gchar *
+ unique_backend_get_startup_id (UniqueBackend *backend)
+ {
+ g_return_val_if_fail (UNIQUE_IS_BACKEND (backend), NULL);
+Index: libunique-1.1.6/unique/uniquebackend.h
+===================================================================
+--- libunique-1.1.6.orig/unique/uniquebackend.h 2011-10-12 01:21:25.992046521 +0100
++++ libunique-1.1.6/unique/uniquebackend.h 2011-10-12 01:21:56.512047875 +0100
+@@ -94,10 +94,10 @@
+
+ UniqueBackend * unique_backend_create (void);
+
+-G_CONST_RETURN gchar *unique_backend_get_name (UniqueBackend *backend);
++const gchar *unique_backend_get_name (UniqueBackend *backend);
+ void unique_backend_set_name (UniqueBackend *backend,
+ const gchar *name);
+-G_CONST_RETURN gchar *unique_backend_get_startup_id (UniqueBackend *backend);
++const gchar *unique_backend_get_startup_id (UniqueBackend *backend);
+ void unique_backend_set_startup_id (UniqueBackend *backend,
+ const gchar *startup_id);
+ GdkScreen * unique_backend_get_screen (UniqueBackend *backend);
+Index: libunique-1.1.6/unique/uniqueinternals.h
+===================================================================
+--- libunique-1.1.6.orig/unique/uniqueinternals.h 2011-10-12 01:21:25.892046532 +0100
++++ libunique-1.1.6/unique/uniqueinternals.h 2011-10-12 01:21:56.512047875 +0100
+@@ -44,11 +44,11 @@
+ * and then back into an id
+ */
+ UniqueResponse unique_response_from_string (const gchar *response);
+-G_CONST_RETURN gchar *unique_response_to_string (UniqueResponse response);
++const gchar *unique_response_to_string (UniqueResponse response);
+
+ gint unique_command_from_string (UniqueApp *app,
+ const gchar *command);
+-G_CONST_RETURN gchar *unique_command_to_string (UniqueApp *app,
++const gchar *unique_command_to_string (UniqueApp *app,
+ gint command);
+
+ G_END_DECLS
+Index: libunique-1.1.6/unique/uniquemessage.c
+===================================================================
+--- libunique-1.1.6.orig/unique/uniquemessage.c 2011-10-12 01:21:25.942046524 +0100
++++ libunique-1.1.6/unique/uniquemessage.c 2011-10-12 01:21:55.072046595 +0100
+@@ -185,7 +185,7 @@
+ *
+ * Since: 1.0.2
+ */
+-G_CONST_RETURN guchar *
++const guchar *
+ unique_message_data_get (UniqueMessageData *message_data,
+ gsize *length)
+ {
+@@ -525,7 +525,7 @@
+ * owned by the #UniqueMessageData structure and should not be
+ * modified or freed
+ */
+-G_CONST_RETURN gchar *
++const gchar *
+ unique_message_data_get_startup_id (UniqueMessageData *message_data)
+ {
+ g_return_val_if_fail (message_data != NULL, NULL);
+Index: libunique-1.1.6/unique/uniquemessage.h
+===================================================================
+--- libunique-1.1.6.orig/unique/uniquemessage.h 2011-10-12 01:21:25.792046596 +0100
++++ libunique-1.1.6/unique/uniquemessage.h 2011-10-12 01:21:56.512047875 +0100
+@@ -48,7 +48,7 @@
+ void unique_message_data_set (UniqueMessageData *message_data,
+ const guchar *data,
+ gsize length);
+-G_CONST_RETURN guchar *unique_message_data_get (UniqueMessageData *message_data,
++const guchar *unique_message_data_get (UniqueMessageData *message_data,
+ gsize *length);
+
+ gboolean unique_message_data_set_text (UniqueMessageData *message_data,
+@@ -63,7 +63,7 @@
+ gchar * unique_message_data_get_filename (UniqueMessageData *message_data);
+
+ GdkScreen * unique_message_data_get_screen (UniqueMessageData *message_data);
+-G_CONST_RETURN gchar * unique_message_data_get_startup_id (UniqueMessageData *message_data);
++const gchar * unique_message_data_get_startup_id (UniqueMessageData *message_data);
+ guint unique_message_data_get_workspace (UniqueMessageData *message_data);
+
+ G_END_DECLS
diff --git a/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique_1.1.6.bb b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique_1.1.6.bb
new file mode 100644
index 000000000..49ed07ad9
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-extended/libunique/libunique_1.1.6.bb
@@ -0,0 +1,30 @@
+SUMMARY = "Library for supporting single instance GTK+ applications"
+DESCRIPTION = "Unique is a library for writing single instance GTK+ applications. If you launch a single instance application twice, the second instance will either just quit or will send a message to the running instance."
+HOMEPAGE = "https://wiki.gnome.org/Attic/LibUnique"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=libunique"
+
+SRC_URI = "${GNOME_MIRROR}/libunique/1.1/libunique-${PV}.tar.bz2 \
+ file://fix_for_compile_with_gcc-4.6.0.patch \
+ file://noconst.patch \
+ file://build.patch \
+ file://0001-Makefile.am-use-LIBTOOL-instead-of-hardcoded-libtool.patch \
+ file://0001-test-unique-Add-format-qualifier-s-for-string.patch \
+ "
+
+SRC_URI[md5sum] = "7955769ef31f1bc4f83446dbb3625e6d"
+SRC_URI[sha256sum] = "e5c8041cef8e33c55732f06a292381cb345db946cf792a4ae18aa5c66cdd4fbb"
+
+PR = "r7"
+
+DEPENDS = "dbus-glib-native glib-2.0 gtk+"
+
+PACKAGECONFIG ??= "dbus"
+PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus dbus-glib"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
+
+
+inherit autotools pkgconfig gobject-introspection distro_features_check gtk-doc
+
+REQUIRED_DISTRO_FEATURES = "x11"
diff --git a/meta-openembedded/meta-xfce/recipes-multimedia/packagegroups/packagegroup-xfce-multimedia.bb b/meta-openembedded/meta-xfce/recipes-multimedia/packagegroups/packagegroup-xfce-multimedia.bb
new file mode 100644
index 000000000..19a6e2b04
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-multimedia/packagegroups/packagegroup-xfce-multimedia.bb
@@ -0,0 +1,15 @@
+SUMMARY = "All packages multimedia packages available for XFCE"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit packagegroup
+
+# While this item does not require it, it depends on xfmpc and xfc4-mpc-plugin
+# that wants mpd which does
+LICENSE_FLAGS = "commercial"
+
+RDEPENDS_${PN} = " \
+ parole \
+ xfmpc \
+ xfce4-mpc-plugin \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_1.0.0.bb b/meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_1.0.0.bb
new file mode 100644
index 000000000..479f1a4df
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-multimedia/parole/parole_1.0.0.bb
@@ -0,0 +1,38 @@
+DESCRIPTION = "Parole is a modern simple media player based on the GStreamer framework"
+HOMEPAGE = "http://goodies.xfce.org/projects/applications/parole"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+inherit xfce-app gtk-doc mime
+
+DEPENDS += " \
+ glib-2.0 \
+ dbus-glib \
+ gtk+3 \
+ \
+ xfce4-dev-tools-native \
+ libxfce4util \
+ libxfce4ui \
+ xfconf \
+ \
+ gstreamer1.0-plugins-base \
+ taglib \
+"
+
+SRC_URI[md5sum] = "d00d3ca571900826bf5e1f6986e42992"
+SRC_URI[sha256sum] = "6666b335aeb690fb527f77b62c322baf34834b593659fdcd21d21ed3f1e14010"
+
+RDEPENDS_${PN} += "gstreamer1.0-plugins-good"
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+PACKAGECONFIG ??= "notify"
+PACKAGECONFIG[clutter] = "--enable-clutter, --disable-clutter, clutter"
+PACKAGECONFIG[notify] = "--enable-notify-plugin, --disable-notify-plugin, libnotify"
+
+FILES_${PN} += " \
+ ${datadir}/appdata \
+ ${libdir}/parole-0/*.so \
+"
+FILES_${PN}-dbg += "${libdir}/parole-0/.debug"
+FILES_${PN}-dev += "${libdir}/parole-0/*.la"
diff --git a/meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.0.bb b/meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.0.bb
new file mode 100644
index 000000000..9f501f796
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-multimedia/xfce4-mpc-plugin/xfce4-mpc-plugin_0.5.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Simple client plugin for Music Player Daemon"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-mpc-plugin"
+SECTION = "x11/application"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3604d987e6dfdfc672c754d08953b0e0"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "libmpd"
+
+# While this item does not require it, it depends on mpd which does
+LICENSE_FLAGS = "commercial"
+
+# for now we recommend our own mpd-server
+RRECOMMENDS_${PN} = "mpd"
+
+SRC_URI[md5sum] = "13d5d95ef0c305bac45fde6231258e5d"
+SRC_URI[sha256sum] = "f1320916ae3112e6825699652a502cebfa78bb006c649b42d3d331dfe57b6cb0"
diff --git a/meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.2.3.bb b/meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.2.3.bb
new file mode 100644
index 000000000..869435d68
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-multimedia/xfmpc/xfmpc_0.2.3.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Music Player Daemon (MPD) client written in GTK+"
+HOMEPAGE = "http://goodies.xfce.org/projects/applications/xfmpc"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "gtk+ libxfce4util libxfce4ui libmpd vala-native"
+
+# While this item does not require it, it depends on mpd which does
+LICENSE_FLAGS = "commercial"
+
+# for now we recommend our own mpd-server
+RRECOMMENDS_${PN} = "mpd"
+
+inherit xfce-app
+
+SRC_URI[md5sum] = "e2d2faeb7a6f62813e287f3d12522b71"
+SRC_URI[sha256sum] = "4189c0c82b66b758a6d5bc651493b675d3d46329e5f1a76ff26c448125f4fcb0"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.0.bb
new file mode 100644
index 000000000..9d2d954f0
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/battery/xfce4-battery-plugin_1.1.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "A battery monitor panel plugin for Xfce4, compatible with APM and ACP"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-battery-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "f78d8d0cc13d40753a207a836869b953"
+SRC_URI[sha256sum] = "8c9deec8d95da4cc39d6d9091433e5822b6bbe07d80117045dd4dd3480427ece"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.6.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.6.0.bb
new file mode 100644
index 000000000..de0d0a06d
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/calculator/xfce4-calculator-plugin_0.6.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "A calculator plugin for the Xfce panel"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-calculator-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=909430f63fddd63f120ba29e8979f65c"
+
+inherit xfce-panel-plugin gtk-icon-cache
+
+SRC_URI[md5sum] = "1b956a89693d039a61b4725cefb23a4d"
+SRC_URI[sha256sum] = "eb51765580ea4650f9cf062382a820fb6483ee5dbe003aeb6f063929e299f9c2"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/clipman/xfce4-clipman-plugin_1.4.2.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/clipman/xfce4-clipman-plugin_1.4.2.bb
new file mode 100644
index 000000000..96bdf0e53
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/clipman/xfce4-clipman-plugin_1.4.2.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Clipman is a clipboard manager for Xfce"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-clipman-plugin"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "xfconf xproto libxtst"
+
+SRC_URI[md5sum] = "9169140af7c9d3fddd8a5c9e0efb5a61"
+SRC_URI[sha256sum] = "cf2b45e327e67cc187dcb99a6ef6d95570463045accd24540e17172f005189b3"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[qrencode] = "--enable-libqrencode,--disable-libqrencode,qrencode"
+
+FILES_${PN} += "${datadir}/appdata"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/closebutton/xfce4-closebutton-plugin_git.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/closebutton/xfce4-closebutton-plugin_git.bb
new file mode 100644
index 000000000..3cd4ee65e
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/closebutton/xfce4-closebutton-plugin_git.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Plugin displaying close button for application currently active"
+SECTION = "x11"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b6952d9a47fc2ad0f315510e1290455f"
+
+inherit xfce-panel-plugin xfce-git gtk-icon-cache perlnative
+
+DEPENDS += "exo-native libwnck xfconf"
+
+PV = "0.1.0+gitr${SRCPV}"
+
+SRC_URI = "git://github.com/schnitzeltony/xfce4-closebutton-plugin.git;branch=master"
+SRCREV = "02b74f13ad6f639234c8db1854963038b2780a2c"
+S = "${WORKDIR}/git"
+
+EXTRA_OECONF += "--enable-maintainer-mode"
+
+FILES_${PN} += "${datadir}/xfce4/closebutton/themes"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/cpufreq/xfce4-cpufreq-plugin_1.1.3.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/cpufreq/xfce4-cpufreq-plugin_1.1.3.bb
new file mode 100644
index 000000000..d45478709
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/cpufreq/xfce4-cpufreq-plugin_1.1.3.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Panel plugin to display frequency of all cpus"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-cpufreq-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1f6f1c0be32491a0c8d2915607a28f36"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "859122da0a8cd991ee2fbeee434bc948"
+SRC_URI[sha256sum] = "74a162c7e101db0495d5da147aba1f404c33544f04e8c34d7d1d705668102d33"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.0.5.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.0.5.bb
new file mode 100644
index 000000000..83e2bb5c0
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/cpugraph/xfce4-cpugraph-plugin_1.0.5.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Panel plugin with graphical representation of the cpu frequency"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-cpugraph-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=415654f59d8fa70fe4eac2c3f86c8f5e"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "f0ebfabb273adf69361b37a3fa4b7912"
+SRC_URI[sha256sum] = "85da0ec89aacfd31e0bbafcefea37cdca618d62e681c1c9da8bdd492f028f4c7"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.7.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.7.0.bb
new file mode 100644
index 000000000..af38ba543
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/datetime/xfce4-datetime-plugin_0.7.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Panel plugin displaying date and time and a calendar when left-clicked"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-datetime-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "30caaa94c6c267827a31ad69fa472e51"
+SRC_URI[sha256sum] = "297f3077f7aee52a237449fbd8595e232267bc600b5b9e7ddc5baab306ed67b9"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/diskperf/xfce4-diskperf-plugin_2.6.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/diskperf/xfce4-diskperf-plugin_2.6.1.bb
new file mode 100644
index 000000000..161b2bb2b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/diskperf/xfce4-diskperf-plugin_2.6.1.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Panel plugin displaying instant disk/partition performance"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-diskperf-plugin"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d3e627798d6a60bece47aa8b3532e1f1"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "63d5f03934c2dbddb3ad7bf7f535cc23"
+SRC_URI[sha256sum] = "212ddc742be3eecb6ad5554e1b1df03d5685cb71f48a558d5f895de37c57e4fa"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/embed/xfce4-embed-plugin_1.0.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/embed/xfce4-embed-plugin_1.0.0.bb
new file mode 100644
index 000000000..32d6edfb4
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/embed/xfce4-embed-plugin_1.0.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "A panel plugin that embeds arbitrary windows (or GtkPlug widgets) into the panel."
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-embed-plugin"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit xfce-panel-plugin
+
+# DEPENDS += "xfconf xproto libxtst"
+
+SRC_URI[md5sum] = "c5b86cbc1c54ee7c1d2e95a4502fed8e"
+SRC_URI[sha256sum] = "35d4c6c56dd6468c0e5afe66f657c1526f2d830a577105a51da43657651832e3"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/equake/xfce4-equake-plugin_1.3.8.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/equake/xfce4-equake-plugin_1.3.8.1.bb
new file mode 100644
index 000000000..8b24e98b0
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/equake/xfce4-equake-plugin_1.3.8.1.bb
@@ -0,0 +1,14 @@
+DESCRIPTION = "Equake XFCE is a panel plugin for the XFCE panel which monitors earthquakes and displays an update each time a new earthquake occurs."
+HOMEPAGE = "http://freecode.com/projects/equake-xfce"
+SECTION = "x11/application"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "curl"
+
+SRC_URI[md5sum] = "07d42b8a3d440d6f1861048a6cc3a15a"
+SRC_URI[sha256sum] = "eff9cfd604d1bd998c5208176fbe2c6da705c250dce572f5e30b2c77f4ec741c"
+
+FILES_${PN} += "${libdir}/xfce4/panel-plugins/xfce4-equake-plugin"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/eyes/xfce4-eyes-plugin_4.4.5.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/eyes/xfce4-eyes-plugin_4.4.5.bb
new file mode 100644
index 000000000..4e4c41096
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/eyes/xfce4-eyes-plugin_4.4.5.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Panel plugin with graphical representation of the cpu frequency"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-eyes-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "b2881924fdcc1230d9fa82c10f1a6afe"
+SRC_URI[sha256sum] = "648f7a1738d852af9482d11330b8ab33901f05256984de73d8cea4d7d7311937"
+
+FILES_${PN} += "${datadir}/xfce4/eyes"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.0.bb
new file mode 100644
index 000000000..8b924ac75
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/fsguard/xfce4-fsguard-plugin_1.1.0.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "The FSGuard panel plugin checks free space on a chosen mount point frequently and displays a message when a limit is reached"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-fsguard-plugin?&#recet_releases"
+LICENSE = "GPLv3"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "c9fcc1ff37f38e6ed518eca3b9887aa8"
+SRC_URI[sha256sum] = "6b038322b49d29625219e6a54497085b8f834b9c1fd15282ce286a6529d7c445"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.0.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.0.0.bb
new file mode 100644
index 000000000..0624fe96d
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/genmon/xfce4-genmon-plugin_4.0.0.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "This plugin cyclically spawns the indicated script/program, captures its output (stdout) and displays the resulting string into the panel."
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-genmon-plugin"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=68ad62c64cc6c620126241fd429e68fe"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "f28cfbf9c82e758a236c1f5fcbcb8a35"
+SRC_URI[sha256sum] = "a7db4f786166643076323dcde99ad12e92383cc29b4b806862d5483ec468c3e3"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/hotcorner/xfce4-hotcorner-plugin_0.0.2.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/hotcorner/xfce4-hotcorner-plugin_0.0.2.bb
new file mode 100644
index 000000000..f86c92ed2
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/hotcorner/xfce4-hotcorner-plugin_0.0.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Plugin providing hotcorners"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://README.md;beginline=48;endline=53;md5=2c694b8e0f73274b13465b509e4f5427"
+
+inherit xfce-panel-plugin cmake
+
+DEPENDS += "libwnck3"
+
+SRC_URI = "https://github.com/brianhsu/${BPN}/releases/download/${PV}/${BPN}-${PV}.tar.gz"
+SRC_URI[md5sum] = "ac31b45cda1867cb6bd69bb285638263"
+SRC_URI[sha256sum] = "942684c92f96a158e1417e597947f822769ac56aa1993a8c9f166ee633ef2b8d"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/kbdleds/xfce4-kbdleds-plugin_0.0.6.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/kbdleds/xfce4-kbdleds-plugin_0.0.6.bb
new file mode 100644
index 000000000..caf55084f
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/kbdleds/xfce4-kbdleds-plugin_0.0.6.bb
@@ -0,0 +1,15 @@
+SUMMARY = "XFCE panel plugin displaying status of keyboard LEDs"
+DESCRIPTION = "This plugin shows the state of your keyboard LEDs: Caps, Scroll and Num Lock in Xfce panel"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-kbdleds-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = " \
+ file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \
+ file://COPYING.LIB;md5=252890d9eee26aab7b432e8b8a616475 \
+"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "db6ad8e3502f3373f087ba2034141552"
+SRC_URI[sha256sum] = "6d280ad7207bcb9cc87c279dc3ab9084fd93325e87f67858e8917729b50201cd"
+
+FILES_${PN} += "${libdir}/xfce4/panel-plugins/xfce4-kbdleds-plugin"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.2.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.2.0.bb
new file mode 100644
index 000000000..c8224148b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/mailwatch/xfce4-mailwatch-plugin_1.2.0.bb
@@ -0,0 +1,14 @@
+SUMMARY = "Multi-protocol, multi-mailbox mail watcher for the Xfce4 panel"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-mailwatch-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "gnutls libgcrypt"
+
+SRC_URI[md5sum] = "7263114ec0f2987a3aff15afeeb45577"
+SRC_URI[sha256sum] = "624acc8229a8593c0dfeb28f883f4958119a715cc81cecdbaf29efc8ab1edcad"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
+PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6,"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin/0001-check-for-fstab.h-during-configure.patch b/meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin/0001-check-for-fstab.h-during-configure.patch
new file mode 100644
index 000000000..e2165c2fa
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin/0001-check-for-fstab.h-during-configure.patch
@@ -0,0 +1,87 @@
+From 09e325f8296eb9e63dc57ed137f4a9940f164563 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Tue, 21 Mar 2017 17:11:46 -0700
+Subject: [PATCH] check for fstab.h during configure
+
+fstab.h is not universally available, checking it during
+configure creates a knob to disable fstab reads in the
+plugin
+
+Makes it compile/build with musl
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Patch Reworked for xfce4-mount-plugin 0.6.4->1.1.2
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ configure.ac | 1 +
+ panel-plugin/devices.c | 22 +++++++++++++++++++---
+ 2 files changed, 20 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index b131117..c633fef 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -69,6 +69,7 @@ AC_CHECK_HEADERS([sys/socket.h])
+ AC_CHECK_HEADERS([sys/time.h])
+ AC_CHECK_HEADERS([unistd.h])
+ AC_CHECK_HEADERS([sys/sockio.h])
++AC_CHECK_HEADERS([fstab.h])
+ AC_HEADER_SYS_WAIT
+ AC_PROG_GCC_TRADITIONAL
+ AC_TYPE_SIZE_T
+diff --git a/panel-plugin/devices.c b/panel-plugin/devices.c
+index 797b079..d29df56 100644
+--- a/panel-plugin/devices.c
++++ b/panel-plugin/devices.c
+@@ -24,8 +24,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ #ifdef HAVE_CONFIG_H
+ #include <config.h>
+ #endif
+-
++#if HAVE_FSTAB_H
+ #include <fstab.h>
++#endif
++
+ #include <glib.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -468,11 +470,12 @@ disks_new (gboolean include_NFSs, gboolean *showed_fstab_dialog, gint length)
+ {
+ GPtrArray * pdisks; /* to be returned */
+ t_disk * pdisk;
+- struct fstab *pfstab;
+ gboolean has_valid_mount_device;
+
+ pdisks = g_ptr_array_new();
+
++#if HAVE_FSTAB_H
++ struct fstab *pfstab;
+ /* open fstab */
+ if (setfsent()!=1)
+ {
+@@ -526,7 +529,20 @@ disks_new (gboolean include_NFSs, gboolean *showed_fstab_dialog, gint length)
+ } /* end for */
+
+ endfsent(); /* close file */
+-
++#else
++ /* popup notification dialog */
++ if (! (*showed_fstab_dialog) ) {
++ xfce_message_dialog (NULL,
++ _("Xfce 4 Mount Plugin"),
++ "dialog-info",
++ _("Your /etc/fstab could not be read because fstab is not supported. This will severely degrade the plugin's abilities."),
++ NULL,
++ "gtk-ok",
++ GTK_RESPONSE_OK,
++ NULL);
++ *showed_fstab_dialog = TRUE;
++ }
++#endif
+ return pdisks;
+ }
+
+--
+2.9.3
+
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin_1.1.2.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin_1.1.2.bb
new file mode 100644
index 000000000..67009377e
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/mount/xfce4-mount-plugin_1.1.2.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Mount/umount utility for the xfce panel"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-mount-plugin"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit xfce-panel-plugin
+
+SRC_URI += "file://0001-check-for-fstab.h-during-configure.patch"
+SRC_URI[md5sum] = "7eba9696d82433a5577741214d34b588"
+SRC_URI[sha256sum] = "54578447abaf9da630a750d64acdc37d4fd20dda6460208d6d1ffaa9e43ee1a6"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin/0001-Do-not-include-sys-sysctl.h-its-unused-on-linux-port.patch b/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin/0001-Do-not-include-sys-sysctl.h-its-unused-on-linux-port.patch
new file mode 100644
index 000000000..e35418192
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin/0001-Do-not-include-sys-sysctl.h-its-unused-on-linux-port.patch
@@ -0,0 +1,25 @@
+From 7fcc7352ec11644ac8be4e9ec1584a5be3333684 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Wed, 12 Jul 2017 18:18:30 -0700
+Subject: [PATCH] Do not include sys/sysctl.h its unused on linux port
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ panel-plugin/os.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/panel-plugin/os.h b/panel-plugin/os.h
+index 473c2a4..9a5c544 100644
+--- a/panel-plugin/os.h
++++ b/panel-plugin/os.h
+@@ -170,7 +170,6 @@
+ #elif __linux__ /* L I N U X */
+ # include <stdio.h>
+ # include <sys/param.h>
+-# include <sys/sysctl.h>
+ # include <stdlib.h>
+ # include <stdarg.h>
+ # include <unistd.h>
+--
+2.13.2
+
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.3.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.3.1.bb
new file mode 100644
index 000000000..35c8861bc
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/netload/xfce4-netload-plugin_1.3.1.bb
@@ -0,0 +1,12 @@
+SUMMARY = "Panel plugin displaying current load of the network interfaces"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-netload-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=35a7203c41b86d15546dddc05995f97f"
+
+inherit xfce-panel-plugin
+
+SRC_URI = "http://archive.xfce.org/src/panel-plugins/${BPN}/${@'${PV}'[0:3]}/${BPN}-${PV}.tar.bz2 \
+ file://0001-Do-not-include-sys-sysctl.h-its-unused-on-linux-port.patch \
+ "
+SRC_URI[md5sum] = "f25aa3242e3119b49f259a3e4a1af08b"
+SRC_URI[sha256sum] = "99762781099d1e0ab9aa6a7b30c2bd94d8f658dbe61c760410d5d42d0766391c"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/0001-main-status-icon.c-remove-deprecated-g_type_init.patch b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/0001-main-status-icon.c-remove-deprecated-g_type_init.patch
new file mode 100644
index 000000000..e1ede27c4
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/0001-main-status-icon.c-remove-deprecated-g_type_init.patch
@@ -0,0 +1,32 @@
+From 0218e5ebf38f94d58b908fca451ba3789efa8899 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 20 Sep 2013 23:09:25 +0200
+Subject: [PATCH] main-status-icon.c remove deprecated g_type_init
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+this file was auto created by valac and xfce-vala when creating tarball. So
+
+Upstream-Status: Inappropriate [other]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ src/main-status-icon.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/main-status-icon.c b/src/main-status-icon.c
+index c6d73f8..f7db773 100644
+--- a/src/main-status-icon.c
++++ b/src/main-status-icon.c
+@@ -290,7 +290,6 @@ gint _vala_main (char** args, int args_length1) {
+
+
+ int main (int argc, char ** argv) {
+- g_type_init ();
+ return _vala_main (argv, argc);
+ }
+
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/01_fix_format-string.patch b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/01_fix_format-string.patch
new file mode 100644
index 000000000..8066df004
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/files/01_fix_format-string.patch
@@ -0,0 +1,53 @@
+Fix formatting strings when compiling with Wformat options
+
+Imported from debian
+
+--- a/lib/application.c
++++ b/lib/application.c
+@@ -352,7 +352,7 @@ static void xnp_application_update_notes
+ XfconfChannel* _tmp16_;
+ const gchar* _tmp17_;
+ _tmp9_ = _ ("Select notes path");
+- _tmp10_ = (GtkMessageDialog*) gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _tmp9_);
++ _tmp10_ = (GtkMessageDialog*) gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", _tmp9_);
+ g_object_ref_sink (_tmp10_);
+ error_dialog = _tmp10_;
+ _tmp11_ = error_dialog;
+@@ -419,7 +419,7 @@ static void xnp_application_update_notes
+ XfconfChannel* _tmp35_;
+ const gchar* _tmp36_;
+ _tmp27_ = _ ("Select notes path");
+- _tmp28_ = (GtkMessageDialog*) gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _tmp27_);
++ _tmp28_ = (GtkMessageDialog*) gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", _tmp27_);
+ g_object_ref_sink (_tmp28_);
+ error_dialog = _tmp28_;
+ _tmp29_ = error_dialog;
+@@ -2082,7 +2082,7 @@ static void xnp_application_delete_windo
+ gint _tmp9_;
+ _tmp3_ = window;
+ _tmp4_ = _ ("Are you sure you want to delete this group?");
+- _tmp5_ = (GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) _tmp3_, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _tmp4_);
++ _tmp5_ = (GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) _tmp3_, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s", _tmp4_);
+ g_object_ref_sink (_tmp5_);
+ dialog = _tmp5_;
+ _tmp6_ = dialog;
+@@ -2721,7 +2721,7 @@ void xnp_application_open_settings_dialo
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ _tmp0_ = _ ("Unable to open the settings dialog");
+- _tmp1_ = (GtkMessageDialog*) gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _tmp0_);
++ _tmp1_ = (GtkMessageDialog*) gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", _tmp0_);
+ g_object_ref_sink (_tmp1_);
+ error_dialog = _tmp1_;
+ _tmp2_ = error_dialog;
+--- a/lib/window.c
++++ b/lib/window.c
+@@ -3542,7 +3542,7 @@ void xnp_window_delete_note (XnpWindow*
+ GtkMessageDialog* _tmp13_;
+ gint _tmp14_;
+ _tmp9_ = _ ("Are you sure you want to delete this note?");
+- _tmp10_ = (GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _tmp9_);
++ _tmp10_ = (GtkMessageDialog*) gtk_message_dialog_new ((GtkWindow*) self, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s", _tmp9_);
+ g_object_ref_sink (_tmp10_);
+ dialog = _tmp10_;
+ _tmp11_ = dialog;
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.8.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.8.1.bb
new file mode 100644
index 000000000..fcf98c181
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/notes/xfce4-notes-plugin_1.8.1.bb
@@ -0,0 +1,20 @@
+SUMMARY = "Notes plugin for the Xfce Panel"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-notes-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "gtk+ libxfce4ui xfce4-panel xfconf libunique"
+
+SRC_URI += " \
+ file://0001-main-status-icon.c-remove-deprecated-g_type_init.patch \
+ file://01_fix_format-string.patch \
+"
+SRC_URI[md5sum] = "31cb9520b01512a94344770b4befdb3b"
+SRC_URI[sha256sum] = "07a4c3e71431c24f97d2e270452dd0fa51ff0bdb6219a13a20d0bfa8d9de54b2"
+
+FILES_${PN} += "${libdir}/xfce4/panel-plugins/*.so.*"
+
+# *.so are required for plugin detection
+INSANE_SKIP_${PN} = "dev-so"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.7.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.7.0.bb
new file mode 100644
index 000000000..16be09dca
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/places/xfce4-places-plugin_1.7.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Panel plugin displaying menu with quick access to folders, documents, and removable media"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-places-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b6952d9a47fc2ad0f315510e1290455f"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "fcae9b38a8affcd82699a94991bba29b"
+SRC_URI[sha256sum] = "4175c614749abbb5bcf6f49c88125fb0dd36db69f4c374df23563907b16e2c3f"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[notify] = "--enable-notifications,--disable-notifications,libnotify"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.0.bb
new file mode 100644
index 000000000..f5417a1a1
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/pulseaudio/xfce4-pulseaudio-plugin_0.4.0.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Pulseaudio mixer for the xfce panel"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=f5eac6bb0d6ec0dc655e417781d4015f"
+
+inherit xfce-panel-plugin distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "pulseaudio x11"
+
+DEPENDS += "pulseaudio"
+
+SRC_URI[md5sum] = "12f3dd97e02c604e2023b5baf30d4a6c"
+SRC_URI[sha256sum] = "aef9ad68a0b604a6aeca4c08146f3eb42bedb4fe1c8b65b82679cec0e2fc1cb3"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[libnotify] = "--enable-libnotify,--disable-libnotify,libnotify"
+
+RRECOMMENDS_${PN} = "pavucontrol"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/sensors/xfce4-sensors-plugin_1.2.97.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/sensors/xfce4-sensors-plugin_1.2.97.bb
new file mode 100644
index 000000000..4d78bb2bf
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/sensors/xfce4-sensors-plugin_1.2.97.bb
@@ -0,0 +1,27 @@
+SUMMARY = "Sensors plugin for the Xfce Panel"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-sensors-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b94789bed9aec03b9656a9cc5398c706"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "0c74c3112c5e6e07647c116cd43ff5a7"
+SRC_URI[sha256sum] = "7524ec4534de9ef7f676de2895a41bf70b73b94da5a27fd4a022b16eda56d0f4"
+
+EXTRA_OECONF = " \
+ --disable-procacpi \
+ --disable-sysfsacpi \
+ --disable-xnvctrl \
+"
+
+do_configure_prepend() {
+ sed -i 's:LIBSENSORS_CFLAGS=.*:LIBSENSORS_CFLAGS=-I${STAGING_INCDIR}:g' ${S}/configure.ac
+}
+
+PACKAGECONFIG ??= "libsensors"
+PACKAGECONFIG[libsensors] = "--enable-libsensors,--disable-libsensors, lmsensors"
+PACKAGECONFIG[hddtemp] = "--enable-hddtemp,--disable-hddtemp, hddtemp"
+PACKAGECONFIG[netcat] = "--enable-netcat,--disable-netcat, netcat"
+PACKAGECONFIG[libnotify] = "--enable-notification,--disable-notification, libnotify"
+
+FILES_SOLIBSDEV = "${libdir}/xfce4/modules/lib*${SOLIBSDEV}"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/smartbookmark/xfce4-smartbookmark-plugin_0.5.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/smartbookmark/xfce4-smartbookmark-plugin_0.5.0.bb
new file mode 100644
index 000000000..6289ad31a
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/smartbookmark/xfce4-smartbookmark-plugin_0.5.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Panel plugin allowing to send requests directly to browser"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-smartbookmark-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "6f242fe584ee2fdd2b1d3d69ef3d5914"
+SRC_URI[sha256sum] = "139539c58d54d878de86ef8a882c793cd909981e6b888f7f9d5e230a8fe310a4"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.2.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.2.1.bb
new file mode 100644
index 000000000..eeb451863
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/systemload/xfce4-systemload-plugin_1.2.1.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "Panel plugin displaying current CPU load, the memory in use, the swap space and the system uptime"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-systemload-plugin"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9acb172a93ff6c43cce2aff790a8aef8"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "upower"
+
+SRC_URI[md5sum] = "550277af9886c47005117110f6e7ec0d"
+SRC_URI[sha256sum] = "2bf7d0802534a1eb2e9f251af2bb97abc3f58608c1f01511d302c06111d34812"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.0.2.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.0.2.bb
new file mode 100644
index 000000000..facbb0d86
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/time-out/xfce4-time-out-plugin_1.0.2.bb
@@ -0,0 +1,10 @@
+SUMMARY = "This plugin makes it possible to take periodical breaks"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-time-out-plugin"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "d7d743794a766ba1b00647828a099053"
+SRC_URI[sha256sum] = "c69fb7218c685e516454810291c5245c49a80d774a6bded59c645a1af427c4e5"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.0.bb
new file mode 100644
index 000000000..2ddc6f67c
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/timer/xfce4-timer-plugin_1.7.0.bb
@@ -0,0 +1,10 @@
+SUMMARY = "XFCE panel plugin to generate alarm messages"
+DESCRIPTION = "This is a simple plugin that lets the user run an alarm at a specified time or at the end of a specified countdown period"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-timer-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=ae39271267fd63eb7619432ff24e7ff1"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "32e6a14e80bf9a93db2f2b3bfd7de920"
+SRC_URI[sha256sum] = "2e4e5343e39926230cc981d5fe56cd58a2f3817d2e9b6089b5673a2e39bf7e9b"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_1.1.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_1.1.0.bb
new file mode 100644
index 000000000..57951608f
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/verve/xfce4-verve-plugin_1.1.0.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Verve panel plugin is a comfortable command line plugin for the Xfce panel"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-verve-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "dbus-glib-native"
+
+SRC_URI[md5sum] = "ddd0190ae56f6117dbcf9ff2bf5a8cbf"
+SRC_URI[sha256sum] = "a3196f818c7ad57d19cd6581e168fd2b9f96de070246aea70c35ce2e5f9d9c84"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/wavelan/xfce4-wavelan-plugin_0.6.0.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/wavelan/xfce4-wavelan-plugin_0.6.0.bb
new file mode 100644
index 000000000..0c94f3c4b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/wavelan/xfce4-wavelan-plugin_0.6.0.bb
@@ -0,0 +1,9 @@
+SUMMARY = "Panel plugin displaying stats from a wireless lan interface"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-wavelan-plugin"
+LICENSE = "BSD"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e1e5872df9c5cf1a23f16493d9104920"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "b163b22f8543e5e5767a68af35c9028e"
+SRC_URI[sha256sum] = "4d5bd6654cfd077f3432b08d296f7bd052e765e51b77c629886a9542f4e5ecdc"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.8.10.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.8.10.bb
new file mode 100644
index 000000000..649eaaafb
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/weather/xfce4-weather-plugin_0.8.10.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Panel plugin to display current temperature and weather condition"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-weather-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit xfce-panel-plugin
+
+DEPENDS += "libsoup-2.4 dbus-glib upower"
+
+SRC_URI[md5sum] = "bba7f750b97c8fc3656715268edad792"
+SRC_URI[sha256sum] = "ee6d43c444904631c240470e15e96215c2ce451158bfdbf234bce892bf60eab8"
+
+FILES_${PN} += "${datadir}/xfce4/weather"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/whiskermenu/xfce4-whiskermenu-plugin_2.1.6.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/whiskermenu/xfce4-whiskermenu-plugin_2.1.6.bb
new file mode 100644
index 000000000..762cff0f6
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/whiskermenu/xfce4-whiskermenu-plugin_2.1.6.bb
@@ -0,0 +1,11 @@
+SUMMARY = "An alternate menu for the Xfce desktop environment"
+HOMEPAGE = "http://gottcode.org/xfce4-whiskermenu-plugin/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+inherit xfce-panel-plugin cmake
+
+SRC_URI[md5sum] = "b2b2bacc8d5f3c3119a0f317b6074276"
+SRC_URI[sha256sum] = "8b2a8ee1445df39a2cda139e353f2e9ec3720a780296dc41b7d4aebde57371fc"
+
+RRECOMMENDS_${PN} += "menulibre"
diff --git a/meta-openembedded/meta-xfce/recipes-panel-plugins/xkb/xfce4-xkb-plugin_0.8.1.bb b/meta-openembedded/meta-xfce/recipes-panel-plugins/xkb/xfce4-xkb-plugin_0.8.1.bb
new file mode 100644
index 000000000..8ee374035
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-panel-plugins/xkb/xfce4-xkb-plugin_0.8.1.bb
@@ -0,0 +1,16 @@
+SUMMARY = "XKB layout switching panel plug-in for the Xfce desktop environment"
+HOMEPAGE = "http://goodies.xfce.org/projects/panel-plugins/xfce4-xkb-plugin"
+SECTION = "x11/application"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=496f09f084b0f7e6f02f769a84490c6b"
+
+inherit xfce-panel-plugin
+
+SRC_URI[md5sum] = "72530bf59d7cd902326469e5a7a9892b"
+SRC_URI[sha256sum] = "c19ecf126201deb6148741c521124771ad396adc874471512ab5ffe1946567a1"
+
+DEPENDS += "libxklavier libwnck3 librsvg garcon"
+
+FILES_${PN} += "${datadir}/xfce4/xkb"
+
+RDEPENDS_${PN} = "xfce4-settings"
diff --git a/meta-openembedded/meta-xfce/recipes-support/vim/vim_%.bbappend b/meta-openembedded/meta-xfce/recipes-support/vim/vim_%.bbappend
new file mode 100644
index 000000000..7b449630e
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-support/vim/vim_%.bbappend
@@ -0,0 +1 @@
+require ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '${BPN}_xfce.inc', '', d)}
diff --git a/meta-openembedded/meta-xfce/recipes-support/vim/vim_xfce.inc b/meta-openembedded/meta-xfce/recipes-support/vim/vim_xfce.inc
new file mode 100644
index 000000000..25403e6cb
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-support/vim/vim_xfce.inc
@@ -0,0 +1,6 @@
+do_install_append() {
+ # The mouse being autoenabled is just annoying in xfce4-terminal (mouse
+ # drag make vim go into visual mode and there is no right click menu),
+ # delete the block.
+ sed -i '/the mouse works just fine/,+4d' ${D}/${datadir}/${BPN}/vimrc
+}
diff --git a/meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.3.1.bb b/meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.3.1.bb
new file mode 100644
index 000000000..90ab6af19
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-thunar-plugins/archive/thunar-archive-plugin_0.3.1.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "Thunar Archive Plugin allows you to create and extract archive files using file context menus in Thunar"
+HOMEPAGE = "http://goodies.xfce.org/projects/thunar-plugins/thunar-archive-plugin"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=252890d9eee26aab7b432e8b8a616475"
+
+inherit thunar-plugin
+
+SRC_URI[md5sum] = "425f4faaace6dc7a4716a35b7795463a"
+SRC_URI[sha256sum] = "9ad559b0c11308f6897ad56604e5a06dc8f369f649eb20120b2d3018ef5da54c"
+
+# install tap files in ${libdir}/thunar-archive-plugin
+EXTRA_OECONF += "--libexecdir=${libdir}"
diff --git a/meta-openembedded/meta-xfce/recipes-thunar-plugins/media-tags/thunar-media-tags-plugin_0.2.1.bb b/meta-openembedded/meta-xfce/recipes-thunar-plugins/media-tags/thunar-media-tags-plugin_0.2.1.bb
new file mode 100644
index 000000000..90f150b6e
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-thunar-plugins/media-tags/thunar-media-tags-plugin_0.2.1.bb
@@ -0,0 +1,11 @@
+SUMMARY = "Adds ID3/OGG tag support to the Thunar bulk rename dialog"
+HOMEPAGE = "http://thunar.xfce.org"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+inherit thunar-plugin
+
+DEPENDS += "taglib"
+
+SRC_URI[md5sum] = "0106e900714f86ccbafdc72238d3cf8d"
+SRC_URI[sha256sum] = "056d012a10403ee3e2e55b6ff2faecb796821de9ebee000315589b95d95ed253"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/configure.patch b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/configure.patch
new file mode 100644
index 000000000..89cc1f387
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/configure.patch
@@ -0,0 +1,57 @@
+From 13a74582ffd7f81dbd66a7296fc76007718e9d4d Mon Sep 17 00:00:00 2001
+From: Andreas Mueller <schnitzeltony@gmx.de>
+Date: Mon, 1 Aug 2011 17:16:29 +0200
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
+---
+ configure.ac | 34 ++++++++++++++++++----------------
+ 1 file changed, 18 insertions(+), 16 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0de5ceb..3f92d1b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -143,22 +143,24 @@ AC_FUNC_MMAP()
+ dnl ***************************************
+ dnl *** Check for strftime() extensions ***
+ dnl ***************************************
+-AC_TRY_RUN([
+- #include <string.h>
+- #include <time.h>
+- int
+- main (int argc, char **argv)
+- {
+- struct tm tm;
+- char buffer[16];
+- tm.tm_year = 81;
+- if (strftime (buffer, 16, "%EY", &tm) == 4 && strcmp (buffer, "1981") == 0)
+- return 0;
+- return 1;
+- }
+-], [
+- AC_DEFINE([HAVE_STRFTIME_EXTENSION], 1, [Define if strftime supports %E and %O modifiers.])
+-])
++dnl grrrr... this doesn't work for cross compiling, define it for OE
++AC_DEFINE([HAVE_STRFTIME_EXTENSION], 1, [Define if strftime supports %E and %O modifiers.])
++dnl AC_TRY_RUN([
++dnl #include <string.h>
++dnl #include <time.h>
++dnl int
++dnl main (int argc, char **argv)
++dnl {
++dnl struct tm tm;
++dnl char buffer[16];
++dnl tm.tm_year = 81;
++dnl if (strftime (buffer, 16, "%EY", &tm) == 4 && strcmp (buffer, "1981") == 0)
++dnl return 0;
++dnl return 1;
++dnl }
++dnl ], [
++dnl AC_DEFINE([HAVE_STRFTIME_EXTENSION], 1, [Define if strftime supports %E and %O modifiers.])
++dnl ])
+
+ dnl ******************************
+ dnl *** Check for i18n support ***
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/exo-no-tests-0.8.patch b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/exo-no-tests-0.8.patch
new file mode 100644
index 000000000..348e147cf
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/exo-no-tests-0.8.patch
@@ -0,0 +1,30 @@
+From 9231a2d5b9c5406f33aef3ab4de2dbec9b08ed13 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 18 May 2012 21:13:00 +0200
+Subject: [PATCH] Do not run tests at build time
+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>
+
+---
+ Makefile.am | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 226e79d..62ad18d 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -9,8 +9,7 @@ SUBDIRS = \
+ docs \
+ icons \
+ pixmaps \
+- po \
+- tests
++ po
+
+ distclean-local:
+ rm -rf *.cache *~
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/reduce-build-to-exo-csource-only.patch b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/reduce-build-to-exo-csource-only.patch
new file mode 100644
index 000000000..076477581
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo/reduce-build-to-exo-csource-only.patch
@@ -0,0 +1,85 @@
+From e710d8d4a3e3480416826c70d56ea3d2598a77e4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Thu, 28 Mar 2013 23:41:03 +0100
+Subject: [PATCH] reduce build to exo-csource only
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+exo-csource creates c-header files from glade resource output files. When
+building xfce-packages from git instead of tarball this exo-csource-native is
+required.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
+---
+ Makefile.am | 10 +---------
+ configure.ac | 22 ----------------------
+ 2 files changed, 1 insertion(+), 31 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 62ad18d..bdc5fae 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,15 +1,7 @@
+ ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
+
+ SUBDIRS = \
+- exo \
+- exo-csource \
+- exo-desktop-item-edit \
+- exo-helper \
+- exo-open \
+- docs \
+- icons \
+- pixmaps \
+- po
++ exo-csource
+
+ distclean-local:
+ rm -rf *.cache *~
+diff --git a/configure.ac b/configure.ac
+index 3f92d1b..0d4cc38 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -116,15 +116,6 @@ AC_PROG_CC()
+ AM_PROG_CC_C_O()
+ AC_PROG_INSTALL()
+ IT_PROG_INTLTOOL([intltool_minimum_version], [no-xml])
+-AC_CHECK_PROGS([PERL], [perl5 perl])
+-
+-dnl ***************************************
+-dnl *** Check for required Perl modules ***
+-dnl ***************************************
+-AC_PROG_PERL_MODULES([URI::Escape URI::file URI::URL], [],
+-[
+- AC_MSG_ERROR([Atleast one of the required Perl modules (URI::Escape, URI::file and URI::URL) was not found on your system])
+-])
+
+ dnl ***************************************
+ dnl *** Check for standard header files ***
+@@ -171,19 +162,6 @@ dnl ***********************************
+ dnl *** Check for required packages ***
+ dnl ***********************************
+ XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.42.0])
+-XDT_CHECK_PACKAGE([GIO], [gio-2.0], [2.42.0])
+-XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.24.0])
+-XDT_CHECK_PACKAGE([GTK3], [gtk+-3.0], [3.22.0])
+-XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.42.0])
+-XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.12.0])
+-XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.12.0])
+-XDT_CHECK_PACKAGE([LIBXFCE4UI2], [libxfce4ui-2], [4.12.0])
+-XDT_CHECK_OPTIONAL_PACKAGE([GIO_UNIX], [gio-unix-2.0], [2.42.0], [gio-unix], [GIO-Unix features])
+-
+-dnl *********************
+-dnl *** Check for X11 ***
+-dnl *********************
+-XDT_CHECK_LIBX11_REQUIRE()
+
+ dnl *************************
+ dnl *** Check for gtk-doc ***
+--
+2.14.3
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/exo/exo_0.12.0.bb b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo_0.12.0.bb
new file mode 100644
index 000000000..d256b5769
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/exo/exo_0.12.0.bb
@@ -0,0 +1,39 @@
+DESCRIPTION="Application library for the Xfce desktop environment"
+SECTION = "x11"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "gtk+ libxfce4util libxfce4ui virtual/libx11 liburi-perl-native cairo"
+DEPENDS_class-native = "glib-2.0-native xfce4-dev-tools-native intltool-native"
+
+inherit xfce pythonnative perlnative gtk-doc distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+REQUIRED_DISTRO_FEATURES_class-native = ""
+
+# SRC_URI must follow inherited one
+SRC_URI += " \
+ file://exo-no-tests-0.8.patch \
+ file://configure.patch \
+"
+
+SRC_URI_append_class-native = " \
+ file://reduce-build-to-exo-csource-only.patch \
+"
+
+SRC_URI[md5sum] = "724afcca224f5fb22b510926d2740e52"
+SRC_URI[sha256sum] = "64b88271a37d0ec7dca062c7bc61ca323116f7855092ac39698c421a2f30a18f"
+
+PACKAGES =+ "exo-csource"
+
+# Note: python bindings did not work in oe-dev and are about to be moved to
+# pyxfce see http://comments.gmane.org/gmane.comp.desktop.xfce.devel.version4/19560
+FILES_${PN} += "${datadir}/xfce4/ \
+ ${libdir}/xfce4/exo-1 \
+"
+
+FILES_${PN}-dbg += "${libdir}/gio/modules/.debug \
+"
+
+FILES_exo-csource += "${bindir}/exo-csource"
+
+BBCLASSEXTEND = "native"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/garcon/files/0001-xfce-applications.menu-don-t-bloat-settings-menu-by-.patch b/meta-openembedded/meta-xfce/recipes-xfce/garcon/files/0001-xfce-applications.menu-don-t-bloat-settings-menu-by-.patch
new file mode 100644
index 000000000..e5ad4e1a1
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/garcon/files/0001-xfce-applications.menu-don-t-bloat-settings-menu-by-.patch
@@ -0,0 +1,35 @@
+From f5398b49cc6fd7a53562aae2abbac0d9c656559c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Wed, 15 May 2013 14:17:49 +0200
+Subject: [garcon] xfce-applications.menu: don't bloat settings menu by
+ entries found in settings manager
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Submitted [1]
+
+[1] https://bugzilla.xfce.org/show_bug.cgi?id=10092
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ data/xfce/xfce-applications.menu | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/data/xfce/xfce-applications.menu b/data/xfce/xfce-applications.menu
+index dc3056b..c2aa0bb 100644
+--- a/data/xfce/xfce-applications.menu
++++ b/data/xfce/xfce-applications.menu
+@@ -34,6 +34,9 @@
+ <Include>
+ <Category>Settings</Category>
+ </Include>
++ <Exclude>
++ <Category>X-XFCE-SettingsDialog</Category>
++ </Exclude>
+
+ <Layout>
+ <Filename>xfce-settings-manager.desktop</Filename>
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_0.6.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_0.6.1.bb
new file mode 100644
index 000000000..06e236977
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/garcon/garcon_0.6.1.bb
@@ -0,0 +1,17 @@
+DESCRIPTION="Xfce Menu Library"
+SECTION = "x11/libs"
+LICENSE = "LGPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=04a01abcbdabffae1ca26335a293276b"
+DEPENDS = "xfce4-dev-tools-native libxfce4util libxfce4ui intltool-native"
+
+inherit xfce gtk-doc distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI += "file://0001-xfce-applications.menu-don-t-bloat-settings-menu-by-.patch"
+SRC_URI[md5sum] = "174690ad19243f7ef9529cb0c24b9080"
+SRC_URI[sha256sum] = "41c31ba0498c2cc39de4a8e0c2367510adbf4bc2104c17feee358e51e6acf603"
+
+EXTRA_OECONF = "--disable-gtk-doc"
+
+FILES_${PN} += "${datadir}/desktop-directories"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine/glib-2.54-ftbfs.patch b/meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine/glib-2.54-ftbfs.patch
new file mode 100644
index 000000000..fb8910204
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine/glib-2.54-ftbfs.patch
@@ -0,0 +1,23 @@
+Description: Fix FTBFS with glib 2.54
+ glib-mkenums now expects input files to be UTF-8,
+ fix the encoding of libgnomeui/gnome-scores.h
+Author: Adrian Bunk <bunk@debian.org>
+
+ported from: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870738
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+Index: gtk-xfce-engine-3.2.0/gtk-3.0/xfce_style_types.h
+===================================================================
+--- gtk-xfce-engine-3.2.0.orig/gtk-3.0/xfce_style_types.h
++++ gtk-xfce-engine-3.2.0/gtk-3.0/xfce_style_types.h
+@@ -19,7 +19,7 @@
+ *
+ * Portions based Thinice port by
+ * Tim Gerla <timg@rrv.net>,
+- * Tomas gren <stric@ing.umu.se,
++ * Tomas Ögren <stric@ing.umu.se>,
+ * Richard Hult <rhult@codefactory.se>
+ * Portions based on Smooth theme by
+ * Andrew Johnson <ajgenius@ajgenius.us>
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine_3.2.0.bb b/meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine_3.2.0.bb
new file mode 100644
index 000000000..ef4f4bfa8
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/gtk-xfce-engine/gtk-xfce-engine_3.2.0.bb
@@ -0,0 +1,30 @@
+SUMMARY = "XFCE theme for GTK"
+SECTION = "x11/libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "gtk+ xfce4-dev-tools-native"
+
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI += "file://glib-2.54-ftbfs.patch"
+
+SRC_URI[md5sum] = "363d6c16a48a00e26d45c45c2e1fd739"
+SRC_URI[sha256sum] = "875c9c3bda96faf050a2224649cc42129ffb662c4de33add8c0fd1fb860b47ed"
+
+PACKAGECONFIG ??= "gtk3"
+PACKAGECONFIG[gtk3] = "--enable-gtk3,--disable-gtk3, gtk+3, gtk3-xfce-engine"
+
+PACKAGES += "${PN}-themes gtk3-xfce-engine"
+FILES_${PN} += "${libdir}/gtk-2.0/*/engines/*.so"
+FILES_gtk3-xfce-engine += "${libdir}/gtk-3.0/*/theming-engines/*.so"
+FILES_${PN}-themes += "${datadir}/themes"
+
+FILES_${PN}-dbg += "${libdir}/gtk-3.0/*/theming-engines/.debug \
+ ${libdir}/gtk-2.0/*/engines/.debug"
+FILES_${PN}-dev += "${libdir}/gtk-2.0/*/engines/*.la \
+ ${libdir}/gtk-3.0/*/theming-engines/*.la"
+
+RDEPENDS_${PN} += "${PN}-themes"
+RDEPENDS_gtk3-xfce-engine += "${PN}-themes"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/files/0001-libxfce4kbd-private-xfce4-keyboard-shortcuts.xml-fix.patch b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/files/0001-libxfce4kbd-private-xfce4-keyboard-shortcuts.xml-fix.patch
new file mode 100644
index 000000000..6d107b1b6
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/files/0001-libxfce4kbd-private-xfce4-keyboard-shortcuts.xml-fix.patch
@@ -0,0 +1,32 @@
+From 708e59caaf1c0c271a96a4d1fe46b122aff45e34 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 27 Aug 2012 09:16:29 +0200
+Subject: [PATCH] libxfce4kbd-private/xfce4-keyboard-shortcuts.xml: fix xfwm4
+ crash on first start
+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>
+
+---
+ libxfce4kbd-private/xfce4-keyboard-shortcuts.xml | 4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+diff --git a/libxfce4kbd-private/xfce4-keyboard-shortcuts.xml b/libxfce4kbd-private/xfce4-keyboard-shortcuts.xml
+index 723a10d..e6502f3 100644
+--- a/libxfce4kbd-private/xfce4-keyboard-shortcuts.xml
++++ b/libxfce4kbd-private/xfce4-keyboard-shortcuts.xml
+@@ -75,4 +75,8 @@
+ <property name="&lt;Primary&gt;F12" type="string" value="workspace_12_key"/>
+ </property>
+ </property>
++ <property name="providers" type="array">
++ <value type="string" value="commands"/>
++ <value type="string" value="xfwm4"/>
++ </property>
+ </channel>
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.12.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.12.1.bb
new file mode 100644
index 000000000..4843e0ee8
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4ui/libxfce4ui_4.12.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "Xfce4 Widget library and X Window System interaction"
+SECTION = "x11/libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=252890d9eee26aab7b432e8b8a616475"
+DEPENDS = "perl-native glib-2.0 gtk+ gtk+3 intltool-native libxfce4util xfconf xfce4-dev-tools virtual/libx11 libsm libice"
+
+inherit xfce autotools gettext gtk-doc distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI += " \
+ file://0001-libxfce4kbd-private-xfce4-keyboard-shortcuts.xml-fix.patch \
+"
+SRC_URI[md5sum] = "ea9fad7d059fe8f531fe8db42dabb5a9"
+SRC_URI[sha256sum] = "3d619811bfbe7478bb984c16543d980cadd08586365a7bc25e59e3ca6384ff43"
+
+EXTRA_OECONF += "--with-vendor-info=${DISTRO}"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gladeui] = "--enable-gladeui,--disable-gladeui,glade3"
+PACKAGECONFIG[startup-notification] = "--enable-startup-notification,--disable-startup-notification,startup-notification"
+
+PACKAGES =+ "${PN}-gtk2 ${PN}-gtk3"
+FILES_${PN}-gtk2 += "${libdir}/libxfce4ui-1.so.* ${libdir}/libxfce4kbd-private-2.so.*"
+FILES_${PN}-gtk3 += "${libdir}/libxfce4ui-2.so.* ${libdir}/libxfce4kbd-private-3.so.*"
+
+FILES_${PN}-dbg += "${libdir}/glade3/modules/.debug"
+FILES_${PN}-dev += "${libdir}/glade3/modules/*.la \
+ ${datadir}/glade3/catalogs/*.in"
+PACKAGES += "${PN}-glade"
+FILES_${PN}-glade = "${libdir}/glade3 \
+ ${datadir}/glade3"
+
+RDEPENDS_${PN}-gtk2 = "${PN}"
+RDEPENDS_${PN}-gtk3 = "${PN}"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.12.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.12.1.bb
new file mode 100644
index 000000000..d985a0024
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/libxfce4util/libxfce4util_4.12.1.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Basic utility library for Xfce4"
+SECTION = "x11/libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=252890d9eee26aab7b432e8b8a616475"
+DEPENDS = "intltool-native xfce4-dev-tools-native glib-2.0"
+
+inherit xfce gtk-doc
+
+SRC_URI[md5sum] = "4eb012b6c1292ceedb3a83ebfc1ff08d"
+SRC_URI[sha256sum] = "876bdefa2e13cbf68b626b2158892fb93e824e1ef59cf951123a96cefbc8881d"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-base.bb b/meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-base.bb
new file mode 100644
index 000000000..140de416b
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-base.bb
@@ -0,0 +1,38 @@
+SUMMARY = "All packages required for a base installation of XFCE"
+SECTION = "x11/wm"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+PR = "r5"
+
+inherit packagegroup distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+RDEPENDS_${PN} = " \
+ xfwm4 \
+ xfce4-session \
+ xfconf \
+ xfdesktop \
+ xfce4-panel \
+ \
+ gtk-xfce-engine \
+ librsvg-gtk \
+ \
+ xfce4-panel-plugin-actions \
+ xfce4-panel-plugin-applicationsmenu \
+ xfce4-panel-plugin-clock \
+ xfce4-panel-plugin-directorymenu \
+ xfce4-panel-plugin-launcher \
+ xfce4-panel-plugin-pager \
+ xfce4-panel-plugin-separator \
+ xfce4-panel-plugin-showdesktop \
+ xfce4-panel-plugin-systray \
+ xfce4-panel-plugin-tasklist \
+ xfce4-panel-plugin-windowmenu \
+ xfce4-settings \
+ \
+ xfce4-notifyd \
+ xfce4-terminal \
+ thunar \
+ thunar-volman \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-extended.bb b/meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-extended.bb
new file mode 100644
index 000000000..b73c9ee16
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/packagegroups/packagegroup-xfce-extended.bb
@@ -0,0 +1,70 @@
+SUMMARY = "All packages for full XFCE installation"
+SECTION = "x11/wm"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+PR = "r10"
+
+inherit packagegroup distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+# mandatory
+RDEPENDS_${PN} = " \
+ packagegroup-xfce-base \
+"
+
+# nice to have
+RRECOMMENDS_${PN} = " \
+ xfwm4-theme-daloa \
+ xfwm4-theme-kokodi \
+ xfwm4-theme-moheli \
+ \
+ xfce-dusk-gtk3 \
+ \
+ xfce4-cpufreq-plugin \
+ xfce4-cpugraph-plugin \
+ xfce4-datetime-plugin \
+ xfce4-eyes-plugin \
+ xfce4-clipman-plugin \
+ xfce4-diskperf-plugin \
+ xfce4-netload-plugin \
+ xfce4-genmon-plugin \
+ xfce4-xkb-plugin \
+ xfce4-wavelan-plugin \
+ xfce4-places-plugin \
+ xfce4-systemload-plugin \
+ xfce4-time-out-plugin \
+ xfce4-timer-plugin \
+ xfce4-embed-plugin \
+ xfce4-weather-plugin \
+ xfce4-fsguard-plugin \
+ xfce4-battery-plugin \
+ xfce4-mount-plugin \
+ xfce4-powermanager-plugin \
+ xfce4-closebutton-plugin \
+ xfce4-equake-plugin \
+ xfce4-notes-plugin \
+ xfce4-whiskermenu-plugin \
+ xfce4-mailwatch-plugin \
+ xfce4-kbdleds-plugin \
+ xfce4-smartbookmark-plugin \
+ xfce4-hotcorner-plugin \
+ ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'xfce4-pulseaudio-plugin', '', d)} \
+ xfce4-sensors-plugin \
+ xfce4-calculator-plugin \
+ xfce4-verve-plugin \
+ \
+ xfce-polkit \
+ \
+ thunar-media-tags-plugin \
+ thunar-archive-plugin \
+ \
+ xfce4-appfinder \
+ xfce4-screenshooter \
+ xfce4-power-manager \
+ xfce4-mixer \
+ ristretto \
+ xfce4-taskmanager \
+ gigolo \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman/0001-Fix-return-with-no-value-in-function-returning-non-v.patch b/meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman/0001-Fix-return-with-no-value-in-function-returning-non-v.patch
new file mode 100644
index 000000000..7233ea7ba
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman/0001-Fix-return-with-no-value-in-function-returning-non-v.patch
@@ -0,0 +1,26 @@
+From 2e295e9ce8f7f60a271adf004588b0d8db88db09 Mon Sep 17 00:00:00 2001
+From: Matt Thirtytwo <matt.59491@gmail.com>
+Date: Sat, 7 Mar 2015 22:50:32 +0100
+Subject: [PATCH] Fix return with no value in function returning non-void (bug
+ #11656)
+
+---
+ thunar-volman/tvm-block-device.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/thunar-volman/tvm-block-device.c b/thunar-volman/tvm-block-device.c
+index da31efa..edb6cad 100644
+--- a/thunar-volman/tvm-block-device.c
++++ b/thunar-volman/tvm-block-device.c
+@@ -714,7 +714,7 @@ tvm_block_device_mount (TvmContext *context)
+ GMountOperation *mount_operation;
+ GVolume *volume;
+
+- g_return_if_fail (context != NULL);
++ g_return_val_if_fail ((context != NULL), FALSE);
+
+ /* determine the GVolume corresponding to the udev device */
+ volume =
+--
+1.9.0
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman_0.8.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman_0.8.1.bb
new file mode 100644
index 000000000..c61d4512d
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/thunar-volman/thunar-volman_0.8.1.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Automatic management of removable drives and media for thunar"
+SECTION = "x11"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "exo glib-2.0 gtk+ libxfce4ui libxfce4util xfconf libnotify libgudev"
+
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI += "file://0001-Fix-return-with-no-value-in-function-returning-non-v.patch"
+SRC_URI[md5sum] = "65ab6e05b2e808d1dcc8d36683a59b7e"
+SRC_URI[sha256sum] = "5a08bb5ce32c296a64dfbdb2406d4e45a208b2c91e4efa831dc28f1d6c2ac2bd"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[notify] = "--enable-notifications,--disable-notifications,libnotify"
+
+RDEPENDS_${PN} = "eject"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_1.6.15.bb b/meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_1.6.15.bb
new file mode 100644
index 000000000..170e25070
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/thunar/thunar_1.6.15.bb
@@ -0,0 +1,35 @@
+SUMMARY = "File manager for the Xfce Desktop Environment"
+SECTION = "x11"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "exo glib-2.0 gtk+ gdk-pixbuf libxfce4util libxfce4ui xfconf libsm dbus-glib startup-notification libnotify xfce4-panel udev"
+
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI = "http://archive.xfce.org/src/xfce/${BPN}/${@'${PV}'[0:3]}/Thunar-${PV}.tar.bz2"
+SRC_URI[md5sum] = "8fea2af69c3acbb273fd1a177d3d8e47"
+SRC_URI[sha256sum] = "e81291a8519f495e0a059ff1f2d29608bc6d37c0be83b1f38f3c9aa25f8d252d"
+
+S = "${WORKDIR}/Thunar-${PV}/"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[pcre] = "--enable-pcre,--disable-pcre,libpcre"
+
+FILES_${PN} += " \
+ ${libdir}/thunarx-2/* \
+ ${libdir}/xfce4/panel/plugins/* \
+ ${libdir}/Thunar/[Tt]hunar* \
+ ${datadir}/appdata \
+ ${datadir}/dbus-1 \
+ ${datadir}/polkit-1 \
+ ${datadir}/Thunar \
+ ${datadir}/xfce4/panel/plugins/* \
+"
+
+FILES_${PN}-dbg += "${libdir}/thunarx-2/.debug/ \
+ ${libdir}/xfce4/panel/plugins/.debug/ \
+ ${libdir}/Thunar/.debug/"
+
+RRECOMMENDS_${PN} = "gvfs gvfsd-trash"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler/0001-configure-use-pkg-config-for-freetype2.patch b/meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler/0001-configure-use-pkg-config-for-freetype2.patch
new file mode 100644
index 000000000..5ecc35e37
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler/0001-configure-use-pkg-config-for-freetype2.patch
@@ -0,0 +1,45 @@
+From f5c283b1251ad005da7342e654cd2ec5ae9e5fb2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Fri, 26 Sep 2014 13:44:36 +0200
+Subject: [PATCH] configure: use pkg-config for freetype2
+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>
+---
+ acinclude.m4 | 16 +---------------
+ 1 file changed, 1 insertion(+), 15 deletions(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index 66e79d1..4c70b00 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -52,21 +52,7 @@ if test x"$ac_tumbler_font_thumbnailer" = x"yes"; then
+ PKG_CHECK_MODULES([GDK_PIXBUF], [gdk-pixbuf-2.0 >= 2.14],
+ [
+ dnl Check for FreeType 2.x
+- FREETYPE_LIBS=""
+- FREETYPE_CFLAGS=""
+- AC_PATH_PROG([FREETYPE_CONFIG], [freetype-config], [no])
+- if test x"$FREETYPE_CONFIG" != x"no"; then
+- AC_MSG_CHECKING([FREETYPE_CFLAGS])
+- FREETYPE_CFLAGS="`$FREETYPE_CONFIG --cflags`"
+- AC_MSG_RESULT([$FREETYPE_CFLAGS])
+-
+- AC_MSG_CHECKING([FREETYPE_LIBS])
+- FREETYPE_LIBS="`$FREETYPE_CONFIG --libs`"
+- AC_MSG_RESULT([$FREETYPE_LIBS])
+- else
+- dnl We can only build the font thumbnailer if FreeType 2.x is available
+- ac_tumbler_font_thumbnailer=no
+- fi
++ PKG_CHECK_MODULES(FREETYPE, freetype2, , [ac_tumbler_font_thumbnailer=no])
+ AC_SUBST([FREETYPE_CFLAGS])
+ AC_SUBST([FREETYPE_LIBS])
+ ], [ac_tumbler_font_thumbnailer=no])
+--
+1.8.3.1
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler_0.2.0.bb b/meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler_0.2.0.bb
new file mode 100644
index 000000000..7e0c555a4
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/tumbler/tumbler_0.2.0.bb
@@ -0,0 +1,35 @@
+DESCRIPTION="Thumbnail service implementing the thumbnail management D-Bus specification"
+SECTION = "x11/libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+DEPENDS = "dbus-glib dbus-glib-native freetype gdk-pixbuf poppler curl xfce4-dev-tools-native libxml2 libgsf"
+
+inherit xfce gtk-doc
+
+SRC_URI[md5sum] = "dd5f9bae6a2470eb5fff0dc9edd3ea09"
+SRC_URI[sha256sum] = "4e27a59694b0a5cc69ebccbdb00c724e670b5b7c30bc4dc0b461aac93f234fac"
+SRC_URI += "file://0001-configure-use-pkg-config-for-freetype2.patch"
+
+INSANE_SKIP_${PN} = "dev-so"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[gstreamer-thumbnailer] = "--enable-gstreamer-thumbnailer,--disable-gstreamer-thumbnailer,gstreamer1.0 gstreamer1.0-plugins-base"
+
+do_install_append() {
+ # Makefile seems to race on creation of symlink. So ensure creation here
+ # until fixed properly
+ ln -sf tumbler-xdg-cache.so ${D}${libdir}/tumbler-1/plugins/cache/tumbler-cache-plugin.so
+}
+
+FILES_${PN} += "${datadir}/dbus-1/services \
+ ${libdir}/tumbler-1/tumblerd \
+ ${libdir}/tumbler-1/plugins/*.so \
+ ${libdir}/tumbler-1/plugins/cache/*.so \
+"
+
+FILES_${PN}-dev += "${libdir}/tumbler-1/plugins/*.la \
+ ${libdir}/tumbler-1/plugins/cache/*.la"
+FILES_${PN}-dbg += "${libdir}/tumbler-1/.debug \
+ ${libdir}/tumbler-1/plugins/.debug \
+ ${libdir}/tumbler-1/plugins/cache/.debug \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.13.0.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.13.0.bb
new file mode 100644
index 000000000..7e7391167
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-appfinder/xfce4-appfinder_4.13.0.bb
@@ -0,0 +1,14 @@
+DESCRIPTION="Xfce4 Application Finder"
+SECTION = "x11"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS="glib-2.0 gtk+3 libxfce4util libxfce4ui garcon dbus-glib xfconf"
+
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "6b6cf080c891f7945953f8084a901552"
+SRC_URI[sha256sum] = "c0eb3b29eba3cfa9175ed35174e83a21faa2a2423ddb79501fe8846cc430e3ae"
+
+FILES_${PN} += "${datadir}/appdata"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-dev-tools/xfce4-dev-tools_4.12.0.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-dev-tools/xfce4-dev-tools_4.12.0.bb
new file mode 100644
index 000000000..5557f6df9
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-dev-tools/xfce4-dev-tools_4.12.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Xfce4 development tools"
+HOMEPAGE = "http://www.xfce.org"
+SECTION = "x11/libs"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
+DEPENDS = "glib-2.0"
+
+inherit autotools pkgconfig
+
+BBCLASSEXTEND = "native"
+
+SRC_URI = "http://archive.xfce.org/src/xfce/${BPN}/${@'${PV}'[0:4]}/${BPN}-${PV}.tar.bz2"
+SRC_URI[md5sum] = "559202c4d9650e23696c44aa94cfc5a9"
+SRC_URI[sha256sum] = "e2e3a654fe9110df81f8c2483c9cbfa6d656fed15d5e5e717d6ef10bd0f5b5cb"
+
+do_install_append() {
+ install -d ${D}${datadir}/aclocal
+ install -m 644 ${S}/m4macros/*.m4 ${D}${datadir}/aclocal/
+}
+
+FILES_${PN} += "${datadir}/xfce4/dev-tools/m4macros/*.m4"
+
+RDEPENDS_${PN} = "bash"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0001-clock-time-make-change-of-system-s-timezone-change-t.patch b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0001-clock-time-make-change-of-system-s-timezone-change-t.patch
new file mode 100644
index 000000000..9dca3ba57
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0001-clock-time-make-change-of-system-s-timezone-change-t.patch
@@ -0,0 +1,42 @@
+From c582338ef4f33b3dc07a2636340d55b9fb530650 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Wed, 17 Feb 2016 00:15:44 +0100
+Subject: [PATCH] clock-time: make change of system's timezone change time for
+ DEFAULT_TIMEZONE
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+clock_time->timezone is set in clock_time_init so the condition
+
+'clock_time->timezone != NULL
+
+is matching always.
+
+Tested by selecting seconds displayed (-> quick update) and changing timezone.
+
+Upstream-Status: Submitted [1]
+
+[1] https://bugzilla.xfce.org/show_bug.cgi?id=12453
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ plugins/clock/clock-time.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/plugins/clock/clock-time.c b/plugins/clock/clock-time.c
+index b015b13..4459b85 100644
+--- a/plugins/clock/clock-time.c
++++ b/plugins/clock/clock-time.c
+@@ -198,7 +198,7 @@ clock_time_get_time (ClockTime *clock_time)
+
+ panel_return_val_if_fail (XFCE_IS_CLOCK_TIME (clock_time), NULL);
+
+- if (clock_time->timezone != NULL)
++ if (g_strcmp0 (clock_time->timezone_name, DEFAULT_TIMEZONE) != 0)
+ date_time = g_date_time_new_now (clock_time->timezone);
+ else
+ date_time = g_date_time_new_now_local ();
+--
+2.5.0
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0002-windowmenu-do-not-display-desktop-icon-when-no-windo.patch b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0002-windowmenu-do-not-display-desktop-icon-when-no-windo.patch
new file mode 100644
index 000000000..b2d960c00
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/files/0002-windowmenu-do-not-display-desktop-icon-when-no-windo.patch
@@ -0,0 +1,60 @@
+From 0651f228cef01a6c3e4758a991cace1cd7721031 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 24 Sep 2012 09:57:46 +0200
+Subject: [PATCH] windowmenu: do not display desktop icon when no window is
+ active
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+* desktop icon is of no use
+* desktop icon confuses when using showdesktop plugin
+
+Upstream-Status: Pending
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ plugins/windowmenu/windowmenu.c | 12 ++++++------
+ 1 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/plugins/windowmenu/windowmenu.c b/plugins/windowmenu/windowmenu.c
+index c96123a..9404021 100644
+--- a/plugins/windowmenu/windowmenu.c
++++ b/plugins/windowmenu/windowmenu.c
+@@ -256,7 +256,7 @@ window_menu_plugin_init (WindowMenuPlugin *plugin)
+ g_signal_connect (G_OBJECT (plugin->button), "toggled",
+ G_CALLBACK (window_menu_plugin_menu), plugin);
+
+- plugin->icon = xfce_panel_image_new_from_source ("user-desktop");
++ plugin->icon = xfce_panel_image_new_from_source (NULL);
+ gtk_container_add (GTK_CONTAINER (plugin->button), plugin->icon);
+ gtk_widget_show (plugin->icon);
+ }
+@@ -634,7 +634,7 @@ window_menu_plugin_active_window_changed (WnckScreen *screen,
+ /* skip 'fake' windows */
+ type = wnck_window_get_window_type (window);
+ if (type == WNCK_WINDOW_DESKTOP || type == WNCK_WINDOW_DOCK)
+- goto show_desktop_icon;
++ goto show_no_icon;
+
+ /* get the window icon and set the tooltip */
+ gtk_widget_set_tooltip_text (GTK_WIDGET (icon),
+@@ -648,11 +648,11 @@ window_menu_plugin_active_window_changed (WnckScreen *screen,
+ }
+ else
+ {
+- show_desktop_icon:
++ show_no_icon:
+
+- /* desktop is shown right now */
+- xfce_panel_image_set_from_source (icon, "user-desktop");
+- gtk_widget_set_tooltip_text (GTK_WIDGET (icon), _("Desktop"));
++ /* no icon is shown right now */
++ xfce_panel_image_set_from_source (icon, NULL);
++ gtk_widget_set_tooltip_text (GTK_WIDGET (icon), _("No Windows"));
+ }
+ }
+ }
+--
+1.7.6.5
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/xfce4-panel_4.12.2.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/xfce4-panel_4.12.2.bb
new file mode 100644
index 000000000..9cc9a4bbc
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-panel/xfce4-panel_4.12.2.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Xfce4 Panel"
+SECTION = "x11"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=26a8bd75d8f8498bdbbe64a27791d4ee"
+DEPENDS = "libxfce4util garcon libxfce4ui xfconf exo gtk+ gtk+3 dbus cairo virtual/libx11 libxml2 libwnck"
+
+inherit xfce gtk-doc distro_features_check gtk-icon-cache
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "803c9aabc2925dc97f96de125c52ba2e"
+SRC_URI[sha256sum] = "42058abb81b8f87691d3999627447de71c3285bcf055f308aab5cefab2de0ce9"
+SRC_URI += " \
+ file://0001-clock-time-make-change-of-system-s-timezone-change-t.patch \
+ file://0002-windowmenu-do-not-display-desktop-icon-when-no-windo.patch \
+"
+
+EXTRA_OECONF += "--enable-gtk3"
+
+python populate_packages_prepend() {
+ plugin_dir = d.expand('${libdir}/xfce4/panel/plugins/')
+ plugin_name = d.expand('${PN}-plugin-%s')
+ do_split_packages(d, plugin_dir, '^lib(.*).so$', plugin_name,
+ '${PN} plugin for %s', extra_depends='', prepend=True,
+ aux_files_pattern=['${datadir}/xfce4/panel/plugins/%s.desktop',
+ '${sysconfdir}/xdg/xfce/panel/%s-*',
+ '${datadir}/icons/hicolor/48x48/apps/*-%s.png',
+ '${bindir}/*%s*'])
+}
+
+PACKAGES_DYNAMIC += "^${PN}-plugin-.*"
+
+PACKAGES =+ "${PN}-gtk3"
+
+FILES_${PN} += "${libdir}/xfce4/panel/migrate \
+ ${libdir}/xfce4/panel/wrapper-1.0"
+
+FILES_${PN}-gtk3 = " \
+ ${libdir}/libxfce4panel-2.0${SOLIBS} \
+ ${libdir}/xfce4/panel/wrapper-2.0 \
+"
+FILES_${PN}-dbg += " \
+ ${libdir}/xfce4/panel/plugins/.debug \
+"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-power-manager/xfce4-power-manager_1.6.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-power-manager/xfce4-power-manager_1.6.1.bb
new file mode 100644
index 000000000..ed117b0a6
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-power-manager/xfce4-power-manager_1.6.1.bb
@@ -0,0 +1,44 @@
+SUMMARY = "Power manager for the Xfce desktop environment"
+HOMEPAGE = "http://goodies.xfce.org/projects/applications/xfce4-power-manager"
+SECTION = "x11"
+
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+DEPENDS += "gtk+3 glib-2.0 dbus-glib xfconf libxfce4ui libxfce4util libnotify \
+ libxrandr virtual/libx11 libxext xfce4-panel upower libxscrnsaver"
+
+SRC_URI[md5sum] = "17f0e6464ad6b3bc6a657f595bf91430"
+SRC_URI[sha256sum] = "1ea825452343b895566068018b6d5078608f8f46ce8075ba6bbb4b848f48656b"
+
+EXTRA_OECONF = " \
+ --enable-network-manager \
+ --enable-panel-plugins \
+"
+
+PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}"
+PACKAGECONFIG[systemd] = "--enable-polkit, --disable-polkit, polkit"
+
+PACKAGES += "xfce4-powermanager-plugin"
+
+FILES_${PN} += " \
+ ${datadir}/polkit-1 \
+ ${datadir}/appdata \
+"
+
+FILES_xfce4-powermanager-plugin = " \
+ ${libdir}/xfce4 \
+ ${datadir}/xfce4 \
+"
+
+RDEPENDS_xfce4-powermanager-plugin = "${PN}"
+RDEPENDS_${PN} = "networkmanager ${@bb.utils.contains('DISTRO_FEATURES','systemd','','consolekit',d)}"
+
+# xfce4-brightness-plugin was replaced by xfce4-powermanager-plugin
+RPROVIDES_xfce4-powermanager-plugin += "xfce4-brightness-plugin"
+RREPLACES_xfce4-powermanager-plugin += "xfce4-brightness-plugin"
+RCONFLICTS_xfce4-powermanager-plugin += "xfce4-brightness-plugin"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/machine-host.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/machine-host.bb
new file mode 100644
index 000000000..c79197445
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/machine-host.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Meta package adding machine name to known hosts"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+ALLOW_EMPTY_${PN} = "1"
+
+LOCALHOSTMACHINE = "127.0.0.1 ${MACHINE}"
+
+# on some machines starting applications as xfce4-terminal take ages without
+# machine name in hosts
+pkg_postinst_${PN} () {
+if ! grep -q '${LOCALHOSTMACHINE}' $D/etc/hosts ; then
+ echo '${LOCALHOSTMACHINE}' >> $D/etc/hosts
+fi
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-configure.in-hard-code-path-to-iceauth.patch b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-configure.in-hard-code-path-to-iceauth.patch
new file mode 100644
index 000000000..d619cde6c
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session/0001-configure.in-hard-code-path-to-iceauth.patch
@@ -0,0 +1,40 @@
+From a629b051f4e5462150c77b95574bbc7a33bc9666 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Mon, 31 Dec 2012 16:35:29 +0100
+Subject: [PATCH] configure.ac: hard code path to iceauth
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+workaround AC_PATH_PROG which was meant to find programs required at build-time
+not at run-time.
+
+Upstream-Status: Inappropriate [config]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ configure.ac | 8 +-------
+ 1 files changed, 1 insertions(+), 7 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 3cf3510..505e744 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -111,13 +111,7 @@ XDT_FEATURE_DEBUG([xfsm_debug_default])
+ dnl Check for linker optimizations
+ XDT_FEATURE_LINKER_OPTS()
+
+-dnl Check for iceauth
+-AC_PATH_PROG([ICEAUTH], [iceauth])
+-if test x"$ICEAUTH" != x""; then
+- AC_DEFINE_UNQUOTED([ICEAUTH_CMD], ["$ICEAUTH"], [path to iceauth])
+-else
+- AC_MSG_ERROR([iceauth missing, please check your X11 installation])
+-fi
++AC_DEFINE_UNQUOTED([ICEAUTH_CMD], ["$bindir/iceauth"], [path to iceauth])
+
+ dnl Find a location for the session desktop file
+ AC_MSG_CHECKING([what xsession-prefix to use])
+--
+1.7.4.4
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.12.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.12.1.bb
new file mode 100644
index 000000000..a24720603
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-session/xfce4-session_4.12.1.bb
@@ -0,0 +1,32 @@
+SUMMARY = "xfce4-session is a session manager for Xfce 4 Desktop Environment"
+SECTION = "x11"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=9ac2e7cff1ddaf48b6eab6028f23ef88"
+DEPENDS = "virtual/libx11 libsm libxfce4util libxfce4ui gtk+ libwnck dbus dbus-glib xfconf polkit"
+RDEPENDS_${PN} = "netbase xinit dbus-x11 iceauth upower"
+
+inherit xfce update-alternatives distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "f4921fb2e606e74643daf1212263076c"
+SRC_URI[sha256sum] = "97d7f2a2d0af7f3623b68d1f04091e02913b28f9555dab8b0d26c8a1299d08fd"
+SRC_URI += " \
+ file://0001-configure.in-hard-code-path-to-iceauth.patch \
+"
+
+ALTERNATIVE_${PN} = "x-session-manager"
+ALTERNATIVE_TARGET[x-session-manager] = "${bindir}/xfce4-session"
+ALTERNATIVE_PRIORITY_${PN} = "100"
+
+FILES_${PN} += " \
+ ${libdir}/xfce4/*/*/*.so \
+ ${libdir}/xfce4/session/*-*-* \
+ ${datadir}/xsessions \
+ ${datadir}/themes/Default/balou/* \
+ ${datadir}/polkit-1 \
+"
+
+FILES_${PN}-dbg += "${libdir}/xfce4/*/*/.debug"
+
+RDEPENDS_${PN} += "machine-host"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/files/0001-xsettings.xml-Set-default-themes.patch b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/files/0001-xsettings.xml-Set-default-themes.patch
new file mode 100644
index 000000000..67df05a79
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/files/0001-xsettings.xml-Set-default-themes.patch
@@ -0,0 +1,33 @@
+From 2218ba8a21e9f5715b652c6416c2ddb552686b14 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Sun, 20 May 2012 15:22:09 +0200
+Subject: [PATCH] xsettings.xml: Set default themes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstram status: Inappropriate [configuration]
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ xfsettingsd/xsettings.xml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/xfsettingsd/xsettings.xml b/xfsettingsd/xsettings.xml
+index 65ba1ee..9efb3cd 100644
+--- a/xfsettingsd/xsettings.xml
++++ b/xfsettingsd/xsettings.xml
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8"?>
+ <channel name="xsettings" version="1.0">
+ <property name="Net" type="empty">
+- <property name="ThemeName" type="empty"/>
+- <property name="IconThemeName" type="empty"/>
++ <property name="ThemeName" type="string" value="Xfce"/>
++ <property name="IconThemeName" type="string" value="Adwaita"/>
+ <property name="DoubleClickTime" type="int" value="400"/>
+ <property name="DoubleClickDistance" type="int" value="5"/>
+ <property name="DndDragThreshold" type="int" value="8"/>
+--
+2.1.0
+
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings_git.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings_git.bb
new file mode 100644
index 000000000..bf9bd3102
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings_git.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Xfce4 settings"
+SECTION = "x11/wm"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "exo exo-native garcon gtk+ libxfce4util libxfce4ui xfconf dbus-glib libxi virtual/libx11 xrandr libxcursor libxklavier upower"
+
+inherit xfce xfce-git distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+# schnitzeltony git repo is the mainline repo
+# + datetime-setter - sent to mainline but strange response
+# + minor bugfixes - sent mainline but no response
+# + option to hide mousepointer for a specific (touch) input device - sent mainline but no response
+SRC_URI = " \
+ git://github.com/schnitzeltony/xfce4-settings.git;protocol=git;branch=for-oe-4.12.3 \
+ file://0001-xsettings.xml-Set-default-themes.patch \
+"
+SRCREV = "b701ac8b66b83c17469dd5009da51eeb59eba442"
+S = "${WORKDIR}/git"
+PV = "4.12.3+git${SRCPV}"
+
+EXTRA_OECONF += "--enable-maintainer-mode --disable-debug"
+
+PACKAGECONFIG ??= " \
+ ${@bb.utils.contains('DISTRO_FEATURES','systemd','datetime-setter','',d)} \
+ ${@bb.utils.contains('DISTRO_FEATURES','alsa','sound-setter', bb.utils.contains('DISTRO_FEATURES','pulseaudio','sound-setter','',d),d)} \
+"
+PACKAGECONFIG[datetime-setter] = "--enable-datetime-settings, --disable-datetime-settings,, tzdata"
+PACKAGECONFIG[notify] = "--enable-libnotify,--disable-libnotify,libnotify"
+PACKAGECONFIG[sound-setter] = "--enable-sound-settings, --disable-sound-settings, libcanberra, libcanberra-gtk2 sound-theme-freedesktop"
+
+FILES_${PN} += " \
+ ${libdir}/xfce4 \
+ ${datadir}/xfce4 \
+"
+
+RRECOMMENDS_${PN} += "adwaita-icon-theme"
+RRECOMMENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES','alsa','libcanberra-alsa','',d)}"
+RRECOMMENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES','pulseaudio','libcanberra-pulse','',d)}"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfconf/xfconf_4.12.1.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfconf/xfconf_4.12.1.bb
new file mode 100644
index 000000000..a42426fa1
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfconf/xfconf_4.12.1.bb
@@ -0,0 +1,15 @@
+SUMMARY = "Xfce configuration daemon and utilities"
+SECTION = "x11/wm"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552"
+DEPENDS = "dbus-glib libxfce4util perl intltool-native xfce4-dev-tools-native"
+
+inherit xfce gtk-doc
+
+EXTRA_OECONF += "PERL=${STAGING_DIR_TARGET}/usr/bin/perl"
+
+SRC_URI[md5sum] = "20dc8d2bfd80ba136bf4964021b32757"
+SRC_URI[sha256sum] = "35f48564e5694faa54fdc180cd3268e16fc2352946a89a3c2fc12cbe400ada36"
+
+FILES_${PN} += "${libdir}/xfce4/xfconf/xfconfd \
+ ${datadir}/dbus-1/services/org.xfce.Xfconf.service"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfdesktop/xfdesktop_4.12.4.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfdesktop/xfdesktop_4.12.4.bb
new file mode 100644
index 000000000..d9cbe7196
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfdesktop/xfdesktop_4.12.4.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Xfce4 Desktop Manager"
+SECTION = "x11/base"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "glib-2.0 gtk+ libxfce4util libxfce4ui libwnck xfconf dbus-glib dbus-glib-native thunar garcon exo"
+
+inherit xfce distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "7571889368be72df185ce2d470f37198"
+SRC_URI[sha256sum] = "098a35510562907e1431d5adbfa8307484a235c1dec6a43e2d58d2ac4241f1cb"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[notify] = "--enable-notifications,--disable-notifications,libnotify"
+
+FILES_${PN} += "${datadir}/backgrounds"
diff --git a/meta-openembedded/meta-xfce/recipes-xfce/xfwm4/xfwm4_4.12.4.bb b/meta-openembedded/meta-xfce/recipes-xfce/xfwm4/xfwm4_4.12.4.bb
new file mode 100644
index 000000000..2aa68e3fd
--- /dev/null
+++ b/meta-openembedded/meta-xfce/recipes-xfce/xfwm4/xfwm4_4.12.4.bb
@@ -0,0 +1,30 @@
+DESCRIPTION="Xfce4 Window Manager"
+SECTION = "x11/wm"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d791728a073bc009b4ffaf00b7599855"
+DEPENDS = "virtual/libx11 libxpm gtk+ libxfce4util libxfce4ui xfconf libwnck dbus-glib startup-notification exo-native"
+
+inherit xfce update-alternatives distro_features_check
+
+REQUIRED_DISTRO_FEATURES = "x11"
+
+SRC_URI[md5sum] = "3ec136efc5387fd3b53cd66b684f52d7"
+SRC_URI[sha256sum] = "fa74048a75649a6e92df763a3cfb706d3fed1e1a6adf567f6693325a5a6efb36"
+
+python populate_packages_prepend () {
+ themedir = d.expand('${datadir}/themes')
+ do_split_packages(d, themedir, '^(.*)', 'xfwm4-theme-%s', 'XFWM4 theme %s', allow_dirs=True)
+}
+
+PACKAGES_DYNAMIC += "^xfwm4-theme-.*"
+
+ALTERNATIVE_${PN} = "x-window-manager"
+ALTERNATIVE_TARGET[x-window-manager] = "${bindir}/xfwm4"
+ALTERNATIVE_PRIORITY[x-window-manager] = "30"
+
+RDEPENDS_${PN} = "xfwm4-theme-default"
+FILES_${PN} += "${libdir}/xfce4/xfwm4/helper-dialog \
+ ${datadir}/xfwm4/defaults \
+"
+FILES_${PN}-dbg += "${libexecdir}/xfce4/xfwm4/.debug/*"
+
OpenPOWER on IntegriCloud