[Buildroot] [PATCH v2 1/3] uwsgi: new package

Yann E. MORIN yann.morin.1998 at free.fr
Tue Feb 4 12:54:15 UTC 2020


Adam, All,

On 2019-11-23 12:20 -0800, aduskett at gmail.com spake thusly:
> From: Adam Duskett <Aduskett at gmail.com>
> 
> The uWSGI project aims at developing a full stack for building hosting services.
> Application servers (for various programming languages and protocols), proxies,
> process managers and monitors are all implemented using a common API and a
> standard configuration style. Thanks to its pluggable architecture, it can be
> extended to support more platforms and languages.

As seen IRL, this does not seem to be building on current master...  :-(

So, I've marked as changes requested on patchwork. Sorry for the
delay... :-(

Regards,
Yann E. MORIN.

> There are five patches currently required to properly cross-compile uWSGI, all
> but one of which are pending upstream:
> 
> 1) add-plugin_base_dir-variable.patch
>   - uWSGI appends the full path of the plugin directory to the binary when
>     compiling, which results in plugins failing to load on the target filing
>     system.
> 
> 2) add-a-xml2_config-environment-variable-for-cross-co.patch
>   - uWSGI calls out to xml2-config with no way to define a path for xml2-config,
>     thus resulting in the hosts xml2-config cflags and library paths used, add
>     the XML2_CONFIG environment variable which overwrites the default
>     xml2-config path.
> 
> 3) add-a-pcre_config-environment-variable-for-cross-co.patch
>   - This patch is the same as the above, except the variable name is
>     PCRE_CONFIG.
> 
> 4) adjust-python-library-header-paths-for-cross-compila.patch
>   - uWSGI calls sysconfig.get_config_var('LIBDIR') which return the host header
>     and library paths. To fix this, prefix the LIBDIR path with _python_sysroot
>     taken from the sysconfigdata module.
> 
> 5) fix-building-with-uClibc.patch
>   - There are two issues building uwsgi with uClibc:
>     1) core/uwsgi.c includes <execinfo.h> when __GLIBC__  is defined, but does
>        not check if __UCLIBC__ is also defined.
>     2) plugins/router_basicauth/router_basicauth.c checks if __GLIBC__ is
>        defined for <crypt.h> and to enable a workaround for a bug in
>        Glibc-2.2.5, both of which do not apply to uClibc. Adding a check for
>        __UCLIBC__ for both of these conditions fixes the issue.
> 
> Even though PCRE is not technically required, the official documentation
> recommends always building with PCRE support, and many of the embedded plugins
> require PCRE to be present. As such, PCRE is set as a dependency.
> https://uwsgi-docs.readthedocs.io/en/latest/SNI.html?highlight=sni-regexp
> 
> The "Main application type" prompt in the Config.in is to set the main_plugin
> variable in the buildroot.ini file.
> 
> There is a "buildroot.ini.in" file which is used to overwrite the default
> settings in buildconf/base.ini. The following settings that explicitly set:
>  - json: Allow a config file to be in JSON format
>  - pcre: Explicitly set to True
>  - ssl: Allow SSL connections
>  - xml: Allow a config file to be in XML format.
>  - yaml: Allow a config file to be in YAML format.
>  - main_plugin: Set to Python.
>  - plugin_dir: The plugin directory for the target.
> 
> The .ini file does not have a standard value for each option; because of this,
> each option is a key/value pair with a colon set as a delimiter. A for loop
> set's each setting appropriately by splitting the key/value into two variables
> and running SED against the .ini file.
> 
> Tested with every option enabled:
> 
> br-arm-full [1/6]: OK
> br-arm-cortex-a9-glibc [2/6]: OK
> br-arm-cortex-m4-full [3/6]: SKIPPED
> br-x86-64-musl [4/6]: OK
> br-arm-full-static [5/6]: SKIPPED
> sourcery-arm [6/6]: OK
> 
> Signed-off-by: Adam Duskett <Aduskett at gmail.com>
> ---
>  DEVELOPERS                                    |   1 +
>  package/Config.in                             |   1 +
>  .../0001-add-plugin_base_dir-variable.patch   |  47 ++++++++
>  ...ig-environment-variable-for-cross-co.patch |  60 +++++++++++
>  ...ig-environment-variable-for-cross-co.patch |  58 ++++++++++
>  ...brary-header-paths-for-cross-compila.patch |  34 ++++++
>  .../uwsgi/0005-fix-building-with-uClibc.patch |  61 +++++++++++
>  package/uwsgi/Config.in                       |  65 ++++++++++++
>  package/uwsgi/buildroot.ini.in                |   9 ++
>  package/uwsgi/uwsgi.hash                      |   3 +
>  package/uwsgi/uwsgi.mk                        | 100 ++++++++++++++++++
>  11 files changed, 439 insertions(+)
>  create mode 100644 package/uwsgi/0001-add-plugin_base_dir-variable.patch
>  create mode 100644 package/uwsgi/0002-add-a-xml2_config-environment-variable-for-cross-co.patch
>  create mode 100644 package/uwsgi/0003-add-a-pcre_config-environment-variable-for-cross-co.patch
>  create mode 100644 package/uwsgi/0004-adjust-python-library-header-paths-for-cross-compila.patch
>  create mode 100644 package/uwsgi/0005-fix-building-with-uClibc.patch
>  create mode 100644 package/uwsgi/Config.in
>  create mode 100644 package/uwsgi/buildroot.ini.in
>  create mode 100644 package/uwsgi/uwsgi.hash
>  create mode 100644 package/uwsgi/uwsgi.mk
> 
> diff --git a/DEVELOPERS b/DEVELOPERS
> index 991be89849..19fbf6254d 100644
> --- a/DEVELOPERS
> +++ b/DEVELOPERS
> @@ -74,6 +74,7 @@ F:	package/semodule-utils/
>  F:	package/setools/
>  F:	package/sngrep/
>  F:	package/systemd/
> +F:	package/uwsgi/
>  
>  N:	Adam Heinrich <adam at adamh.cz>
>  F:	package/jack1/
> diff --git a/package/Config.in b/package/Config.in
> index f72c77b416..53a01fbe08 100644
> --- a/package/Config.in
> +++ b/package/Config.in
> @@ -2129,6 +2129,7 @@ endif
>  	source "package/vpnc/Config.in"
>  	source "package/vsftpd/Config.in"
>  	source "package/vtun/Config.in"
> +	source "package/uwsgi/Config.in"
>  	source "package/wavemon/Config.in"
>  	source "package/wget/Config.in"
>  	source "package/whois/Config.in"
> diff --git a/package/uwsgi/0001-add-plugin_base_dir-variable.patch b/package/uwsgi/0001-add-plugin_base_dir-variable.patch
> new file mode 100644
> index 0000000000..ace1df09a4
> --- /dev/null
> +++ b/package/uwsgi/0001-add-plugin_base_dir-variable.patch
> @@ -0,0 +1,47 @@
> +From 2b15d1c4d48a431a92d76486818a84d9653e549b Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <Adamduskett at outlook.com>
> +Date: Mon, 29 Jan 2018 11:40:52 -0500
> +Subject: [PATCH] add plugin_base_dir variable
> +
> +Currently, when cross-compiling, if the plugin_dir points to the target
> +directory, uwsgi will embed the full path during compiling.
> +This whole path results in uwsgi trying to load a full target path instead of
> +/usr/lib/uwsgi when running on the target.
> +
> +Creating a new PLUGIN_BASE_DIR variable and prefixing plugin_dir allows the
> +plugin to be installed to the appropriate directory but still have uwsgi load
> +the plugins from the correct folder when ran from on the cross-compiled target.
> +
> +Current status: Pending
> +https://github.com/unbit/uwsgi/pull/2052
> +
> +Signed-off-by: Adam Duskett <Adamduskett at outlook.com>
> +---
> + uwsgiconfig.py | 4 ++--
> + 1 file changed, 2 insertions(+), 2 deletions(-)
> +
> +diff --git a/uwsgiconfig.py b/uwsgiconfig.py
> +index 0c33491..5b356ec 100644
> +--- a/uwsgiconfig.py
> ++++ b/uwsgiconfig.py
> +@@ -27,7 +27,7 @@ try:
> + except:
> +     import configparser as ConfigParser
> + 
> +-
> ++PLUGIN_BASE_DIR = os.environ.get('PLUGIN_BASE_DIR', '')
> + PY3 = sys.version_info[0] == 3
> + 
> + if uwsgi_os == 'Darwin':
> +@@ -1435,7 +1435,7 @@ def build_plugin(path, uc, cflags, ldflags, libs, name = None):
> +         pass
> + 
> +     if uc:
> +-        plugin_dest = uc.get('plugin_build_dir', uc.get('plugin_dir')) + '/' + name + '_plugin'
> ++        plugin_dest = PLUGIN_BASE_DIR + uc.get('plugin_build_dir', uc.get('plugin_dir')) + '/' + name + '_plugin'
> +     else:
> +         plugin_dest = name + '_plugin'
> + 
> +-- 
> +2.14.3
> +
> diff --git a/package/uwsgi/0002-add-a-xml2_config-environment-variable-for-cross-co.patch b/package/uwsgi/0002-add-a-xml2_config-environment-variable-for-cross-co.patch
> new file mode 100644
> index 0000000000..014494e5cb
> --- /dev/null
> +++ b/package/uwsgi/0002-add-a-xml2_config-environment-variable-for-cross-co.patch
> @@ -0,0 +1,60 @@
> +From b98241acc633396dc7f4ab9e4153af552ac6d4a0 Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <Aduskett at gmail.com>
> +Date: Sat, 3 Aug 2019 14:59:18 -0400
> +Subject: [PATCH] add a XML2_CONFIG environment variable for cross-compiling
> +
> +Currently, xml2-config is called out with no way to define an xml2-config path,
> +which causes uwsgi to use the host xml2-config which will cause the xml2
> +library and CFlag directories to point to the host instead of
> +the cross-environment.
> +
> +Add a check for the XML2_CONFIG environment variable, and if it exists, use the
> +resulting path instead.
> +
> +Current-status: pending
> +https://github.com/unbit/uwsgi/pull/2050
> +
> +Signed-off-by: Adam Duskett <aduskett at gmail.com>
> +---
> + uwsgiconfig.py | 9 +++++----
> + 1 file changed, 5 insertions(+), 4 deletions(-)
> +
> +diff --git a/uwsgiconfig.py b/uwsgiconfig.py
> +index 22c9dd3..26403f1 100644
> +--- a/uwsgiconfig.py
> ++++ b/uwsgiconfig.py
> +@@ -1303,12 +1303,13 @@ class uConf(object):
> +                 self.gcc_list.append('core/legion')
> +                 report['ssl'] = True
> + 
> ++        xml2config = os.environ.get('XML2_CONFIG','xml2-config')
> +         if self.get('xml'):
> +             if self.get('xml') == 'auto':
> +-                xmlconf = spcall('xml2-config --libs')
> ++                xmlconf = spcall(xml2config + ' --libs')
> +                 if xmlconf and uwsgi_os != 'Darwin':
> +                     self.libs.append(xmlconf)
> +-                    xmlconf = spcall("xml2-config --cflags")
> ++                    xmlconf = spcall(xml2config + " --cflags")
> +                     self.cflags.append(xmlconf)
> +                     self.cflags.append("-DUWSGI_XML -DUWSGI_XML_LIBXML2")
> +                     self.gcc_list.append('core/xmlconf')
> +@@ -1319,13 +1320,13 @@ class uConf(object):
> +                     self.gcc_list.append('core/xmlconf')
> +                     report['xml'] = 'expat'
> +             elif self.get('xml') == 'libxml2':
> +-                xmlconf = spcall('xml2-config --libs')
> ++                xmlconf = spcall(xml2config + ' --libs')
> +                 if xmlconf is None:
> +                     print("*** libxml2 headers unavailable. uWSGI build is interrupted. You have to install libxml2 development package or use libexpat or disable XML")
> +                     sys.exit(1)
> +                 else:
> +                     self.libs.append(xmlconf)
> +-                    xmlconf = spcall("xml2-config --cflags")
> ++                    xmlconf = spcall(xml2config + " --cflags")
> +                     if xmlconf is None:
> +                         print("*** libxml2 headers unavailable. uWSGI build is interrupted. You have to install libxml2 development package or use libexpat or disable XML")
> +                         sys.exit(1)
> +-- 
> +2.21.0
> +
> diff --git a/package/uwsgi/0003-add-a-pcre_config-environment-variable-for-cross-co.patch b/package/uwsgi/0003-add-a-pcre_config-environment-variable-for-cross-co.patch
> new file mode 100644
> index 0000000000..88fca366b4
> --- /dev/null
> +++ b/package/uwsgi/0003-add-a-pcre_config-environment-variable-for-cross-co.patch
> @@ -0,0 +1,58 @@
> +From 170cbd7226c1a0774da3c19733c2f473befc8eed Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <Aduskett at gmail.com>
> +Date: Sat, 3 Aug 2019 15:32:41 -0400
> +Subject: [PATCH] Add a PCRE_CONFIG environment variable for cross-compiling
> +
> +Currently, pcre-config is called out with no way to define a pcre-config path,
> +which causes uwsgi to use the host pcre-config, which will cause the pcre
> +library and cflag directories to point to the host.
> +
> +Add a check for the PCRE_CONFIG environment variable, and if it exists,
> +use the resulting path instead.
> +
> +upstream-status: pending
> +https://github.com/unbit/uwsgi/pull/2051
> +
> +Signed-off-by: Adam Duskett <Aduskett at gmail.com>
> +---
> + uwsgiconfig.py | 9 +++++----
> + 1 file changed, 5 insertions(+), 4 deletions(-)
> +
> +diff --git a/uwsgiconfig.py b/uwsgiconfig.py
> +index 26403f1..b800cdb 100644
> +--- a/uwsgiconfig.py
> ++++ b/uwsgiconfig.py
> +@@ -1072,25 +1072,26 @@ class uConf(object):
> +         has_pcre = False
> + 
> +         # re-enable after pcre fix
> ++        pcreconfig = os.environ.get('PCRE_CONFIG','pcre-config')
> +         if self.get('pcre'):
> +             if self.get('pcre') == 'auto':
> +-                pcreconf = spcall('pcre-config --libs')
> ++                pcreconf = spcall(pcreconfig + ' --libs')
> +                 if pcreconf:
> +                     self.libs.append(pcreconf)
> +-                    pcreconf = spcall("pcre-config --cflags")
> ++                    pcreconf = spcall(pcreconfig + ' --cflags')
> +                     self.cflags.append(pcreconf)
> +                     self.gcc_list.append('core/regexp')
> +                     self.cflags.append("-DUWSGI_PCRE")
> +                     has_pcre = True
> + 
> +             else:
> +-                pcreconf = spcall('pcre-config --libs')
> ++                pcreconf = spcall(pcreconfig + ' --libs')
> +                 if pcreconf is None:
> +                     print("*** libpcre headers unavailable. uWSGI build is interrupted. You have to install pcre development package or disable pcre")
> +                     sys.exit(1)
> +                 else:
> +                     self.libs.append(pcreconf)
> +-                    pcreconf = spcall("pcre-config --cflags")
> ++                    pcreconf = spcall(pcreconfig + ' --cflags')
> +                     self.cflags.append(pcreconf)
> +                     self.gcc_list.append('core/regexp')
> +                     self.cflags.append("-DUWSGI_PCRE")
> +-- 
> +2.21.0
> +
> diff --git a/package/uwsgi/0004-adjust-python-library-header-paths-for-cross-compila.patch b/package/uwsgi/0004-adjust-python-library-header-paths-for-cross-compila.patch
> new file mode 100644
> index 0000000000..9eb39b1212
> --- /dev/null
> +++ b/package/uwsgi/0004-adjust-python-library-header-paths-for-cross-compila.patch
> @@ -0,0 +1,34 @@
> +From 8bf43f727d34619773d826357f49e172876f8a30 Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <Aduskett at gmail.com>
> +Date: Sat, 3 Aug 2019 17:12:09 -0400
> +Subject: [PATCH] Adjust python library/header paths for cross-compilation
> +
> +uWSGI calls sysconfig.get_config_var('LIBDIR') which return the host header and
> +library paths.
> +
> +To fix this, prefix the LIBDIR path with _python_sysroot taken
> +from the sysconfigdata module.
> +
> +upstream status: Not submitted, Buildroot specific.
> +
> +Signed-off-by: Adam Duskett <Aduskett at gmail.com>
> +---
> + plugins/python/uwsgiplugin.py | 2 ++
> + 1 file changed, 2 insertions(+)
> +
> +diff --git a/plugins/python/uwsgiplugin.py b/plugins/python/uwsgiplugin.py
> +index 843876f..a74de7d 100644
> +--- a/plugins/python/uwsgiplugin.py
> ++++ b/plugins/python/uwsgiplugin.py
> +@@ -52,6 +52,8 @@ if not 'UWSGI_PYTHON_NOLIB' in os.environ:
> +     else:
> +         try:
> +             libdir = sysconfig.get_config_var('LIBDIR')
> ++            if "_python_sysroot" in os.environ:
> ++                libdir = os.environ.get("_python_sysroot") + libdir
> +         except:
> +             libdir = "%s/lib" % sysconfig.PREFIX
> + 
> +-- 
> +2.21.0
> +
> diff --git a/package/uwsgi/0005-fix-building-with-uClibc.patch b/package/uwsgi/0005-fix-building-with-uClibc.patch
> new file mode 100644
> index 0000000000..1f546fa412
> --- /dev/null
> +++ b/package/uwsgi/0005-fix-building-with-uClibc.patch
> @@ -0,0 +1,61 @@
> +From 98c616be6bb745cc5178de3b1a3a84d1f86d6e34 Mon Sep 17 00:00:00 2001
> +From: Adam Duskett <Aduskett at gmail.com>
> +Date: Wed, 7 Aug 2019 15:10:46 -0400
> +Subject: [PATCH] fix building with uClibc
> +
> +There are two issues building uwsgi with uClibc:
> +1) core/uwsgi.c includes <execinfo.h> when __GLIBC__  is defined, but does not
> +check if __UCLIBC__ is also defined.
> +
> +2) plugins/router_basicauth/router_basicauth.c checks if __GLIBC__ is defined
> +for <crypt.h> and to enable a workaround for a bug in glibc-2.2.5, both of which
> +do not apply to uClibc.
> +Add a check for __UCLIBC__ for both of these conditions.
> +
> +Upstream status: Merged.
> +https://github.com/unbit/uwsgi/pull/2054
> +
> +Signed-off-by: Adam Duskett <Aduskett at gmail.com>
> +---
> + core/uwsgi.c                                | 2 +-
> + plugins/router_basicauth/router_basicauth.c | 4 ++--
> + 2 files changed, 3 insertions(+), 3 deletions(-)
> +
> +diff --git a/core/uwsgi.c b/core/uwsgi.c
> +index ef9e310..523bf45 100644
> +--- a/core/uwsgi.c
> ++++ b/core/uwsgi.c
> +@@ -1820,7 +1820,7 @@ void uwsgi_plugins_atexit(void) {
> + 
> + void uwsgi_backtrace(int depth) {
> + 
> +-#if defined(__GLIBC__) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
> ++#if (!defined(__UCLIBC__) && defined __GLIBC__) || (defined(__APPLE__) && !defined(NO_EXECINFO)) || defined(UWSGI_HAS_EXECINFO)
> + 
> + #include <execinfo.h>
> + 
> +diff --git a/plugins/router_basicauth/router_basicauth.c b/plugins/router_basicauth/router_basicauth.c
> +index 429bade..0b7161e 100644
> +--- a/plugins/router_basicauth/router_basicauth.c
> ++++ b/plugins/router_basicauth/router_basicauth.c
> +@@ -3,7 +3,7 @@
> + #ifdef UWSGI_ROUTING
> + 
> + // TODO: Add more crypt_r supported platfroms here
> +-#if defined(__linux__) && defined(__GLIBC__)
> ++#if defined(__linux__) && defined(__GLIBC__) && !defined(__UCLIBC__)
> + #include <crypt.h>
> + #elif defined(__CYGWIN__)
> + #include <crypt.h>
> +@@ -67,7 +67,7 @@ static uint16_t htpasswd_check(char *filename, char *auth) {
> + 
> + 		if (clen > 13) cpwd[13] = 0;
> + 
> +-#if defined(__linux__) && defined(__GLIBC__)
> ++#if defined(__linux__) && defined(__GLIBC__) && !defined(__UCLIBC__)
> + 		struct crypt_data cd;
> + 		memset(&cd, 0, sizeof(struct crypt_data));
> +     /* work around glibc-2.2.5 bug,
> +-- 
> +2.21.0
> +
> diff --git a/package/uwsgi/Config.in b/package/uwsgi/Config.in
> new file mode 100644
> index 0000000000..f0de3093a4
> --- /dev/null
> +++ b/package/uwsgi/Config.in
> @@ -0,0 +1,65 @@
> +menuconfig BR2_PACKAGE_UWSGI
> +	bool "uwsgi"
> +	depends on !BR2_STATIC_LIBS # dlfcn.h
> +	depends on BR2_USE_MMU # python
> +	depends on BR2_USE_WCHAR # python
> +	depends on BR2_TOOLCHAIN_HAS_THREADS # python
> +	# While it's possible to build uwsgi without PCRE, it would require not to
> +	# build Python or PHP or several of the embedded plugins.
> +	# The official documentation also recommends building PCRE support.
> +	# https://uwsgi-docs.readthedocs.io/en/latest/SNI.html?highlight=sni-regexp
> +	select BR2_PACKAGE_PCRE
> +	select BR2_PACKAGE_PYTHON3 if !BR2_PACKAGE_PYTHON
> +	help
> +	  The uWSGI server.
> +	  The uWSGI project aims at developing a full stack for
> +	  building hosting services. Application servers
> +	  (for various programming languages and protocols), proxies,
> +	  process managers and monitors are all implemented using a
> +	  common API and a standard configuration style. Thanks to
> +	  its pluggable architecture, it can be extended to support
> +	  more platforms and languages.
> +
> +	  https://uwsgi-docs.readthedocs.io/en/latest/
> +
> +if BR2_PACKAGE_UWSGI
> +
> +comment "plugins"
> +
> +config BR2_PACKAGE_UWSGI_PLUGINS_CAPABILITIES
> +	bool "POSIX capability support"
> +	select BR2_PACKAGE_LIBCAP
> +	help
> +	  POSIX capabilities allow fine-grained permissions for
> +	  processes. In addition to the standard UNIX permission scheme,
> +	  they define a new set of privileges for system resources.
> +
> +config BR2_PACKAGE_UWSGI_PLUGINS_JSON
> +	bool "JSON"
> +	select BR2_PACKAGE_JANSSON if !BR2_PACKAGE_YAJL
> +	help
> +	  Load the config from a json file.
> +
> +config BR2_PACKAGE_UWSGI_PLUGINS_SSL
> +	bool "SSL"
> +	select BR2_PACKAGE_OPENSSL
> +	help
> +	  SSL Support
> +
> +config BR2_PACKAGE_UWSGI_PLUGINS_XML
> +	bool "XML"
> +	select BR2_PACKAGE_LIBXML2 if !BR2_PACKAGE_EXPAT
> +	help
> +	  Load the config from a XML file.
> +
> +config BR2_PACKAGE_UWSGI_PLUGINS_YAML
> +	bool "YAML"
> +	select BR2_PACKAGE_LIBYAML
> +	help
> +	  Load the config from a YAML file.
> +
> +endif
> +
> +comment "uwsgi needs a toolchain w/ dynamic library, wchar, threads"
> +	depends on BR2_USE_MMU
> +	depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS || BR2_STATIC_LIBS
> diff --git a/package/uwsgi/buildroot.ini.in b/package/uwsgi/buildroot.ini.in
> new file mode 100644
> index 0000000000..75ad8afa32
> --- /dev/null
> +++ b/package/uwsgi/buildroot.ini.in
> @@ -0,0 +1,9 @@
> +[uwsgi]
> +inherit = base
> +json = false
> +pcre = true
> +ssl = false
> +xml = false
> +yaml = false
> +main_plugin = python
> +plugin_dir = /usr/lib/uwsgi
> diff --git a/package/uwsgi/uwsgi.hash b/package/uwsgi/uwsgi.hash
> new file mode 100644
> index 0000000000..bbdfe3b9ea
> --- /dev/null
> +++ b/package/uwsgi/uwsgi.hash
> @@ -0,0 +1,3 @@
> +# Locally computed
> +sha256	4972ac538800fb2d421027f49b4a1869b66048839507ccf0aa2fda792d99f583  uwsgi-2.0.18.tar.gz
> +sha256	ca495399f5da3ce2724649b47eb118f7549344ba58c0cf350d94c3390e435897  LICENSE
> diff --git a/package/uwsgi/uwsgi.mk b/package/uwsgi/uwsgi.mk
> new file mode 100644
> index 0000000000..add75c04b9
> --- /dev/null
> +++ b/package/uwsgi/uwsgi.mk
> @@ -0,0 +1,100 @@
> +################################################################################
> +#
> +# uwsgi
> +#
> +################################################################################
> +
> +UWSGI_VERSION = 2.0.18
> +UWSGI_SITE = $(call github,unbit,uwsgi,$(UWSGI_VERSION))
> +UWSGI_LICENSE = GPL-2.0+
> +UWSGI_LICENSE_FILES = LICENSE
> +UWSGI_DEPENDENCIES += pcre
> +
> +UWSGI_ENV += \
> +	CC="$(TARGET_CC)" \
> +	UWSGI_REMOVE_INCLUDES="/usr/include,/usr/local/include" \
> +	UWSGI_INCLUDES="$(STAGING_DIR)/usr/include" \
> +	PLUGIN_BASE_DIR="$(TARGET_DIR)" \
> +	PCRE_CONFIG="$(STAGING_DIR)/usr/bin/pcre-config" \
> +	UWSGI_PROFILE=$(@D)/buildroot.ini \
> +	PYTHON_LIBDIR="$(STAGING_DIR)/usr/lib"
> +
> +ifeq ($(BR2_PACKAGE_PYTHON),y)
> +UWSGI_DEPENDENCIES += host-python host-python-setuptools python
> +else
> +UWSGI_DEPENDENCIES += host-python3 host-python3-setuptools python3
> +endif
> +
> +ifeq ($(BR2_PACKAGE_LIBZLIB),y)
> +UWSGI_DEPENDENCIES += libzlib
> +endif
> +
> +ifeq ($(BR2_PACKAGE_UTIL_LINUX_LIBUUID),y)
> +UWSGI_DEPENDENCIES += util-linux
> +endif
> +
> +# Plugins
> +ifeq ($(BR2_PACKAGE_UWSGI_PLUGINS_CAPABILITIES),y)
> +UWSGI_DEPENDENCIES += libcap
> +endif
> +
> +# The uwsgi config.ini file does not use the same values for every option.
> +# Use a key/value with a colon as a delimiter to set the appropriate setting.
> +ifeq ($(BR2_PACKAGE_UWSGI_PLUGINS_JSON),y)
> +ifeq ($(BR2_PACKAGE_JANSSON),y)
> +UWSGI_DEPENDENCIES += jansson
> +UWSGI_INI_OPTS += "json:jansson"
> +else
> +UWSGI_DEPENDENCIES += yajl
> +UWSGI_INI_OPTS += "json:yajl"
> +endif
> +endif
> +
> +ifeq ($(BR2_PACKAGE_UWSGI_PLUGINS_SSL),y)
> +UWSGI_DEPENDENCIES += openssl
> +UWSGI_INI_OPTS += "ssl:true"
> +endif
> +
> +ifeq ($(BR2_PACKAGE_UWSGI_PLUGINS_XML),y)
> +ifeq ($(BR2_PACKAGE_LIBXML2),y)
> +UWSGI_DEPENDENCIES += libxml2
> +UWSGI_INI_OPTS += "xml:libxml2"
> +UWSGI_ENV += XML2_CONFIG="$(STAGING_DIR)/usr/bin/xml2-config"
> +else
> +UWSGI_DEPENDENCIES += expat
> +UWSGI_INI_OPTS += "xml:expat"
> +endif
> +endif
> +
> +ifeq ($(BR2_PACKAGE_UWSGI_PLUGINS_YAML),y)
> +UWSGI_DEPENDENCIES += libyaml
> +UWSGI_INI_OPTS += "yaml:libyaml"
> +endif
> +
> +define UWSGI_SETUP_PROFILE
> +	mkdir -p $(TARGET_DIR)/usr/lib/uwsgi
> +
> +	$(INSTALL) -D -m 755 $(UWSGI_PKGDIR)/buildroot.ini.in \
> +		$(@D)/buildroot.ini
> +
> +	$(foreach f,$(UWSGI_INI_OPTS), \
> +		$(eval option=$(shell echo $f | cut -d: -f 1)) \
> +		$(eval value=$(shell echo $f | cut -d: -f 2)) \
> +		$(SED) "s%$(option).*%$(option) = $(value)%g" $(@D)/buildroot.ini
> +	)
> +endef
> +UWSGI_POST_PATCH_HOOKS = UWSGI_SETUP_PROFILE
> +
> +define UWSGI_BUILD_CMDS
> +	cd $(@D); \
> +	$(TARGET_MAKE_ENV) $(UWSGI_ENV) $(HOST_DIR)/bin/python3 \
> +		./setup.py build
> +endef
> +
> +define UWSGI_INSTALL_TARGET_CMDS
> +	cd $(@D); \
> +	$(TARGET_MAKE_ENV) $(UWSGI_ENV) $(HOST_DIR)/bin/python3 \
> +		./setup.py install $(PKG_PYTHON_SETUPTOOLS_INSTALL_TARGET_OPTS)
> +endef
> +
> +$(eval $(generic-package))
> -- 
> 2.23.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'


More information about the buildroot mailing list