diff mbox

package/shairport-sync: fix static builds

Message ID 1417268097-29884-1-git-send-email-yann.morin.1998@free.fr
State Changes Requested
Headers show

Commit Message

Yann E. MORIN Nov. 29, 2014, 1:34 p.m. UTC
Because shairport-sync uses AC_CHECK_LIB to find some of the needed
libraries (opensl, alsa, popt...), it fails to bring in the dependencies
of those libraries; for example, -lssl requires -lz.

When doing a dynamically-linked build, those dependent libraries are
pulled in thansk to the DT_NEEDED ELF tags, but those are not available
in static libraries.

Use PKG_CHECK_MODULES instead of AC_CHECK_LIB, and emulate the results
of AC_CJECK_LIB (i.e. set the HAVE_LIBxxx and the LIBS variable
appropriately) to minimise the amount of code touched.

This should fix:
    http://autobuild.buildroot.net/results/1a5/1a56dbff3583bed0d693508dfc16859086846ecd/
    http://autobuild.buildroot.net/results/6d5/6d5a8157592f7a2c9469bf71b0453796ef982ab1/

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Jörg Krause <jkrause@posteo.de>

---
Note: I was not able to rproduce the build failures: the popt check was
sucessfull for me, but failed in the following checks for ssl and alsa.
The fix to popt is just a generalisation of the fix to the other two
libraries.
---
 .../0001-fix-static-link-openssl.patch             | 37 ++++++++++++++++++++++
 .../shairport-sync/0002-fix-static-link-alsa.patch | 23 ++++++++++++++
 .../shairport-sync/0003-fix-static-link-popt.patch | 21 ++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 package/shairport-sync/0001-fix-static-link-openssl.patch
 create mode 100644 package/shairport-sync/0002-fix-static-link-alsa.patch
 create mode 100644 package/shairport-sync/0003-fix-static-link-popt.patch

Comments

Baruch Siach Nov. 29, 2014, 6:10 p.m. UTC | #1
Hi Yann,

On Sat, Nov 29, 2014 at 02:34:57PM +0100, Yann E. MORIN wrote:
> Because shairport-sync uses AC_CHECK_LIB to find some of the needed
> libraries (opensl, alsa, popt...), it fails to bring in the dependencies
> of those libraries; for example, -lssl requires -lz.
> 
> When doing a dynamically-linked build, those dependent libraries are
> pulled in thansk to the DT_NEEDED ELF tags, but those are not available
> in static libraries.
> 
> Use PKG_CHECK_MODULES instead of AC_CHECK_LIB, and emulate the results
> of AC_CJECK_LIB (i.e. set the HAVE_LIBxxx and the LIBS variable
> appropriately) to minimise the amount of code touched.
> 
> This should fix:
>     http://autobuild.buildroot.net/results/1a5/1a56dbff3583bed0d693508dfc16859086846ecd/
>     http://autobuild.buildroot.net/results/6d5/6d5a8157592f7a2c9469bf71b0453796ef982ab1/
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Jörg Krause <jkrause@posteo.de>

SHAIRPORT_SYNC_DEPENDENCIES should now include host-pkgconf, I believe.

baruch
Yann E. MORIN Nov. 29, 2014, 6:15 p.m. UTC | #2
Baruch, All,

On 2014-11-29 20:10 +0200, Baruch Siach spake thusly:
> On Sat, Nov 29, 2014 at 02:34:57PM +0100, Yann E. MORIN wrote:
> > Because shairport-sync uses AC_CHECK_LIB to find some of the needed
> > libraries (opensl, alsa, popt...), it fails to bring in the dependencies
> > of those libraries; for example, -lssl requires -lz.
> > 
> > When doing a dynamically-linked build, those dependent libraries are
> > pulled in thansk to the DT_NEEDED ELF tags, but those are not available
> > in static libraries.
> > 
> > Use PKG_CHECK_MODULES instead of AC_CHECK_LIB, and emulate the results
> > of AC_CJECK_LIB (i.e. set the HAVE_LIBxxx and the LIBS variable
> > appropriately) to minimise the amount of code touched.
> > 
> > This should fix:
> >     http://autobuild.buildroot.net/results/1a5/1a56dbff3583bed0d693508dfc16859086846ecd/
> >     http://autobuild.buildroot.net/results/6d5/6d5a8157592f7a2c9469bf71b0453796ef982ab1/
> > 
> > Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> > Cc: Jörg Krause <jkrause@posteo.de>
> 
> SHAIRPORT_SYNC_DEPENDENCIES should now include host-pkgconf, I believe.

Yup, good catch. Will fix. Thanks! :-)

Regards,
Yann E. MORIN.
Yann E. MORIN Nov. 30, 2014, 11:35 a.m. UTC | #3
All,

On 2014-11-29 14:34 +0100, Yann E. MORIN spake thusly:
> Because shairport-sync uses AC_CHECK_LIB to find some of the needed
> libraries (opensl, alsa, popt...), it fails to bring in the dependencies
> of those libraries; for example, -lssl requires -lz.
> 
> When doing a dynamically-linked build, those dependent libraries are
> pulled in thansk to the DT_NEEDED ELF tags, but those are not available
> in static libraries.
> 
> Use PKG_CHECK_MODULES instead of AC_CHECK_LIB, and emulate the results
> of AC_CJECK_LIB (i.e. set the HAVE_LIBxxx and the LIBS variable
> appropriately) to minimise the amount of code touched.
> 
> This should fix:
>     http://autobuild.buildroot.net/results/1a5/1a56dbff3583bed0d693508dfc16859086846ecd/
>     http://autobuild.buildroot.net/results/6d5/6d5a8157592f7a2c9469bf71b0453796ef982ab1/
> 
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Jörg Krause <jkrause@posteo.de>
> 
> ---
> Note: I was not able to rproduce the build failures: the popt check was
> sucessfull for me, but failed in the following checks for ssl and alsa.
> The fix to popt is just a generalisation of the fix to the other two
> libraries.
> ---
>  .../0001-fix-static-link-openssl.patch             | 37 ++++++++++++++++++++++
>  .../shairport-sync/0002-fix-static-link-alsa.patch | 23 ++++++++++++++
>  .../shairport-sync/0003-fix-static-link-popt.patch | 21 ++++++++++++

All three patches applied upstream:
    https://github.com/mikebrady/shairport-sync/commit/2a430ec434674ed8c1959698c061662bb7abc1a1
    https://github.com/mikebrady/shairport-sync/commit/e5a74a3ff08134a2b11f07bd850659d7816fb03d
    https://github.com/mikebrady/shairport-sync/commit/1f759e57e8c0682613eaaf89a46fdf6db4c6b5cd

There is now a new release with those three patches, but that would make
us bump pass a few releases, from 2.1.8 to 2.1.13, with some new
features along the lines.

So, for the release, I suggest we just apply those three patches, and
I'll send a version bump after the release has been cut.

Is that OK?

Regards,
Yann E. MORIN.
Jörg Krause Nov. 30, 2014, 12:09 p.m. UTC | #4
Yann,

On So, 2014-11-30 at 12:35 +0100, Yann E. MORIN wrote:
> 
> All three patches applied upstream:
>     https://github.com/mikebrady/shairport-sync/commit/2a430ec434674ed8c1959698c061662bb7abc1a1
>     https://github.com/mikebrady/shairport-sync/commit/e5a74a3ff08134a2b11f07bd850659d7816fb03d
>     https://github.com/mikebrady/shairport-sync/commit/1f759e57e8c0682613eaaf89a46fdf6db4c6b5cd
> 
> There is now a new release with those three patches, but that would make
> us bump pass a few releases, from 2.1.8 to 2.1.13, with some new
> features along the lines.
> 
> So, for the release, I suggest we just apply those three patches, and
> I'll send a version bump after the release has been cut.
> 
> Is that OK?

First, many thanks for your work! I had a look at the autobuild errors,
but it was beyond my knowledge.

Version 2.1.9 to 2.1.13 include several bugfixes, so I would suggest to
update the package. I can make a run-time test tomorrow.
Yann E. MORIN Nov. 30, 2014, 1:48 p.m. UTC | #5
Jörg, All,

On 2014-11-30 13:09 +0100, Jörg Krause spake thusly:
> On So, 2014-11-30 at 12:35 +0100, Yann E. MORIN wrote:
> > 
> > All three patches applied upstream:
> >     https://github.com/mikebrady/shairport-sync/commit/2a430ec434674ed8c1959698c061662bb7abc1a1
> >     https://github.com/mikebrady/shairport-sync/commit/e5a74a3ff08134a2b11f07bd850659d7816fb03d
> >     https://github.com/mikebrady/shairport-sync/commit/1f759e57e8c0682613eaaf89a46fdf6db4c6b5cd
> > 
> > There is now a new release with those three patches, but that would make
> > us bump pass a few releases, from 2.1.8 to 2.1.13, with some new
> > features along the lines.
> > 
> > So, for the release, I suggest we just apply those three patches, and
> > I'll send a version bump after the release has been cut.
> > 
> > Is that OK?
> 
> First, many thanks for your work! I had a look at the autobuild errors,
> but it was beyond my knowledge.
> 
> Version 2.1.9 to 2.1.13 include several bugfixes, so I would suggest to
> update the package. I can make a run-time test tomorrow.

We are too close to the (Buildroot!) release to do a version bump, which
is due today (last day of the month). And the new shairport-sync release
with those three patches included is not yet available (code has been
updated, but no tg or tarball is available yet).

I plan on doing a version bump right after both the Buildroot and
shairport-sync releases are out, though.

Regards,
Yann E. MORIN.
diff mbox

Patch

diff --git a/package/shairport-sync/0001-fix-static-link-openssl.patch b/package/shairport-sync/0001-fix-static-link-openssl.patch
new file mode 100644
index 0000000..80e199f
--- /dev/null
+++ b/package/shairport-sync/0001-fix-static-link-openssl.patch
@@ -0,0 +1,37 @@ 
+configure: fix static link with openssl
+
+Use pkg-config to find openssl libraries, that will return all the
+dependent libraries of openssl as well (e.g. -lz) that can not be
+deduced in case of a static link.
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+
+diff -durN shairport-sync-2.1.8.orig/configure.ac shairport-sync-2.1.8/configure.ac
+--- shairport-sync-2.1.8.orig/configure.ac	2014-10-25 18:03:13.000000000 +0200
++++ shairport-sync-2.1.8/configure.ac	2014-11-29 12:52:41.507981720 +0100
+@@ -21,6 +21,8 @@
+ AC_PROG_CC
+ AC_PROG_INSTALL
+ 
++PKG_PROG_PKG_CONFIG([0.9.0])
++
+ # Checks for libraries.
+ if test "x${with_os_type}" = xlinux; then
+  AC_CHECK_LIB([rt],[clock_gettime], , AC_MSG_ERROR(librt needed))
+@@ -52,8 +56,14 @@
+     AC_MSG_ERROR(choose either "openssl" or "polarssl" encryption)
+   fi
+   if test "x${with_ssl}" = xopenssl ; then
+-    AC_CHECK_LIB([crypto], [MD5_Init], , AC_MSG_ERROR(libcrypto selected, but the library cannot be found!))
+-    AC_CHECK_LIB([ssl],[SSL_library_init], , AC_MSG_ERROR(openssl selected but the library cannot be found!))
++    PKG_CHECK_MODULES(
++        [CRYPTO], [libcrypto],
++        [LIBS="${CRYPTO_LIBS} ${LIBS}"
++         AC_DEFINE([HAVE_LIBCRYPTO],[1],[Define to 1 if you have libcrypto])])
++    PKG_CHECK_MODULES(
++        [SSL], [libssl],
++        [LIBS="${SSL_LIBS} ${LIBS}"
++         AC_DEFINE([HAVE_LIBSSL],[1],[Define to 1 if you have libssl])])
+   elif test "x${with_ssl}" = xpolarssl ; then
+     AC_CHECK_LIB([polarssl],[ssl_init], , AC_MSG_ERROR(PolarSSL selected but the library cannot be found!))
+   else
diff --git a/package/shairport-sync/0002-fix-static-link-alsa.patch b/package/shairport-sync/0002-fix-static-link-alsa.patch
new file mode 100644
index 0000000..08f593d
--- /dev/null
+++ b/package/shairport-sync/0002-fix-static-link-alsa.patch
@@ -0,0 +1,23 @@ 
+configure: fix static link with alsa
+
+Use pkg-config to find the alsa library, that will return all the
+dependent libraries of alsa (e.g. -ldl -lpthread -lrt) as well that
+can not be deduced in case of a static link.
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+
+diff -durN shairport-sync-2.1.8.orig/configure.ac shairport-sync-2.1.8/configure.ac
+--- shairport-sync-2.1.8.orig/configure.ac	2014-11-29 12:56:11.954118681 +0100
++++ shairport-sync-2.1.8/configure.ac	2014-11-29 13:07:24.941687600 +0100
+@@ -99,7 +99,10 @@
+   HAS_ALSA=1
+   AM_CONDITIONAL([USE_ALSA], [test 0])
+   AC_DEFINE([CONFIG_ALSA], 1, [Needed by the compiler.])
+-  AC_CHECK_LIB([asound], [snd_pcm_open], , AC_MSG_ERROR(ALSA support requires the asound library!))], )
++  PKG_CHECK_MODULES(
++    [ALSA], [alsa],
++    [LIBS="${ALSA_LIBS} ${LIBS}"
++     AC_DEFINE([HAVE_LIBASOUND],[1],[Define to 1 if you have ALSA])])])
+ AM_CONDITIONAL([USE_ALSA], [test "x$HAS_ALSA" = "x1"])
+ 
+ # Look for SNDIO flag
diff --git a/package/shairport-sync/0003-fix-static-link-popt.patch b/package/shairport-sync/0003-fix-static-link-popt.patch
new file mode 100644
index 0000000..8e8c4ca
--- /dev/null
+++ b/package/shairport-sync/0003-fix-static-link-popt.patch
@@ -0,0 +1,21 @@ 
+configure: fix static link with popt
+
+Use pkg-config to find the popt library.
+
+Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
+
+diff -durN shairport-sync-2.1.8.orig/configure.ac shairport-sync-2.1.8/configure.ac
+--- shairport-sync-2.1.8.orig/configure.ac	2014-11-29 14:14:36.655955733 +0100
++++ shairport-sync-2.1.8/configure.ac	2014-11-29 14:16:21.072719327 +0100
+@@ -31,7 +31,10 @@
+ AC_CHECK_LIB([daemon],[daemon_log], , AC_MSG_ERROR(libdaemon needed))
+ AC_CHECK_LIB([pthread],[pthread_create], , AC_MSG_ERROR(pthread library needed))
+ AC_CHECK_LIB([m],[exp], , AC_MSG_ERROR(maths library needed))
+-AC_CHECK_LIB([popt],[poptGetContext], , AC_MSG_ERROR(libpopt needed))
++PKG_CHECK_MODULES(
++    [POPT], [popt],
++    [LIBS="${POPT_LIBS} ${LIBS}"
++     AC_DEFINE([HAVE_LIBPOPT],[1],[Define to 1 if you have popt])])
+ 
+ # Look for piddir flag
+ AC_ARG_WITH(piddir, [ --with-piddir=<pathname> Specify a pathname to a directory in which to write the PID file.], [