From 8d1b2ff45042e2dfaa71f551e4b65659661ac757 Mon Sep 17 00:00:00 2001 From: Leonid Pliushch Date: Thu, 4 Jul 2019 16:58:16 +0300 Subject: [PATCH] new package: fcgi + fcgiwrap Requested in https://github.com/termux/termux-packages/issues/3422. --- packages/fcgi/build.sh | 16 ++++ .../fcgi-2.4.0-Makefile.am-CPPFLAGS.patch | 36 ++++++++ packages/fcgi/fcgi-2.4.0-configure.in.patch | 19 ++++ packages/fcgi/fcgi-2.4.0-gcc44_fixes.patch | 11 +++ packages/fcgi/fcgi-2.4.0-poll.patch | 86 +++++++++++++++++++ packages/fcgi/fix-libs.patch | 22 +++++ packages/fcgiwrap/build.sh | 13 +++ packages/fcgiwrap/fix-kill-parameters.patch | 22 +++++ 8 files changed, 225 insertions(+) create mode 100644 packages/fcgi/build.sh create mode 100644 packages/fcgi/fcgi-2.4.0-Makefile.am-CPPFLAGS.patch create mode 100644 packages/fcgi/fcgi-2.4.0-configure.in.patch create mode 100644 packages/fcgi/fcgi-2.4.0-gcc44_fixes.patch create mode 100644 packages/fcgi/fcgi-2.4.0-poll.patch create mode 100644 packages/fcgi/fix-libs.patch create mode 100644 packages/fcgiwrap/build.sh create mode 100644 packages/fcgiwrap/fix-kill-parameters.patch diff --git a/packages/fcgi/build.sh b/packages/fcgi/build.sh new file mode 100644 index 000000000..b848356f9 --- /dev/null +++ b/packages/fcgi/build.sh @@ -0,0 +1,16 @@ +TERMUX_PKG_HOMEPAGE=http://www.fastcgi.com/ +TERMUX_PKG_DESCRIPTION="A language independent, high performant extension to CGI" +TERMUX_PKG_LICENSE="OpenMarket" +TERMUX_PKG_LICENSE_FILE="LICENSE.TERMS" +TERMUX_PKG_VERSION=2.4.0 +TERMUX_PKG_SRCURL=https://sources.archlinux.org/other/packages/fcgi/fcgi-$TERMUX_PKG_VERSION.tar.gz +TERMUX_PKG_SHA256=66fc45c6b36a21bf2fbbb68e90f780cc21a9da1fffbae75e76d2b4402d3f05b9 + +termux_step_pre_configure() { + libtoolize --automake --copy --force + aclocal + autoheader + automake --add-missing --force-missing --copy + autoconf + export LIBS="-lm" +} diff --git a/packages/fcgi/fcgi-2.4.0-Makefile.am-CPPFLAGS.patch b/packages/fcgi/fcgi-2.4.0-Makefile.am-CPPFLAGS.patch new file mode 100644 index 000000000..7dfe0f98f --- /dev/null +++ b/packages/fcgi/fcgi-2.4.0-Makefile.am-CPPFLAGS.patch @@ -0,0 +1,36 @@ +diff -ru fcgi-2.4.0-orig/cgi-fcgi/Makefile.am fcgi-2.4.0/cgi-fcgi/Makefile.am +--- fcgi-2.4.0-orig/cgi-fcgi/Makefile.am 2007-03-05 18:09:31.000000000 +0100 ++++ fcgi-2.4.0/cgi-fcgi/Makefile.am 2007-03-05 19:38:14.000000000 +0100 +@@ -2,7 +2,7 @@ + bin_PROGRAMS = cgi-fcgi + + INCLUDEDIR = ../include +-CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/include ++AM_CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/include + + INCLUDE_FILES = $(INCLUDEDIR)/fastcgi.h \ + $(INCLUDEDIR)/fcgiapp.h \ +diff -ru fcgi-2.4.0-orig/examples/Makefile.am fcgi-2.4.0/examples/Makefile.am +--- fcgi-2.4.0-orig/examples/Makefile.am 2007-03-05 18:09:31.000000000 +0100 ++++ fcgi-2.4.0/examples/Makefile.am 2007-03-05 19:38:34.000000000 +0100 +@@ -11,7 +11,7 @@ + EXTRA_PROGRAMS = threaded echo-cpp + + INCLUDEDIR = ../include +-CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/include ++AM_CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/include + + INCLUDE_FILES = $(INCLUDEDIR)/fastcgi.h \ + $(INCLUDEDIR)/fcgiapp.h \ +diff -ru fcgi-2.4.0-orig/libfcgi/Makefile.am fcgi-2.4.0/libfcgi/Makefile.am +--- fcgi-2.4.0-orig/libfcgi/Makefile.am 2007-03-05 18:09:31.000000000 +0100 ++++ fcgi-2.4.0/libfcgi/Makefile.am 2007-03-05 19:38:03.000000000 +0100 +@@ -1,7 +1,7 @@ + # $Id: fcgi-2.4.0-Makefile.am-CPPFLAGS.patch,v 1.1 2007/06/28 23:15:26 till Exp $ + + INCLUDEDIR = ../include +-CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/include ++AM_CPPFLAGS = @CPPFLAGS@ -I$(top_srcdir)/include + + INCLUDE_FILES = $(INCLUDEDIR)/fastcgi.h \ + $(INCLUDEDIR)/fcgiapp.h \ diff --git a/packages/fcgi/fcgi-2.4.0-configure.in.patch b/packages/fcgi/fcgi-2.4.0-configure.in.patch new file mode 100644 index 000000000..34cab2c7d --- /dev/null +++ b/packages/fcgi/fcgi-2.4.0-configure.in.patch @@ -0,0 +1,19 @@ +diff -ru fcgi-2.4.0-orig/configure.in fcgi-2.4.0/configure.in +--- fcgi-2.4.0-orig/configure.in 2003-01-19 18:19:41.000000000 +0100 ++++ fcgi-2.4.0/configure.in 2007-03-05 20:48:14.000000000 +0100 +@@ -4,11 +4,13 @@ + dnl generate the file "configure", which is run during the build + dnl to configure the system for the local environment. + +-AC_INIT +-AM_INIT_AUTOMAKE(fcgi, 2.4.0) ++AC_INIT(fcgi, 2.4.0) ++AM_INIT_AUTOMAKE(1.9 foreign) + + AM_CONFIG_HEADER(fcgi_config.h) + ++AM_MAINTAINER_MODE ++ + AC_PROG_CC + AC_PROG_CPP + AC_PROG_INSTALL diff --git a/packages/fcgi/fcgi-2.4.0-gcc44_fixes.patch b/packages/fcgi/fcgi-2.4.0-gcc44_fixes.patch new file mode 100644 index 000000000..6c5cfe2f9 --- /dev/null +++ b/packages/fcgi/fcgi-2.4.0-gcc44_fixes.patch @@ -0,0 +1,11 @@ +diff -up fcgi-2.4.0/libfcgi/fcgio.cpp.gcc44_fixes fcgi-2.4.0/libfcgi/fcgio.cpp +--- fcgi-2.4.0/libfcgi/fcgio.cpp.gcc44_fixes 2002-02-24 21:12:22.000000000 +0100 ++++ fcgi-2.4.0/libfcgi/fcgio.cpp 2009-02-15 11:35:18.000000000 +0100 +@@ -23,6 +23,7 @@ + #endif + + #include ++#include + #include "fcgio.h" + + using std::streambuf; diff --git a/packages/fcgi/fcgi-2.4.0-poll.patch b/packages/fcgi/fcgi-2.4.0-poll.patch new file mode 100644 index 000000000..d4bc2400e --- /dev/null +++ b/packages/fcgi/fcgi-2.4.0-poll.patch @@ -0,0 +1,86 @@ +Author: Anton Kortunov +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/libfcgi/+bug/933417 +Description: use poll in os_unix.c instead of select to avoid problem with > 1024 connections +Forwarded: yes, fastcgi-developers@mailman.fastcgi.com + +diff --git a/libfcgi/os_unix.c b/libfcgi/os_unix.c +index 73e6a7f..af35aee 100755 +--- a/libfcgi/os_unix.c ++++ b/libfcgi/os_unix.c +@@ -42,6 +42,7 @@ static const char rcsid[] = "$Id: os_unix.c,v 1.37 2002/03/05 19:14:49 robs Exp + #include + #include + #include ++#include + + #ifdef HAVE_NETDB_H + #include +@@ -103,6 +104,9 @@ static int volatile maxFd = -1; + static int shutdownPending = FALSE; + static int shutdownNow = FALSE; + ++static int libfcgiOsClosePollTimeout = 2000; ++static int libfcgiIsAfUnixKeeperPollTimeout = 2000; ++ + void OS_ShutdownPending() + { + shutdownPending = TRUE; +@@ -168,6 +172,16 @@ int OS_LibInit(int stdioFds[3]) + if(libInitialized) + return 0; + ++ char *libfcgiOsClosePollTimeoutStr = getenv( "LIBFCGI_OS_CLOSE_POLL_TIMEOUT" ); ++ if(libfcgiOsClosePollTimeoutStr) { ++ libfcgiOsClosePollTimeout = atoi(libfcgiOsClosePollTimeoutStr); ++ } ++ ++ char *libfcgiIsAfUnixKeeperPollTimeoutStr = getenv( "LIBFCGI_IS_AF_UNIX_KEEPER_POLL_TIMEOUT" ); ++ if(libfcgiIsAfUnixKeeperPollTimeoutStr) { ++ libfcgiIsAfUnixKeeperPollTimeout = atoi(libfcgiIsAfUnixKeeperPollTimeoutStr); ++ } ++ + asyncIoTable = (AioInfo *)malloc(asyncIoTableSize * sizeof(AioInfo)); + if(asyncIoTable == NULL) { + errno = ENOMEM; +@@ -755,19 +769,16 @@ int OS_Close(int fd) + + if (shutdown(fd, 1) == 0) + { +- struct timeval tv; +- fd_set rfds; ++ struct pollfd pfd; + int rv; + char trash[1024]; + +- FD_ZERO(&rfds); ++ pfd.fd = fd; ++ pfd.events = POLLIN; + + do + { +- FD_SET(fd, &rfds); +- tv.tv_sec = 2; +- tv.tv_usec = 0; +- rv = select(fd + 1, &rfds, NULL, NULL, &tv); ++ rv = poll(&pfd, 1, libfcgiOsClosePollTimeout); + } + while (rv > 0 && read(fd, trash, sizeof(trash)) > 0); + } +@@ -1116,13 +1127,11 @@ static int is_reasonable_accept_errno (const int error) + */ + static int is_af_unix_keeper(const int fd) + { +- struct timeval tval = { READABLE_UNIX_FD_DROP_DEAD_TIMEVAL }; +- fd_set read_fds; +- +- FD_ZERO(&read_fds); +- FD_SET(fd, &read_fds); ++ struct pollfd pfd; ++ pfd.fd = fd; ++ pfd.events = POLLIN; + +- return select(fd + 1, &read_fds, NULL, NULL, &tval) >= 0 && FD_ISSET(fd, &read_fds); ++ return poll(&pfd, 1, libfcgiIsAfUnixKeeperPollTimeout) >= 0 && (pfd.revents & POLLIN); + } + + /* diff --git a/packages/fcgi/fix-libs.patch b/packages/fcgi/fix-libs.patch new file mode 100644 index 000000000..780d21053 --- /dev/null +++ b/packages/fcgi/fix-libs.patch @@ -0,0 +1,22 @@ +diff -uNr fcgi-2.4.0/examples/Makefile.am fcgi-2.4.0.mod/examples/Makefile.am +--- fcgi-2.4.0/examples/Makefile.am 2001-12-22 05:16:21.000000000 +0200 ++++ fcgi-2.4.0.mod/examples/Makefile.am 2019-07-04 16:40:24.533575048 +0300 +@@ -34,5 +34,5 @@ + threaded_LDFLAGS = @PTHREAD_CFLAGS@ @PTHREAD_LIBS@ + + echo_cpp_SOURCES = $(INCLUDE_FILES) $(INCLUDEDIR)/fcgio.h echo-cpp.cpp +-echo_cpp_LDADD = $(LIBDIR)/libfcgi++.la ++echo_cpp_LDADD = $(LIBDIR)/libfcgi++.la $(LIBDIR)/libfcgi.la + +diff -uNr fcgi-2.4.0/examples/Makefile.in fcgi-2.4.0.mod/examples/Makefile.in +--- fcgi-2.4.0/examples/Makefile.in 2003-01-19 19:21:17.000000000 +0200 ++++ fcgi-2.4.0.mod/examples/Makefile.in 2019-07-04 16:41:22.990620386 +0300 +@@ -147,7 +147,7 @@ + echo_LDFLAGS = + am_echo_cpp_OBJECTS = echo-cpp.$(OBJEXT) + echo_cpp_OBJECTS = $(am_echo_cpp_OBJECTS) +-echo_cpp_DEPENDENCIES = $(LIBDIR)/libfcgi++.la ++echo_cpp_DEPENDENCIES = $(LIBDIR)/libfcgi++.la $(LIBDIR)/libfcgi.la + echo_cpp_LDFLAGS = + am_echo_x_OBJECTS = echo-x.$(OBJEXT) + echo_x_OBJECTS = $(am_echo_x_OBJECTS) diff --git a/packages/fcgiwrap/build.sh b/packages/fcgiwrap/build.sh new file mode 100644 index 000000000..beaa4ba1d --- /dev/null +++ b/packages/fcgiwrap/build.sh @@ -0,0 +1,13 @@ +TERMUX_PKG_HOMEPAGE=http://nginx.localdomain.pl/wiki/FcgiWrap +TERMUX_PKG_DESCRIPTION="A simple server for running CGI applications over FastCGI" +TERMUX_PKG_LICENSE="MIT" +TERMUX_PKG_VERSION=1.1.0 +TERMUX_PKG_SRCURL=https://github.com/gnosek/fcgiwrap/archive/$TERMUX_PKG_VERSION.tar.gz +TERMUX_PKG_SHA256=4c7de0db2634c38297d5fcef61ab4a3e21856dd7247d49c33d9b19542bd1c61f +TERMUX_PKG_DEPENDS="fcgi" +TERMUX_PKG_BUILD_IN_SRC=true + +termux_step_pre_configure() { + CFLAGS+=" -Wno-error=implicit-fallthrough" + autoreconf -i +} diff --git a/packages/fcgiwrap/fix-kill-parameters.patch b/packages/fcgiwrap/fix-kill-parameters.patch new file mode 100644 index 000000000..de187a315 --- /dev/null +++ b/packages/fcgiwrap/fix-kill-parameters.patch @@ -0,0 +1,22 @@ +From dc0c3b14f0d7bb014a9a4c6c17eb55a123496365 Mon Sep 17 00:00:00 2001 +From: "D.pz" +Date: Mon, 28 Aug 2017 23:54:08 +0800 +Subject: [PATCH] 1.fix: kill() parameter sequence wrong + +--- + fcgiwrap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/fcgiwrap.c b/fcgiwrap.c +index b44d8aa..bfd9a90 100644 +--- a/fcgiwrap.c ++++ b/fcgiwrap.c +@@ -205,7 +205,7 @@ static void fcgi_finish(struct fcgi_context *fc, const char* msg) + if (fc->fd_stderr >= 0) close(fc->fd_stderr); + + if (fc->cgi_pid) +- kill(SIGTERM, fc->cgi_pid); ++ kill(fc->cgi_pid, SIGTERM); + } + + static const char * fcgi_pass_fd(struct fcgi_context *fc, int *fdp, FCGI_FILE *ffp, char *buf, size_t bufsize)