[Buildroot] [PATCH 1/2] package/gmpc: needs -lm
Thomas Preston
thomas.preston at codethink.co.uk
Thu Nov 21 18:14:27 UTC 2019
On 19/11/2019 18:42, Peter Seiderer wrote:
> Hello *,
>
> On Tue, 19 Nov 2019 18:58:03 +0100, Fabrice Fontaine <fontaine.fabrice at gmail.com> wrote:
>
>> Dear all,
>>
>> Le mar. 19 nov. 2019 à 17:18, Thomas Preston
>> <thomas.preston at codethink.co.uk> a écrit :
>>>
>>> Hi Thomas Petazzoni, all,
>>> Thanks for bringing this to my attention.
>>>
>>> On 18/11/2019 22:47, Thomas Petazzoni wrote:
>>>> Adding Thomas Preston in the loop. Thomas: one of your patch causes
>>>> some regression, see below.
>>>>
>>>
>>> Before the pkgconf patch, `-lm` somehow made its way into the .la files:
>>>
>>> gmpc-11.8.16-before-pkgconf-fix$ grep -lwr "\-lm"
>>> ltmain.sh.orig
>>> ltmain.sh
>>> src/libeggsmclient.la
>>> src/libeggdesktopfile.la
>>> m4/libtool.m4
>>> libtool
>>>
>>> In addition to this, there are lots of system include and libraries
>>> littering the Makefile (which should be handled by --sysroot):
>>>
>>> -L/mnt/output/host/bin/../x86_64-buildroot-linux-gnu/sysroot/usr/lib
>>> -I/mnt/output/host/bin/../x86_64-buildroot-linux-gnu/sysroot/usr/include
>>>
>>> After the pkgconf patch, the gmpc build directory more closely resembles
>>> building upstream gmpc - which doesn't seem to require `-lm`. So why does
>>> it in buildroot?
>
> It is not buildroot specific, but toolchain/libc specific (some implement the math
> functions in libc itself, some in the extra libm)....
>
>>>
>>> gmpc-11.8.16$ cat fedora.Dockerfile
>>> FROM fedora:30
>>> RUN dnf install -y @development-tools
>>> RUN dnf install -y \
>>> gob2 \
>>> harfbuzz \
>>> harfbuzz-devel \
>>> intltool \
>>> libICE \
>>> libICE-devel \
>>> libmpd-devel \
>>> libSM \
>>> libSM-devel \
>>> libsoup-devel \
>>> libvala \
>>> libvala-devel \
>>> pkgconf \
>>> unique-devel \
>>> vala
>>> WORKDIR /mnt
>>> CMD "/bin/bash"
>>>
>>> $ docker build -t build-gmpc - < fedora.Dockerfile
>>> $ docker run -it -v$PWD:/mnt build-gmpc ./configure --disable-mmkeys --disable-unique
>>> $ docker run -it -v$PWD:/mnt build-gmpc make
>>> $ ls -l src/gmpc
>>> -rwxr-xr-x 1 root root 5818944 Nov 19 15:52 src/gmpc
>>>
>>> Seems to work, without a -lm in sight:
>>>
>>> $ grep -rw "\-lm"
>>> ltmain.sh: # a FreeBSD bug that causes programs to crash when -lm is
>>> m4/libtool.m4: AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
>>> m4/libtool.m4: AC_CHECK_LIB(m, cos, LIBM="-lm")
>>> libtool: # a FreeBSD bug that causes programs to crash when -lm is
>>>
>>> So I don't understand two things:
>>> 1. Where did `-lm` in the .la files come from before the pkgconf patch?
>>> 2. Why does upsteam gmpc build without `-lm`?
>> This one is easy: we're using the latest release of gmpc that is 8 years old.
>> In this release, Math.ceil is used in
>> https://github.com/DaveDavenport/gmpc/blob/release-11.8.16/src/Widgets/GmpcVolume.vala.
>> Upstream removed this file 6 years ago through
>> https://github.com/DaveDavenport/gmpc/commit/11a7d247757dd29b51c77fda7470921fd254aae8#diff-645d920fce926ffdadd85c93c2d2cda2.
>> I assume that current gmpc does not use any math functions anymore.
>
> Maybe a workaround for the gmpc case, remains the libvl42/libatomc [1] case which is about
> using dependent *.la files vs. ignoring dependent *.la files while linking...
>
The gmpc package appears to be fixed with the same kind of patch as libv4l:
diff --git a/package/gmpc/gmpc.mk b/package/gmpc/gmpc.mk
index 40b77eb189..9c725db39d 100644
--- a/package/gmpc/gmpc.mk
+++ b/package/gmpc/gmpc.mk
@@ -6,7 +6,8 @@
GMPC_VERSION = 11.8.16
GMPC_SITE = http://download.sarine.nl/Programs/gmpc/$(GMPC_VERSION)
-GMPC_CONF_ENV = ac_cv_path_GOB2=$(GOB2_HOST_BINARY)
+GMPC_CONF_ENV = ac_cv_path_GOB2=$(GOB2_HOST_BINARY) \
+ PKG_CONFIG_ALLOW_SYSTEM_LIBS=1
GMPC_CONF_OPTS = --disable-mmkeys --disable-unique
GMPC_LICENSE = GPL-2.0+
GMPC_LICENSE_FILES = COPYING
This is because this package uses libtool, which expects to find .la files
in the system library dir.
Another solution might be to configure the main pkg-config wrapper so that
it always includes the system lib dirs (for libtool), but not system include
dirs (which breaks -isystem ordering).
More information about the buildroot
mailing list