pkgsrc-WIP-changes archive

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

Import net/megacmd



Module Name:	pkgsrc-wip
Committed By:	kikadf <kikadf.01%gmail.com@localhost>
Pushed By:	kikadf
Date:		Sun Jan 4 16:21:49 2026 +0100
Changeset:	6300c4de7c7d843b122cb319d178b82e74ccd748

Modified Files:
	Makefile
Added Files:
	megacmd/DESCR
	megacmd/Makefile
	megacmd/PLIST
	megacmd/distinfo
	megacmd/files/README
	megacmd/patches/patch-CMakeLists.txt
	megacmd/patches/patch-build_cmake_modules_megacmd__libraries.cmake
	megacmd/patches/patch-sdk_cmake_config.h.in
	megacmd/patches/patch-sdk_cmake_modules_sdklib__libraries.cmake
	megacmd/patches/patch-sdk_cmake_modules_sdklib__target.cmake
	megacmd/patches/patch-sdk_include_mega_filesystem.h
	megacmd/patches/patch-sdk_include_mega_posix_megafs.h
	megacmd/patches/patch-sdk_include_mega_sync.h
	megacmd/patches/patch-sdk_include_megaapi__impl.h
	megacmd/patches/patch-sdk_src_filesystem.cpp
	megacmd/patches/patch-sdk_src_posix_fs.cpp
	megacmd/patches/patch-src_megacmdcommonutils.cpp
	megacmd/patches/patch-src_megacmdcommonutils.h
	megacmd/patches/patch-src_megacmdshell_megacmdshellcommunications.cpp

Log Message:
Import net/megacmd

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

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

diffstat:
 Makefile                                           |   1 +
 megacmd/DESCR                                      |   8 +
 megacmd/Makefile                                   |  59 +++++++
 megacmd/PLIST                                      |  73 +++++++++
 megacmd/distinfo                                   |  22 +++
 megacmd/files/README                               |  12 ++
 megacmd/patches/patch-CMakeLists.txt               |  73 +++++++++
 ...ch-build_cmake_modules_megacmd__libraries.cmake |  15 ++
 megacmd/patches/patch-sdk_cmake_config.h.in        |  29 ++++
 ...patch-sdk_cmake_modules_sdklib__libraries.cmake |  15 ++
 .../patch-sdk_cmake_modules_sdklib__target.cmake   |  15 ++
 .../patches/patch-sdk_include_mega_filesystem.h    |  31 ++++
 .../patches/patch-sdk_include_mega_posix_megafs.h  |  36 +++++
 megacmd/patches/patch-sdk_include_mega_sync.h      |  22 +++
 megacmd/patches/patch-sdk_include_megaapi__impl.h  |  15 ++
 megacmd/patches/patch-sdk_src_filesystem.cpp       |  42 +++++
 megacmd/patches/patch-sdk_src_posix_fs.cpp         | 177 +++++++++++++++++++++
 megacmd/patches/patch-src_megacmdcommonutils.cpp   |  16 ++
 megacmd/patches/patch-src_megacmdcommonutils.h     |  16 ++
 ...src_megacmdshell_megacmdshellcommunications.cpp |  15 ++
 20 files changed, 692 insertions(+)

diffs:
diff --git a/Makefile b/Makefile
index 692ca85254..7e33b7d7d9 100644
--- a/Makefile
+++ b/Makefile
@@ -2372,6 +2372,7 @@ SUBDIR+=	mdbtools
 SUBDIR+=	mdpress
 SUBDIR+=	med
 SUBDIR+=	mediawiki-mode
+SUBDIR+=	megacmd
 SUBDIR+=	meka-git
 SUBDIR+=	melonds
 SUBDIR+=	memdump
diff --git a/megacmd/DESCR b/megacmd/DESCR
new file mode 100644
index 0000000000..e9403124a5
--- /dev/null
+++ b/megacmd/DESCR
@@ -0,0 +1,8 @@
+MEGA is a cloud storage, file and folder sharing
+provider.
+MEGAcmd is a free, open source tool that provides
+non UI access to MEGA services. It intends to offer
+all the functionality with your MEGA account via
+commands. It features synchronization, backup of
+local folders into your MEGA account and a webdav
+or streaming server.
diff --git a/megacmd/Makefile b/megacmd/Makefile
new file mode 100644
index 0000000000..7b9fca0c73
--- /dev/null
+++ b/megacmd/Makefile
@@ -0,0 +1,59 @@
+# $NetBSD: Makefile,v 1.14 2025/10/05 19:26:11 js Exp $
+
+DISTNAME=	megacmd-2.1.1
+PKGREVISION=	1
+CATEGORIES=	net
+MASTER_SITES=	${MASTER_SITE_GITHUB:=meganz/}
+GITHUB_PROJECT=	MEGAcmd
+GITHUB_TAG=	${PKGVERSION_NOREV}_Linux
+SDK_VERSION=	v9.1.1
+
+GITHUB_SUBMODULES=	meganz sdk ${SDK_VERSION} sdk
+
+MAINTAINER=	kikadf.01%gmail.com@localhost
+HOMEPAGE=	https://mega.io/
+COMMENT=	CLI and scriptable application to access MEGA
+# MEGAcmd: GPLv3, SDK: BSD 2-clause
+LICENSE=	gnu-gpl-v3 AND 2-clause-bsd
+
+TOOL_DEPENDS+=	git-base-[0-9]*:../../devel/git-base
+
+USE_LANGUAGES+=		c c++
+USE_CXX_FEATURES+=	filesystem
+FORCE_CXX_STD=		c++17
+USE_LIBTOOL=		yes
+USE_TOOLS+=		pkg-config
+REPLACE_SH=		src/client/mega-*
+CXXFLAGS+=		-DCRYPTOPP_DISABLE_ASM
+
+CMAKE_CONFIGURE_ARGS+=	-DCMAKE_BUILD_TYPE=Release
+CMAKE_CONFIGURE_ARGS+=	-DFULL_REQS=OFF
+CMAKE_CONFIGURE_ARGS+=	-DUSE_MEDIAINFO=OFF
+CMAKE_CONFIGURE_ARGS+=	-DUSE_FREEIMAGE=OFF
+CMAKE_CONFIGURE_ARGS+=	-DUSE_FFMPEG=OFF
+CMAKE_CONFIGURE_ARGS+=	-DUSE_PDFIUM=OFF
+CMAKE_CONFIGURE_ARGS+=	-DWITH_FUSE=OFF
+CMAKE_CONFIGURE_ARGS+=	-DVCPKG_ROOT=""
+
+CHECK_PORTABILITY_SKIP+=	sdk/bindings/ios/3rdparty/*.sh
+
+INSTALLATION_DIRS+=	share/doc/megacmd
+
+post-install:
+	${MV} ${DESTDIR}${PREFIX}/share/bash-completion/completions/megacmd_completion.sh \
+		${DESTDIR}${PREFIX}/share/bash-completion/completions/megacmd
+	${INSTALL_DATA} ${FILESDIR}/README ${DESTDIR}${PREFIX}/share/doc/megacmd
+
+.include "../../databases/sqlite3/buildlink3.mk"
+.include "../../devel/cmake/build.mk"
+.include "../../devel/pcre/buildlink3.mk"
+.include "../../devel/libuv/buildlink3.mk"
+.include "../../devel/readline/buildlink3.mk"
+.include "../../net/libcares/buildlink3.mk"
+BUILDLINK_API_DEPENDS.cryptopp+=	cryptopp>=8.7.0nb1
+.include "../../security/crypto++/buildlink3.mk"
+.include "../../security/libsodium/buildlink3.mk"
+.include "../../textproc/icu/buildlink3.mk"
+.include "../../www/curl/buildlink3.mk"
+.include "../../mk/atomic64.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/megacmd/PLIST b/megacmd/PLIST
new file mode 100644
index 0000000000..38afe55d16
--- /dev/null
+++ b/megacmd/PLIST
@@ -0,0 +1,73 @@
+@comment $NetBSD: PLIST,v 1.4 2025/05/16 19:43:58 wiz Exp $
+bin/mega-attr
+bin/mega-backup
+bin/mega-cancel
+bin/mega-cat
+bin/mega-cd
+bin/mega-cmd
+bin/mega-cmd-server
+bin/mega-confirm
+bin/mega-confirmcancel
+bin/mega-cp
+bin/mega-debug
+bin/mega-deleteversions
+bin/mega-df
+bin/mega-du
+bin/mega-errorcode
+bin/mega-exclude
+bin/mega-exec
+bin/mega-export
+bin/mega-find
+bin/mega-ftp
+bin/mega-fuse-add
+bin/mega-fuse-config
+bin/mega-fuse-disable
+bin/mega-fuse-enable
+bin/mega-fuse-remove
+bin/mega-fuse-show
+bin/mega-get
+bin/mega-graphics
+bin/mega-help
+bin/mega-https
+bin/mega-import
+bin/mega-invite
+bin/mega-ipc
+bin/mega-killsession
+bin/mega-lcd
+bin/mega-log
+bin/mega-login
+bin/mega-logout
+bin/mega-lpwd
+bin/mega-ls
+bin/mega-mediainfo
+bin/mega-mkdir
+bin/mega-mount
+bin/mega-mv
+bin/mega-passwd
+bin/mega-permissions
+bin/mega-preview
+bin/mega-proxy
+bin/mega-put
+bin/mega-pwd
+bin/mega-quit
+bin/mega-reload
+bin/mega-rm
+bin/mega-session
+bin/mega-share
+bin/mega-showpcr
+bin/mega-signup
+bin/mega-speedlimit
+bin/mega-sync
+bin/mega-sync-config
+bin/mega-sync-ignore
+bin/mega-sync-issues
+bin/mega-thumbnail
+bin/mega-transfers
+bin/mega-tree
+bin/mega-userattr
+bin/mega-users
+bin/mega-version
+bin/mega-webdav
+bin/mega-whoami
+share/bash-completion/completions/megacmd
+share/doc/megacmd/README
diff --git a/megacmd/distinfo b/megacmd/distinfo
new file mode 100644
index 0000000000..64ad61c715
--- /dev/null
+++ b/megacmd/distinfo
@@ -0,0 +1,22 @@
+$NetBSD: distinfo,v 1.4 2025/05/16 19:43:58 wiz Exp $
+
+BLAKE2s (megacmd-2.1.1.tar.gz) = 493c50974e425b54d952dea2f066b10d8d4dec13721b52808c7cba36074eac5d
+SHA512 (megacmd-2.1.1.tar.gz) = 5b510cca8a1cc8480aa759856ca6f4af5a81967f34b05a03af66334a0004ebe295f7825b3d560d86371f71a57ab60952b3dc8b020480a47b35fee2ec781962bc
+Size (megacmd-2.1.1.tar.gz) = 2087992 bytes
+BLAKE2s (meganz-sdk-v9.1.1.tar.gz) = 3923b242bae105806d10959978ff58a0c0db9e494a1ce04bc59a5bb6cf5946cf
+SHA512 (meganz-sdk-v9.1.1.tar.gz) = bb39b0c5d35caeeed70f373fc9b94dd19b995931d4ba843f1d45a28525a4d4ab681c7d5f992f4e0eb4506a44303fcc771c4e31b216edc0b97b5692bd466b0021
+Size (meganz-sdk-v9.1.1.tar.gz) = 4151889 bytes
+SHA1 (patch-CMakeLists.txt) = 66d843860251fc55eba4e08858b0418dbc9e7fb1
+SHA1 (patch-build_cmake_modules_megacmd__libraries.cmake) = afabd22177c0437fbe1d13fdf6601832bc60cd96
+SHA1 (patch-sdk_cmake_config.h.in) = 4cc3eab8be8c11571f4aab834690749335c764ec
+SHA1 (patch-sdk_cmake_modules_sdklib__libraries.cmake) = 65125e82d0921571a9ba44cfbbb816776a8fc987
+SHA1 (patch-sdk_cmake_modules_sdklib__target.cmake) = 33f5b16dc561e37f076c60fa537a4c5b8d8c992e
+SHA1 (patch-sdk_include_mega_filesystem.h) = 827dd8098b72ddc397790c60b1a21163a5df45a5
+SHA1 (patch-sdk_include_mega_posix_megafs.h) = a87e49a8a9d387f5325bf41df3fbd27ecd453b02
+SHA1 (patch-sdk_include_mega_sync.h) = 7b73c2619a5fbf33a4df012164876cc4dccfdb84
+SHA1 (patch-sdk_include_megaapi__impl.h) = cd5cd30d989d11d58d0030ebb7a34b3b0963d6fb
+SHA1 (patch-sdk_src_filesystem.cpp) = 3890ea10a66cd2a99925af57b0a3558c617cd6e3
+SHA1 (patch-sdk_src_posix_fs.cpp) = b8516bc9291c79e3f3903491cd19eac506413637
+SHA1 (patch-src_megacmdcommonutils.cpp) = 6128e295e1a816ad4d7ea1ec59fa963391eb3bfb
+SHA1 (patch-src_megacmdcommonutils.h) = 194d991a02e8e48c9c31c60384549c276e4ee735
+SHA1 (patch-src_megacmdshell_megacmdshellcommunications.cpp) = ff794d128ffa6e0626296a504b22f391e0fc923b
diff --git a/megacmd/files/README b/megacmd/files/README
new file mode 100644
index 0000000000..c98d131988
--- /dev/null
+++ b/megacmd/files/README
@@ -0,0 +1,12 @@
+$NetBSD: README,v 1.2 2025/01/23 20:10:07 wiz Exp $
+
+To use megacmd features you need machine-id.
+If /etc/machine-id or /var/lib/dbus/machine-id
+not exists, you should generate one. For that,
+run the following command as root:
+
+- if dbus installed:
+	dbus-uuidgen --ensure
+
+- without dbus:
+	sh -c 'date|md5 > /etc/machine-id'
diff --git a/megacmd/patches/patch-CMakeLists.txt b/megacmd/patches/patch-CMakeLists.txt
new file mode 100644
index 0000000000..440e4d73e0
--- /dev/null
+++ b/megacmd/patches/patch-CMakeLists.txt
@@ -0,0 +1,73 @@
+$NetBSD: patch-CMakeLists.txt,v 1.2 2025/05/16 19:43:58 wiz Exp $
+
+* Use system dependencies instead of vcpkg
+* Fix install directories
+* Install inotify conf file only on Linux
+
+--- CMakeLists.txt.orig	2025-01-30 14:04:12.000000000 +0100
++++ CMakeLists.txt
+@@ -39,7 +39,7 @@ execute_process(
+ )
+ endif()
+ 
+-if((NOT WIN32 OR BASH_VERSION_RESULT EQUAL 0) AND NOT EXISTS ${VCPKG_ROOT})
++if(VCPKG_ROOT AND (NOT WIN32 OR BASH_VERSION_RESULT EQUAL 0) AND NOT EXISTS ${VCPKG_ROOT})
+     message(STATUS "vcpkg will be cloned into ${VCPKG_ROOT}")
+     execute_process(
+         #TODO: have the same for windows ... or at least check if bash is available
+@@ -134,8 +134,8 @@ if(UNIX AND NOT APPLE)
+     # If CMAKE_INSTALL_PREFIX is not set, it will set rpath to /opt/....
+     # Note: using cmake --install --prefix /some/prefix will not set rpath relative to that prefix
+     # The above can be used for building packages: in which install dir is a path construction folder that will not be there in packages
+-    set(CMAKE_INSTALL_LIBDIR "opt/megacmd/lib")
+-    set(CMAKE_INSTALL_BINDIR "usr/bin") #override default "bin"
++    set(CMAKE_INSTALL_LIBDIR "lib")
++    set(CMAKE_INSTALL_BINDIR "bin") #override default "bin"
+ 
+     if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+         message(STATUS "Overriding default CMAKE_INSTALL_PREFIX to /")
+@@ -457,27 +457,31 @@ elseif(NOT WIN32)
+         PATTERN "win" EXCLUDE)
+ 
+     install(FILES "${CMAKE_CURRENT_LIST_DIR}/src/client/megacmd_completion.sh"
+-        DESTINATION "etc/bash_completion.d"
++        DESTINATION "share/bash-completion/completions"
+         )
+ 
+-    # generate 100-megacmd-inotify-limit.conf file and have it installed
+-    execute_process(COMMAND echo "fs.inotify.max_user_watches = 524288"
++    if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
++        # generate 100-megacmd-inotify-limit.conf file and have it installed
++        execute_process(COMMAND echo "fs.inotify.max_user_watches = 524288"
+                 OUTPUT_FILE ${CMAKE_CURRENT_BINARY_DIR}/99-megacmd-inotify-limit.conf)
+-    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/99-megacmd-inotify-limit.conf
+-        DESTINATION "etc/sysctl.d"
+-        )
+-
+-    #Install vcpkg dynamic libraries in locations defined by GNUInstallDirs.
+-    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+-        SET(vcpkg_lib_folder "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/")
+-    else()
+-        SET(vcpkg_lib_folder "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/")
++        install(FILES ${CMAKE_CURRENT_BINARY_DIR}/99-megacmd-inotify-limit.conf
++            DESTINATION "etc/sysctl.d"
++            )
+     endif()
+-    install(DIRECTORY "${vcpkg_lib_folder}"
++
++    if(VCPKG_ROOT)
++        #Install vcpkg dynamic libraries in locations defined by GNUInstallDirs.
++        if(CMAKE_BUILD_TYPE STREQUAL "Debug")
++            SET(vcpkg_lib_folder "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/")
++        else()
++            SET(vcpkg_lib_folder "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/")
++        endif()
++        install(DIRECTORY "${vcpkg_lib_folder}"
+             DESTINATION ${CMAKE_INSTALL_LIBDIR}
+             FILES_MATCHING
+             PATTERN "lib*.so*"
+             PATTERN "*dylib*" #macOS
+             PATTERN "manual-link" EXCLUDE
+             PATTERN "pkgconfig" EXCLUDE)
++    endif()
+ endif() #not WIN32
diff --git a/megacmd/patches/patch-build_cmake_modules_megacmd__libraries.cmake b/megacmd/patches/patch-build_cmake_modules_megacmd__libraries.cmake
new file mode 100644
index 0000000000..12cfa6b5bf
--- /dev/null
+++ b/megacmd/patches/patch-build_cmake_modules_megacmd__libraries.cmake
@@ -0,0 +1,15 @@
+$NetBSD: patch-build_cmake_modules_megacmd__libraries.cmake,v 1.1 2025/02/15 07:40:13 wiz Exp $
+
+* Fix used pcre library name
+
+--- build/cmake/modules/megacmd_libraries.cmake.orig	2025-01-30 14:04:12.000000000 +0100
++++ build/cmake/modules/megacmd_libraries.cmake
+@@ -16,7 +16,7 @@ macro(load_megacmdserver_libraries)
+         find_package(PkgConfig REQUIRED) # For libraries loaded using pkg-config
+ 
+         if(USE_PCRE) #TODO: UNTESTED!
+-            pkg_check_modules(pcre REQUIRED IMPORTED_TARGET libpcre)
++            pkg_check_modules(pcre REQUIRED IMPORTED_TARGET libpcrecpp)
+             target_link_libraries(LMegacmdServer PRIVATE PkgConfig::pcre)
+             set(USE_PCRE 1)
+         endif()
diff --git a/megacmd/patches/patch-sdk_cmake_config.h.in b/megacmd/patches/patch-sdk_cmake_config.h.in
new file mode 100644
index 0000000000..7f746503c2
--- /dev/null
+++ b/megacmd/patches/patch-sdk_cmake_config.h.in
@@ -0,0 +1,29 @@
+$NetBSD: patch-sdk_cmake_config.h.in,v 1.1 2025/05/16 19:43:58 wiz Exp $
+
+* Use periodic scan instead of filesystem notification on BSDs
+
+--- sdk/cmake/config.h.in.orig	2025-05-12 14:43:30.633759167 +0200
++++ sdk/cmake/config.h.in
+@@ -10,6 +10,12 @@
+ #cmakedefine ENABLE_SYNC 1
+ #endif
+ 
++/* Define to use periodic scan instead of filesystem notification */
++#if (defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)) && \
++     defined(ENABLE_SYNC)
++#define USE_PERIODIC
++#endif
++
+ #ifndef ENABLE_LOG_PERFORMANCE
+ #cmakedefine ENABLE_LOG_PERFORMANCE 1
+ #endif
+@@ -226,7 +232,8 @@
+ #define USE_DB 0
+ 
+ /* Use inotify API */
+-#if !defined(__APPLE__) && !defined(_WIN32)
++#if !defined(__APPLE__) && !defined(_WIN32) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
++    !defined(__NetBSD__) && !defined(__DragonFly__)
+ #define USE_INOTIFY 1
+ #endif
+ 
diff --git a/megacmd/patches/patch-sdk_cmake_modules_sdklib__libraries.cmake b/megacmd/patches/patch-sdk_cmake_modules_sdklib__libraries.cmake
new file mode 100644
index 0000000000..3772bbbdbd
--- /dev/null
+++ b/megacmd/patches/patch-sdk_cmake_modules_sdklib__libraries.cmake
@@ -0,0 +1,15 @@
+$NetBSD: patch-sdk_cmake_modules_sdklib__libraries.cmake,v 1.2 2025/05/16 19:43:58 wiz Exp $
+
+* Fix to find libcrypto++
+
+--- sdk/cmake/modules/sdklib_libraries.cmake.orig	2025-04-02 09:16:59.000000000 +0200
++++ sdk/cmake/modules/sdklib_libraries.cmake
+@@ -91,7 +91,7 @@ macro(load_sdklib_libraries)
+ 
+         find_package(PkgConfig REQUIRED) # For libraries loaded using pkg-config
+ 
+-        pkg_check_modules(cryptopp REQUIRED IMPORTED_TARGET libcrypto++)
++        pkg_check_modules(cryptopp REQUIRED IMPORTED_TARGET libcryptopp)
+         target_link_libraries(SDKlib PUBLIC PkgConfig::cryptopp) # TODO: Private for SDK core
+ 
+         pkg_check_modules(sodium REQUIRED IMPORTED_TARGET libsodium)
diff --git a/megacmd/patches/patch-sdk_cmake_modules_sdklib__target.cmake b/megacmd/patches/patch-sdk_cmake_modules_sdklib__target.cmake
new file mode 100644
index 0000000000..eee8232a82
--- /dev/null
+++ b/megacmd/patches/patch-sdk_cmake_modules_sdklib__target.cmake
@@ -0,0 +1,15 @@
+$NetBSD: patch-sdk_cmake_modules_sdklib__target.cmake,v 1.1 2025/02/15 07:40:13 wiz Exp $
+
+* On gcc-10 std::filesystem is in stdc++
+
+--- sdk/cmake/modules/sdklib_target.cmake.orig	2025-02-07 10:00:44.872621812 +0100
++++ sdk/cmake/modules/sdklib_target.cmake
+@@ -358,7 +358,7 @@ endif()
+ load_sdklib_libraries()
+ 
+ # System libraries
+-if((NOT (WIN32 OR APPLE OR ANDROID)) AND CMAKE_CXX_STANDARD LESS_EQUAL 17)
++if((NOT (WIN32 OR APPLE OR ANDROID OR UNIX)) AND CMAKE_CXX_STANDARD LESS_EQUAL 17)
+     # Needed for std::experimental::filesystem
+     # Needed for c++17 and std::filesystem for some compilers. Not needed starting in gcc9, but harmless.
+     target_link_libraries(SDKlib PRIVATE stdc++fs)
diff --git a/megacmd/patches/patch-sdk_include_mega_filesystem.h b/megacmd/patches/patch-sdk_include_mega_filesystem.h
new file mode 100644
index 0000000000..241d45f204
--- /dev/null
+++ b/megacmd/patches/patch-sdk_include_mega_filesystem.h
@@ -0,0 +1,31 @@
+$NetBSD: patch-sdk_include_mega_filesystem.h,v 1.1 2025/05/16 19:43:58 wiz Exp $
+
+* Add BSD supported filesystems
+
+--- sdk/include/mega/filesystem.h.orig	2025-04-02 09:16:59.000000000 +0200
++++ sdk/include/mega/filesystem.h
+@@ -51,6 +51,10 @@ enum FileSystemType
+     FS_SMB = 12,
+     FS_SMB2 = 13,
+     FS_LIFS = 14,
++    FS_FFS = 15,
++    FS_HAMMER = 16,
++    FS_UFS = 17,
++    FS_ZFS = 18,
+ };
+ 
+ typedef void (*asyncfscallback)(void *);
+@@ -233,11 +237,13 @@ class MEGA_API LocalPath
+     friend class ScopedSyncPathRestore;
+     friend class WinFileSystemAccess;
+     friend class PosixFileSystemAccess;
++    friend class FallbackFileSystemAccess;
+     friend struct WinDirAccess;
+     friend struct WinDirNotify;
+     friend class LinuxDirNotify;
+     friend class MacDirNotify;
+     friend class PosixDirNotify;
++    friend class FallbackDirNotify;
+     friend class WinFileAccess;
+     friend class PosixFileAccess;
+     friend void RemoveHiddenFileAttribute(LocalPath& path);
diff --git a/megacmd/patches/patch-sdk_include_mega_posix_megafs.h b/megacmd/patches/patch-sdk_include_mega_posix_megafs.h
new file mode 100644
index 0000000000..e42f3487f6
--- /dev/null
+++ b/megacmd/patches/patch-sdk_include_mega_posix_megafs.h
@@ -0,0 +1,36 @@
+$NetBSD: patch-sdk_include_mega_posix_megafs.h,v 1.3 2025/05/16 19:43:58 wiz Exp $
+
+* Add Fallback classes to avoid inotify
+
+--- sdk/include/mega/posix/megafs.h.orig	2025-04-02 09:16:59.000000000 +0200
++++ sdk/include/mega/posix/megafs.h
+@@ -260,6 +260,29 @@ private:
+ 
+ #endif // ENABLE_SYNC
+ 
++#elif defined(USE_PERIODIC)
++
++#define FSACCESS_CLASS FallbackFileSystemAccess
++
++class FallbackFileSystemAccess : public PosixFileSystemAccess
++{
++public:
++    DirNotify* newdirnotify(LocalNode& root,
++                            const LocalPath& rootPath,
++                            Waiter* waiter) override;
++
++    void addevents(Waiter*, int) override;
++
++    int checkevents(Waiter*) override;
++
++}; // class FallbackFileSystemAccess
++
++class FallbackDirNotify : public DirNotify
++{
++public:
++    FallbackDirNotify(const LocalPath& rootPath);
++};
++
+ #endif // __linux__
+ 
+ } // namespace
diff --git a/megacmd/patches/patch-sdk_include_mega_sync.h b/megacmd/patches/patch-sdk_include_mega_sync.h
new file mode 100644
index 0000000000..c87f9955ac
--- /dev/null
+++ b/megacmd/patches/patch-sdk_include_mega_sync.h
@@ -0,0 +1,22 @@
+$NetBSD: patch-sdk_include_mega_sync.h,v 1.1 2025/05/16 19:43:58 wiz Exp $
+
+* Set ChangeDetectionMethod to USE_PERIODIC
+
+--- sdk/include/mega/sync.h.orig	2025-05-12 14:52:24.963962961 +0200
++++ sdk/include/mega/sync.h
+@@ -224,10 +224,14 @@ public:
+                                const MegaClient& client) const;
+ 
+     // How should the engine detect filesystem changes?
++#ifdef USE_PERIODIC
++    ChangeDetectionMethod mChangeDetectionMethod = CDM_PERIODIC_SCANNING;
++#else
+     ChangeDetectionMethod mChangeDetectionMethod = CDM_NOTIFICATIONS;
++#endif
+ 
+     // Only meaningful when a sync is in CDM_PERIODIC_SCANNING mode.
+-    unsigned mScanIntervalSec = 0;
++    unsigned mScanIntervalSec = 60;
+ 
+     // enum to string conversion
+     static const char* synctypename(const Type type);
diff --git a/megacmd/patches/patch-sdk_include_megaapi__impl.h b/megacmd/patches/patch-sdk_include_megaapi__impl.h
new file mode 100644
index 0000000000..6b97ea9baf
--- /dev/null
+++ b/megacmd/patches/patch-sdk_include_megaapi__impl.h
@@ -0,0 +1,15 @@
+$NetBSD: patch-sdk_include_megaapi__impl.h,v 1.1 2025/05/16 19:43:58 wiz Exp $
+
+* Use FallbackFileSystemAccess if USE_PERIODIC defined
+
+--- sdk/include/megaapi_impl.h.orig	2025-05-12 14:53:36.536485792 +0200
++++ sdk/include/megaapi_impl.h
+@@ -90,6 +90,8 @@ class MegaSemaphore : public CppSemaphor
+     class MegaWaiter : public PosixWaiter {};
+     #ifdef __APPLE__
+     class MegaFileSystemAccess : public MacFileSystemAccess {};
++    #elif defined(USE_PERIODIC)
++    class MegaFileSystemAccess : public FallbackFileSystemAccess {};
+     #else
+     class MegaFileSystemAccess : public LinuxFileSystemAccess {};
+     #endif
diff --git a/megacmd/patches/patch-sdk_src_filesystem.cpp b/megacmd/patches/patch-sdk_src_filesystem.cpp
new file mode 100644
index 0000000000..fa0196d66b
--- /dev/null
+++ b/megacmd/patches/patch-sdk_src_filesystem.cpp
@@ -0,0 +1,42 @@
+$NetBSD: patch-sdk_src_filesystem.cpp,v 1.1 2025/05/16 19:43:58 wiz Exp $
+
+* Add BSD supported filesystems
+
+--- sdk/src/filesystem.cpp.orig	2025-04-17 16:07:37.374980956 +0200
++++ sdk/src/filesystem.cpp
+@@ -785,8 +785,12 @@ const char *FileSystemAccess::fstypetost
+             return "EXFAT";
+         case FS_FAT32:
+             return "FAT32";
++        case FS_FFS:
++            return "FFS";
+         case FS_EXT:
+             return "EXT";
++        case FS_HAMMER :
++            return "HAMMER";
+         case FS_HFS:
+             return "HFS";
+         case FS_APFS:
+@@ -809,6 +813,10 @@ const char *FileSystemAccess::fstypetost
+             return "SMB2";
+         case FS_LIFS:
+             return "LIFS";
++        case FS_UFS:
++            return "UFS";
++        case FS_ZFS:
++            return "ZFS";
+         case FS_UNKNOWN:    // fall through
+             return "UNKNOWN FS";
+     }
+@@ -884,7 +892,11 @@ bool FileSystemAccess::islocalfscompatib
+     case FS_APFS:
+     case FS_EXT:
+     case FS_F2FS:
++    case FS_FFS:
++    case FS_HAMMER:
++    case FS_UFS:
+     case FS_XFS:
++    case FS_ZFS:
+         return character != '/';
+     case FS_EXFAT:
+     case FS_FAT32:
diff --git a/megacmd/patches/patch-sdk_src_posix_fs.cpp b/megacmd/patches/patch-sdk_src_posix_fs.cpp
new file mode 100644
index 0000000000..c937a0d5b8
--- /dev/null
+++ b/megacmd/patches/patch-sdk_src_posix_fs.cpp
@@ -0,0 +1,177 @@
+$NetBSD: patch-sdk_src_posix_fs.cpp,v 1.4 2025/05/16 19:43:58 wiz Exp $
+
+* Fix build on NetBSD, use statvfs
+* Don't use mntent features on BSDs
+* O_NOATIME not available on BSDs
+* Fallback funcs
+
+--- sdk/src/posix/fs.cpp.orig	2025-04-02 09:16:59.000000000 +0200
++++ sdk/src/posix/fs.cpp
+@@ -22,7 +22,8 @@
+  * You should have received a copy of the license along with this
+  * program.
+  */
+-#ifndef __APPLE__
++#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__OpenBSD__) && \
++    !defined(__NetBSD__) && !defined(__DragonFly__)
+ #include <mntent.h>
+ #endif // ! __APPLE__
+ 
+@@ -32,6 +33,9 @@
+ #include <sys/ioctl.h>
+ #include <sys/resource.h>
+ #include <sys/statvfs.h>
++#if defined(__NetBSD__)
++#define statfs statvfs
++#endif
+ #include <sys/types.h>
+ #include <sys/utsname.h>
+ #ifdef TARGET_OS_MAC
+@@ -1018,6 +1022,18 @@ int LinuxFileSystemAccess::checkevents([
+     return result;
+ }
+ 
++#elif defined(USE_PERIODIC)
++
++void FallbackFileSystemAccess::addevents([[maybe_unused]] Waiter* waiter, int /*flags*/)
++{
++    //Nothing
++}
++
++int FallbackFileSystemAccess::checkevents([[maybe_unused]] Waiter* waiter)
++{
++    return 0;
++}
++
+ #endif //  __linux__
+ 
+ 
+@@ -1749,6 +1765,16 @@ void LinuxDirNotify::removeWatch(WatchMa
+ }
+ 
+ #endif // USE_INOTIFY
++
++#elif defined(USE_PERIODIC)
++
++FallbackDirNotify::FallbackDirNotify(const LocalPath& rootPath):
++    DirNotify(rootPath)
++{
++    // Let the engine know everything's ok.
++    setFailed(0, "");
++}
++
+ #endif // __linux__
+ 
+ #endif //ENABLE_SYNC
+@@ -1805,8 +1831,8 @@ private:
+     // open with O_NOATIME if possible
+     int open(const char *path)
+     {
+-#ifdef TARGET_OS_IPHONE
+-        // building for iOS, there is no O_NOATIME flag
++#ifndef O_NOATIME
++        // building for iOS and BSDs, there is no O_NOATIME flag
+         int fd = ::open(path, O_RDONLY) ;
+ #else
+         // for sync in particular, try to open without setting access-time
+@@ -2065,6 +2091,7 @@ ScanResult PosixFileSystemAccess::direct
+ }
+ 
+ #ifndef __APPLE__
++#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
+ 
+ // Determine which device contains the specified path.
+ static std::string deviceOf(const std::string& database,
+@@ -2233,6 +2260,7 @@ static std::string deviceOf(const std::s
+     // No database has a mapping for this path.
+     return std::string();
+ }
++#endif
+ 
+ // Compute legacy filesystem fingerprint.
+ static std::uint64_t fingerprintOf(const std::string& path)
+@@ -2261,6 +2289,7 @@ static std::uint64_t fingerprintOf(const
+     return ++value;
+ }
+ 
++#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
+ // Determine the UUID of the specified device.
+ static std::string uuidOf(const std::string& device)
+ {
+@@ -2337,6 +2366,7 @@ static std::string uuidOf(const std::str
+     // Couldn't determine device's UUID.
+     return std::string();
+ }
++#endif
+ 
+ fsfp_t FileSystemAccess::fsFingerprint(const LocalPath& path) const
+ {
+@@ -2347,6 +2377,7 @@ fsfp_t FileSystemAccess::fsFingerprint(c
+     if (!fingerprint)
+         return fsfp_t();
+ 
++#if !defined(__FreeBSD__) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
+     // What device contains the specified path?
+     auto device = deviceOf(path.localpath);
+ 
+@@ -2360,6 +2391,7 @@ fsfp_t FileSystemAccess::fsFingerprint(c
+         if (!uuid.empty())
+             return fsfp_t(fingerprint, std::move(uuid));
+     }
++#endif
+ 
+     // Couldn't determine filesystem UUID.
+     return fsfp_t(fingerprint, std::string());
+@@ -2452,6 +2484,15 @@ DirNotify* LinuxFileSystemAccess::newdir
+     return new LinuxDirNotify(*this, root, rootPath);
+ }
+ #endif
++
++#elif defined(USE_PERIODIC)
++DirNotify* FallbackFileSystemAccess::newdirnotify(LocalNode& root,
++    const LocalPath& rootPath,
++    Waiter*)
++{
++    return new FallbackDirNotify(rootPath);
++}
++
+ #endif
+ 
+ bool PosixFileSystemAccess::issyncsupported(const LocalPath& localpathArg, bool& isnetwork, SyncError& syncError, SyncWarning& syncWarning)
+@@ -2526,18 +2567,26 @@ bool PosixFileSystemAccess::getlocalfsty
+     }
+ #endif /* __linux__ || __ANDROID__ */
+ 
+-#if defined(__APPLE__) || defined(USE_IOS)
++#if defined(__APPLE__) || defined(USE_IOS) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
++    defined(__NetBSD__) || defined(__DragonFly__)
+     static const map<string, FileSystemType> filesystemTypes = {
+         {"apfs",        FS_APFS},
+         {"exfat",       FS_EXFAT},
++        {"ext2fs",      FS_EXT},
++        {"ffs",         FS_FFS},
++        {"hammer",      FS_HAMMER},
++        {"hammer2",     FS_HAMMER},
+         {"hfs",         FS_HFS},
+         {"msdos",       FS_FAT32},
++        {"msdosfs",     FS_FAT32},
+         {"nfs",         FS_NFS},
+         {"ntfs",        FS_NTFS}, // Apple NTFS
+         {"smbfs",       FS_SMB},
+         {"tuxera_ntfs", FS_NTFS}, // Tuxera NTFS for Mac
++        {"ufs",         FS_UFS},
+         {"ufsd_NTFS",   FS_NTFS},  // Paragon NTFS for Mac
+         {"lifs",        FS_LIFS},  // on macos (in Ventura at least), external USB with exFAT are reported as "lifs"
++        {"zfs",         FS_ZFS},
+     }; /* filesystemTypes */
+ 
+     struct statfs statbuf;
+@@ -2555,7 +2604,7 @@ bool PosixFileSystemAccess::getlocalfsty
+         type = FS_UNKNOWN;
+         return true;
+     }
+-#endif /* __APPLE__ || USE_IOS */
++#endif /* __APPLE__ || USE_IOS || BSDs */
+ 
+     type = FS_UNKNOWN;
+     return false;
diff --git a/megacmd/patches/patch-src_megacmdcommonutils.cpp b/megacmd/patches/patch-src_megacmdcommonutils.cpp
new file mode 100644
index 0000000000..ae4df176ee
--- /dev/null
+++ b/megacmd/patches/patch-src_megacmdcommonutils.cpp
@@ -0,0 +1,16 @@
+$NetBSD: patch-src_megacmdcommonutils.cpp,v 1.1 2025/02/15 07:40:14 wiz Exp $
+
+* BSDs use the functions of linux
+
+--- src/megacmdcommonutils.cpp.orig	2025-02-07 09:43:13.320748794 +0100
++++ src/megacmdcommonutils.cpp
+@@ -1128,7 +1128,8 @@ bool isValidEmail(string email)
+                     || (email.find("@") > email.find_last_of(".")));
+ }
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
++    defined(__NetBSD__) || defined(__DragonFly__)
+ std::string getCurrentExecPath()
+ {
+     std::string path = ".";
diff --git a/megacmd/patches/patch-src_megacmdcommonutils.h b/megacmd/patches/patch-src_megacmdcommonutils.h
new file mode 100644
index 0000000000..1d19bbd721
--- /dev/null
+++ b/megacmd/patches/patch-src_megacmdcommonutils.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-src_megacmdcommonutils.h,v 1.1 2025/02/15 07:40:14 wiz Exp $
+
+* BSDs use the functions of linux
+
+--- src/megacmdcommonutils.h.orig	2025-02-07 09:44:39.977015171 +0100
++++ src/megacmdcommonutils.h
+@@ -269,7 +269,8 @@ void sleepMilliSeconds(long microseconds
+ 
+ bool isValidEmail(std::string email);
+ 
+-#ifdef __linux__
++#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \
++    defined(__NetBSD__) || defined(__DragonFly__)
+ std::string getCurrentExecPath();
+ #endif
+ 
diff --git a/megacmd/patches/patch-src_megacmdshell_megacmdshellcommunications.cpp b/megacmd/patches/patch-src_megacmdshell_megacmdshellcommunications.cpp
new file mode 100644
index 0000000000..8d6d3a848a
--- /dev/null
+++ b/megacmd/patches/patch-src_megacmdshell_megacmdshellcommunications.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_megacmdshell_megacmdshellcommunications.cpp,v 1.2 2025/02/15 07:40:14 wiz Exp $
+
+* Fix include on BSDs
+
+--- src/megacmdshell/megacmdshellcommunications.cpp.orig	2024-05-20 12:29:43.000000000 +0000
++++ src/megacmdshell/megacmdshellcommunications.cpp
+@@ -55,7 +55,7 @@
+ #include <limits.h>
+ #endif
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
+ #include <netinet/in.h>
+ #endif
+ 


Home | Main Index | Thread Index | Old Index