kumquat-buildroot/package/libupnpp/libupnpp.mk

27 lines
848 B
Makefile
Raw Normal View History

################################################################################
#
# libupnpp
#
################################################################################
LIBUPNPP_VERSION = 0.15.0
LIBUPNPP_SITE = http://www.lesbonscomptes.com/upmpdcli/downloads
LIBUPNPP_LICENSE = GPLv2+
LIBUPNPP_LICENSE_FILES = COPYING
LIBUPNPP_INSTALL_STAGING = YES
LIBUPNPP_DEPENDENCIES = expat libcurl libupnp
# touching configure.ac in:
# 0001-Check-for-std-future.patch
# 0002-Add-pkg-config-file.patch
package/libupnpp: add patch to fix build issue Bumping libupnpp to version 0.15.0 introduced a build error for some architectures: ``` ./libupnpp/workqueue.h:308:29: error: field 'res' has incomplete type std::future<void *> res; ^ ./libupnpp/workqueue.h: In member function 'bool WorkQueue<T>::start(int, void* (*)(void*), void*)': ./libupnpp/workqueue.h:81:25: error: invalid use of incomplete type 'class std::packaged_task<void*(void*)>' w.res = task.get_future(); ``` The problem is that `std::future` is not available for all architectures, e.g. it is missing for ARMv5 (soft-float). libstdc++ enables `std::future` only if `ATOMIC_INT_LOCK_FREE > 1`, which according the the libstdc++ documentation means that operations on atomic ints are guaranteed to be lock-free. This check is not true for some target, e.g. the toolchain for the ARMv5 target defines: ``` $ echo | /usr/bin/arm-linux-g++ -dM -E - | grep ATOMIC_INT_LOCK_FREE #define __GCC_ATOMIC_INT_LOCK_FREE 1 ``` We add a patch from upstream which detects if `std::future` is available and opts-out the functionality for unsupported targets. Fixes: http://autobuild.buildroot.net/results/f8eb38ef79160e1f646dae0be19f27fae82a58bc http://autobuild.buildroot.net/results/158e0ceeff009146b78a0d2bb278c76479bafc34 http://autobuild.buildroot.net/results/1760cf53c77e16bb2b5bc795bd0ce5eb65f258f2 http://autobuild.buildroot.net/results/5b73e52495aa1bbb2c704492237da784b9d74bc2 http://autobuild.buildroot.net/results/6d922a1bbace024fcf040beb49bbb119036865ef http://autobuild.buildroot.net/results/bebb8983e7579ee4b4bcf18f037c7797ab86f8db http://autobuild.buildroot.net/results/0f1a5832ced2a6ec2e18f9f14197446fda6af692 http://autobuild.buildroot.net/results/94a9cc349f23a47246b06619a019bcb917493415 http://autobuild.buildroot.net/results/19fba094098af5c1ce1e1371e5e88393c4a6ac9c http://autobuild.buildroot.net/results/578935b5c04005d1f096059387d16911f953ec6f http://autobuild.buildroot.net/results/2ad698f1665b7b886141672181cb76ec3c40a743 and more... Note, that we enable autoreconf as the patch touches configure.ac. Signed-off-by: Jörg Krause <joerg.krause@embedded.rocks> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-09-13 15:35:02 +02:00
LIBUPNPP_AUTORECONF = YES
# configure script fails to link against the dependencies of libupnp
# and libcurl causing detection to fail when statically linking
ifeq ($(BR2_STATIC_LIBS),y)
LIBUPNPP_DEPENDENCIES += host-pkgconf
LIBUPNPP_CONF_ENV += \
packages: use backtick instead of $(shell ...) make function It is often difficult to know exactly when make will expand the variable, and usually it can only be expanded after the dependencies have been built (e.g. pkg-config or the .pc file). Using a backtick instead makes it very clear that it will be expanded only while executing the command. This change is useful for two cases: 1. The per-package staging (and host) directory will be created as part of the configure step, so any $(shell ...) variable that is used in the configure step will fail because the directory doesn't exist yet. 2. 'make printvars' evaluates the variables it prints. It will therefore trigger a lot of errors from missing .pc files and others. The backticks, on the other hand, are not expanded, so with this change the output of 'make printvars' becomes clean again. This commit contains only the easy changes: replace $(shell ...) with `...`, and also replace ' with " where needed. Follow-up commits will tackle the more complicated cases that need additional explanation. After this change, the following instances of $(shell ...) will remain: - All assignments that use := - All variables that are used in make conditionals (which don't expand the backticks). - All variables that only refer to system executables and make variables that don't change. - The calls to check-host-* in dependencies.mk, because it is eval'ed. [Original patch by Fabio Porcedda, but extended quite a bit by Arnout.] Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2015-07-12 16:35:26 +02:00
LIBS="`$(PKG_CONFIG_HOST_BINARY) --libs libupnp libcurl`"
endif
$(eval $(autotools-package))