meta-openembedded: subtree update:fd123c9bb2..7206f7f5bc

Adam Miartus (1):
      cereal: add cereal a header-only c++11 serialization library

Andreas Müller (14):
      xfce4-appfinder: upgrade 4.16.0 -> 4.16.1
      xfce4-whiskermenu-plugin: upgrade 2.5.2 -> 2.5.3
      xfce4-panel: upgrade 4.16.0 -> 4.16.1
      xfce4-notes-plugin: re-add 1.9.0
      gparted: upgrade 1.1.0 -> 1.2.0
      poppler: upgrade 21.01.0 -> 21.02.0
      fluidsynth: upgrade 2.1.6 -> 2.1.7
      mousepad: upgrade 0.5.1 -> 0.5.2
      xfce4-cpugraph-plugin: upgrade 1.2.0 -> 1.2.1
      babl: upgrade 0.1.82 -> 0.1.84
      gegl: upgrade 0.4.26 -> 0.4.28
      gtk+: upgrade 2.24.32 -> 2.24.33
      libsigc++-2.0: upgrade 2.10.3 -> 2.10.6
      gtkmm3: upgrade 3.24.2 -> 3.24.3

Andrei Gherzan (1):
      gateone: Cleanup assets for removed recipe

Andrey Zhizhikin (1):
      iperf3: fix build with autoconf 2.71

Gianfranco (1):
      mosquitto: Upgrade 1.6.12 -> 2.0.7

Harpritkaur Bhandari (1):
      rapidjson: Remove unwanted patches

Hongxu Jia (4):
      lksctp-tools: make conpatible to autoconf-2.70
      spice: make conpatible to autoconf-2.70
      freeradius: fix build failure with autoconf 2.71
      ndpi: fix autoconf-2.71 compatibility

Kai Kang (3):
      meta-oe: add crash to NON_MULTILIB_RECIPES
      lxdm: support to change user password
      lxdm: disallow empty new password

Khem Raj (28):
      libssh2: Fix build with autoconf 2.70+
      yasm: Fix build with autotools 2.70+
      boinc-client: Upgrade to 7.16.16 release
      net-snmp: Remove hardcoded paths to build host in net-snmp-config
      keepalived: Upgrade to 2.2.1
      gst-shark: Upgrade to 0.7.2
      hidapi: Backport patch to fix build with autotools 2.70+
      libsrtp: Update to 2.3.0
      libsrtp: Do not invoke automake during configure
      klibc: Upgrade to 2.0.8 release
      geany,geany-plugins: Upgrade to 1.37.x
      libstatgrab: Fix build with autoconf 2.70+
      libmypaint: Fix build with autotools 2.70+
      geany: Fix build with autotools 2.70+
      ubi-utils-klibc: Fix build with clang
      kexecboot: Fix build with clang
      glm: Upgrade to 0.9.9.8
      gimp: Fix build with autoconf-2.70+
      klibc: Fix x86_64 build with binutils 2.36+
      pavucontrol: Depend on libxml-parser-perl-native
      libsrtp: Copy ar-lib from automake
      libmcrypt: Run autoreconf steps manually
      libsdl2-mixer: Fix build with autoconf 2.70+
      openldap: Fix build with autoconf 2.70+
      transmission: Fix build with autotools 2.70+
      boinc-client: Fix build with autotools 2.70+
      iwd: Fix build with ell 0.37
      kernel-selftest: Disable building bpf

Leon Anavi (29):
      python3-gevent: Upgrade 20.9.0 -> 21.1.2
      python3-prompt-toolkit: Upgrade 3.0.11 -> 3.0.14
      python3-urllib3: Upgrade 1.26.2 -> 1.26.3
      python3-pybind11: Upgrade 2.5.0 -> 2.6.2
      python3-xlrd: Upgrade 1.2.0 -> 2.0.1
      python3-croniter: Upgrade 1.0.2 -> 1.0.4
      python3-cantools: Upgrade 36.1.0 -> 36.2.0
      python3-pyzmq: Upgrade 21.0.2 -> 22.0.2
      python3-aiohttp-jinja2: Upgrade 1.2.0 -> 1.4.2
      python3-prctl: Upgrade 1.7 -> 1.8.1
      python3-cmd2: Upgrade 1.4.0 -> 1.5.0
      python3-elementpath: Upgrade 2.1.2 -> 2.1.3
      python3-croniter: Upgrade 1.0.4 -> 1.0.5
      python3-pychromecast: Upgrade 7.7.2 -> 8.0.0
      python3-alembic: Upgrade 1.5.2 -> 1.5.3
      python3-meh: Upgrade 0.49 -> 0.50
      python3-pywbem: Upgrade 1.1.0 -> 1.1.3
      python3-ipython: Upgrade 7.19.0 -> 7.20.0
      python3-croniter: Upgrade 1.0.5 -> 1.0.6
      python3-pywbemtools: Upgrade 0.8.0 -> 0.8.1
      python3-sqlalchemy: Upgrade 1.3.22 -> 1.3.23
      python3-flask-migrate: Upgrade 2.5.3 -> 2.6.0
      python3-javaobj-py3: Upgrade 0.4.1 -> 0.4.2
      python3-pytest-html: Upgrade 2.1.1 -> 3.1.1
      python3-graphviz: Upgrade 0.14.2 -> 0.16
      python3-tqdm: Upgrade 4.51.0 -> 4.56.0
      python3-alembic: Upgrade 1.5.3 -> 1.5.4
      python3-pymongo: Upgrade 3.11.2 -> 3.11.3
      python3-pymisp: Upgrade 2.4.137.1 -> 2.4.137.3

Martin Jansa (6):
      zbar: fix random do_prepare_recipe_sysroot_gettext failures
      zbar: use 4 spaces for indentation
      net-snmp: fix build with dash
      wireguard-module: remove PKG assignment
      graphviz: drop unused SRCREV and outdated comment
      pidgin: upgrade to 2.14.1 and fix autoconf-2.71 compatibility

Mingli Yu (5):
      net-snmp: improve reproducibility
      python3-h5py: improve reproducibility
      opencv: improve reproducibility
      mozjs: improve reproducibility
      netsnmp: remove --with-openssl=PATH configure option

Nicolas Jeker (2):
      network-manager-applet: Build without libteam support
      networkmanager: Add PACKAGECONFIG for ovs

Oleksandr Kravchuk (24):
      iwd: update to 1.11
      cpuid: update to 20201006
      libblockdev: update to 2.25
      nano: update to 5.5
      plymouth: update to 0.9.5
      adcli: update to 0.9.0
      cannelloni: update to 1.0.0
      ipset: update to 7.10
      kronosnet: update 1.20
      nghttp2: update to 1.43.0
      atftp: update to 0.7.4
      cereal: update to 1.3.0
      python3-aws-iot-device-sdk-python: update to 1.4.9
      python3-flask-socketio: update to 4.3.1
      python3-greenstalk: update to 2.0.0
      python3-twitter: update to 3.10.0
      fetchmail: udpate to 6.4.16
      wireshark: update to 3.4.3
      iqrencode: update to 4.1.1
      libconfig add UPSTREAM_CHECK_URI
      ceres-solver: update to 2.0.0
      libgit2: update to 1.1.0
      hexedit: update to 1.5
      ttf-abyssinica: update to 2.000

Oleksiy Obitotskyy (1):
      libhugetlbfs: improve reproducibility

Peter Smith (1):
      python3-ruamel-yaml: add support for native and nativesdk

Qi.Chen@windriver.com (1):
      minifi-cpp: set PSEUDO_CONSIDER_PATHS

Ramon Fried (2):
      fluentbit: fix systemd input plugin
      fluentbit: Fix SIGSEGV caused by using flb_free instead of mk_mem_free

Robert P. J. Day (1):
      correct "RRCOMMENDS" typo in ipset recipe

Ross Burton (2):
      python3-ruamel-yaml: add native and nativesdk class extension
      python3-pykwalify: fix RDEPENDS

Sakib Sajal (2):
      libgpiod: add ptest
      xfce4-session: increase ALTERNATIVE_PRIORITY

Wang Mingyu (1):
      dnsmasq: upgrade 2.82 -> 2.84

Yi Fan Yu (1):
      postgresql: bypass autoconf version check

Yi Zhao (1):
      openipmi: upgrade 2.0.30 -> 2.0.31

Zang Ruochen (7):
      libfastjson: upgrade 0.99.8 -> 0.99.9
      libio-pty-perl: upgrade 1.15 -> 1.16
      libjson-perl: upgrade 4.02000 -> 4.03000
      libmbim: upgrade 1.24.4 -> 1.24.6
      sanlock: upgrade 3.8.2 -> 3.8.3
      python3-matplotlib: upgrade 3.3.2 -> 3.3.4
      python3-pytz: upgrade 2020.1 -> 2021.1

akuster (2):
      enca: Fix SRC_URI
      meta-oe/README: add Ubuntu prerequisite information

zangrc (6):
      libtalloc: upgrade 2.3.1 -> 2.3.2
      gensio: upgrade 2.2.0 -> 2.2.3
      zchunk: upgrade 1.1.8 -> 1.1.9
      libnet-ldap-perl: upgrade 0.67 -> 0.68
      librole-tiny-perl: upgrade 2.002003 -> 2.002004
      cpprest: upgrade 2.10.17 -> 2.10.18

zhengruoqin (4):
      open-isns: upgrade 0.99 -> 0.101
      gd: upgrade 2.3.0 -> 2.3.1
      live555: upgrade 20210101 -> 20210129
      python3-periphery: upgrade 2.1.0 -> 2.2.0

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: I65a2b942fbfbc262976e6417d7481ae3fc82cb17
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch b/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch
deleted file mode 100644
index 2eb50a5..0000000
--- a/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-From 461861cd2e34294830b121db834c05ff39424f6f Mon Sep 17 00:00:00 2001
-From: Khem Raj <raj.khem@gmail.com>
-Date: Fri, 27 Dec 2019 18:42:51 -0800
-Subject: [PATCH] Fix Wimplicit-int-float-conversion warnings with clang 10+
-
-This is a new warning in clang which will be available in clang 10
-onwards
-
-Fixes
-error: implicit conversion from 'const int' to 'float' may lose precision [-Werror,-Wimplicit-int-float-conversion]
-
-Upstream-Status: Submitted [https://github.com/g-truc/glm/pull/986]
-Signed-off-by: Khem Raj <raj.khem@gmail.com>
----
- glm/gtx/scalar_multiplication.hpp  |  2 +-
- test/gtx/gtx_fast_trigonometry.cpp | 32 +++++++++++++++---------------
- 2 files changed, 17 insertions(+), 17 deletions(-)
-
-diff --git a/glm/gtx/scalar_multiplication.hpp b/glm/gtx/scalar_multiplication.hpp
-index f391f8de..496ba193 100644
---- a/glm/gtx/scalar_multiplication.hpp
-+++ b/glm/gtx/scalar_multiplication.hpp
-@@ -54,7 +54,7 @@ namespace glm
- 	template<typename T> \
- 	return_type_scalar_multiplication<T, Vec> \
- 	operator/(Vec lh, T const& s){ \
--		return lh *= 1.0f / s; \
-+		return lh *= 1.0f / static_cast<float>(s); \
- 	}
- 
- GLM_IMPLEMENT_SCAL_MULT(vec2)
-diff --git a/test/gtx/gtx_fast_trigonometry.cpp b/test/gtx/gtx_fast_trigonometry.cpp
-index f3bf17bf..f3c4e957 100644
---- a/test/gtx/gtx_fast_trigonometry.cpp
-+++ b/test/gtx/gtx_fast_trigonometry.cpp
-@@ -239,12 +239,12 @@ namespace taylorCos
- 		std::vector<glm::vec4> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * i));
-+			Results[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * float(i)));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
-@@ -280,12 +280,12 @@ namespace taylorCos
- 		std::vector<glm::vec4> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * i));
-+			Results[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * float(i)));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
-@@ -327,12 +327,12 @@ namespace taylorCos
- 		std::vector<glm::vec4> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * i));
-+			Results[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * float(i)));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
-@@ -349,12 +349,12 @@ namespace taylorCos
- 		std::vector<glm::vec4> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * i));
-+			Results[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * float(i)));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
-@@ -371,12 +371,12 @@ namespace taylorCos
- 		std::vector<glm::vec4> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * i));
-+			Results[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * float(i)));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
-@@ -466,12 +466,12 @@ namespace taylor2
- 		std::vector<float> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = taylorCosA(AngleShift.x + Begin + Steps * i);
-+			Results[i] = taylorCosA(AngleShift.x + Begin + Steps * float(i));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
-@@ -488,12 +488,12 @@ namespace taylor2
- 		std::vector<float> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = taylorCosB(AngleShift.x + Begin + Steps * i);
-+			Results[i] = taylorCosB(AngleShift.x + Begin + Steps * float(i));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
-@@ -510,12 +510,12 @@ namespace taylor2
- 		std::vector<float> Results;
- 		Results.resize(Samples);
- 
--		float Steps = (End - Begin) / Samples;
-+		float Steps = (End - Begin) / float(Samples);
- 
- 		std::clock_t const TimeStampBegin = std::clock();
- 
- 		for(std::size_t i = 0; i < Samples; ++i)
--			Results[i] = taylorCosC(AngleShift.x + Begin + Steps * i);
-+			Results[i] = taylorCosC(AngleShift.x + Begin + Steps * float(i));
- 
- 		std::clock_t const TimeStampEnd = std::clock();
- 
--- 
-2.24.1
-
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Silence-clang-warnings.patch b/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Silence-clang-warnings.patch
new file mode 100644
index 0000000..25e8518
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/glm/glm/0001-Silence-clang-warnings.patch
@@ -0,0 +1,50 @@
+From 5b83983b246cff440de4421696b6b5dd9072ed2d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sat, 6 Feb 2021 11:36:23 -0800
+Subject: [PATCH] Silence clang warnings
+
+Fixes
+glm/gtc/random.inl:25:17: error: implicit conversion loses integer precision: 'int' to 'unsigned char' [-Werror,-Wimplicit-int-conversion]
+|                                 std::rand() % std::numeric_limits<uint8>::max());
+|                                 ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+glm/gtc/../ext/quaternion_common.inl:76:87: error: unused parameter 'k' [-Werror,-Wunused-parameter]
+    GLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k)
+                                                                                      ^
+
+Upstream-Status: Submitted [https://github.com/g-truc/glm/pull/1055]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ glm/ext/quaternion_common.inl | 2 +-
+ glm/gtc/random.inl            | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/glm/ext/quaternion_common.inl b/glm/ext/quaternion_common.inl
+index 0e4a3bb2..8f9dccef 100644
+--- a/glm/ext/quaternion_common.inl
++++ b/glm/ext/quaternion_common.inl
+@@ -104,7 +104,7 @@ namespace glm
+         {
+             // Graphics Gems III, page 96
+             T angle = acos(cosTheta);
+-            T phi = angle + k * glm::pi<T>();
++            T phi = angle + static_cast<float>(k) * glm::pi<T>();
+             return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle);
+         }
+     }
+diff --git a/glm/gtc/random.inl b/glm/gtc/random.inl
+index 70485098..a4af2a06 100644
+--- a/glm/gtc/random.inl
++++ b/glm/gtc/random.inl
+@@ -22,7 +22,7 @@ namespace detail
+ 		GLM_FUNC_QUALIFIER static vec<1, uint8, P> call()
+ 		{
+ 			return vec<1, uint8, P>(
+-				std::rand() % std::numeric_limits<uint8>::max());
++				static_cast<uint8>(std::rand()) % std::numeric_limits<uint8>::max());
+ 		}
+ 	};
+ 
+-- 
+2.30.0
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.6.bb b/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.8.bb
similarity index 86%
rename from meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.6.bb
rename to meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.8.bb
index e2f4dbe..c5a7c5b 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.6.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/glm/glm_0.9.9.8.bb
@@ -6,17 +6,17 @@
 BUGTRACKER = "https://github.com/g-truc/glm/issues"
 SECTION = "libs"
 LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://copying.txt;md5=4a735e33f271f57404fda17e80085411"
+LIC_FILES_CHKSUM = "file://copying.txt;md5=462e4b97f73ef12f8171c3c546ce4e8d"
 
 SRC_URI = " \
     git://github.com/g-truc/glm;branch=master \
-    file://0001-Fix-Wimplicit-int-float-conversion-warnings-with-cla.patch \
+    file://0001-Silence-clang-warnings.patch \
     file://glmConfig.cmake.in \
     file://glmConfigVersion.cmake.in \
     file://glm.pc.in \
     file://glmTargets.cmake \
 "
-SRCREV = "4db8f89aace8f04c839b606e15b39fb8383ec732"
+SRCREV = "bf71a834948186f4097caa076cd2663c69a10e1e"
 
 S = "${WORKDIR}/git"
 
diff --git a/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb b/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb
index bc46a11..8fe837b 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/graphviz/graphviz_2.44.1.bb
@@ -20,13 +20,6 @@
 
 inherit autotools-brokensep pkgconfig gettext
 
-# The source tarball suggested at
-# https://graphviz.gitlab.io/_pages/Download/Download_source.html has no
-# version in its name. So once graphviz is updgraded, only first time users will
-# get checksum errors. Fedora people seem to expect same so they use a versioned
-# source - see https://src.fedoraproject.org/cgit/rpms/graphviz.git/tree/graphviz.spec
-
-SRCREV = "771bc4dbff3e6f358fa75cdc7774a413ccacad51"
 SRC_URI = "https://www2.graphviz.org/Packages/stable/portable_source/${BP}.tar.gz \
            file://0001-plugin-pango-Include-freetype-headers-explicitly.patch \
 "
diff --git a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer/0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer/0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch
new file mode 100644
index 0000000..0605b32
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer/0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch
@@ -0,0 +1,34 @@
+From 9363c98528ef850235852e44f678df6b5c011ee1 Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Sun, 7 Feb 2021 18:08:36 -0800
+Subject: [PATCH] configure.in: Undefine AC_CONFIG_AUX_DIR
+
+This helps reconfiguring with autotools 2.70+
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ configure.in | 5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/configure.in
++++ b/configure.in
+@@ -1,7 +1,6 @@
+ dnl Process this file with autoconf to produce a configure script.
+ AC_INIT(README.txt)
+ AC_CONFIG_AUX_DIR(build-scripts)
+-
+ dnl Set various version strings - taken gratefully from the GTk sources
+ 
+ # Making releases:
+@@ -40,10 +39,6 @@ AC_SUBST(LT_CURRENT)
+ 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-graphics/libsdl/libsdl2-mixer_2.0.4.bb b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb
index 8f1960d..6b6a531 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/libsdl/libsdl2-mixer_2.0.4.bb
@@ -4,18 +4,18 @@
 LICENSE = "Zlib"
 LIC_FILES_CHKSUM = "file://COPYING.txt;md5=516daf7a177ad4c8874bb9efa1a69c1f"
 
-SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-${PV}.tar.gz"
-
-SRC_URI[md5sum] = "a36e8410cac46b00a4d01752b32c3eb1"
+SRC_URI = "http://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-${PV}.tar.gz \
+           file://0001-configure.in-Undefine-AC_CONFIG_AUX_DIR.patch \
+          "
 SRC_URI[sha256sum] = "b4cf5a382c061cd75081cf246c2aa2f9df8db04bdda8dcdc6b6cca55bede2419"
 
 S = "${WORKDIR}/SDL2_mixer-${PV}"
 
 inherit autotools-brokensep pkgconfig
 
-EXTRA_AUTORECONF += "--include=acinclude"
 EXTRA_OECONF = "--disable-music-mp3 --enable-music-ogg --disable-music-ogg-shared LIBS=-L${STAGING_LIBDIR}"
 
+PACKAGECONFIG ??= ""
 PACKAGECONFIG[mad] = "--enable-music-mp3-mad-gpl,--disable-music-mp3-mad-gpl,libmad"
 
 do_configure_prepend () {
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-greeter-set-visible-when-switch-to-input-user.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-greeter-set-visible-when-switch-to-input-user.patch
new file mode 100644
index 0000000..e01dc7f
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0001-greeter-set-visible-when-switch-to-input-user.patch
@@ -0,0 +1,33 @@
+From f6b8e141e00c4837239f5b69af4e7bee1204abba Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Thu, 17 Dec 2020 10:18:58 +0800
+Subject: [PATCH 1/8] greeter: set visible when switch to input user
+
+It switches back to input user entry if press Esc key when input the
+password. At this time, the user name input is shown as '*' rather than
+plain text. Set the visibility to fix this issue. And clean the text as
+well.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index 2c6e5be..f100c72 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -139,6 +139,8 @@ static void switch_to_input_user(void)
+ 		pass=NULL;
+ 	}
+ 	gtk_label_set_text( GTK_LABEL(prompt), _("User:"));
++	gtk_entry_set_text(GTK_ENTRY(login_entry), "");
++	gtk_entry_set_visibility(GTK_ENTRY(login_entry), TRUE);
+ 	gtk_widget_show(prompt);
+ 	if(user_list)
+ 	{
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-greeter-gdk.c-fix-typo.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-greeter-gdk.c-fix-typo.patch
new file mode 100644
index 0000000..da02129
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0002-greeter-gdk.c-fix-typo.patch
@@ -0,0 +1,28 @@
+From 3a3c5c644c9790cb3f88f3ce3757c2803cff90c5 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Thu, 17 Dec 2020 14:32:40 +0800
+Subject: [PATCH 2/8] greeter-gdk.c: fix typo
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter-gdk.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/greeter-gdk.c b/src/greeter-gdk.c
+index 1b27d2e..5aa3e7f 100644
+--- a/src/greeter-gdk.c
++++ b/src/greeter-gdk.c
+@@ -299,7 +299,7 @@ void ui_prepare(void)
+         attr.wclass = GDK_INPUT_OUTPUT;
+         win = gdk_window_new(root, &attr, mask);
+         gdk_window_set_decorations(win,0);
+-        gdk_window_set_title(win,"lxdm-greter-gdk");
++        gdk_window_set_title(win,"lxdm-greeter-gdk");
+         
+         scr=gdk_screen_get_default();
+         g_signal_connect(scr, "size-changed", G_CALLBACK(on_screen_size_changed), win);
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0003-check-whether-password-expired-with-pam.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0003-check-whether-password-expired-with-pam.patch
new file mode 100644
index 0000000..c648543
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0003-check-whether-password-expired-with-pam.patch
@@ -0,0 +1,46 @@
+From 497e0fc7010969759c8247f7013a89589c44234a Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Thu, 17 Dec 2020 18:12:29 +0800
+Subject: [PATCH 3/8] check whether password expired with pam
+
+Introduce a new enum AuthResult type AUTH_PASSWD_EXPIRE. When user's
+password is expired, return it. Only work with pam.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/lxdm.h | 1 +
+ src/pam.c  | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/src/lxdm.h b/src/lxdm.h
+index 568573f..1c2f837 100644
+--- a/src/lxdm.h
++++ b/src/lxdm.h
+@@ -41,6 +41,7 @@ enum AuthResult
+     AUTH_SUCCESS,
+     AUTH_BAD_USER,
+     AUTH_FAIL,
++    AUTH_PASSWD_EXPIRE,
+     AUTH_PRIV,
+     AUTH_ERROR
+ };
+diff --git a/src/pam.c b/src/pam.c
+index 43bd687..16a36f0 100644
+--- a/src/pam.c
++++ b/src/pam.c
+@@ -257,6 +257,10 @@ int lxdm_auth_user_authenticate(LXDM_AUTH *a,const char *user,const char *pass,i
+ 			return AUTH_FAIL;
+ 		}
+ 		ret=pam_acct_mgmt(a->handle,PAM_SILENT);
++		if (ret == PAM_NEW_AUTHTOK_REQD) {
++			g_debug("user %s account has expired\n", user);
++			return AUTH_PASSWD_EXPIRE;
++		}
+ 		if(ret!=PAM_SUCCESS)
+ 		{
+ 			g_debug("user %s acct mgmt fail with %d\n",user,ret);
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0004-lxdm.c-add-function-to-change-password-with-pam.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0004-lxdm.c-add-function-to-change-password-with-pam.patch
new file mode 100644
index 0000000..29c1000
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0004-lxdm.c-add-function-to-change-password-with-pam.patch
@@ -0,0 +1,124 @@
+From d4de5497bd89c408377194b9fa9026ba8e68b634 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 11 Jan 2021 14:11:05 +0800
+Subject: [PATCH 4/8] lxdm.c: add function to change password with pam
+
+Add function to change user's password when pam is enabled. It is useful
+to change user's password when the password is expired.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/lxdm.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/lxdm.h |  1 +
+ 2 files changed, 69 insertions(+)
+
+diff --git a/src/lxdm.c b/src/lxdm.c
+index 638c30f..fe17a71 100644
+--- a/src/lxdm.c
++++ b/src/lxdm.c
+@@ -104,6 +104,10 @@ static int old_tty=1,def_tty = 7,nr_tty=0;
+ static int def_display=0;
+ static GSList *session_list;
+ 
++#if HAVE_LIBPAM
++static const char *new_passwd = NULL;
++#endif
++
+ static void lxdm_startx(LXSession *s);
+ 
+ static int get_active_vt(void)
+@@ -759,6 +763,69 @@ int lxdm_auth_user(int type,char *user, char *pass, struct passwd **ppw)
+ 	return ret;
+ }
+ 
++
++#if HAVE_LIBPAM
++
++static int do_conv(int num, const struct pam_message **msg,struct pam_response **resp, void *arg)
++{
++	int result = PAM_SUCCESS;
++	int i;
++
++	*resp = (struct pam_response *) calloc(num, sizeof(struct pam_response));
++	for(i = 0; i < num; i++)
++	{
++		switch (msg[i]->msg_style) {
++			case PAM_PROMPT_ECHO_ON:
++				break;
++			case PAM_PROMPT_ECHO_OFF:
++				resp[i]->resp = strdup(new_passwd);
++				break;
++			case PAM_ERROR_MSG:
++			case PAM_TEXT_INFO:
++				break;
++			default:
++				break;
++		}
++	}
++	return result;
++}
++
++static int lxdm_change_passwd_pam(const char *service, const char *user, const char *pass)
++{
++	pam_handle_t *pamh = NULL;
++	static struct pam_conv conv = {
++		do_conv,
++		NULL
++	};
++
++	int ret = pam_start("lxdm", user, &conv, &pamh);
++	if (PAM_SUCCESS != ret) {
++		g_warning("pam_start failed.");
++		return 1;
++	}
++
++	new_passwd = pass;
++	ret = pam_chauthtok(pamh, 0);
++	if (PAM_SUCCESS != ret) {
++		g_warning("pam_chauthtok failed: %s", pam_strerror(pamh, ret));
++		return 1;
++	}
++
++	(void)pam_end(pamh, PAM_SUCCESS);
++
++	return 0;
++}
++#endif
++
++int lxdm_change_passwd(const char *user, const char *pass)
++{
++#if HAVE_LIBPAM
++	return lxdm_change_passwd_pam("lxdm", user, pass);
++#else
++	return 0;
++#endif
++}
++
+ static void close_left_fds(void)
+ {
+ 	struct dirent **list;
+@@ -1446,6 +1513,7 @@ int lxdm_do_auto_login(void)
+ 			lxdm_do_login(pw,session,lang,option);
+ 			success=1;
+ 		}
++
+ 		g_free(user);g_free(session);g_free(lang);
+ 	}
+ 	g_free(last_lang);
+diff --git a/src/lxdm.h b/src/lxdm.h
+index 1c2f837..be3c81f 100644
+--- a/src/lxdm.h
++++ b/src/lxdm.h
+@@ -30,6 +30,7 @@ G_BEGIN_DECLS
+ extern GKeyFile *config;
+ 
+ int lxdm_auth_user(int type,char *user,char *pass,struct passwd **ppw);
++int lxdm_change_passwd(const char *user, const char *pass);
+ void lxdm_do_login(struct passwd *pw,char *session,char *lang,char *option);
+ void lxdm_do_reboot(void);
+ void lxdm_do_shutdown(void);
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0005-ui.c-handle-password-expire-and-update-new-password.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0005-ui.c-handle-password-expire-and-update-new-password.patch
new file mode 100644
index 0000000..ecbe68d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0005-ui.c-handle-password-expire-and-update-new-password.patch
@@ -0,0 +1,53 @@
+From 54b2ed18ca52fa682ade2fe84e1b0d19d1b78cc4 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 11 Jan 2021 16:48:26 +0800
+Subject: [PATCH 5/8] ui.c: handle password-expire and update-new-password
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/ui.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/src/ui.c b/src/ui.c
+index f233589..3ddb484 100644
+--- a/src/ui.c
++++ b/src/ui.c
+@@ -161,6 +161,9 @@ static gboolean on_greeter_input(GIOChannel *source, GIOCondition condition, gpo
+ 				ui_drop();
+ 				lxdm_do_login(pw, session, lang,NULL);
+ 			}
++			else if (AUTH_PASSWD_EXPIRE == ret) {
++				xwrite(greeter_pipe[0], "password-expire\n", 16);
++			}
+ 			else
+ 			{
+ 				if(pass!=NULL)
+@@ -205,6 +208,23 @@ static gboolean on_greeter_input(GIOChannel *source, GIOCondition condition, gpo
+ 		g_free(session);
+ 		g_free(lang);
+ 	}
++	else if (!strncmp(str, "update-new-password", 19)) {
++		xwrite(greeter_pipe[0], "update-new-password\n", 20);
++		char *user = greeter_param(str, "user");
++		char *pass = greeter_param(str, "newpass");
++		char *session = greeter_param(str, "session");
++		char *lang = greeter_param(str, "lang");
++
++		int ret = lxdm_change_passwd(user, pass);
++		if (ret) {
++			xwrite(greeter_pipe[0], "invalid-new-password\n", 21);
++		} else {
++			struct passwd *pw;
++			ret = lxdm_auth_user(AUTH_TYPE_NORMAL, user, pass, &pw);
++			ui_drop();
++			lxdm_do_login(pw, session, lang, NULL);
++		}
++	}
+ 	g_free(str);
+ 	return TRUE;
+ }
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0006-themes-Industrial-add-info-label-in-ui.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0006-themes-Industrial-add-info-label-in-ui.patch
new file mode 100644
index 0000000..4cadc3d
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0006-themes-Industrial-add-info-label-in-ui.patch
@@ -0,0 +1,124 @@
+From 8414d63343cc7909bc7a972941c678509d5d5be6 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 11 Jan 2021 10:15:45 +0800
+Subject: [PATCH 6/8] themes/Industrial: add info label in ui
+
+Adjust the layout and add a new label "info" under the labe "prompt" in
+themes/Industrial to tell user some useful information such as
+"Authentication failed" or "Invalid password".
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ data/themes/Industrial/greeter-gtk3.ui | 27 +++++++++++++++++++++++++-
+ data/themes/Industrial/greeter.ui      | 27 +++++++++++++++++++++++++-
+ data/themes/Industrial/gtk.css         |  5 +++++
+ 3 files changed, 57 insertions(+), 2 deletions(-)
+
+diff --git a/data/themes/Industrial/greeter-gtk3.ui b/data/themes/Industrial/greeter-gtk3.ui
+index 2f4e631..e59eee3 100644
+--- a/data/themes/Industrial/greeter-gtk3.ui
++++ b/data/themes/Industrial/greeter-gtk3.ui
+@@ -45,7 +45,12 @@
+                     <property name="xscale">0</property>
+                     <property name="yscale">0</property>
+                     <child>
+-                      <object class="GtkHBox" id="hbox3">
++                      <object class="GtkVBox" id="vbox3">
++                      <property name="visible">True</property>
++                      <property name="orientation">vertical</property>
++                      <property name="spacing">12</property>
++                      <child>
++                        <object class="GtkHBox" id="hbox3">
+                         <property name="visible">True</property>
+                         <property name="spacing">12</property>
+                         <child>
+@@ -91,6 +96,26 @@
+                           </packing>
+                         </child>
+                       </object>
++                      </child>
++                      <child>
++                        <object class="GtkHBox" id="hbox4">
++                        <property name="visible">True</property>
++                        <property name="spacing">12</property>
++                        <child>
++                          <object class="GtkLabel" id="info">
++                            <property name="visible">True</property>
++                            <property name="label" translatable="yes"></property>
++                            <property name="yalign">0.2</property>
++                          </object>
++                          <packing>
++                            <property name="expand">False</property>
++                            <property name="fill">False</property>
++                            <property name="position">0</property>
++                          </packing>
++                        </child>
++                        </object>
++                      </child>
++                      </object>
+                     </child>
+                   </object>
+                   <packing>
+diff --git a/data/themes/Industrial/greeter.ui b/data/themes/Industrial/greeter.ui
+index 3413922..6a02d8d 100644
+--- a/data/themes/Industrial/greeter.ui
++++ b/data/themes/Industrial/greeter.ui
+@@ -47,7 +47,12 @@
+                     <property name="xscale">0</property>
+                     <property name="yscale">0</property>
+                     <child>
+-                      <object class="GtkHBox" id="hbox3">
++                      <object class="GtkVBox" id="vbox3">
++                      <property name="visible">True</property>
++                      <property name="orientation">vertical</property>
++                      <property name="spacing">12</property>
++                      <child>
++                        <object class="GtkHBox" id="hbox3">
+                         <property name="visible">True</property>
+                         <property name="spacing">12</property>
+                         <child>
+@@ -93,6 +98,26 @@
+                           </packing>
+                         </child>
+                       </object>
++                      </child>
++                      <child>
++                        <object class="GtkHBox" id="hbox4">
++                        <property name="visible">True</property>
++                        <property name="spacing">12</property>
++                        <child>
++                          <object class="GtkLabel" id="info">
++                            <property name="visible">True</property>
++                            <property name="label" translatable="yes"></property>
++                            <property name="yalign">0.2</property>
++                          </object>
++                          <packing>
++                            <property name="expand">False</property>
++                            <property name="fill">False</property>
++                            <property name="position">0</property>
++                          </packing>
++                        </child>
++                        </object>
++                      </child>
++                      </object>
+                     </child>
+                   </object>
+                   <packing>
+diff --git a/data/themes/Industrial/gtk.css b/data/themes/Industrial/gtk.css
+index 7621345..be15f43 100644
+--- a/data/themes/Industrial/gtk.css
++++ b/data/themes/Industrial/gtk.css
+@@ -22,3 +22,8 @@
+ 	font: Sans 12;
+ 	color: #9E9D9B;
+ }
++
++#info {
++        font: Sans 14;
++        font-style: italic;
++}
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0007-greeter.c-support-to-update-expired-password.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0007-greeter.c-support-to-update-expired-password.patch
new file mode 100644
index 0000000..84a9fae
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0007-greeter.c-support-to-update-expired-password.patch
@@ -0,0 +1,180 @@
+From bae6a2b3a2232abd16a8d8558dda542d4970f1bb Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Tue, 12 Jan 2021 09:23:05 +0800
+Subject: [PATCH 7/8] greeter.c: support to update expired password
+
+Update greeter to work with ui to handle expired password. It checks
+whether password is expired after input user and password. If expired,
+force user to update password immediately. It allows 3 times to try. If
+exceeds, reset to input user.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 81 insertions(+), 2 deletions(-)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index f100c72..804fca0 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -77,6 +77,8 @@ static GtkWidget *lang_menu;
+ 
+ static char* user = NULL;
+ static char* pass = NULL;
++static char* new_pass = NULL;
++static gboolean pass_expired = FALSE;
+ 
+ static char* ui_file = NULL;
+ static char *ui_nobody = NULL;
+@@ -167,10 +169,19 @@ static void switch_to_input_passwd(void)
+ 		else
+ 			gtk_widget_hide(user_list);
+ 	}
+-	gtk_label_set_text( GTK_LABEL(prompt), _("Password:") );
++	if (pass_expired) {
++		if (!new_pass) {
++			gtk_label_set_text(GTK_LABEL(prompt), _("New password:"));
++		} else {
++			gtk_label_set_text(GTK_LABEL(prompt), _("Retype new password:"));
++		}
++	} else {
++		gtk_label_set_text( GTK_LABEL(prompt), _("Password:") );
++	}
+ 	gtk_entry_set_text(GTK_ENTRY(login_entry), "");
+ 	gtk_entry_set_visibility(GTK_ENTRY(login_entry), FALSE);
+ 	gtk_widget_show(login_entry);
++	gtk_widget_show(prompt);
+ 	gtk_widget_grab_focus(login_entry);
+ }
+ 
+@@ -189,6 +200,8 @@ static void try_login_user(const char *user)
+ 
+ static void on_entry_activate(GtkEntry* entry)
+ {
++	static int count = 0;
++
+ 	char* tmp;
+ 	if( !user )
+ 	{
+@@ -217,6 +230,46 @@ static void on_entry_activate(GtkEntry* entry)
+ 	}
+ 	else
+ 	{
++		if (pass_expired) {
++			if (!new_pass) {
++				new_pass = g_strdup(gtk_entry_get_text(entry));
++				switch_to_input_passwd();
++			} else {
++				tmp = g_strdup(gtk_entry_get_text(entry));
++				if (strcmp(new_pass, tmp)) {
++					g_free(new_pass);
++					new_pass = NULL;
++					// if new passwords not match, retry for 3 times at most
++					if (++count < 3) {
++						switch_to_input_passwd();
++					} else {
++						count = 0;
++						pass_expired = FALSE;
++						switch_to_input_user();
++					}
++				} else if (!strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
++					// if new password is same as old one
++					g_free(new_pass);
++					new_pass = NULL;
++					if (++count < 3) {
++						switch_to_input_passwd();
++					} else {
++						count = 0;
++						pass_expired = FALSE;
++						switch_to_input_user();
++					}
++				} else {
++					char *session_exec=get_session_exec();
++					char *session_lang=get_session_lang();
++
++					printf("update-new-password user=%s newpass=%s session=%s lang=%s\n",
++						user, new_pass, session_exec, session_lang);
++				}
++			}
++
++			return ;
++		}
++
+ 		char *session_exec=get_session_exec();
+ 		char *session_lang=get_session_lang();
+ 		
+@@ -227,6 +280,7 @@ static void on_entry_activate(GtkEntry* entry)
+ 		printf("login user=%s pass=%s session=%s lang=%s\n",
+ 			user, pass, session_exec, session_lang);
+ 
++#if 0
+ 		/* password check failed */
+ 		g_free(user);
+ 		user = NULL;
+@@ -241,6 +295,7 @@ static void on_entry_activate(GtkEntry* entry)
+ 		gtk_label_set_text( GTK_LABEL(prompt), _("User:") );
+ 		gtk_entry_set_text(GTK_ENTRY(entry), "");
+ 		gtk_entry_set_visibility(GTK_ENTRY(entry), TRUE);
++#endif
+ 	}
+ }
+ 
+@@ -1091,8 +1146,12 @@ static void on_screen_size_changed(GdkScreen *screen,GtkWidget *win)
+ 
+ static gint login_entry_on_key_press (GtkWidget *widget,GdkEventKey *event)
+ {
+-	if(event->keyval == GDK_Escape)
++	if(event->keyval == GDK_Escape) {
++		g_free(new_pass);
++		new_pass = NULL;
++		pass_expired = FALSE;
+ 		switch_to_input_user();
++	}
+ 	return FALSE;
+ }		     
+ 
+@@ -1285,8 +1344,10 @@ static void create_win()
+ 
+ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpointer data)
+ {
++
+ 	GIOStatus ret;
+ 	char *str;
++	static int count = 0;
+ 
+ 	if( !(G_IO_IN & condition) )
+ 		return FALSE;
+@@ -1300,10 +1361,28 @@ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpoi
+ 	{
+ 		switch_to_input_user();
+ 	}
++	else if (!strncmp(str, "password-expire", 15))
++	{
++		pass_expired = TRUE;
++		switch_to_input_passwd();
++	}
+ 	else if( !strncmp(str, "password", 8))
+ 	{
+ 		switch_to_input_passwd();
+ 	}
++	else if (!strncmp(str, "invalid-new-password", 20))
++	{
++		g_free(new_pass);
++		new_pass = NULL;
++
++		if (count++ < 3) {
++			switch_to_input_passwd();
++		} else {
++			count = 0;
++			pass_expired = FALSE;
++			switch_to_input_user();
++		}
++	}
+ 	g_free(str);
+ 	return TRUE;
+ }
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0008-greeter.c-show-information-on-gtk-label-info.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0008-greeter.c-show-information-on-gtk-label-info.patch
new file mode 100644
index 0000000..eab9fd5
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0008-greeter.c-show-information-on-gtk-label-info.patch
@@ -0,0 +1,99 @@
+From bb4ff4b134383bfdadf7cb5353d3553a8a72d47e Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 13 Jan 2021 10:45:48 +0800
+Subject: [PATCH 8/8] greeter.c: show information on gtk label 'info'
+
+Show information on a gtk label 'info' which is added under label
+'prompt' in the .glade or .ui files.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/1/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index 804fca0..a4a2336 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -64,6 +64,7 @@ static GtkWidget* win;
+ static GtkWidget* alignment2;
+ static GtkWidget* prompt;
+ static GtkWidget* login_entry;
++static GtkWidget* info;
+ static GtkWidget* user_list_scrolled;
+ static GtkWidget* user_list;
+ 
+@@ -241,10 +242,12 @@ static void on_entry_activate(GtkEntry* entry)
+ 					new_pass = NULL;
+ 					// if new passwords not match, retry for 3 times at most
+ 					if (++count < 3) {
++						gtk_label_set_text((GtkLabel *)info, _("Passwords do not match, please retry."));
+ 						switch_to_input_passwd();
+ 					} else {
+ 						count = 0;
+ 						pass_expired = FALSE;
++						gtk_label_set_text((GtkLabel *)info, _("Maximum number of failed update password attempts exceeded."));
+ 						switch_to_input_user();
+ 					}
+ 				} else if (!strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
+@@ -252,6 +255,7 @@ static void on_entry_activate(GtkEntry* entry)
+ 					g_free(new_pass);
+ 					new_pass = NULL;
+ 					if (++count < 3) {
++						gtk_label_set_text((GtkLabel *)info, _("New password is same as old one, password unchanged."));
+ 						switch_to_input_passwd();
+ 					} else {
+ 						count = 0;
+@@ -1146,6 +1150,9 @@ static void on_screen_size_changed(GdkScreen *screen,GtkWidget *win)
+ 
+ static gint login_entry_on_key_press (GtkWidget *widget,GdkEventKey *event)
+ {
++
++	gtk_label_set_text(GTK_LABEL(info), "");
++
+ 	if(event->keyval == GDK_Escape) {
+ 		g_free(new_pass);
+ 		new_pass = NULL;
+@@ -1211,11 +1218,14 @@ static void create_win()
+     login_entry = (GtkWidget*)gtk_builder_get_object(builder, "login_entry");
+     if(login_entry!=NULL)
+     {
+-		g_signal_connect_after(login_entry,"key-press-event",G_CALLBACK(login_entry_on_key_press),NULL);
++        g_signal_connect(login_entry,"key-press-event",G_CALLBACK(login_entry_on_key_press),NULL);
+ 	}
+ 
+     g_signal_connect(login_entry, "activate", G_CALLBACK(on_entry_activate), NULL);
+ 
++    info = (GtkWidget *)gtk_builder_get_object(builder, "info");
++    gtk_label_set_text(GTK_LABEL(info), "");
++
+     if( g_key_file_get_integer(config, "display", "bottom_pane", 0)==1)
+     {
+         /* hacks to let GtkEventBox paintable with gtk pixmap engine. */
+@@ -1359,11 +1369,13 @@ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpoi
+ 	gtk_main_quit();
+ 	else if( !strncmp(str, "reset", 5) )
+ 	{
++		gtk_label_set_text(GTK_LABEL(info), _("Authentication failed."));
+ 		switch_to_input_user();
+ 	}
+ 	else if (!strncmp(str, "password-expire", 15))
+ 	{
+ 		pass_expired = TRUE;
++		gtk_label_set_text(GTK_LABEL(info), _("You are required to change your password immediately."));
+ 		switch_to_input_passwd();
+ 	}
+ 	else if( !strncmp(str, "password", 8))
+@@ -1376,6 +1388,7 @@ static gboolean on_lxdm_command(GIOChannel *source, GIOCondition condition, gpoi
+ 		new_pass = NULL;
+ 
+ 		if (count++ < 3) {
++			gtk_label_set_text(GTK_LABEL(info), _("Invalid new password. Please input new password again."));
+ 			switch_to_input_passwd();
+ 		} else {
+ 			count = 0;
+-- 
+2.25.1
+
diff --git a/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0009-greeter.c-disallow-empty-new-password.patch b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0009-greeter.c-disallow-empty-new-password.patch
new file mode 100644
index 0000000..3b12def
--- /dev/null
+++ b/meta-openembedded/meta-oe/recipes-graphics/lxdm/lxdm/0009-greeter.c-disallow-empty-new-password.patch
@@ -0,0 +1,53 @@
+From af1c347a31ae243d29c6087da8ffb423b23c74f2 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Mon, 1 Feb 2021 09:54:48 +0800
+Subject: [PATCH] greeter.c: disallow empty new password
+
+Do not clear text of label 'promt' when skip_password is set. When user
+is required to update password, it only shows input box without label
+for about 1 second.
+
+And disallow empty new password when user is required to update it.
+
+Upstream-Status: Submitted [https://sourceforge.net/p/lxdm/code/merge-requests/2/]
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ src/greeter.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/greeter.c b/src/greeter.c
+index 7e4a168..c0e6b64 100644
+--- a/src/greeter.c
++++ b/src/greeter.c
+@@ -220,7 +220,6 @@ static void on_entry_activate(GtkEntry* entry)
+ 		}
+ 		if(g_key_file_get_integer(config,"base","skip_password",NULL)!=0)
+ 		{
+-			gtk_label_set_text( GTK_LABEL(prompt), "");
+ 			try_login_user(user);
+ 		}
+ 		else
+@@ -235,6 +239,10 @@ static void on_entry_activate(GtkEntry* entry)
+ 		if (pass_expired) {
+ 			if (!new_pass) {
+ 				new_pass = g_strdup(gtk_entry_get_text(entry));
++				if (strlen(new_pass) == 0) {
++					new_pass = NULL;
++					gtk_label_set_text((GtkLabel *)info, _("Empty password is not allowed."));
++				}
+ 				switch_to_input_passwd();
+ 			} else {
+ 				tmp = g_strdup(gtk_entry_get_text(entry));
+@@ -251,7 +259,7 @@ static void on_entry_activate(GtkEntry* entry)
+ 						gtk_label_set_text((GtkLabel *)info, _("Maximum number of failed update password attempts exceeded."));
+ 						switch_to_input_user();
+ 					}
+-				} else if (!strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
++				} else if (pass && !strcmp(pass, g_base64_encode((guchar*)new_pass, strlen(new_pass) + 1))) {
+ 					// if new password is same as old one
+ 					g_free(new_pass);
+ 					new_pass = NULL;
+-- 
+2.25.1
+
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
index db4767b..216bbb6 100644
--- 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
@@ -9,6 +9,15 @@
            file://0002-let-autotools-create-lxdm.conf.patch \
            file://0003-check-for-libexecinfo-providing-backtrace-APIs.patch \
            file://0004-fix-css-under-gtk-3.20.patch \
+           file://0001-greeter-set-visible-when-switch-to-input-user.patch \
+           file://0002-greeter-gdk.c-fix-typo.patch \
+           file://0003-check-whether-password-expired-with-pam.patch \
+           file://0004-lxdm.c-add-function-to-change-password-with-pam.patch \
+           file://0005-ui.c-handle-password-expire-and-update-new-password.patch \
+           file://0006-themes-Industrial-add-info-label-in-ui.patch \
+           file://0007-greeter.c-support-to-update-expired-password.patch \
+           file://0008-greeter.c-show-information-on-gtk-label-info.patch \
+           file://0009-greeter.c-disallow-empty-new-password.patch \
            "
 SRC_URI[md5sum] = "061caae432634e6db38bbdc84bc6ffa0"
 SRC_URI[sha256sum] = "4891efee81c72a400cc6703e40aa76f3f3853833d048b72ec805da0f93567f2f"
diff --git a/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb b/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_4.1.1.bb
similarity index 83%
rename from meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb
rename to meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_4.1.1.bb
index 108c339..3eb23dc 100644
--- a/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_git.bb
+++ b/meta-openembedded/meta-oe/recipes-graphics/qrencode/qrencode_4.1.1.bb
@@ -4,9 +4,8 @@
 SECTION = "libs"
 LICENSE = "LGPLv2.1"
 LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1"
-PV = "4.0.1+git${SRCPV}"
 
-SRCREV = "7c83deb8f562ae6013fea4c3e65278df93f98fb7"
+SRCREV = "715e29fd4cd71b6e452ae0f4e36d917b43122ce8"
 SRC_URI = "git://github.com/fukuchi/libqrencode.git"
 
 S = "${WORKDIR}/git"
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_2.000.bb
similarity index 61%
rename from meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_1.500.bb
rename to meta-openembedded/meta-oe/recipes-graphics/ttf-fonts/ttf-abyssinica_2.000.bb
index ce003e9..d3dd417 100644
--- 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_2.000.bb
@@ -3,15 +3,13 @@
 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"
+LIC_FILES_CHKSUM = "file://OFL.txt;md5=80cc8cdcdc3f8ce96957bbac946b70ae"
 
 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"
+SRC_URI[sha256sum] = "274204a53b30f64cca662d78c7199e3c0325ea95ad4109886b47af734c92d0f9"
 
 FONT_PACKAGES = "${PN}"
 FILES_${PN} = "${datadir}"
-