mirror of
https://github.com/yann64/haikuports.git
synced 2026-05-05 14:38:51 +02:00
Add KF6 frameworks, kpty6 (#10523)
This commit is contained in:
87
kde-frameworks/kpty/kpty6-6.2.0.recipe
Normal file
87
kde-frameworks/kpty/kpty6-6.2.0.recipe
Normal file
@@ -0,0 +1,87 @@
|
||||
SUMMARY="Interfacing with pseudo terminal devices"
|
||||
DESCRIPTION="This library provides primitives to interface with pseudo terminal \
|
||||
devices as well as a KProcess derived class for running child processes and \
|
||||
communicating with them using a pty.."
|
||||
HOMEPAGE="https://invent.kde.org/frameworks/kpty"
|
||||
COPYRIGHT="2010-2024 KDE Organisation"
|
||||
LICENSE="GNU LGPL v2"
|
||||
REVISION="1"
|
||||
SOURCE_URI="https://download.kde.org/stable/frameworks/${portVersion%.*}/kpty-${portVersion}.tar.xz"
|
||||
CHECKSUM_SHA256="f7683e8b5cd5dbbd4257e8d5acd26e58685a3bc3f161dc0fe10f53a075240264"
|
||||
SOURCE_DIR="kpty-$portVersion"
|
||||
PATCHES="kpty-$portVersion.patchset"
|
||||
|
||||
ARCHITECTURES="all !x86_gcc2"
|
||||
SECONDARY_ARCHITECTURES="x86"
|
||||
|
||||
PROVIDES="
|
||||
kpty6$secondaryArchSuffix = $portVersion
|
||||
lib:libKF6Pty$secondaryArchSuffix = $portVersion compat >= 5
|
||||
"
|
||||
REQUIRES="
|
||||
haiku$secondaryArchSuffix
|
||||
lib:libKF6ConfigGui$secondaryArchSuffix
|
||||
lib:libKF6CoreAddons$secondaryArchSuffix
|
||||
lib:libKF6I18n$secondaryArchSuffix
|
||||
lib:libKF6WidgetsAddons$secondaryArchSuffix
|
||||
lib:libQt6Core$secondaryArchSuffix
|
||||
lib:libQt6Gui$secondaryArchSuffix
|
||||
lib:libQt6Xml$secondaryArchSuffix
|
||||
"
|
||||
|
||||
PROVIDES_devel="
|
||||
kpty6${secondaryArchSuffix}_devel = $portVersion
|
||||
devel:libKF6Pty$secondaryArchSuffix = $portVersion compat >= 5
|
||||
"
|
||||
REQUIRES_devel="
|
||||
kpty6$secondaryArchSuffix == $portVersion base
|
||||
"
|
||||
|
||||
BUILD_REQUIRES="
|
||||
haiku${secondaryArchSuffix}_devel
|
||||
extra_cmake_modules$secondaryArchSuffix >= $portVersion
|
||||
qt6_tools${secondaryArchSuffix}_devel
|
||||
devel:libKF6ConfigGui$secondaryArchSuffix == $portVersion
|
||||
devel:libKF6CoreAddons$secondaryArchSuffix == $portVersion
|
||||
devel:libKF6I18n$secondaryArchSuffix == $portVersion
|
||||
devel:libKF6WidgetsAddons$secondaryArchSuffix == $portVersion
|
||||
devel:libQt6Core$secondaryArchSuffix
|
||||
"
|
||||
BUILD_PREREQUIRES="
|
||||
cmd:cmake
|
||||
cmd:dot
|
||||
cmd:doxygen >= 1.9
|
||||
cmd:g++$secondaryArchSuffix
|
||||
cmd:make
|
||||
"
|
||||
|
||||
BUILD()
|
||||
{
|
||||
cmake -Bbuild -S. $cmakeDirArgs \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DCMAKE_CXX_FLAGS=-D_BSD_SOURCE \
|
||||
-DECM_DIR=/system/data/cmake/Modules/ECM/cmake \
|
||||
-DBUILD_QCH=ON \
|
||||
-DBUILD_TESTING=OFF
|
||||
make -Cbuild $jobArgs
|
||||
}
|
||||
|
||||
INSTALL()
|
||||
{
|
||||
make -Cbuild install
|
||||
|
||||
prepareInstalledDevelLib \
|
||||
libKF6Pty
|
||||
|
||||
packageEntries devel \
|
||||
$developDir \
|
||||
$dataDir/doc \
|
||||
$libDir/cmake
|
||||
}
|
||||
|
||||
TEST()
|
||||
{
|
||||
# 0% tests passed, 1 tests failed out of 1
|
||||
export LIBRARY_PATH="$sourceDir/build/bin${LIBRARY_PATH:+:$LIBRARY_PATH}"
|
||||
make -Cbuild test
|
||||
}
|
||||
388
kde-frameworks/kpty/patches/kpty-6.2.0.patchset
Normal file
388
kde-frameworks/kpty/patches/kpty-6.2.0.patchset
Normal file
@@ -0,0 +1,388 @@
|
||||
From d95c902015cb386bcbe175a6b8b803efe8bc0393 Mon Sep 17 00:00:00 2001
|
||||
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
||||
Date: Mon, 1 Nov 2021 09:20:04 +1000
|
||||
Subject: Use bsd openpty for haiku
|
||||
|
||||
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index 2735eef..97fcdf3 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -8,7 +8,7 @@ set_target_properties(KF6Pty PROPERTIES
|
||||
)
|
||||
|
||||
target_sources(KF6Pty PRIVATE
|
||||
- kpty.cpp
|
||||
+ kpty_haiku.cpp
|
||||
kptydevice.cpp
|
||||
kptydevice.h
|
||||
kpty.h
|
||||
@@ -42,7 +42,8 @@ target_link_libraries(KF6Pty PUBLIC Qt6::Core
|
||||
KF6::CoreAddons # KProcess
|
||||
PRIVATE
|
||||
${UTIL_LIBRARY}
|
||||
- KF6::I18n)
|
||||
+ KF6::I18n
|
||||
+ bsd)
|
||||
|
||||
target_include_directories(KF6Pty PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/..)
|
||||
if(UTEMPTER_FOUND)
|
||||
@@ -93,7 +94,7 @@ endif()
|
||||
|
||||
########### next target ###############
|
||||
|
||||
-if (NOT HAVE_OPENPTY)
|
||||
+if (NOT HAVE_OPENPTY AND NOT HAIKU)
|
||||
add_executable(kgrantpty kgrantpty.c)
|
||||
ecm_mark_nongui_executable(kgrantpty)
|
||||
install(TARGETS kgrantpty DESTINATION ${KDE_INSTALL_LIBEXECDIR_KF})
|
||||
diff --git a/src/kpty_haiku.cpp b/src/kpty_haiku.cpp
|
||||
new file mode 100644
|
||||
index 0000000..7acd36d
|
||||
--- /dev/null
|
||||
+++ b/src/kpty_haiku.cpp
|
||||
@@ -0,0 +1,266 @@
|
||||
+#include "kpty_p.h"
|
||||
+
|
||||
+#include <kpty_debug.h>
|
||||
+#include <QProcess>
|
||||
+
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/ioctl.h>
|
||||
+#include <sys/time.h>
|
||||
+#include <sys/resource.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <sys/param.h>
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <time.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <stdio.h>
|
||||
+#include <string.h>
|
||||
+#include <unistd.h>
|
||||
+#include <grp.h>
|
||||
+
|
||||
+#if HAVE_PTY_H
|
||||
+# include <pty.h>
|
||||
+#endif
|
||||
+
|
||||
+#if HAVE_LIBUTIL_H
|
||||
+# include <libutil.h>
|
||||
+#elif HAVE_UTIL_H
|
||||
+# include <util.h>
|
||||
+#endif
|
||||
+
|
||||
+extern "C" {
|
||||
+#include <termios.h>
|
||||
+#if HAVE_TERMIO_H
|
||||
+# include <termio.h>
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+#if HAVE_TCGETATTR
|
||||
+# define _tcgetattr(fd, ttmode) tcgetattr(fd, ttmode)
|
||||
+#endif
|
||||
+
|
||||
+#if HAVE_TCSETATTR
|
||||
+# define _tcsetattr(fd, ttmode) tcsetattr(fd, TCSANOW, ttmode)
|
||||
+#endif
|
||||
+
|
||||
+#include <qplatformdefs.h>
|
||||
+
|
||||
+#include <Q_PID>
|
||||
+
|
||||
+#ifndef PATH_MAX
|
||||
+# ifdef MAXPATHLEN
|
||||
+# define PATH_MAX MAXPATHLEN
|
||||
+# else
|
||||
+# define PATH_MAX 1024
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+KPtyPrivate::KPtyPrivate(KPty *parent) :
|
||||
+ masterFd(-1), slaveFd(-1), ownMaster(true), q_ptr(parent)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+KPtyPrivate::~KPtyPrivate()
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+KPty::KPty() :
|
||||
+ d_ptr(new KPtyPrivate(this))
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+KPty::KPty(KPtyPrivate *d) :
|
||||
+ d_ptr(d)
|
||||
+{
|
||||
+ d_ptr->q_ptr = this;
|
||||
+}
|
||||
+
|
||||
+KPty::~KPty()
|
||||
+{
|
||||
+ close();
|
||||
+}
|
||||
+
|
||||
+bool KPty::open()
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ if (d->masterFd >= 0) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ d->ownMaster = true;
|
||||
+
|
||||
+ QByteArray ptyName;
|
||||
+
|
||||
+ char ptsn[PATH_MAX];
|
||||
+ if (::openpty(&d->masterFd, &d->slaveFd, ptsn, nullptr, nullptr)) {
|
||||
+ d->masterFd = -1;
|
||||
+ d->slaveFd = -1;
|
||||
+ qCWarning(KPTY_LOG) << "Can't open a pseudo teletype";
|
||||
+ return false;
|
||||
+ }
|
||||
+ d->ttyName = ptsn;
|
||||
+
|
||||
+ fcntl(d->masterFd, F_SETFD, FD_CLOEXEC);
|
||||
+ fcntl(d->slaveFd, F_SETFD, FD_CLOEXEC);
|
||||
+
|
||||
+ setEcho(true);
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+bool KPty::open(int fd)
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ if (d->masterFd >= 0) {
|
||||
+ qCWarning(KPTY_LOG) << "Attempting to open an already open pty";
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ d->ownMaster = false;
|
||||
+
|
||||
+ char *ptsn = ptsname(fd);
|
||||
+ if (ptsn) {
|
||||
+ d->ttyName = ptsn;
|
||||
+ } else {
|
||||
+ qCWarning(KPTY_LOG) << "Failed to determine pty slave device for fd" << fd;
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ d->masterFd = fd;
|
||||
+ if (!openSlave()) {
|
||||
+ d->masterFd = -1;
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ setEcho(true);
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+void KPty::closeSlave()
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ if (d->slaveFd < 0) {
|
||||
+ return;
|
||||
+ }
|
||||
+ ::close(d->slaveFd);
|
||||
+ d->slaveFd = -1;
|
||||
+}
|
||||
+
|
||||
+bool KPty::openSlave()
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ if (d->slaveFd >= 0) {
|
||||
+ return true;
|
||||
+ }
|
||||
+ if (d->masterFd < 0) {
|
||||
+ qCWarning(KPTY_LOG) << "Attempting to open pty slave while master is closed";
|
||||
+ return false;
|
||||
+ }
|
||||
+ d->slaveFd = QT_OPEN(d->ttyName.data(), QT_OPEN_RDWR | O_NOCTTY);
|
||||
+ if (d->slaveFd < 0) {
|
||||
+ qCWarning(KPTY_LOG) << "Can't open slave pseudo teletype";
|
||||
+ return false;
|
||||
+ }
|
||||
+ fcntl(d->slaveFd, F_SETFD, FD_CLOEXEC);
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+void KPty::close()
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ if (d->masterFd < 0) {
|
||||
+ return;
|
||||
+ }
|
||||
+ closeSlave();
|
||||
+ if (d->ownMaster) {
|
||||
+ ::close(d->masterFd);
|
||||
+ }
|
||||
+ d->masterFd = -1;
|
||||
+}
|
||||
+
|
||||
+void KPty::setCTty()
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ setsid();
|
||||
+
|
||||
+ ioctl(d->slaveFd, TIOCSCTTY, 0);
|
||||
+
|
||||
+ int pgrp = getpid();
|
||||
+ tcsetpgrp(d->slaveFd, pgrp);
|
||||
+}
|
||||
+
|
||||
+void KPty::login(const char *user, const char *remotehost)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+void KPty::logout()
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+bool KPty::tcGetAttr(struct ::termios *ttmode) const
|
||||
+{
|
||||
+ Q_D(const KPty);
|
||||
+
|
||||
+ return _tcgetattr(d->masterFd, ttmode) == 0;
|
||||
+}
|
||||
+
|
||||
+bool KPty::tcSetAttr(struct ::termios *ttmode)
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ return _tcsetattr(d->masterFd, ttmode) == 0;
|
||||
+}
|
||||
+
|
||||
+bool KPty::setWinSize(int lines, int columns)
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ struct winsize winSize;
|
||||
+ memset(&winSize, 0, sizeof(winSize));
|
||||
+ winSize.ws_row = (unsigned short)lines;
|
||||
+ winSize.ws_col = (unsigned short)columns;
|
||||
+ return ioctl(d->masterFd, TIOCSWINSZ, (char *)&winSize) == 0;
|
||||
+}
|
||||
+
|
||||
+bool KPty::setEcho(bool echo)
|
||||
+{
|
||||
+ struct ::termios ttmode;
|
||||
+ if (!tcGetAttr(&ttmode)) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!echo) {
|
||||
+ ttmode.c_lflag &= ~ECHO;
|
||||
+ } else {
|
||||
+ ttmode.c_lflag |= ECHO;
|
||||
+ }
|
||||
+ return tcSetAttr(&ttmode);
|
||||
+}
|
||||
+
|
||||
+const char *KPty::ttyName() const
|
||||
+{
|
||||
+ Q_D(const KPty);
|
||||
+
|
||||
+ return d->ttyName.data();
|
||||
+}
|
||||
+
|
||||
+int KPty::masterFd() const
|
||||
+{
|
||||
+ Q_D(const KPty);
|
||||
+
|
||||
+ return d->masterFd;
|
||||
+}
|
||||
+
|
||||
+int KPty::slaveFd() const
|
||||
+{
|
||||
+ Q_D(const KPty);
|
||||
+
|
||||
+ return d->slaveFd;
|
||||
+}
|
||||
--
|
||||
2.43.2
|
||||
|
||||
|
||||
From 61a213f5b0c717a5b5ea19d1015b9b88476c876a Mon Sep 17 00:00:00 2001
|
||||
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
||||
Date: Sun, 3 Mar 2024 22:25:16 +1000
|
||||
Subject: Add missing functions
|
||||
|
||||
|
||||
diff --git a/src/kpty_haiku.cpp b/src/kpty_haiku.cpp
|
||||
index 7acd36d..79422e0 100644
|
||||
--- a/src/kpty_haiku.cpp
|
||||
+++ b/src/kpty_haiku.cpp
|
||||
@@ -219,17 +219,23 @@ bool KPty::tcSetAttr(struct ::termios *ttmode)
|
||||
return _tcsetattr(d->masterFd, ttmode) == 0;
|
||||
}
|
||||
|
||||
-bool KPty::setWinSize(int lines, int columns)
|
||||
+bool KPty::setWinSize(int lines, int columns, int height, int width)
|
||||
{
|
||||
Q_D(KPty);
|
||||
|
||||
struct winsize winSize;
|
||||
- memset(&winSize, 0, sizeof(winSize));
|
||||
winSize.ws_row = (unsigned short)lines;
|
||||
winSize.ws_col = (unsigned short)columns;
|
||||
+ winSize.ws_ypixel = (unsigned short)height;
|
||||
+ winSize.ws_xpixel = (unsigned short)width;
|
||||
return ioctl(d->masterFd, TIOCSWINSZ, (char *)&winSize) == 0;
|
||||
}
|
||||
|
||||
+bool KPty::setWinSize(int lines, int columns)
|
||||
+{
|
||||
+ return setWinSize(lines, columns, 0, 0);
|
||||
+}
|
||||
+
|
||||
bool KPty::setEcho(bool echo)
|
||||
{
|
||||
struct ::termios ttmode;
|
||||
@@ -264,3 +270,11 @@ int KPty::slaveFd() const
|
||||
|
||||
return d->slaveFd;
|
||||
}
|
||||
+
|
||||
+void KPty::setCTtyEnabled(bool enable)
|
||||
+{
|
||||
+ Q_D(KPty);
|
||||
+
|
||||
+ d->withCTty = enable;
|
||||
+}
|
||||
+
|
||||
--
|
||||
2.43.2
|
||||
|
||||
|
||||
From 020071b1e3bb260e423a3f1e31826fb605056aa2 Mon Sep 17 00:00:00 2001
|
||||
From: Schrijvers Luc <begasus@gmail.com>
|
||||
Date: Wed, 6 Mar 2024 20:33:13 +0100
|
||||
Subject: Q_PID is deprecated in Qt6
|
||||
|
||||
|
||||
diff --git a/src/kpty_haiku.cpp b/src/kpty_haiku.cpp
|
||||
index 79422e0..1e2b731 100644
|
||||
--- a/src/kpty_haiku.cpp
|
||||
+++ b/src/kpty_haiku.cpp
|
||||
@@ -46,7 +46,7 @@ extern "C" {
|
||||
|
||||
#include <qplatformdefs.h>
|
||||
|
||||
-#include <Q_PID>
|
||||
+// #include <Q_PID>
|
||||
|
||||
#ifndef PATH_MAX
|
||||
# ifdef MAXPATHLEN
|
||||
--
|
||||
2.43.2
|
||||
|
||||
Reference in New Issue
Block a user