diff --git a/packages/znc/build.sh b/packages/znc/build.sh new file mode 100644 index 000000000..3b2f27ea8 --- /dev/null +++ b/packages/znc/build.sh @@ -0,0 +1,12 @@ +TERMUX_PKG_HOMEPAGE=https://znc.in/ +TERMUX_PKG_DESCRIPTION="An advanced IRC bouncer" +TERMUX_PKG_LICENSE="Apache-2.0" +TERMUX_PKG_MAINTAINER="@termux" +TERMUX_PKG_VERSION=1.8.2 +TERMUX_PKG_SRCURL=https://znc.in/releases/archive/znc-${TERMUX_PKG_VERSION}.tar.gz +TERMUX_PKG_SHA256=ff238aae3f2ae0e44e683c4aee17dc8e4fdd261ca9379d83b48a7d422488de0d +TERMUX_PKG_DEPENDS="libc++, libicu, libsasl, openssl, zlib" +TERMUX_PKG_FORCE_CMAKE=true +TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" +-DWANT_I18N=OFF +" diff --git a/packages/znc/src-main.cpp.patch b/packages/znc/src-main.cpp.patch new file mode 100644 index 000000000..7a098368d --- /dev/null +++ b/packages/znc/src-main.cpp.patch @@ -0,0 +1,48 @@ +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + + #if defined(HAVE_LIBSSL) && defined(HAVE_PTHREAD) && \ + (!defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER < 0x10100004) +@@ -180,7 +181,7 @@ + m_thread = std::thread([=]() { HandleSignals(pZNC); }); + } + ~CSignalHandler() { +- pthread_cancel(m_thread.native_handle()); ++ m_thread_cancel.test_and_set(); + m_thread.join(); + } + +@@ -203,6 +204,7 @@ + }; + + void HandleSignals(CZNC* pZNC) { ++ m_thread_cancel.clear(); + sigset_t signals; + sigemptyset(&signals); + sigaddset(&signals, SIGHUP); +@@ -216,11 +218,10 @@ + pthread_sigmask(SIG_SETMASK, &signals, nullptr); + while (true) { + int sig; +- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, nullptr); ++ if (m_thread_cancel.test_and_set()) pthread_exit(nullptr); + // This thread can be cancelled, but only during this function. + // Such cancel will be the only way to finish this thread. + if (sigwait(&signals, &sig) == -1) continue; +- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, nullptr); + // TODO probably move switch() to CSignalHandlerMonitorFD? + switch (sig) { + case SIGHUP: +@@ -259,6 +260,7 @@ + } + + std::thread m_thread; ++ std::atomic_flag m_thread_cancel; + + // pipe for waking up the main thread + int m_iPipe[2];