pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

sddm: update to 0.19.0



Module Name:	pkgsrc-wip
Committed By:	Mark Davies <mark%ecs.vuw.ac.nz@localhost>
Pushed By:	markd
Date:		Tue Feb 2 23:47:47 2021 +1300
Changeset:	d00f3d97128c32786e6f9e6486b38067c32ea4b1

Modified Files:
	sddm/Makefile
	sddm/PLIST
	sddm/distinfo
	sddm/patches/patch-CMakeLists.txt
	sddm/patches/patch-src_daemon_CMakeLists.txt
Added Files:
	sddm/patches/patch-src_common_VirtualTerminal.cpp
	sddm/patches/patch-src_common_VirtualTerminal__NetBSD.cpp
	sddm/patches/patch-src_daemon_Seat.cpp
	sddm/patches/patch-src_daemon_Seat.h
	sddm/patches/patch-src_daemon_XorgDisplayServer.cpp
	sddm/patches/patch-src_helper_HelperApp.cpp
Removed Files:
	sddm/patches/patch-src_daemon_VirtualTerminal__FreeBSD.cpp
	sddm/patches/patch-src_greeter_UserModel.cpp

Log Message:
sddm: update to 0.19.0

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=d00f3d97128c32786e6f9e6486b38067c32ea4b1

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 sddm/Makefile                                      |  29 ++-
 sddm/PLIST                                         |  61 ++++++
 sddm/distinfo                                      |  22 +-
 sddm/patches/patch-CMakeLists.txt                  |  25 +--
 sddm/patches/patch-src_common_VirtualTerminal.cpp  |  32 +++
 .../patch-src_common_VirtualTerminal__NetBSD.cpp   |  44 ++++
 sddm/patches/patch-src_daemon_CMakeLists.txt       |  33 +--
 sddm/patches/patch-src_daemon_Seat.cpp             |  52 +++++
 sddm/patches/patch-src_daemon_Seat.h               |  23 +++
 .../patch-src_daemon_VirtualTerminal__FreeBSD.cpp  |  44 ----
 .../patches/patch-src_daemon_XorgDisplayServer.cpp | 222 +++++++++++++++++++++
 sddm/patches/patch-src_greeter_UserModel.cpp       |  15 --
 sddm/patches/patch-src_helper_HelperApp.cpp        |  24 +++
 13 files changed, 516 insertions(+), 110 deletions(-)

diffs:
diff --git a/sddm/Makefile b/sddm/Makefile
index dd5da820ea..88246ff3f9 100644
--- a/sddm/Makefile
+++ b/sddm/Makefile
@@ -1,6 +1,6 @@
 # $NetBSD$
 
-DISTNAME=	sddm-0.18.1
+DISTNAME=	sddm-0.19.0
 CATEGORIES=	x11
 MASTER_SITES=	${MASTER_SITE_GITHUB:=sddm/}
 GITHUB_RELEASE=	v${PKGVERSION_NOREV}
@@ -12,6 +12,7 @@ COMMENT=	QML based X11 and Wayland display manager
 LICENSE=	gnu-gpl-v2
 
 BUILD_DEPENDS+=	extra-cmake-modules-[0-9]*:../../devel/extra-cmake-modules
+BUILD_DEPENDS+=	${PYPKGPREFIX}-docutils-[0-9]*:../../textproc/py-docutils
 
 USE_CMAKE=	yes
 USE_LANGUAGES=	c c++
@@ -21,8 +22,13 @@ USE_TOOLS+=	pkg-config
 CMAKE_ARGS+=	-DUID_MIN=1000
 CMAKE_ARGS+=	-DUID_MAX=65000
 .endif
+CMAKE_ARGS+=	-DDBUS_CONFIG_DIR=${PREFIX}/share/examples/sddm
+CMAKE_ARGS+=	-DCMAKE_INSTALL_SYSCONFDIR:PATH=${PKG_SYSCONFDIR:Q}
+CMAKE_ARGS+=	-DBUILD_MAN_PAGES=ON
+CMAKE_ARGS+=	-DRST2MAN_EXECUTABLE=${PREFIX}/bin/rst2man-${PYVERSSUFFIX}
+#CMAKE_ARGS+=	-DCMAKE_BUILD_TYPE=Debug
 
-SUBST_CLASSES+=		paths
+SUBST_CLASSES+=		paths egs
 SUBST_STAGE.paths=	pre-configure
 SUBST_MESSAGE.paths=	Fixing absolute paths.
 SUBST_FILES.paths+=	src/common/Configuration.h
@@ -34,10 +40,29 @@ SUBST_SED.paths+=	-e 's,/usr/share/xsessions,${PREFIX}/share/xsessions,g'
 SUBST_SED.paths+=	-e 's,/usr/share/wayland-sessions,${PREFIX}/share/wayland-sessions,g'
 SUBST_SED.paths+=	-e 's,/usr/local/bin,${PREFIX}/bin:/usr/local/bin,g'
 
+SUBST_STAGE.egs=	pre-configure
+SUBST_MESSAGE.egs=	Install via examples dir
+SUBST_FILES.egs+=	services/CMakeLists.txt
+SUBST_SED.egs+=	-e 's,CMAKE_INSTALL_FULL_SYSCONFDIR},CMAKE_INSTALL_PREFIX}/share/examples,g'
+
+PKG_USERS=		sddm:sddm
+PKG_GECOS.sddm=		sddm unprivileged user
+PKG_HOME.sddm=		${VARBASE}/lib/sddm
+
+CONF_FILES+=		${PREFIX}/share/examples/sddm/org.freedesktop.DisplayManager.conf \
+			${PKG_SYSCONFBASE}/dbus-1/system.d/org.freedesktop.DisplayManager.conf
+
 LDFLAGS.FreeBSD+=	-lutil
 LDFLAGS.NetBSD+=	-lutil
 
+post-install:
+	mkdir -p ${DESTDIR}${PREFIX}/share/xsessions
+	cp ${FILESDIR}/* ${DESTDIR}${PREFIX}/share/xsessions
+
+PYTHON_FOR_BUILD_ONLY=	yes
+.include "../../lang/python/pyversion.mk"
 .include "../../x11/libxcb/buildlink3.mk"
 .include "../../x11/qt5-qtbase/buildlink3.mk"
 .include "../../x11/qt5-qtdeclarative/buildlink3.mk"
+.include "../../mk/pam.buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"
diff --git a/sddm/PLIST b/sddm/PLIST
index 36a984cc6c..18f43841b6 100644
--- a/sddm/PLIST
+++ b/sddm/PLIST
@@ -2,6 +2,10 @@
 bin/sddm
 bin/sddm-greeter
 libexec/sddm-helper
+man/man1/sddm-greeter.1
+man/man1/sddm.1
+man/man5/sddm-state.conf.5
+man/man5/sddm.conf.5
 qt5/qml/SddmComponents/Background.qml
 qt5/qml/SddmComponents/Button.qml
 qt5/qml/SddmComponents/Clock.qml
@@ -15,6 +19,10 @@ qt5/qml/SddmComponents/TextBox.qml
 qt5/qml/SddmComponents/TextConstants.qml
 qt5/qml/SddmComponents/qmldir
 qt5/qml/SddmComponents/warning.png
+share/examples/pam.d/sddm
+share/examples/pam.d/sddm-autologin
+share/examples/pam.d/sddm-greeter
+share/examples/sddm/org.freedesktop.DisplayManager.conf
 share/sddm/faces/.face.icon
 share/sddm/faces/root.face.icon
 share/sddm/flags/ae.png
@@ -146,10 +154,13 @@ share/sddm/translations/da.qm
 share/sddm/translations/de.qm
 share/sddm/translations/es.qm
 share/sddm/translations/et.qm
+share/sddm/translations/eu.qm
 share/sddm/translations/fi.qm
 share/sddm/translations/fr.qm
+share/sddm/translations/he.qm
 share/sddm/translations/hi_IN.qm
 share/sddm/translations/hu.qm
+share/sddm/translations/ie.qm
 share/sddm/translations/is.qm
 share/sddm/translations/it.qm
 share/sddm/translations/ja.qm
@@ -160,6 +171,7 @@ share/sddm/translations/lv.qm
 share/sddm/translations/nb.qm
 share/sddm/translations/nl.qm
 share/sddm/translations/nn.qm
+share/sddm/translations/oc.qm
 share/sddm/translations/pl.qm
 share/sddm/translations/pt_BR.qm
 share/sddm/translations/pt_PT.qm
@@ -175,3 +187,52 @@ share/sddm/translations/tr.qm
 share/sddm/translations/uk.qm
 share/sddm/translations/zh_CN.qm
 share/sddm/translations/zh_TW.qm
+share/xsessions/9wm.desktop
+share/xsessions/aewm++.desktop
+share/xsessions/aewm.desktop
+share/xsessions/afterstep.desktop
+share/xsessions/amaterus.desktop
+share/xsessions/amiwm.desktop
+share/xsessions/asclassic.desktop
+share/xsessions/blackbox.desktop
+share/xsessions/cde.desktop
+share/xsessions/ctwm.desktop
+share/xsessions/cwwm.desktop
+share/xsessions/e16.desktop
+share/xsessions/enlightenment.desktop
+share/xsessions/evilwm.desktop
+share/xsessions/fluxbox.desktop
+share/xsessions/flwm.desktop
+share/xsessions/fvwm.desktop
+share/xsessions/fvwm95.desktop
+share/xsessions/gnome.desktop
+share/xsessions/golem.desktop
+share/xsessions/icewm.desktop
+share/xsessions/ion.desktop
+share/xsessions/kde4-plasma.desktop
+share/xsessions/larswm.desktop
+share/xsessions/lwm.desktop
+share/xsessions/matchbox.desktop
+share/xsessions/metacity.desktop
+share/xsessions/mwm.desktop
+share/xsessions/olvwm.desktop
+share/xsessions/olwm.desktop
+share/xsessions/openbox.desktop
+share/xsessions/oroborus.desktop
+share/xsessions/phluid.desktop
+share/xsessions/plasma.desktop
+share/xsessions/pwm.desktop
+share/xsessions/qvwm.desktop
+share/xsessions/ratpoison.desktop
+share/xsessions/sapphire.desktop
+share/xsessions/sawfish.desktop
+share/xsessions/subtle.desktop
+share/xsessions/twm.desktop
+share/xsessions/ude.desktop
+share/xsessions/vtwm.desktop
+share/xsessions/w9wm.desktop
+share/xsessions/waimea.desktop
+share/xsessions/wm2.desktop
+share/xsessions/wmaker.desktop
+share/xsessions/xfce.desktop
+share/xsessions/xfce4.desktop
diff --git a/sddm/distinfo b/sddm/distinfo
index ff54d06b7d..4ae9ef0302 100644
--- a/sddm/distinfo
+++ b/sddm/distinfo
@@ -1,14 +1,16 @@
 $NetBSD$
 
-SHA1 (sddm-0.18.1.tar.xz) = ca4f453fd32e68faca437d66d9fbad59258c505c
-RMD160 (sddm-0.18.1.tar.xz) = bcd59920e4db4f263604cd47fb362e9b502983f5
-SHA512 (sddm-0.18.1.tar.xz) = ff0637600cda2f4da1f643f047f8ee822bd9651ae4ccbb614b9804175c97360ada7af93e07a7b63832f014ef6e7d1b5380ab2b8959f8024ea520fa5ff17efd60
-Size (sddm-0.18.1.tar.xz) = 3402972 bytes
-SHA1 (patch-CMakeLists.txt) = 03f41795b978eb186b61537fa7c63604127de16d
-SHA1 (patch-src_daemon_CMakeLists.txt) = 42c47a49f18b81eda28466a5919697b5aa7581e6
+SHA1 (sddm-0.19.0.tar.xz) = cdb5c9cc7679bb5620bdfb9f56e4f2d5cea7edca
+RMD160 (sddm-0.19.0.tar.xz) = 933badadd73b3ca092a7e175ef12e2c52aa407a4
+SHA512 (sddm-0.19.0.tar.xz) = 0a40816bc105a1e930fec2d65fabff0ae7e27c641235d90e41f6fbaa86af4bb774a9e30f7548ce2c6c791e6d4f8195b02afddedca60a9e7c77447702e728edc3
+Size (sddm-0.19.0.tar.xz) = 3406056 bytes
+SHA1 (patch-CMakeLists.txt) = 339bb1d639824f035cc18f6fe299790d99003993
+SHA1 (patch-src_common_VirtualTerminal.cpp) = 68aa285501545111ee32e62831627ee4f0042e4a
+SHA1 (patch-src_common_VirtualTerminal__NetBSD.cpp) = 517cfdfdcfd273ae4def980d5835edcbc70d10e3
+SHA1 (patch-src_daemon_CMakeLists.txt) = 7a487d89ddf82d54a1d6c951978bebc464c4ee38
 SHA1 (patch-src_daemon_DaemonApp.cpp) = 12d86d2985cc3e96411d307ca4d724aae6494f13
-SHA1 (patch-src_daemon_VirtualTerminal.cpp) = ab1ea7a4543d47f6203c749f16dbd10a03d85b3a
-SHA1 (patch-src_daemon_VirtualTerminal__FreeBSD.cpp) = abaf6b2b21a8f4fc410714f9a0677733606b94c3
-SHA1 (patch-src_daemon_VirtualTerminal__NetBSD.cpp) = 1ddec9550a311dd602b913b288045e4819982fd7
-SHA1 (patch-src_greeter_UserModel.cpp) = 5e4deb3bc4d383d55c2125c058fadaf537ef80fb
+SHA1 (patch-src_daemon_Seat.cpp) = 310f1eb7b00a7c88fd431dcd391ef9860d0afac6
+SHA1 (patch-src_daemon_Seat.h) = b79641bcec9e4997a053db15ee3c5afee57b82ee
+SHA1 (patch-src_daemon_XorgDisplayServer.cpp) = aee5a79c3bffcb9685c91da8db5e3d6e273b75a3
+SHA1 (patch-src_helper_HelperApp.cpp) = 5822c14b72dda8f92d427cec69272e6e3cf4f6b2
 SHA1 (patch-src_helper_UserSession.cpp) = 4da90793d4d1b535562273a5f85c14e156973a9b
diff --git a/sddm/patches/patch-CMakeLists.txt b/sddm/patches/patch-CMakeLists.txt
index 30c90c0f7c..778176d8f3 100644
--- a/sddm/patches/patch-CMakeLists.txt
+++ b/sddm/patches/patch-CMakeLists.txt
@@ -2,24 +2,15 @@ $NetBSD$
 
 shutdown commands are different on non-Linux.
 
---- CMakeLists.txt.orig	2020-05-16 10:59:08.837532317 +0000
+--- CMakeLists.txt.orig	2020-11-03 09:55:24.000000000 +0000
 +++ CMakeLists.txt
-@@ -167,8 +167,16 @@ add_feature_info("elogind" ELOGIND_FOUND
- 
- # Default behaviour if neither systemd nor elogind is used
- if (NOT ELOGIND_FOUND AND NOT SYSTEMD_FOUND)
--    set(MINIMUM_VT 7)
--    set(HALT_COMMAND "/sbin/shutdown -h -P now")
-+    if (${CMAKE_SYSTEM} MATCHES "FreeBSD")
-+        set(MINIMUM_VT 9)
-+        set(HALT_COMMAND "/sbin/shutdown -p now")
+@@ -173,6 +173,9 @@ if (NOT ELOGIND_FOUND AND NOT SYSTEMD_FO
+     if("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD")
+         set(MINIMUM_VT 9)
+         set(HALT_COMMAND "/sbin/shutdown -p now")
 +    elseif (${CMAKE_SYSTEM} MATCHES "NetBSD")
 +        set(MINIMUM_VT 7)
 +        set(HALT_COMMAND "/sbin/shutdown -p now")
-+    else()
-+        set(MINIMUM_VT 7)
-+        set(HALT_COMMAND "/sbin/shutdown -h -P now")
-+    endif()
-     set(REBOOT_COMMAND "/sbin/shutdown -r now")
- endif()
- 
+     else()
+         set(MINIMUM_VT 7)
+         set(HALT_COMMAND "/sbin/shutdown -h -P now")
diff --git a/sddm/patches/patch-src_common_VirtualTerminal.cpp b/sddm/patches/patch-src_common_VirtualTerminal.cpp
new file mode 100644
index 0000000000..3b3e533bfe
--- /dev/null
+++ b/sddm/patches/patch-src_common_VirtualTerminal.cpp
@@ -0,0 +1,32 @@
+$NetBSD$
+
+NetBSD support
+
+--- src/common/VirtualTerminal.cpp.orig	2018-09-26 19:03:47.000000000 +0000
++++ src/common/VirtualTerminal.cpp
+@@ -27,8 +27,12 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <signal.h>
++#if defined(Q_OS_NETBSD)
++#include <dev/wscons/wsdisplay_usl_io.h>
++#else
+ #include <linux/vt.h>
+ #include <linux/kd.h>
++#endif
+ #include <sys/ioctl.h>
+ 
+ #define RELEASE_DISPLAY_SIGNAL (SIGRTMAX)
+@@ -81,10 +85,12 @@ namespace SDDM {
+             if (getmodeReply.mode != VT_AUTO)
+                 goto out;
+ 
++#ifdef KDGETMODE
+             if (ioctl(fd, KDGETMODE, &kernelDisplayMode) < 0) {
+                 qWarning() << "Failed to query kernel display mode:" << strerror(errno);
+                 ok = false;
+             }
++#endif
+ 
+             if (kernelDisplayMode == KD_TEXT)
+                 goto out;
diff --git a/sddm/patches/patch-src_common_VirtualTerminal__NetBSD.cpp b/sddm/patches/patch-src_common_VirtualTerminal__NetBSD.cpp
new file mode 100644
index 0000000000..1fb315cee1
--- /dev/null
+++ b/sddm/patches/patch-src_common_VirtualTerminal__NetBSD.cpp
@@ -0,0 +1,44 @@
+$NetBSD$
+
+NetBSD VirtualTerminal support.
+
+--- src/common/VirtualTerminal_NetBSD.cpp.orig	2020-11-28 06:19:36.308310491 +0000
++++ src/common/VirtualTerminal_NetBSD.cpp
+@@ -0,0 +1,37 @@
++/***************************************************************************
++* Copyright (c) 2015 Pier Luigi Fiorini <pierluigi.fiorini%gmail.com@localhost>
++*
++* 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.
++***************************************************************************/
++
++#include <QDebug>
++#include <QString>
++
++#include "VirtualTerminal.h"
++
++
++namespace SDDM {
++    namespace VirtualTerminal {
++        int setUpNewVt() {
++            qDebug() << "New VT is unsupported on NetBSD";
++            return -1;
++        }
++
++        void jumpToVt(int vt, bool vt_auto) {
++            qDebug() << "Jumping to VT" << vt << "is unsupported on NetBSD";
++        }
++    }
++}
diff --git a/sddm/patches/patch-src_daemon_CMakeLists.txt b/sddm/patches/patch-src_daemon_CMakeLists.txt
index fef8a9c23d..c797deceba 100644
--- a/sddm/patches/patch-src_daemon_CMakeLists.txt
+++ b/sddm/patches/patch-src_daemon_CMakeLists.txt
@@ -1,26 +1,15 @@
 $NetBSD$
 
-Support FreeBSD and NetBSD.
+Support NetBSD.
 
---- src/daemon/CMakeLists.txt.orig	2019-03-31 07:59:59.000000000 +0000
+--- src/daemon/CMakeLists.txt.orig	2020-11-03 09:47:51.000000000 +0000
 +++ src/daemon/CMakeLists.txt
-@@ -29,9 +29,18 @@ set(DAEMON_SOURCES
-     SeatManager.cpp
-     SignalHandler.cpp
-     SocketServer.cpp
--    VirtualTerminal.cpp
- )
- 
-+# Different implementations of the VT switching code
-+# (where the FreeBSD version does nothing).
-+if(${CMAKE_SYSTEM} MATCHES "FreeBSD")
-+    list(APPEND DAEMON_SOURCES VirtualTerminal_FreeBSD.cpp)
-+elseif(${CMAKE_SYSTEM} MATCHES "FreeBSD")
-+    list(APPEND DAEMON_SOURCES VirtualTerminal_NetBSD.cpp)
-+else()
-+    list(APPEND DAEMON_SOURCES VirtualTerminal.cpp)
-+endif()
-+
- qt5_add_dbus_adaptor(DAEMON_SOURCES "${CMAKE_SOURCE_DIR}/data/interfaces/org.freedesktop.DisplayManager.xml"          "DisplayManager.h" SDDM::DisplayManager)
- qt5_add_dbus_adaptor(DAEMON_SOURCES "${CMAKE_SOURCE_DIR}/data/interfaces/org.freedesktop.DisplayManager.Seat.xml"     "DisplayManager.h" SDDM::DisplayManagerSeat)
- qt5_add_dbus_adaptor(DAEMON_SOURCES "${CMAKE_SOURCE_DIR}/data/interfaces/org.freedesktop.DisplayManager.Session.xml"  "DisplayManager.h" SDDM::DisplayManagerSession)
+@@ -35,6 +35,8 @@ set(DAEMON_SOURCES
+ # (where the FreeBSD version does nothing).
+ if(${CMAKE_SYSTEM} MATCHES "FreeBSD")
+     list(APPEND DAEMON_SOURCES ${CMAKE_SOURCE_DIR}/src/common/VirtualTerminal_FreeBSD.cpp)
++elseif(${CMAKE_SYSTEM} MATCHES "NetBSD")
++    list(APPEND DAEMON_SOURCES ${CMAKE_SOURCE_DIR}/src/common/VirtualTerminal_NetBSD.cpp)
+ else()
+     list(APPEND DAEMON_SOURCES ${CMAKE_SOURCE_DIR}/src/common/VirtualTerminal.cpp)
+ endif()
diff --git a/sddm/patches/patch-src_daemon_Seat.cpp b/sddm/patches/patch-src_daemon_Seat.cpp
new file mode 100644
index 0000000000..43bb148758
--- /dev/null
+++ b/sddm/patches/patch-src_daemon_Seat.cpp
@@ -0,0 +1,52 @@
+$NetBSD$
+
+Patches from Fabian Vogt to retry starting the display server
+
+--- src/daemon/Seat.cpp.orig	2020-11-02 10:03:22.000000000 +0000
++++ src/daemon/Seat.cpp
+@@ -28,6 +28,7 @@
+ 
+ #include <QDebug>
+ #include <QFile>
++#include <QTimer>
+ 
+ #include <functional>
+ 
+@@ -52,7 +53,7 @@ namespace SDDM {
+         return m_name;
+     }
+ 
+-    bool Seat::createDisplay(int terminalId) {
++    void Seat::createDisplay(int terminalId) {
+         //reload config if needed
+         mainConfig.load();
+ 
+@@ -84,12 +85,24 @@ namespace SDDM {
+         m_displays << display;
+ 
+         // start the display
+-        if (!display->start()) {
+-            qCritical() << "Could not start Display server on vt" << terminalId;
+-            return false;
++        startDisplay(display);
++    }
++
++    void Seat::startDisplay(Display *display, int tryNr) {
++        if (display->start())
++            return;
++
++        // It's possible that the system isn't ready yet (driver not loaded,
++        // device not enumerated, ...). It's not possible to tell when that changes,
++        // so try a few times with a delay in between.
++        qWarning() << "Attempt" << tryNr << "starting the Display server on vt" << display->terminalId() << "failed";
++
++        if(tryNr >= 3) {
++            qCritical() << "Could not start Display server on vt" << display->terminalId();
++            return;
+         }
+ 
+-        return true;
++        QTimer::singleShot(2000, display, [=] { startDisplay(display, tryNr + 1); });
+     }
+ 
+     void Seat::removeDisplay(Display* display) {
diff --git a/sddm/patches/patch-src_daemon_Seat.h b/sddm/patches/patch-src_daemon_Seat.h
new file mode 100644
index 0000000000..3ecca3d42a
--- /dev/null
+++ b/sddm/patches/patch-src_daemon_Seat.h
@@ -0,0 +1,23 @@
+$NetBSD$
+
+Patches from Fabian Vogt to retry starting the display server
+
+--- src/daemon/Seat.h.orig	2020-11-02 10:03:22.000000000 +0000
++++ src/daemon/Seat.h
+@@ -35,13 +35,15 @@ namespace SDDM {
+         const QString &name() const;
+ 
+     public slots:
+-        bool createDisplay(int terminalId = -1);
++        void createDisplay(int terminalId = -1);
+         void removeDisplay(SDDM::Display* display);
+ 
+     private slots:
+         void displayStopped();
+ 
+     private:
++        void startDisplay(SDDM::Display *display, int tryNr = 1);
++
+         QString m_name;
+ 
+         QVector<Display *> m_displays;
diff --git a/sddm/patches/patch-src_daemon_VirtualTerminal__FreeBSD.cpp b/sddm/patches/patch-src_daemon_VirtualTerminal__FreeBSD.cpp
deleted file mode 100644
index db31c6c786..0000000000
--- a/sddm/patches/patch-src_daemon_VirtualTerminal__FreeBSD.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-$NetBSD$
-
-FreeBSD VirtualTerminal support.
-
---- src/daemon/VirtualTerminal_FreeBSD.cpp.orig	2020-05-16 11:31:00.832245350 +0000
-+++ src/daemon/VirtualTerminal_FreeBSD.cpp
-@@ -0,0 +1,37 @@
-+/***************************************************************************
-+* Copyright (c) 2015 Pier Luigi Fiorini <pierluigi.fiorini%gmail.com@localhost>
-+*
-+* 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.
-+***************************************************************************/
-+
-+#include <QDebug>
-+#include <QString>
-+
-+#include "VirtualTerminal.h"
-+
-+
-+namespace SDDM {
-+    namespace VirtualTerminal {
-+        int setUpNewVt() {
-+            qDebug() << "New VT is unsupported on FreeBSD";
-+            return -1;
-+        }
-+
-+        void jumpToVt(int vt, bool vt_auto) {
-+            qDebug() << "Jumping to VT" << vt << "is unsupported on FreeBSD";
-+        }
-+    }
-+}
diff --git a/sddm/patches/patch-src_daemon_XorgDisplayServer.cpp b/sddm/patches/patch-src_daemon_XorgDisplayServer.cpp
new file mode 100644
index 0000000000..bc827804a4
--- /dev/null
+++ b/sddm/patches/patch-src_daemon_XorgDisplayServer.cpp
@@ -0,0 +1,222 @@
+$NetBSD$
+
+Patches from Fabian Vogt to retry starting the display server
+
+--- src/daemon/XorgDisplayServer.cpp.orig	2020-11-03 09:49:10.000000000 +0000
++++ src/daemon/XorgDisplayServer.cpp
+@@ -118,6 +118,11 @@ namespace SDDM {
+         if (m_started)
+             return false;
+ 
++        if (process) {
++            qCritical() << "Tried to start Xorg before previous instance exited";
++            return false;
++        }
++
+         // create process
+         process = new QProcess(this);
+ 
+@@ -136,106 +141,97 @@ namespace SDDM {
+             return false;
+         }
+ 
+-        if (daemonApp->testing()) {
+-            QStringList args;
+-            QDir x11socketDir(QStringLiteral("/tmp/.X11-unix"));
+-            int display = 100;
+-            while (x11socketDir.exists(QStringLiteral("X%1").arg(display))) {
+-                ++display;
+-            }
+-            m_display = QStringLiteral(":%1").arg(display);
+-            args << m_display << QStringLiteral("-auth") << m_authPath << QStringLiteral("-br") << QStringLiteral("-noreset") << QStringLiteral("-screen") << QStringLiteral("800x600");
+-            process->start(mainConfig.X11.XephyrPath.get(), args);
+-
+-
+-            // wait for display server to start
+-            if (!process->waitForStarted()) {
+-                // log message
+-                qCritical() << "Failed to start display server process.";
++        // set process environment
++        QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
++        env.insert(QStringLiteral("XCURSOR_THEME"), mainConfig.Theme.CursorTheme.get());
++        process->setProcessEnvironment(env);
+ 
+-                // return fail
+-                return false;
+-            }
+-            emit started();
+-        } else {
+-            // set process environment
+-            QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+-            env.insert(QStringLiteral("XCURSOR_THEME"), mainConfig.Theme.CursorTheme.get());
+-            process->setProcessEnvironment(env);
+-
+-            //create pipe for communicating with X server
+-            //0 == read from X, 1== write to from X
+-            int pipeFds[2];
+-            if (pipe(pipeFds) != 0) {
+-                qCritical("Could not create pipe to start X server");
+-            }
++        //create pipe for communicating with X server
++        //0 == read from X, 1== write to from X
++        int pipeFds[2];
++        if (pipe(pipeFds) != 0) {
++            qCritical("Could not create pipe to start X server");
++        }
+ 
+-            // start display server
+-            QStringList args = mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts);
+-            args << QStringLiteral("-auth") << m_authPath
++        // start display server
++        QStringList args;
++        if (!daemonApp->testing()) {
++            process->setProgram(mainConfig.X11.ServerPath.get());
++            args << mainConfig.X11.ServerArguments.get().split(QLatin1Char(' '), QString::SkipEmptyParts)
+                  << QStringLiteral("-background") << QStringLiteral("none")
+-                 << QStringLiteral("-noreset")
+-                 << QStringLiteral("-displayfd") << QString::number(pipeFds[1])
+                  << QStringLiteral("-seat") << displayPtr()->seat()->name();
+ 
+             if (displayPtr()->seat()->name() == QLatin1String("seat0")) {
+                 args << QStringLiteral("vt%1").arg(displayPtr()->terminalId());
+             }
+-            qDebug() << "Running:"
+-                     << qPrintable(mainConfig.X11.ServerPath.get())
+-                     << qPrintable(args.join(QLatin1Char(' ')));
+-            process->start(mainConfig.X11.ServerPath.get(), args);
+-
+-            // wait for display server to start
+-            if (!process->waitForStarted()) {
+-                // log message
+-                qCritical() << "Failed to start display server process.";
+-
+-                // return fail
+-                close(pipeFds[0]);
+-                return false;
+-            }
++        } else {
++            process->setProgram(mainConfig.X11.XephyrPath.get());
++            args << QStringLiteral("-br")
++                 << QStringLiteral("-screen") << QStringLiteral("800x600");
++        }
+ 
+-            // close the other side of pipe in our process, otherwise reading
+-            // from it may stuck even X server exit.
+-            close(pipeFds[1]);
++        args << QStringLiteral("-auth") << m_authPath
++             << QStringLiteral("-noreset")
++             << QStringLiteral("-displayfd") << QString::number(pipeFds[1]);
++
++        process->setArguments(args);
++        qDebug() << "Running:"
++            << qPrintable(process->program())
++            << qPrintable(process->arguments().join(QLatin1Char(' ')));
++        process->start();
++
++        // wait for display server to start
++        if (!process->waitForStarted()) {
++            // log message
++            qCritical() << "Failed to start display server process.";
+ 
+-            QFile readPipe;
++            // return fail
++            close(pipeFds[0]);
++            return false;
++        }
+ 
+-            if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) {
+-                qCritical("Failed to open pipe to start X Server");
++        // close the other side of pipe in our process, otherwise reading
++        // from it may stuck even X server exit.
++        close(pipeFds[1]);
+ 
+-                close(pipeFds[0]);
+-                return false;
+-            }
+-            QByteArray displayNumber = readPipe.readLine();
+-            if (displayNumber.size() < 2) {
+-                // X server gave nothing (or a whitespace).
+-                qCritical("Failed to read display number from pipe");
++        QFile readPipe;
+ 
+-                close(pipeFds[0]);
+-                return false;
+-            }
+-            displayNumber.prepend(QByteArray(":"));
+-            displayNumber.remove(displayNumber.size() -1, 1); // trim trailing whitespace
+-            m_display = QString::fromLocal8Bit(displayNumber);
++        if (!readPipe.open(pipeFds[0], QIODevice::ReadOnly)) {
++            qCritical("Failed to open pipe to start X Server");
+ 
+-            // close our pipe
+             close(pipeFds[0]);
++            stop();
++            return false;
++        }
++        QByteArray displayNumber = readPipe.readLine();
++        if (displayNumber.size() < 2) {
++            // X server gave nothing (or a whitespace).
++            qCritical("Failed to read display number from pipe");
+ 
+-            emit started();
++            close(pipeFds[0]);
++            stop();
++            return false;
+         }
++        displayNumber.prepend(QByteArray(":"));
++        displayNumber.remove(displayNumber.size() -1, 1); // trim trailing whitespace
++        m_display = QString::fromLocal8Bit(displayNumber);
++
++        // close our pipe
++        close(pipeFds[0]);
+ 
+         // The file is also used by the greeter, which does care about the
+         // display number. Write the proper entry, if it's different.
+         if(m_display != QStringLiteral(":0")) {
+             if(!addCookie(m_authPath)) {
+                 qCritical() << "Failed to write xauth file";
++                stop();
+                 return false;
+             }
+         }
+         changeOwner(m_authPath);
+ 
++        emit started();
++
+         // set flag
+         m_started = true;
+ 
+@@ -244,8 +240,7 @@ namespace SDDM {
+     }
+ 
+     void XorgDisplayServer::stop() {
+-        // check flag
+-        if (!m_started)
++        if (!process)
+             return;
+ 
+         // log message
+@@ -260,6 +255,12 @@ namespace SDDM {
+     }
+ 
+     void XorgDisplayServer::finished() {
++        // clean up
++        if (process) {
++            process->deleteLater();
++            process = nullptr;
++        }
++
+         // check flag
+         if (!m_started)
+             return;
+@@ -295,10 +296,6 @@ namespace SDDM {
+         displayStopScript->deleteLater();
+         displayStopScript = nullptr;
+ 
+-        // clean up
+-        process->deleteLater();
+-        process = nullptr;
+-
+         // remove authority file
+         QFile::remove(m_authPath);
+ 
diff --git a/sddm/patches/patch-src_greeter_UserModel.cpp b/sddm/patches/patch-src_greeter_UserModel.cpp
deleted file mode 100644
index c841ecd1d3..0000000000
--- a/sddm/patches/patch-src_greeter_UserModel.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD$
-
-Rewind to the start of the password database.
-
---- src/greeter/UserModel.cpp.orig	2019-03-31 07:59:59.000000000 +0000
-+++ src/greeter/UserModel.cpp
-@@ -60,6 +60,8 @@ namespace SDDM {
-                 QFile::exists(themeDefaultFace) ? themeDefaultFace : defaultFace);
- 
-         struct passwd *current_pw;
-+
-+        setpwent();
-         while ((current_pw = getpwent()) != nullptr) {
- 
-             // skip entries with uids smaller than minimum uid
diff --git a/sddm/patches/patch-src_helper_HelperApp.cpp b/sddm/patches/patch-src_helper_HelperApp.cpp
new file mode 100644
index 0000000000..a96cfc29c8
--- /dev/null
+++ b/sddm/patches/patch-src_helper_HelperApp.cpp
@@ -0,0 +1,24 @@
+$NetBSD$
+
+NetBSD support
+
+--- src/helper/HelperApp.cpp.orig	2020-11-03 09:47:51.000000000 +0000
++++ src/helper/HelperApp.cpp
+@@ -308,7 +308,7 @@ namespace SDDM {
+             qWarning() << "Failed to write utmpx: " << strerror(errno);
+         endutxent();
+ 
+-#if !defined(Q_OS_FREEBSD)
++#if !defined(Q_OS_FREEBSD) && !defined(Q_OS_NETBSD)
+         // append to failed login database btmp
+         if (!authSuccessful) {
+ #if defined(Q_OS_LINUX)
+@@ -360,7 +360,7 @@ namespace SDDM {
+ #if defined(Q_OS_LINUX)
+         // append to wtmp
+         updwtmpx("/var/log/wtmp", &entry);
+-#elif defined(Q_OS_FREEBSD)
++#elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+         pututxline(&entry);
+ #endif
+     }


Home | Main Index | Thread Index | Old Index