Source: ring Version: 20180816.2.e26b79f~ds1-3 User: helm...@debian.org Usertags: rebootstrap
ring fails to cross build from source. Actually it simply performs a native build and breaks when expected dependencies are unavailable. The attached patch fixes quite a bit of that: * daemon/contrib/bootstrap recognizes the standard flags --build and --host. However debian/rules does not yet pass them. * The Makefile in daemon/contrib somehow insists that pkg-config cannot be used during cross building and considers all dependencies as needed. That's stupid. * The Makefile in daemon/contrib somehow thinks that the $(CROSS_COMPILE) prefix only applies to pkg-config when building for windows. The prefix is generally useful however. It also insists that cross building requires static linking, which is similarly stupid. * debian/rules runs cmake and configure manually. Those manual invocations lack any cross parameters. Using dh_auto_configure simplifies them and makes cross compilation just work. After applying it, ring still fails to cross build, because it fails finding symbols from pjproject while linking. The relevant libraries show up on the linker invocation. I have no clue how to fix that: | ../doltlibtool --tag=CXX --mode=link mips-linux-gnu-g++ -I../src -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/dbus-c++-1 -I/usr/include/dbus-1.0 -I/usr/lib/mips-linux-gnu/dbus-1.0/include -I../src/dring -DTOP_BUILDDIR=\"$(cd ".."; pwd)\" -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -DPJ_AUTOCONF=1 -I/<<PKGBUILDDIR>>/daemon/contrib/mips-linux-gnu/include -DNDEBUG=1 -Wl,-z,relro -Wl,-z,now -Wl,-Bsymbolic -ldl -L/<<PKGBUILDDIR>>/daemon/contrib/mips-linux-gnu/lib -L/usr/lib/mips-linux-gnu -ljsoncpp -o dring dring-main.o dbus/libclient_dbus.la -L/usr/lib/mips-linux-gnu -ldbus-c++-1 -ldbus-1 ../src/libring.la -ldl -lnatpmp -lrestbed -lssl -lcrypto | libtool: link: mips-linux-gnu-g++ -I../src -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/include/dbus-c++-1 -I/usr/include/dbus-1.0 -I/usr/lib/mips-linux-gnu/dbus-1.0/include -I../src/dring "-DTOP_BUILDDIR=\"/<<PKGBUILDDIR>>/daemon\"" -g -O2 "-fdebug-prefix-map=/<<PKGBUILDDIR>>=." -fstack-protector-strong -Wformat -Werror=format-security -DPJ_AUTOCONF=1 "-I/<<PKGBUILDDIR>>/daemon/contrib/mips-linux-gnu/include" -DNDEBUG=1 -Wl,-z -Wl,relro -Wl,-z -Wl,now -Wl,-Bsymbolic -o dring dring-main.o -L/<<PKGBUILDDIR>>/daemon/contrib/mips-linux-gnu/lib -L/usr/lib/mips-linux-gnu dbus/.libs/libclient_dbus.a -ldbus-c++-1 -ldbus-1 ../src/.libs/libring.a -lpjsua2-mips-unknown-linux-gnu -lpjsua-mips-unknown-linux-gnu -lpjsip-ua-mips-unknown-linux-gnu -lpjsip-simple-mips-unknown-linux-gnu -lpjsip-mips-unknown-linux-gnu -lpjmedia-codec-mips-unknown-linux-gnu -lpjmedia-videodev-mips-unknown-linux-gnu -lpjmedia-audiodev-mips-unknown-linux-gnu -lpjmedia-mips-unknown-linux-gnu -lpjnath-mips-unknown-linux-gnu -lpjlib-util-mips-unknown-linux-gnu -lsrtp-mips-unknown-linux-gnu -lpj-mips-unknown-linux-gnu -lopus -luuid -lrt -lpthread -lasound -lpulse -lyaml-cpp -lupnp -lthreadutil -lixml -lopendht -lnettle -lgnutls -largon2 -lsecp256k1 -lz -lpcre -lavfilter -lswresample -lspeexdsp -ljsoncpp -lavcodec -lavformat -lavdevice -lswscale -lavutil -ludev -lX11 -lvdpau -lva-drm -lva-x11 -lva -ldl -lnatpmp -lrestbed -lssl -lcrypto -pthread | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-sipcall.o): in function `ring::SIPCall::getDetails[abi:cxx11]() const': | ./daemon/src/sip/sipcall.cpp:1125: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/sipcall.cpp:1127: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-sipaccount.o): in function `ring::SIPAccount::trimCiphers()': | ./daemon/src/sip/sipaccount.cpp:1154: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/sipaccount.cpp:1154: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-sipaccount.o): in function `ring::SIPAccount::initTlsConfiguration()': | ./daemon/src/sip/sipaccount.cpp:1170: undefined reference to `pj_ssl_cipher_get_availables' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/sipaccount.cpp:1170: undefined reference to `pj_ssl_cipher_get_availables' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/sipaccount.cpp:1181: undefined reference to `pj_ssl_cipher_id' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/sipaccount.cpp:1181: undefined reference to `pj_ssl_cipher_id' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-sipaccount.o): in function `ring::SIPAccount::getSupportedTlsCiphers[abi:cxx11]()': | ./daemon/src/sip/sipaccount.cpp:1506: undefined reference to `pj_ssl_cipher_get_availables' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/sipaccount.cpp:1512: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-sipaccount.o): in function `ring::SIPAccount::getSupportedTlsCiphers[abi:cxx11]()': | /usr/mips-linux-gnu/include/c++/8/bits/stl_algobase.h:741: undefined reference to `pj_ssl_cipher_get_availables' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-sipaccount.o): in function `ring::SIPAccount::getSupportedTlsCiphers[abi:cxx11]()': | ./daemon/src/sip/sipaccount.cpp:1511: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-sipaccount.o): in function `ring::SIPAccount::getVolatileAccountDetails[abi:cxx11]() const': | ./daemon/src/sip/sipaccount.cpp:649: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/sipaccount.cpp:651: undefined reference to `pj_ssl_cipher_name' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ../src/.libs/libring.a(libsiplink_la-siptransport.o): in function `ring::SipTransportBroker::getTlsListener(ring::SipTransportDescr const&, pjsip_tls_setting const*)': | ./daemon/src/sip/siptransport.cpp:389: undefined reference to `pjsip_tls_transport_start2' | /usr/lib/gcc-cross/mips-linux-gnu/8/../../../../mips-linux-gnu/bin/ld: ./daemon/src/sip/siptransport.cpp:389: undefined reference to `pjsip_tls_transport_start2' | collect2: error: ld returned 1 exit status | make[5]: *** [Makefile:634: dring] Error 1 | make[5]: Leaving directory '/<<PKGBUILDDIR>>/daemon/bin' | make[4]: *** [Makefile:754: all-recursive] Error 1 | make[4]: Leaving directory '/<<PKGBUILDDIR>>/daemon/bin' | make[3]: *** [Makefile:543: all-recursive] Error 1 | make[3]: Leaving directory '/<<PKGBUILDDIR>>/daemon' | make[2]: *** [Makefile:474: all] Error 2 | make[2]: Leaving directory '/<<PKGBUILDDIR>>/daemon' | make[1]: *** [debian/rules:89: override_dh_auto_build] Error 2 | make[1]: Leaving directory '/<<PKGBUILDDIR>>' | make: *** [debian/rules:17: build-arch] Error 2 | dpkg-buildpackage: error: debian/rules build-arch subprocess returned exit status 2 Nevertheless, the attached patch makes the build go a lot further. Please consider applying as much of it as is sensible. Please discuss the portions you disagree with and please close this bug if you apply substantial aspects of it (even though ring continues to fail to cross build). Helmut
diff --minimal -Nru ring-20180816.2.e26b79f~ds1/debian/changelog ring-20180816.2.e26b79f~ds1/debian/changelog --- ring-20180816.2.e26b79f~ds1/debian/changelog 2018-08-24 01:43:53.000000000 +0200 +++ ring-20180816.2.e26b79f~ds1/debian/changelog 2018-10-28 19:06:03.000000000 +0100 @@ -1,3 +1,14 @@ +ring (20180816.2.e26b79f~ds1-3.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Improve cross building. (Closes: #-1) + + cross.patch: Use the host pkg-config. + + cross.patch: Trust pkg-config even when cross compiling. + + Tell daemon/contrib/bootstrap that we cross. + + Let dh_auto_configure pass cross tools to configure and cmake. + + -- Helmut Grohne <hel...@subdivi.de> Sun, 28 Oct 2018 19:06:03 +0100 + ring (20180816.2.e26b79f~ds1-3) unstable; urgency=medium * New upstream version. diff --minimal -Nru ring-20180816.2.e26b79f~ds1/debian/patches/cross.patch ring-20180816.2.e26b79f~ds1/debian/patches/cross.patch --- ring-20180816.2.e26b79f~ds1/debian/patches/cross.patch 1970-01-01 01:00:00.000000000 +0100 +++ ring-20180816.2.e26b79f~ds1/debian/patches/cross.patch 2018-10-28 19:06:03.000000000 +0100 @@ -0,0 +1,23 @@ +--- ring-20180816.2.e26b79f~ds1.orig/daemon/contrib/src/main.mak ++++ ring-20180816.2.e26b79f~ds1/daemon/contrib/src/main.mak +@@ -62,7 +62,7 @@ + ifdef HAVE_WIN32 + PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config --static + else +-PKG_CONFIG ?= pkg-config --static ++PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config + endif + PKG_CONFIG_PATH_CUSTOM = $(PREFIX)/lib/pkgconfig + export PKG_CONFIG_PATH_CUSTOM +@@ -73,11 +73,7 @@ + PKG_CONFIG_PATH := $(PREFIX)/lib/pkgconfig:$(PREFIX)/lib/$(HOST)/pkgconfig:$(PKG_CONFIG_PATH) + export PKG_CONFIG_PATH + +-ifdef HAVE_CROSS_COMPILE +-need_pkg = 1 +-else + need_pkg = $(shell $(PKG_CONFIG) $(1) || echo 1) +-endif + # + # Default values for tools + # diff --minimal -Nru ring-20180816.2.e26b79f~ds1/debian/patches/series ring-20180816.2.e26b79f~ds1/debian/patches/series --- ring-20180816.2.e26b79f~ds1/debian/patches/series 2018-08-24 01:43:53.000000000 +0200 +++ ring-20180816.2.e26b79f~ds1/debian/patches/series 2018-10-28 19:06:03.000000000 +0100 @@ -1,3 +1,4 @@ dont-build-gnutls.patch namedirectory-old-restbed.patch jsoncpp-rename.patch +cross.patch diff --minimal -Nru ring-20180816.2.e26b79f~ds1/debian/rules ring-20180816.2.e26b79f~ds1/debian/rules --- ring-20180816.2.e26b79f~ds1/debian/rules 2018-08-24 01:43:53.000000000 +0200 +++ ring-20180816.2.e26b79f~ds1/debian/rules 2018-10-28 19:06:03.000000000 +0100 @@ -4,6 +4,7 @@ # Hardening export DEB_BUILD_MAINT_OPTIONS = hardening=+all DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/buildflags.mk # Number of CPUS @@ -34,6 +35,7 @@ mkdir -p daemon/contrib/native cd daemon/contrib/native && \ ../bootstrap \ + $(if $(filter $(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)),,--build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)) \ --disable-downloads \ --no-checksums \ --disable-ogg \ @@ -61,35 +63,22 @@ --disable-natpmp && \ make list && \ make -j$(NO_CPUS) V=1 - cd daemon && \ - ./autogen.sh && \ - ./configure \ - --prefix=/usr \ - --disable-shared + cd daemon && ./autogen.sh + dh_auto_configure --sourcedirectory=daemon -- --disable-shared ############################# ## libringclient configure ## ############################# - cd lrc && \ - mkdir build && \ - cd build && \ - cmake \ + dh_auto_configure --sourcedirectory=lrc --builddirectory=lrc/build -- \ -DRING_BUILD_DIR=$(CURDIR)/daemon/src \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_BUILD_TYPE=Debug \ - .. + -DCMAKE_BUILD_TYPE=Debug ############################ ## gnome client configure ## ############################ - cd client-gnome && \ - mkdir build && \ - cd build && \ - cmake \ - -DCMAKE_INSTALL_PREFIX=/usr \ + dh_auto_configure --sourcedirectory=client-gnome --builddirectory=client-gnome/build -- \ -DLibRingClient_PROJECT_DIR=/$(CURDIR)/lrc \ - -DGSETTINGS_LOCALCOMPILE=OFF \ - .. + -DGSETTINGS_LOCALCOMPILE=OFF dh_auto_configure