[Buildroot] [PATCH 1/1] New package: uwsgi

Eelco Chaudron echaudron at xiot.nl
Fri Feb 26 08:01:56 UTC 2016


Hi Arnout,

For now I fixed it by changing the uclib configuration to include backtrace() support.

+++ uClibc-ng.config
@@ -39,3 +39,4 @@ DEVEL_PREFIX="/usr/"
 UCLIBC_HAS_SSP=y
 UCLIBC_BUILD_NOW=y
 # DOSTRIP is not set
+UCLIBC_HAS_BACKTRACE=y

Cheers,

Eelco


> On 26 Feb 2016, at 00:10, Arnout Vandecappelle <arnout at mind.be> wrote:
> 
> On 02/25/16 21:21, Eelco Chaudron wrote:
>> Hi Andrea,
>> 
>> I see that your patch has not yet been included in the master branch, and I was
>> wondering if it has anything to do with the failure to compile when using uclibc?
>> 
>> When I add your patch I get the following build error:
>> 
>>    [/home/echaudron/buildroot/output/host/usr/bin/arm-buildroot-linux-uclibcgnueabihf-gcc]
>>    core/uwsgi.o
>>    core/uwsgi.c: In function ‘uwsgi_backtrace’:
>>    core/uwsgi.c:1786:22: fatal error: execinfo.h: No such file or directory
>>     #include <execinfo.h>
>>                          ^
>>    compilation terminated.
>>    Makefile:4: recipe for target 'all' failed
>>    make[2]: *** [all] Error 1
> 
> uClibc doesn't have execinfo.h or backtrace(). This should either be made
> configurable, or the package should be disabled on uClibc.
> 
>> 
>> 
>> Before I try to make it work, have you (or anyone else) seen/fixed this?
> 
> Probably not, since there was no reaction on the patch. I think you can safely
> take over this patch, unless Andrea reacts within a day or so. If you take over,
> you'll have to keep Andrea's Signed-off-by in addition to your own.
> 
> But now that I'm here, I'll also give some review comments. Note that many of
> the things below are explained in the manual, so refer to it for details.
> 
>> 
>> //Eelco
>> 
>>> On 31 Dec 2015, at 17:02, Andrea Cappelli <a.cappelli at gmail.com <mailto:a.cappelli at gmail.com>
>>> <mailto:a.cappelli at gmail.com <mailto:a.cappelli at gmail.com>>> wrote:
>>> 
> 
> The subject line of the patch should be:
> 
> uwsgi: new package
> 
> It should also have been sent with --subject-prefix='PATCH v2'.
> 
> The body of the commit message should explain why the python infrastructure
> can't be used.
> 
>>> 
>>> Signed-off-by: Andrea Cappelli <a.cappelli at gmail.com <mailto:a.cappelli at gmail.com>
>>> <mailto:a.cappelli at gmail.com <mailto:a.cappelli at gmail.com>>>
> 
> There should be a patch changelog here:
> 
> ---
> Changes v2: add patch to specify -config script through environment vars
> 
>>> ---
>>> package/Config.in                                  |    1 +
>>> ...-environment-variables-for-config-scripts.patch |   85 ++++++++++++++++++++
>>> package/uwsgi/Config.in                            |    6 ++
>>> package/uwsgi/uwsgi.mk                             |   36 +++++++++
>>> 4 files changed, 128 insertions(+)
>>> create mode 100644
>>> package/uwsgi/0001-Added-environment-variables-for-config-scripts.patch
>>> create mode 100644 package/uwsgi/Config.in
>>> create mode 100644 package/uwsgi/uwsgi.mk
>>> 
>>> diff --git a/package/Config.in b/package/Config.in
>>> index 9145d15..e018355 100644
>>> --- a/package/Config.in
>>> +++ b/package/Config.in
>>> @@ -1457,6 +1457,7 @@ endif
>>> source "package/ulogd/Config.in"
>>> source "package/ushare/Config.in"
>>> source "package/ussp-push/Config.in"
>>> +source "package/uwsgi/Config.in"
>>> source "package/vde2/Config.in"
>>> source "package/vnstat/Config.in"
>>> source "package/vpnc/Config.in"
>>> diff --git
>>> a/package/uwsgi/0001-Added-environment-variables-for-config-scripts.patch
>>> b/package/uwsgi/0001-Added-environment-variables-for-config-scripts.patch
>>> new file mode 100644
>>> index 0000000..a5c79a5
>>> --- /dev/null
>>> +++ b/package/uwsgi/0001-Added-environment-variables-for-config-scripts.patch
>>> @@ -0,0 +1,85 @@
>>> +Added environment variables to choose right -config script during cross
>>> compilation (suggested by Thomas)
> 
> Since this patch comes out of git, just generate it with 'git format-patch -N'.
> 
> The commit message should be formatted as always:
> 
> short subject line
> 
> body text explaining the details
> 
> Signed-off-by: ...
> 
>>> +
>>> +diff --git a/uwsgiconfig.py b/uwsgiconfig.py
>>> +index 542d9e7..2695893 100644
>>> +--- a/uwsgiconfig.py
>>> ++++ b/uwsgiconfig.py
>>> +@@ -31,6 +31,9 @@ GCC = os.environ.get('CC', sysconfig.get_config_var('CC'))
>>> + if not GCC:
>>> +     GCC = 'gcc'
>>> +
>>> ++PCRE_CONFIG = os.environ.get('PCRE_CONFIG', 'pcre-config')
>>> ++XML2_CONFIG = os.environ.get('XML2_CONFIG', 'xml2-config')
>>> ++
>>> + def get_preprocessor():
>>> +     if 'clang' in GCC:
>>> +         return 'clang -xc core/clang_fake.c'
>>> +@@ -546,6 +549,11 @@ def build_uwsgi(uc, print_only=False, gcll=None):
>>> +             t.join()
>>> +
>>> +     print("*** uWSGI linking ***")
>>> ++    try:
>>> ++        if os.environ['LDFLAGS'] == '':
>>> ++            ldflags = []
> 
> This should just be:
> 
>    ldflags = os.environ.get('LDFLAGS')
> 
> (adapted so it is a list and supports the default ldflags).
> 
>>> ++    except:
>>> ++        pass
>>> +     ldline = "%s -o %s %s %s %s" % (GCC, bin_name, '
>>> '.join(uniq_warnings(ldflags)),
>>> +         ' '.join(map(add_o, gcc_list)), ' '.join(uniq_warnings(libs)))
>>> +     print(ldline)
>>> +@@ -1017,23 +1025,23 @@ class uConf(object):
>>> +         # re-enable after pcre fix
>>> +         if self.get('pcre'):
>>> +             if self.get('pcre') == 'auto':
>>> +-                pcreconf = spcall('pcre-config --libs')
>>> ++                pcreconf = spcall('%s --libs' % PCRE_CONFIG)
>>> +                 if pcreconf:
>>> +                     self.libs.append(pcreconf)
>>> +-                    pcreconf = spcall("pcre-config --cflags")
>>> ++                    pcreconf = spcall("%s --cflags" % PCRE_CONFIG)
>>> +                     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('%s --libs' % PCRE_CONFIG)
>>> +                 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("%s --cflags" % PCRE_CONFIG)
>>> +                     self.cflags.append(pcreconf)
>>> +                     self.gcc_list.append('core/regexp')
>>> +                     self.cflags.append("-DUWSGI_PCRE")
>>> +@@ -1248,10 +1256,10 @@ class uConf(object):
>>> +
>>> +         if self.get('xml'):
>>> +             if self.get('xml') == 'auto':
>>> +-                xmlconf = spcall('xml2-config --libs')
>>> ++                xmlconf = spcall('%s --libs' % XML2_CONFIG)
>>> +                 if xmlconf:
>>> +                     self.libs.append(xmlconf)
>>> +-                    xmlconf = spcall("xml2-config --cflags")
>>> ++                    xmlconf = spcall("%s --cflags" % XML2_CONFIG)
>>> +                     self.cflags.append(xmlconf)
>>> +                     self.cflags.append("-DUWSGI_XML -DUWSGI_XML_LIBXML2")
>>> +                     self.gcc_list.append('core/xmlconf')
>>> +@@ -1262,13 +1270,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('%s --libs' % XML2_CONFIG)
>>> +                 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("%s --cflags" % XML2_CONFIG)
>>> +                     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)
>>> diff --git a/package/uwsgi/Config.in b/package/uwsgi/Config.in
>>> new file mode 100644
>>> index 0000000..6537d1a
>>> --- /dev/null
>>> +++ b/package/uwsgi/Config.in
>>> @@ -0,0 +1,6 @@
>>> +config BR2_PACKAGE_UWSGI
>>> +bool "uwsgi"
> 
> This should be indented with a tab.
> 
>>> +    select BR2_PACKAGE_LIBXML2
>>> +help
> 
> Here as well.
> 
>>> +        The uWSGI project aims at developing a full stack for building
> 
> Here a tab + 2 spaces and wrap at 72 columns (where the tab counts for 8).
> 
>>> hosting services.
> 
> Empty line needed here.
> 
>>> +        https://uwsgi-docs.readthedocs.org/en/latest/ <https://uwsgi-docs.readthedocs.org/en/latest/>
>>> \ No newline at end of file
> 
> And a newline at the end.
> 
>>> diff --git a/package/uwsgi/uwsgi.mk b/package/uwsgi/uwsgi.mk
>>> new file mode 100644
>>> index 0000000..2d1f11a
>>> --- /dev/null
>>> +++ b/package/uwsgi/uwsgi.mk
>>> @@ -0,0 +1,36 @@
>>> +################################################################################
>>> +#
>>> +# uwsgi
>>> +#
>>> +################################################################################
>>> +
>>> +UWSGI_VERSION = 2.0.12
>>> +UWSGI_SOURCE = uwsgi-$(UWSGI_VERSION).tar.gz
>>> +UWSGI_SITE = https://pypi.python.org/packages/source/u/uWSGI
>>> +UWSGI_LICENSE = GPLv2
>>> +UWSGI_LICENSE_FILES = LICENSE
>>> +
>>> +UWSGI_DEPENDENCIES = libxml2 host-python
>>> +
>>> +UWSGI_ENV = \
>>> +PATH=$(BR_PATH) \
>>> +CC="$(TARGET_CC)" \
>>> +CFLAGS="$(TARGET_CFLAGS)" \
>>> +LDFLAGS="$(TARGET_LDFLAGS)" \
> 
> $(TARGET_CONF_OPTS) should be used here.
> 
>>> +LDSHARED="$(TARGET_CROSS)gcc -shared" \
>>> +PYTHONPATH="$(if $(BR2_PACKAGE_PYTHON3),$(PYTHON3_PATH),$(PYTHON_PATH))" \
>>> +_python_sysroot=$(STAGING_DIR) \
>>> +_python_prefix=/usr \
>>> +_python_exec_prefix=/usr \
>>> +PCRE_CONFIG="$(STAGING_DIR)/usr/bin/pcre-config" \
>>> +XML2_CONFIG="$(STAGING_DIR)/usr/bin/xml2-config"
>>> +
>>> +define UWSGI_BUILD_CMDS
>>> +$(MAKE) $(UWSGI_ENV) -C $(@D)
>>> +endef
>>> +
>>> +define UWSGI_INSTALL_TARGET_CMDS
>>> +$(INSTALL) -D -m 755 $(@D)/uwsgi  $(TARGET_DIR)/usr/bin/uwsgi
>>> +endef
>>> +
>>> +$(eval $(generic-package))
> 
> In addition, there should be a hash file.
> 
> 
> I've marked this patch as 'Changes Requested' in patchwork, so we will forget
> about it unless a v3 is sent.
> 
> Regards,
> Arnout
> 
>>> -- 
>>> 1.7.9.5
>>> 
>>> _______________________________________________
>>> buildroot mailing list
>>> buildroot at busybox.net <mailto:buildroot at busybox.net> <mailto:buildroot at busybox.net <mailto:buildroot at busybox.net>>
>>> http://lists.busybox.net/mailman/listinfo/buildroot <http://lists.busybox.net/mailman/listinfo/buildroot>
>> 
>> 
>> 
>> _______________________________________________
>> buildroot mailing list
>> buildroot at busybox.net <mailto:buildroot at busybox.net>
>> http://lists.busybox.net/mailman/listinfo/buildroot <http://lists.busybox.net/mailman/listinfo/buildroot>
>> 
> 
> 
> -- 
> Arnout Vandecappelle                          arnout at mind be
> Senior Embedded Software Architect            +32-16-286500
> Essensium/Mind                                http://www.mind.be <http://www.mind.be/>
> G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
> LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle <http://www.linkedin.com/in/arnoutvandecappelle>
> GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net <mailto:buildroot at busybox.net>
> http://lists.busybox.net/mailman/listinfo/buildroot <http://lists.busybox.net/mailman/listinfo/buildroot>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20160226/9ec24a33/attachment-0002.html>


More information about the buildroot mailing list