diff --git a/net-mgmt/seafile-client/Makefile b/net-mgmt/seafile-client/Makefile index 9653fd40af94..2ddf11c8d0df 100644 --- a/net-mgmt/seafile-client/Makefile +++ b/net-mgmt/seafile-client/Makefile @@ -1,53 +1,54 @@ PORTNAME= seafile-client DISTVERSIONPREFIX= v -DISTVERSION= 9.0.6 +DISTVERSION= 9.0.18 PORTREVISION= 1 CATEGORIES= net-mgmt -MAINTAINER= ports@FreeBSD.org +MAINTAINER= d.stoye@cms.hu-berlin.de COMMENT= Open Source Cloud Storage (Client) WWW= https://github.com/haiwen/seafile LICENSE= GPLv3 LICENSE_FILE= ${WRKSRC}/LICENSE.txt LIB_DEPENDS= libsearpc.so:devel/libsearpc \ libcurl.so:ftp/curl \ libinotify.so:devel/libinotify \ libevent.so:devel/libevent \ libuuid.so:misc/libuuid \ + libargon2.so:security/libargon2 \ libjansson.so:devel/jansson \ libwebsockets.so:net/libwebsockets RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}urllib3>0:net/py-urllib3@${PY_FLAVOR} \ bash:shells/bash USES= autoreconf gnome iconv libarchive libtool localbase \ pathfix pkgconfig python shebangfix sqlite ssl vala:build USE_GITHUB= yes GH_ACCOUNT= haiwen GH_PROJECT= seafile USE_GNOME= glib20 USE_LDCONFIG= yes CONFLICTS= seafile-server SHEBANG_FILES= *.sh scripts/*.sh app/seaf-cli integration-tests/*.sh GNU_CONFIGURE= yes GNU_CONFIGURE_MANPREFIX= ${PREFIX}/share CONFIGURE_ENV= SSL_CFLAGS="${OPENSSLINC}" SSL_LIBS="-L${OPENSSLLIB} -lssl -lcrypto" CPPFLAGS+= -I${LOCALBASE}/include/evhtp INSTALL_TARGET= install-strip OPTIONS_DEFINE= NLS NLS_USES= gettext post-patch: # Fix P_KTHREAD r295435 ${REINPLACE_CMD} 's/P_KTHREAD/P_KPROC/' ${WRKSRC}/lib/utils.c .include diff --git a/net-mgmt/seafile-client/distinfo b/net-mgmt/seafile-client/distinfo index 332fdd40bde3..e1dbc82a9a91 100644 --- a/net-mgmt/seafile-client/distinfo +++ b/net-mgmt/seafile-client/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1718476273 -SHA256 (haiwen-seafile-v9.0.6_GH0.tar.gz) = e0a1260ac995ad21a183cf73e647fe18e4fc06045f601ab5abcc4b62d07c2280 -SIZE (haiwen-seafile-v9.0.6_GH0.tar.gz) = 755372 +TIMESTAMP = 1781552976 +SHA256 (haiwen-seafile-v9.0.18_GH0.tar.gz) = 0b2a93e75b04e40c503c74059ca00b521bf981935f764efcbc5adfabff929d90 +SIZE (haiwen-seafile-v9.0.18_GH0.tar.gz) = 772680 diff --git a/net-mgmt/seafile-client/files/patch-daemon_Makefile.am b/net-mgmt/seafile-client/files/patch-daemon_Makefile.am index 9d1de608a01f..775e3e6f5aa5 100644 --- a/net-mgmt/seafile-client/files/patch-daemon_Makefile.am +++ b/net-mgmt/seafile-client/files/patch-daemon_Makefile.am @@ -1,23 +1,23 @@ --- daemon/Makefile.am.orig 2023-12-06 20:22:32 UTC +++ daemon/Makefile.am @@ -46,6 +46,10 @@ if LINUX wt_monitor_src = wt-monitor.c wt-monitor-linux.c wt-monitor-structs.c endif +if BSD +wt_monitor_src = wt-monitor.c wt-monitor-linux.c wt-monitor-structs.c +endif + if WIN32 wt_monitor_src = wt-monitor.c wt-monitor-win32.c wt-monitor-structs.c endif -@@ -97,7 +101,7 @@ seaf_daemon_LDADD = $(top_builddir)/lib/libseafile_com +@@ -102,7 +102,7 @@ @LIB_RT@ @LIB_UUID@ -lsqlite3 @LIBEVENT_LIBS@ @LIBEVENT_PTHREADS_LIBS@\ $(top_builddir)/common/cdc/libcdc.la \ $(top_builddir)/common/index/libindex.la @LIB_WS32@ @LIB_CRYPT32@ \ - @SEARPC_LIBS@ @JANSSON_LIBS@ @LIB_MAC@ @ZLIB_LIBS@ @CURL_LIBS@ @BPWRAPPER_LIBS@ \ -- @WS_LIBS@ +- @WS_LIBS@ @ARGON2_LIBS@ + @SEARPC_LIBS@ @JANSSON_LIBS@ @LIB_MAC@ @ZLIB_LIBS@ @CURL_LIBS@ \ -+ @LIB_INOTIFY@ @BPWRAPPER_LIBS@ @WS_LIBS@ ++ @LIB_INOTIFY@ @BPWRAPPER_LIBS@ @WS_LIBS@ @ARGON2_LIBS@ seaf_daemon_LDFLAGS = @CONSOLE@ diff --git a/net-mgmt/seafile-client/files/patch-lib_utils.c b/net-mgmt/seafile-client/files/patch-lib_utils.c index a1f47ffa96c3..49104c45bf97 100644 --- a/net-mgmt/seafile-client/files/patch-lib_utils.c +++ b/net-mgmt/seafile-client/files/patch-lib_utils.c @@ -1,195 +1,214 @@ --- lib/utils.c.orig 2019-06-04 02:14:53 UTC +++ lib/utils.c @@ -50,6 +50,16 @@ #include +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__) +#include +#include +#include +#include +#include +#include +#include +#endif + #include "log.h" @@ -2040,14 +2050,19 @@ wchar_from_utf8 (const char *utf8) #endif /* ifdef WIN32 */ -#ifdef __linux__ /* read the link of /proc/123/exe and compare with `process_name' */ static int find_process_in_dirent(struct dirent *dir, const char *process_name) { char path[512]; /* fisrst construct a path like /proc/123/exe */ +#if defined(__linux__) if (sprintf (path, "/proc/%s/exe", dir->d_name) < 0) { +#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) + if (sprintf (path, "/proc/%s/file", dir->d_name) < 0) { +#else + if (1) { +#endif return -1; } @@ -2071,7 +2086,8 @@ find_process_in_dirent(struct dirent *dir, const char } /* read the /proc fs to determine whether some process is running */ -gboolean process_is_running (const char *process_name) +static gboolean +process_is_running_procfs (const char *process_name) { DIR *proc_dir = opendir("/proc"); if (!proc_dir) { @@ -2096,7 +2112,8 @@ gboolean process_is_running (const char *process_name) return FALSE; } -int count_process(const char *process_name) +static int +count_process_procfs(const char *process_name) { int count = 0; DIR *proc_dir = opendir("/proc"); @@ -2120,6 +2137,14 @@ int count_process(const char *process_name) return count; } +#ifdef __linux__ +gboolean process_is_running(const char *process_name) { + return process_is_running_procfs(process_name); +} + +int count_process(const char *process_name) { + return count_process_procfs(process_name); +} #endif #ifdef __APPLE__ @@ -2127,6 +2152,119 @@ gboolean process_is_running (const char *process_name) { //TODO return FALSE; +} +#endif + +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__) +#if defined(__FreeBSD__) +#define PSKIP(kp) ((kp)->ki_pid == mypid || \ + (!kthreads && ((kp)->ki_flag & P_KTHREAD) != 0)) +#define KVM_OPENFILES(exec, coref, buf) \ + kvm_openfiles(exec, coref, NULL, O_RDONLY, buf) +#define KVM_GETPROCS(kd, plist, nproc) \ + kvm_getprocs(kd, KERN_PROC_PROC, 0, &nproc) + +#elif defined(__DragonFly__) +#define PSKIP(kp) ((kp)->kp_pid == mypid || \ + (!kthreads && ((kp)->kp_flags & P_SYSTEM) != 0)) +#define KVM_OPENFILES(exec, coref, buf) \ + kvm_openfiles(exec, coref, NULL, O_RDONLY, buf) +#define KVM_GETPROCS(kd, plist, nproc) \ + kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc) + +#elif defined(__NetBSD__) +#define PSKIP(kp) ((kp)->kp_pid == mypid || \ + ((kp)->p_flag & P_SYSTEM) != 0) +#define KVM_OPENFILES(exec, coref, buf) \ + kvm_openfiles(exec, coref, NULL, KVM_NO_FILES, buf) +#define KVM_GETPROCS(kd, plist, nproc) \ + kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc) + +#elif defined(__OpenBSD__) +#define PSKIP(kp) ((kp)->kp_pid == mypid || \ + ((kp)->p_flag & (P_SYSTEM | P_THREAD)) != 0) +#define KVM_OPENFILES(exec, coref, buf) \ + kvm_openfiles(exec, coref, NULL, KVM_NO_FILES, buf) +#define KVM_GETPROCS(kd, plist, nproc) \ + kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc) + +#else +#define PSKIP(kp) 0 +#define KVM_OPENFILES(exec, coref, buf) 0 +#define KVM_GETPROCS(kd, plist, nproc) 0 +#endif + +#ifndef WITH_PROC_FS +#define WITH_PROC_FS g_file_test("/proc/curproc", G_FILE_TEST_EXISTS) +#endif + +static int +count_running_process_kvm(const char *process_name) { + + + static kvm_t *kd; + static struct kinfo_proc *plist; + static int nproc; + static pid_t mypid; + static int kthreads; + + char buf[_POSIX2_LINE_MAX]; + const char * execf, *coref; + char **pargv; + int i, selected_nproc; + struct kinfo_proc *kp; + + selected_nproc = 0; + execf = NULL; + coref = _PATH_DEVNULL; + + mypid = getpid(); + kd = KVM_OPENFILES(execf, coref, buf); + if (kd == NULL) { + fprintf(stderr, "Error: Cannot open kernel files (%s)", buf); + exit(1); + } + + plist = KVM_GETPROCS(kd, plist, nproc); + if (plist == NULL) { + fprintf(stderr, "Error: Cannot get process list (%s)", kvm_geterr(kd)); + exit(1); + } + + for(i = 0, kp = plist; i < nproc; i++, kp++) { + if (PSKIP(kp)) { + continue; + } + if ((pargv = kvm_getargv(kd, kp, 0)) != NULL) { + if (strstr(pargv[0], process_name) != NULL) { + selected_nproc += 1; + } + } + } + kvm_close(kd); + kvm_close(kd); + + return selected_nproc; +} + +gboolean +process_is_running(const char * process_name) { + if (WITH_PROC_FS) { + return process_is_running_procfs(process_name); + } + if (count_running_process_kvm(process_name) > 0) { + return TRUE; + } else { + return FALSE; + } +} + +int +count_process(const char * process_name) { + if (WITH_PROC_FS) { + return count_process_procfs(process_name); + } + return count_running_process_kvm(process_name); } #endif +@@ -2976,10 +2976,16 @@ + return ret; + #else + ++#ifdef __linux__ ++ return removexattr (path, name); ++#endif ++ + #ifdef __APPLE__ + return removexattr (path, name, 0); +-#else +- return removexattr (path, name); ++#endif ++ ++#if defined __FreeBSD__ || defined __NetBSD__ ++ return extattr_delete_file(path, EXTATTR_NAMESPACE_USER, name); + #endif + + #endif diff --git a/net-mgmt/seafile-gui/Makefile b/net-mgmt/seafile-gui/Makefile index b4577b343190..2bb75c4371d6 100644 --- a/net-mgmt/seafile-gui/Makefile +++ b/net-mgmt/seafile-gui/Makefile @@ -1,43 +1,42 @@ PORTNAME= seafile-gui DISTVERSIONPREFIX= v -DISTVERSION= 9.0.6 +DISTVERSION= 9.0.18 PORTREVISION= 1 CATEGORIES= net-mgmt devel -MAINTAINER= ports@FreeBSD.org +MAINTAINER= d.stoye@cms.hu-berlin.de COMMENT= Open Source Cloud Storage (Client) WWW= https://github.com/haiwen/seafile LICENSE= APACHE20 LICENSE_FILE= ${WRKSRC}/LICENSE LIB_DEPENDS= libsearpc.so:devel/libsearpc \ libseafile.so:net-mgmt/seafile-client \ libsqlite3.so:databases/sqlite3 \ libjansson.so:devel/jansson \ libevent.so:devel/libevent \ libuuid.so:misc/libuuid -USES= compiler:c++11-lang cmake gnome pkgconfig qt:5 shebangfix ssl +USES= compiler:c++11-lang cmake gnome pkgconfig qt:6 shebangfix ssl SHEBANG_FILES= extensions/*.sh scripts/*.sh fsplugin/*.sh \ scripts/*.py USE_GITHUB= yes GH_ACCOUNT= haiwen GH_PROJECT= seafile-client USE_GNOME= glib20 -USE_QT= core dbus gui network widgets \ - qmake:build buildtools:build linguisttools:build +USE_GL= gl opengl +USE_QT= 5compat base declarative positioning \ + webengine webchannel CMAKE_ARGS= -DCMAKE_INCLUDE_PATH:PATH=include/glib-2.0 \ -DOPENSSL_INCLUDE_DIRS=${OPENSSLINC} \ - -DOPENSSL_LIBRARIES="-L${OPENSSLLIB} -lcrypto" - -OPTIONS_DEFINE= DEBUG NLS - -NLS_USES= gettext + -DOPENSSL_LIBRARIES="-L${OPENSSLLIB} -lcrypto" \ + -DBUILD_SHIBBOLETH_SUPPORT=ON \ + -DQT_VERSION_MAJOR=6 # Note that per PR 197984, cairo must be built with X11 and XCB options # otherwise configure fails with "cairo needs x11 enabled" message .include diff --git a/net-mgmt/seafile-gui/distinfo b/net-mgmt/seafile-gui/distinfo index 86773a316fe8..12359da732f0 100644 --- a/net-mgmt/seafile-gui/distinfo +++ b/net-mgmt/seafile-gui/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1718476293 -SHA256 (haiwen-seafile-client-v9.0.6_GH0.tar.gz) = ca6b795e10f84491f0bbf9fe17ab1ef5d0692581de8f81f64626caa9f4b917cd -SIZE (haiwen-seafile-client-v9.0.6_GH0.tar.gz) = 11725450 +TIMESTAMP = 1781558483 +SHA256 (haiwen-seafile-client-v9.0.18_GH0.tar.gz) = 4c410761349f6b748fac1bd463c769d6a410cde90111e7dba87cf02ac8bbb151 +SIZE (haiwen-seafile-client-v9.0.18_GH0.tar.gz) = 11586605 diff --git a/net-mgmt/seafile-gui/files/patch-CMakeLists.txt b/net-mgmt/seafile-gui/files/patch-CMakeLists.txt index 0b43f30d67fb..8190c97e80f4 100644 --- a/net-mgmt/seafile-gui/files/patch-CMakeLists.txt +++ b/net-mgmt/seafile-gui/files/patch-CMakeLists.txt @@ -1,38 +1,57 @@ ---- CMakeLists.txt.orig 2022-04-25 04:00:03 UTC +--- CMakeLists.txt.orig 2026-04-08 07:07:55 UTC +++ CMakeLists.txt -@@ -171,7 +171,7 @@ IF (BUILD_SHIBBOLETH_SUPPORT) +@@ -133,18 +133,6 @@ ENDIF() + #################### + ###### BEGIN: QT configuration + #################### +-FIND_PROGRAM(qmake_executable NAMES qmake qmake.exe) +-EXECUTE_PROCESS(COMMAND +- bash -c "${qmake_executable} --version | grep -iE '^using qt version [0-9.]+' | awk '{print $4}'" +- OUTPUT_VARIABLE DETECTED_QT_VERSION +- OUTPUT_STRIP_TRAILING_WHITESPACE) +-MESSAGE("Qt version: ${DETECTED_QT_VERSION}") +-EXECUTE_PROCESS(COMMAND +- bash -c "qmake --version|grep -iE '^using qt version [0-9]'|awk '{print $4}'|grep -iE '^[0-9]'|awk -F . '{print $1}'" +- OUTPUT_VARIABLE QT_VERSION_MAJOR +- OUTPUT_STRIP_TRAILING_WHITESPACE) +-MESSAGE("QT_VERSION_MAJOR: ${QT_VERSION_MAJOR}") +- + IF(USE_QT_WEBKIT) + ADD_DEFINITIONS(-DSEAFILE_USE_WEBKIT) + SET(WEBKIT_NAME "WebKit") +@@ -171,7 +159,7 @@ ENDIF() ADD_DEFINITIONS(-DHAVE_SHIBBOLETH_SUPPORT) ENDIF() -IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux") +IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "BSD|DragonFly") SET(USE_QT_LIBRARIES ${USE_QT_LIBRARIES} "DBus") ENDIF() -@@ -383,7 +383,7 @@ PKG_CHECK_MODULES(JANSSON REQUIRED jansson>=2.0) +@@ -383,7 +371,7 @@ PKG_CHECK_MODULES(LIBSEARPC REQUIRED libsearpc>=1.0) PKG_CHECK_MODULES(LIBSEARPC REQUIRED libsearpc>=1.0) -PKG_CHECK_MODULES(OPENSSL REQUIRED openssl>=0.98) +#PKG_CHECK_MODULES(OPENSSL REQUIRED openssl>=0.98) PKG_CHECK_MODULES(LIBSEAFILE REQUIRED libseafile>=1.7) -@@ -601,7 +601,7 @@ LIST(APPEND utils_sources +@@ -597,7 +585,7 @@ LIST(APPEND utils_sources src/utils/stl.cpp src/utils/seafile-error.cpp ) -IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "BSD") +IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "BSD|DragonFly") LIST(APPEND utils_sources src/utils/process-linux.cpp ) -@@ -797,7 +797,7 @@ IF (BUILD_SHIBBOLETH_SUPPORT) +@@ -792,7 +780,7 @@ ENDIF() ENDIF() ## QtBus -IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "BSD") +IF (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "BSD|DragonFly") IF(QT_VERSION_MAJOR EQUAL 6) target_link_libraries(seafile-applet Qt6::DBus) ELSE() diff --git a/net-mgmt/seafile-gui/files/patch-src-filebrowser-file-browser-search-tab.cpp b/net-mgmt/seafile-gui/files/patch-src-filebrowser-file-browser-search-tab.cpp new file mode 100644 index 000000000000..b6149e078c6b --- /dev/null +++ b/net-mgmt/seafile-gui/files/patch-src-filebrowser-file-browser-search-tab.cpp @@ -0,0 +1,11 @@ +--- src/filebrowser/file-browser-search-tab.cpp.orig 2026-04-08 09:07:55 UTC ++++ src/filebrowser/file-browser-search-tab.cpp +@@ -158,7 +158,7 @@ + horizontalHeader()->setStretchLastSection(true); + horizontalHeader()->setHighlightSections(false); + horizontalHeader()->setSortIndicatorShown(true); +-#ifndef Q_OS_LINUX ++#if !defined(Q_OS_LINUX) && !defined(Q_OS_FREEBSD) + horizontalHeader()->setSortIndicatorClearable(true); + #endif + horizontalHeader()->setSortIndicator(-1, Qt::AscendingOrder); diff --git a/net-mgmt/seafile-gui/files/patch-src-message-poller.cpp b/net-mgmt/seafile-gui/files/patch-src-message-poller.cpp new file mode 100644 index 000000000000..61d46f22dfef --- /dev/null +++ b/net-mgmt/seafile-gui/files/patch-src-message-poller.cpp @@ -0,0 +1,11 @@ +--- src/message-poller.cpp.orig 2026-04-08 07:07:55 UTC ++++ src/message-poller.cpp +@@ -1,6 +1,8 @@ + #include + #include + #include ++#include ++#include + + #include "utils/utils.h" + #include "utils/translate-commit-desc.h" diff --git a/net-mgmt/seafile-gui/pkg-plist b/net-mgmt/seafile-gui/pkg-plist index 7b3fff74b962..36e4573a8028 100644 --- a/net-mgmt/seafile-gui/pkg-plist +++ b/net-mgmt/seafile-gui/pkg-plist @@ -1,10 +1,10 @@ bin/seafile-applet -share/applications/seafile.desktop +share/applications/com.seafile.seafile-applet.desktop share/icons/hicolor/128x128/apps/seafile.png share/icons/hicolor/16x16/apps/seafile.png share/icons/hicolor/22x22/apps/seafile.png share/icons/hicolor/24x24/apps/seafile.png share/icons/hicolor/32x32/apps/seafile.png share/icons/hicolor/48x48/apps/seafile.png share/icons/hicolor/scalable/apps/seafile.svg share/pixmaps/seafile.png