Andrii Nakryiko <andriin@xxxxxx> [Wed, 2019-08-14 13:57 -0700]: > Currently libbpf version is specified in 2 places: libbpf.map and > Makefile. They easily get out of sync and it's very easy to update one, > but forget to update another one. In addition, Github projection of > libbpf has to maintain its own version which has to be remembered to be > kept in sync manually, which is very error-prone approach. > > This patch makes libbpf.map a source of truth for libbpf version and > uses shell invocation to parse out correct full and major libbpf version > to use during build. Now we need to make sure that once new release > cycle starts, we need to add (initially) empty section to libbpf.map > with correct latest version. > > This also will make it possible to keep Github projection consistent > with kernel sources version of libbpf by adopting similar parsing of > version from libbpf.map. > > v2->v3: > - grep -o + sort -rV (Andrey); > > v1->v2: > - eager version vars evaluation (Jakub); > - simplified version regex (Andrey); Acked-by: Andrey Ignatov <rdna@xxxxxx> > Cc: Andrey Ignatov <rdna@xxxxxx> > Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> > --- > tools/lib/bpf/Makefile | 20 ++++++++------------ > tools/lib/bpf/libbpf.map | 3 +++ > 2 files changed, 11 insertions(+), 12 deletions(-) > > diff --git a/tools/lib/bpf/Makefile b/tools/lib/bpf/Makefile > index 9312066a1ae3..148a27164189 100644 > --- a/tools/lib/bpf/Makefile > +++ b/tools/lib/bpf/Makefile > @@ -1,9 +1,10 @@ > # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) > # Most of this file is copied from tools/lib/traceevent/Makefile > > -BPF_VERSION = 0 > -BPF_PATCHLEVEL = 0 > -BPF_EXTRAVERSION = 4 > +LIBBPF_VERSION := $(shell \ > + grep -oE '^LIBBPF_([0-9.]+)' libbpf.map | \ > + sort -rV | head -n1 | cut -d'_' -f2) > +LIBBPF_MAJOR_VERSION := $(firstword $(subst ., ,$(LIBBPF_VERSION))) > > MAKEFLAGS += --no-print-directory > > @@ -79,15 +80,9 @@ export prefix libdir src obj > libdir_SQ = $(subst ','\'',$(libdir)) > libdir_relative_SQ = $(subst ','\'',$(libdir_relative)) > > -VERSION = $(BPF_VERSION) > -PATCHLEVEL = $(BPF_PATCHLEVEL) > -EXTRAVERSION = $(BPF_EXTRAVERSION) > - > OBJ = $@ > N = > > -LIBBPF_VERSION = $(BPF_VERSION).$(BPF_PATCHLEVEL).$(BPF_EXTRAVERSION) > - > LIB_TARGET = libbpf.a libbpf.so.$(LIBBPF_VERSION) > LIB_FILE = libbpf.a libbpf.so* > PC_FILE = libbpf.pc > @@ -178,10 +173,10 @@ $(BPF_IN): force elfdep bpfdep > $(OUTPUT)libbpf.so: $(OUTPUT)libbpf.so.$(LIBBPF_VERSION) > > $(OUTPUT)libbpf.so.$(LIBBPF_VERSION): $(BPF_IN) > - $(QUIET_LINK)$(CC) --shared -Wl,-soname,libbpf.so.$(VERSION) \ > + $(QUIET_LINK)$(CC) --shared -Wl,-soname,libbpf.so.$(LIBBPF_MAJOR_VERSION) \ > -Wl,--version-script=$(VERSION_SCRIPT) $^ -lelf -o $@ > @ln -sf $(@F) $(OUTPUT)libbpf.so > - @ln -sf $(@F) $(OUTPUT)libbpf.so.$(VERSION) > + @ln -sf $(@F) $(OUTPUT)libbpf.so.$(LIBBPF_MAJOR_VERSION) > > $(OUTPUT)libbpf.a: $(BPF_IN) > $(QUIET_LINK)$(RM) $@; $(AR) rcs $@ $^ > @@ -257,7 +252,8 @@ config-clean: > > clean: > $(call QUIET_CLEAN, libbpf) $(RM) $(TARGETS) $(CXX_TEST_TARGET) \ > - *.o *~ *.a *.so *.so.$(VERSION) .*.d .*.cmd *.pc LIBBPF-CFLAGS > + *.o *~ *.a *.so *.so.$(LIBBPF_MAJOR_VERSION) .*.d .*.cmd \ > + *.pc LIBBPF-CFLAGS > $(call QUIET_CLEAN, core-gen) $(RM) $(OUTPUT)FEATURE-DUMP.libbpf > > > diff --git a/tools/lib/bpf/libbpf.map b/tools/lib/bpf/libbpf.map > index f9d316e873d8..4e72df8e98ba 100644 > --- a/tools/lib/bpf/libbpf.map > +++ b/tools/lib/bpf/libbpf.map > @@ -184,3 +184,6 @@ LIBBPF_0.0.4 { > perf_buffer__new_raw; > perf_buffer__poll; > } LIBBPF_0.0.3; > + > +LIBBPF_0.0.5 { > +} LIBBPF_0.0.4; > -- > 2.17.1 > -- Andrey Ignatov