During bitbaking core-image-ros-world for v0.2-rc1 release testing,
compiling libpoco for the qemuarm64 machine failed with:
In file included from [...]/poco-poco-1.5.3-release/Foundation/src/diy-fp.h:31:0,
from [...]/poco-poco-1.5.3-release/Foundation/src/diy-fp.cc:29,
from [...]/poco-poco-1.5.3-release/Foundation/src/NumericString.cpp:23:
[...]/poco-poco-1.5.3-release/Foundation/src/utils.h:72:2: error: #error Target architecture was not detected as supported by Double-Conversion.
This issue has been already been reported in the libpoco github issue
tracker [1] and has been resolved with a simple patch [2] in the libpoco
repository and libpoco releases since 1.5.4. Hence, this commit simply
adds this patch to the current libpoco recipe.
To address the libpoco issue, I also considered to update libpoco to
version 1.6.0. However, this was not possible as version 1.6.0 requires
CMake >= 3.0.0 and this would require updating cmake in
OpenEmbedded-Core, which has major impact on all layers. Also, updating
libpoco to 1.5.4 lead to a problem with the OpenEmbedded-Core-provided
pcre 1.5.36 and the POCO_UNBUNDLED setting during compilation:
In file included from [...]/poco-poco-1.5.4-release/Foundation/src/RegularExpression.cpp:21:0:
[...]/usr/include/pcre.h:325:26: error: conflicting declaration 'typedef struct real_pcre pcre'
In file included from [...]/poco-poco-1.5.4-release/Foundation/src/RegularExpression.cpp:17:0:
[...]/poco-poco-1.5.4-release/Foundation/include/Poco/RegularExpression.h:37:34: note: previous declaration as 'typedef struct real_pcre8_or_16 pcre'
This issue is probably caused by the commit 'PCRE 8.35.0 Update' [3],
which defines types from pcre 8.35 that are incompatible to pcre 8.36.
[1] https://github.com/pocoproject/poco/issues/508
[2] 9258e482d7.patch
[3] 010f7a5370.patch
Signed-off-by: Lukas Bulwahn <lukas.bulwahn@oss.bmw-carit.de>
Poco comes with bundled versions of SQLite3, zlib, expat, etc.
Adding the ``-DPOCO_UNBUNDLED=On`` option to CMake makes it use the ones provided by OE.
When compiling pcl-ros, bitbake aborts because for compiling the
Crypto library in libpoco, it needs the openssl headers.
The condensed error output is
** Compiling src/CipherKeyImpl.cpp (debug, shared)
arm-oe-linux-gnueabi-g++ -march=armv5te -marm -mthumb-interwork
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed
--sysroot=/home/lukas/oe-core/build/tmp-eglibc/sysroots/qemuarm
-I ... -DPOCO_BUILD_HOST=host -DPOCO_NO_WSTRING -DPOCO_UNBUNDLED
-D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_REENTRANT -D_THREAD_SAFE
-DPOCO_NO_FPENVIRONMENT -g -D_DEBUG -fPIC -c src/CipherKeyImpl.cpp
-o ...
In file included from include/Poco/Crypto/CipherKeyImpl.h:44:0,
from include/Poco/Crypto/CipherKey.h:44,
from src/CipherKey.cpp:37:
include/Poco/Crypto/OpenSSLInitializer.h:45:33: fatal error: openssl/opensslconf.h: No such file or directory
#include <openssl/opensslconf.h>
^
compilation terminated.
In file included from include/Poco/Crypto/CipherKeyImpl.h:44:0,
from src/CipherKeyImpl.cpp:37:
include/Poco/Crypto/OpenSSLInitializer.h:45:33: fatal error: openssl/opensslconf.h: No such file or directory
#include <openssl/opensslconf.h>
^
compilation terminated.
make[1]: *** [.../tmp-eglibc/work/armv5te-oe-linux-gnueabi/libpoco/1.4.6p1-r0/poco-1.4.6p1-all/Crypto/obj/Linux/armv5te/debug_shared/CipherKey.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make -C /home/lukas/oe-core/build/tmp-eglibc/work/armv5te-oe-linux-gnueabi/libpoco/1.4.6p1-r0/poco-1.4.6p1-all/Util
make[1]: *** [.../tmp-eglibc/work/armv5te-oe-linux-gnueabi/libpoco/1.4.6p1-r0/poco-1.4.6p1-all/Crypto/obj/Linux/armv5te/debug_shared/CipherKeyImpl.o] Error 1
make[1]: Entering directory `/home/lukas/oe-core/build/tmp-eglibc/work/armv5te-oe-linux-gnueabi/libpoco/1.4.6p1-r0/poco-1.4.6p1-all/Util'
This commit formats the libpoco recipe to follow the common
OpenEmbedded style more closely and removes a comment that points
to warnings that do not occur with the current recipe.