Re: [PATCH] perf/build: fix broken dependency check for libtracefs

From: Arnaldo Carvalho de Melo
Date: Tue Jul 11 2023 - 09:06:12 EST


Em Tue, Jul 11, 2023 at 02:40:19PM +0200, Thomas Richter escreveu:
> Perf build auto-detects features and packages already installed
> for its build. This is done in directory tools/build/feature. This
> directory contains small sample programs. When they successfully
> compile the necessary prereqs in form of libraries and header
> files are present.
>
> Such a check is also done for libtracefs. And this check fails:
>
> Output before:
> # rm -f test-libtracefs.bin; make test-libtracefs.bin
> gcc -MD -Wall -Werror -o test-libtracefs.bin test-libtracefs.c \
> > test-libtracefs.make.output 2>&1 -ltracefs
> make: *** [Makefile:211: test-libtracefs.bin] Error 1
> # cat test-libtracefs.make.output
> In file included from test-libtracefs.c:2:
> /usr/include/tracefs/tracefs.h:11:10: fatal error: \
> event-parse.h: No such file or directory
> 11 | #include <event-parse.h>
> | ^~~~~~~~~~~~~~~
> compilation terminated.
> #
>
> The root cause of this compile error is
> commit 880885d9c22e ("libtracefs: Remove "traceevent/" from referencing libtraceevent headers")
> in the libtracefs project hosted here:
> https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/
>
> That mentioned patch removes the traceevent/ directory name from
> the include statement, causing the file not to be included even
> when the libtraceevent-devel package is installed. This package contains
> the file referred to in tracefs/tracefs.h:
> # rpm -ql libtraceevent-devel
> /usr/include/traceevent
> /usr/include/traceevent/event-parse.h <----- here
> /usr/include/traceevent/event-utils.h
> /usr/include/traceevent/kbuffer.h
> /usr/include/traceevent/trace-seq.h
> /usr/lib64/libtraceevent.so
> /usr/lib64/pkgconfig/libtraceevent.pc

Ok, but since libtraceevent comes with a pkgconfig file, shouldn't we
use it instead?

Something like:

⬢[acme@toolbox perf-tools]$ pkgconf --cflags libtraceevent
-I/usr/include/traceevent

look for PKG_CONFIG in the perf makefiles, I see things like:

FLAGS_GTK2=$(CFLAGS) $(LDFLAGS) $(EXTLIBS) $(shell $(PKG_CONFIG) --libs --cflags gtk+-2.0 2>/dev/null)

etc.

- Arnaldo

> #
>
> With this patch the compile succeeds.
>
> Output after:
> # rm -f test-libtracefs.bin; make test-libtracefs.bin
> gcc -MD -Wall -Werror -o test-libtracefs.bin test-libtracefs.c \
> > test-libtracefs.make.output 2>&1 -I/usr/include/traceevent -ltracefs
> #
>
> Signed-off-by: Thomas Richter <tmricht@xxxxxxxxxxxxx>
> Cc: jolsa@xxxxxxxxxx
> Cc: rostedt@xxxxxxxxxxx
> ---
> tools/build/feature/Makefile | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index 0f0aa9b7d7b5..764b0234161f 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -208,7 +208,7 @@ $(OUTPUT)test-libtraceevent.bin:
> $(BUILD) -ltraceevent
>
> $(OUTPUT)test-libtracefs.bin:
> - $(BUILD) -ltracefs
> + $(BUILD) -I/usr/include/traceevent -ltracefs
>
> $(OUTPUT)test-libcrypto.bin:
> $(BUILD) -lcrypto
> --
> 2.41.0
>

--

- Arnaldo