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