[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