aboutsummaryrefslogtreecommitdiffstats
path: root/meta-webserver
diff options
context:
space:
mode:
authorSenthil Selvaganesan <SenthilKumaran.Selvaganesan@garmin.com>2020-12-03 15:09:40 -0600
committerKhem Raj <raj.khem@gmail.com>2020-12-03 14:49:27 -0800
commit3a71d93ee599f003182c364f55182eee6e82afe4 (patch)
treefc8b117e498c0d79235c39da5e88e661962975c4 /meta-webserver
parent010cd128e7ae8258f83c03195caa605bbce3e76b (diff)
downloadmeta-openembedded-contrib-3a71d93ee599f003182c364f55182eee6e82afe4.tar.gz
fcgiwrap: add recipe
fcgiwrap is a simple server for running CGI applications over FastCGI. It hopes to provide clean CGI support to Nginx and other web servers that may need it. Homepage: https://github.com/gnosek/fcgiwrap. Signed-off-by: Senthil Selvaganesan <SenthilKumaran.Selvaganesan@garmin.com> Signed-off-by: Joshua Watt <Joshua.Watt@garmin.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-webserver')
-rw-r--r--meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb1
-rw-r--r--meta-webserver/recipes-support/fcgiwrap/fcgiwrap/0001-Fix-implicit-fallthrough-warning.patch313
-rw-r--r--meta-webserver/recipes-support/fcgiwrap/fcgiwrap_git.bb24
3 files changed, 338 insertions, 0 deletions
diff --git a/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb b/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb
index e3e68582c1..2fa5bc4a93 100644
--- a/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb
+++ b/meta-webserver/recipes-core/packagesgroups/packagegroup-meta-webserver.bb
@@ -38,6 +38,7 @@ RDEPENDS_packagegroup-meta-webserver-php = "\
RDEPENDS_packagegroup-meta-webserver-support = "\
spawn-fcgi \
fcgi \
+ fcgiwrap \
"
RDEPENDS_packagegroup-meta-webserver-webadmin = "\
diff --git a/meta-webserver/recipes-support/fcgiwrap/fcgiwrap/0001-Fix-implicit-fallthrough-warning.patch b/meta-webserver/recipes-support/fcgiwrap/fcgiwrap/0001-Fix-implicit-fallthrough-warning.patch
new file mode 100644
index 0000000000..d05abd25ca
--- /dev/null
+++ b/meta-webserver/recipes-support/fcgiwrap/fcgiwrap/0001-Fix-implicit-fallthrough-warning.patch
@@ -0,0 +1,313 @@
+From 962e532099d10ee6ce5b4ce68537bc46595230c0 Mon Sep 17 00:00:00 2001
+From: Joshua Watt <Joshua.Watt@garmin.com>
+Date: Tue, 24 Nov 2020 08:30:13 -0600
+Subject: [PATCH] Fix implicit fallthrough warning
+
+Fixes a warning about an implicit fall through in a case statement
+(-Werror=implicit-fallthrough) with newer versions of GCC
+
+Upstream-status: Submitted [https://github.com/gnosek/fcgiwrap/pull/54]
+Signed-off-by: Joshua Watt <Joshua.Watt@garmin.com>
+---
+ configure.ac | 3 +
+ fcgiwrap.c | 7 ++
+ m4/ax_gcc_func_attribute.m4 | 242 ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 252 insertions(+)
+ create mode 100644 m4/ax_gcc_func_attribute.m4
+
+diff --git a/configure.ac b/configure.ac
+index bb3674e..9ef517a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -3,6 +3,7 @@
+
+ AC_PREREQ(2.61)
+ AC_INIT([fcgiwrap], [1.1.0], [root@localdomain.pl])
++AC_CONFIG_MACRO_DIRS([m4])
+ AM_CFLAGS="-std=gnu99 -Wall -Wextra -Werror -pedantic"
+ if test x"$CFLAGS" = x""; then
+ AM_CFLAGS="$AM_CFLAGS -O2 -g3"
+@@ -62,5 +63,7 @@ AC_FUNC_MALLOC
+ AC_CHECK_FUNCS([strchr strdup strrchr])
+ AC_CHECK_FUNCS([dup2 putenv select setenv strerror],, [AC_MSG_ERROR([seems as if your libraries don't provide an expected function])])
+
++AX_GCC_FUNC_ATTRIBUTE([fallthrough])
++
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT
+diff --git a/fcgiwrap.c b/fcgiwrap.c
+index b44d8aa..a83726b 100644
+--- a/fcgiwrap.c
++++ b/fcgiwrap.c
+@@ -56,6 +56,12 @@
+ #define UNIX_PATH_MAX 108
+ #endif
+
++#ifdef HAVE_FUNC_ATTRIBUTE_FALLTHROUGH
++#define FALLTHROUGH __attribute__ ((fallthrough))
++#else
++#define FALLTHROUGH (void)
++#endif
++
+ extern char **environ;
+ static char * const * inherited_environ;
+ static const char **allowed_programs;
+@@ -580,6 +586,7 @@ static void handle_fcgi_request(void)
+ execl(filename, filename, (void *)NULL);
+ cgi_error("502 Bad Gateway", "Cannot execute script", filename);
+
++ FALLTHROUGH;
+ default: /* parent */
+ close(pipe_in[0]);
+ close(pipe_out[1]);
+diff --git a/m4/ax_gcc_func_attribute.m4 b/m4/ax_gcc_func_attribute.m4
+new file mode 100644
+index 0000000..da2b1ac
+--- /dev/null
++++ b/m4/ax_gcc_func_attribute.m4
+@@ -0,0 +1,242 @@
++# ===========================================================================
++# https://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE)
++#
++# DESCRIPTION
++#
++# This macro checks if the compiler supports one of GCC's function
++# attributes; many other compilers also provide function attributes with
++# the same syntax. Compiler warnings are used to detect supported
++# attributes as unsupported ones are ignored by default so quieting
++# warnings when using this macro will yield false positives.
++#
++# The ATTRIBUTE parameter holds the name of the attribute to be checked.
++#
++# If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_<ATTRIBUTE>.
++#
++# The macro caches its result in the ax_cv_have_func_attribute_<attribute>
++# variable.
++#
++# The macro currently supports the following function attributes:
++#
++# alias
++# aligned
++# alloc_size
++# always_inline
++# artificial
++# cold
++# const
++# constructor
++# constructor_priority for constructor attribute with priority
++# deprecated
++# destructor
++# dllexport
++# dllimport
++# error
++# externally_visible
++# fallthrough
++# flatten
++# format
++# format_arg
++# gnu_format
++# gnu_inline
++# hot
++# ifunc
++# leaf
++# malloc
++# noclone
++# noinline
++# nonnull
++# noreturn
++# nothrow
++# optimize
++# pure
++# sentinel
++# sentinel_position
++# unused
++# used
++# visibility
++# warning
++# warn_unused_result
++# weak
++# weakref
++#
++# Unsupported function attributes will be tested with a prototype
++# returning an int and not accepting any arguments and the result of the
++# check might be wrong or meaningless so use with care.
++#
++# LICENSE
++#
++# Copyright (c) 2013 Gabriele Svelto <gabriele.svelto@gmail.com>
++#
++# Copying and distribution of this file, with or without modification, are
++# permitted in any medium without royalty provided the copyright notice
++# and this notice are preserved. This file is offered as-is, without any
++# warranty.
++
++#serial 12
++
++AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [
++ AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1])
++
++ AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [
++ AC_LINK_IFELSE([AC_LANG_PROGRAM([
++ m4_case([$1],
++ [alias], [
++ int foo( void ) { return 0; }
++ int bar( void ) __attribute__(($1("foo")));
++ ],
++ [aligned], [
++ int foo( void ) __attribute__(($1(32)));
++ ],
++ [alloc_size], [
++ void *foo(int a) __attribute__(($1(1)));
++ ],
++ [always_inline], [
++ inline __attribute__(($1)) int foo( void ) { return 0; }
++ ],
++ [artificial], [
++ inline __attribute__(($1)) int foo( void ) { return 0; }
++ ],
++ [cold], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [const], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [constructor_priority], [
++ int foo( void ) __attribute__((__constructor__(65535/2)));
++ ],
++ [constructor], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [deprecated], [
++ int foo( void ) __attribute__(($1("")));
++ ],
++ [destructor], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [dllexport], [
++ __attribute__(($1)) int foo( void ) { return 0; }
++ ],
++ [dllimport], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [error], [
++ int foo( void ) __attribute__(($1("")));
++ ],
++ [externally_visible], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [fallthrough], [
++ int foo( void ) {switch (0) { case 1: __attribute__(($1)); case 2: break ; }};
++ ],
++ [flatten], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [format], [
++ int foo(const char *p, ...) __attribute__(($1(printf, 1, 2)));
++ ],
++ [gnu_format], [
++ int foo(const char *p, ...) __attribute__((format(gnu_printf, 1, 2)));
++ ],
++ [format_arg], [
++ char *foo(const char *p) __attribute__(($1(1)));
++ ],
++ [gnu_inline], [
++ inline __attribute__(($1)) int foo( void ) { return 0; }
++ ],
++ [hot], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [ifunc], [
++ int my_foo( void ) { return 0; }
++ static int (*resolve_foo(void))(void) { return my_foo; }
++ int foo( void ) __attribute__(($1("resolve_foo")));
++ ],
++ [leaf], [
++ __attribute__(($1)) int foo( void ) { return 0; }
++ ],
++ [malloc], [
++ void *foo( void ) __attribute__(($1));
++ ],
++ [noclone], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [noinline], [
++ __attribute__(($1)) int foo( void ) { return 0; }
++ ],
++ [nonnull], [
++ int foo(char *p) __attribute__(($1(1)));
++ ],
++ [noreturn], [
++ void foo( void ) __attribute__(($1));
++ ],
++ [nothrow], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [optimize], [
++ __attribute__(($1(3))) int foo( void ) { return 0; }
++ ],
++ [pure], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [sentinel], [
++ int foo(void *p, ...) __attribute__(($1));
++ ],
++ [sentinel_position], [
++ int foo(void *p, ...) __attribute__(($1(1)));
++ ],
++ [returns_nonnull], [
++ void *foo( void ) __attribute__(($1));
++ ],
++ [unused], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [used], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [visibility], [
++ int foo_def( void ) __attribute__(($1("default")));
++ int foo_hid( void ) __attribute__(($1("hidden")));
++ int foo_int( void ) __attribute__(($1("internal")));
++ int foo_pro( void ) __attribute__(($1("protected")));
++ ],
++ [warning], [
++ int foo( void ) __attribute__(($1("")));
++ ],
++ [warn_unused_result], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [weak], [
++ int foo( void ) __attribute__(($1));
++ ],
++ [weakref], [
++ static int foo( void ) { return 0; }
++ static int bar( void ) __attribute__(($1("foo")));
++ ],
++ [
++ m4_warn([syntax], [Unsupported attribute $1, the test may fail])
++ int foo( void ) __attribute__(($1));
++ ]
++ )], [])
++ ],
++ dnl GCC doesn't exit with an error if an unknown attribute is
++ dnl provided but only outputs a warning, so accept the attribute
++ dnl only if no warning were issued.
++ [AS_IF([grep -- -Wattributes conftest.err],
++ [AS_VAR_SET([ac_var], [no])],
++ [AS_VAR_SET([ac_var], [yes])])],
++ [AS_VAR_SET([ac_var], [no])])
++ ])
++
++ AS_IF([test yes = AS_VAR_GET([ac_var])],
++ [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1,
++ [Define to 1 if the system has the `$1' function attribute])], [])
++
++ AS_VAR_POPDEF([ac_var])
++])
+--
+2.29.2
+
diff --git a/meta-webserver/recipes-support/fcgiwrap/fcgiwrap_git.bb b/meta-webserver/recipes-support/fcgiwrap/fcgiwrap_git.bb
new file mode 100644
index 0000000000..a9a8ce0541
--- /dev/null
+++ b/meta-webserver/recipes-support/fcgiwrap/fcgiwrap_git.bb
@@ -0,0 +1,24 @@
+SUMMARY = "FastCGI wrapper for CGI scripts"
+DESCRIPTION = "FcgiWrap is a simple server for running CGI applications over FastCGI. Fcgiwrap can be used together with Nginx to serve CGI or Perl scripts"
+HOMEPAGE = "https://github.com/gnosek/fcgiwrap"
+
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a95d02d614a3a0232d4e6e51b7963c5b"
+
+DEPENDS = "fcgi"
+
+SRC_URI = "git://github.com/gnosek/fcgiwrap.git;protocol=https;branch=${BRANCH} \
+ file://0001-Fix-implicit-fallthrough-warning.patch \
+ "
+BRANCH = "master"
+SRCREV = "99c942c90063c73734e56bacaa65f947772d9186"
+
+S = "${WORKDIR}/git"
+CFLAGS =+ "-I${B}"
+EXTRA_OEMAKE = "VPATH=${S}"
+
+inherit autotools pkgconfig
+
+do_install() {
+ install -Dm 755 ${B}/fcgiwrap ${D}${sbindir}/fcgiwrap
+}