Skip to contentSkip to conversation

configure: add support for libdir param

PATCH Superseded Andrea Claudi 3 participants 6 messages Oct 2, 2021 – Oct 4, 2021

Subsystems (3)

v1 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

cover configure: add support for libdir param

This series add support for the libdir parameter in iproute2 configure system. The idea is to make use of the fact that packaging systems may assume that 'configure' comes from autotools allowing a syntax similar to the autotools one, and using it to tell iproute2 where the distro expects to find its lib files.

The first patch introduce support for the --param=value style on current params, for uniformity.

The second patch add support for the libdir param to the configure, and also drops the static LIBDIR var from the Makefile.

Andrea Claudi (2):
configure: support --param=value style
configure: add the --libdir param

 Makefile  |  7 ++++---
 configure | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 3 deletions(-)
Signature · 1 line
2.31.1
#1 lore raw

PATCH 1/2 configure: support --param=value style

This commit makes it possible to specify values for configure params using the common autotools configure syntax '--param=value'.

---
 configure | 13 +++++++++++++
 1 file changed, 13 insertions(+)
configure +13 -0
index 7f4f3bd9..f0c81ee1 100755
@@ -504,15 +504,28 @@ else
 			--include_dir)
 				INCLUDE=$2
 				shift 2 ;;
+			--include_dir=*)
+				INCLUDE="${1#*=}"
+				shift ;;
 			--libbpf_dir)
 				LIBBPF_DIR="$2"
 				shift 2 ;;
+			--libbpf_dir=*)
+				LIBBPF_DIR="${1#*=}"
+				shift ;;
 			--libbpf_force)
 				if [ "$2" != 'on' ] && [ "$2" != 'off' ]; then
 					usage 1
 				fi
 				LIBBPF_FORCE=$2
 				shift 2 ;;
+			--libbpf_force=*)
+				libbpf_f="${1#*=}"
+				if [ "$libbpf_f" != 'on' ] && [ "$libbpf_f" != 'off' ]; then
+					usage 1
+				fi
+				LIBBPF_FORCE="$libbpf_f"
+				shift ;;
 			-h | --help)
 				usage 0 ;;
 			"")
Signature · 1 line
2.31.1
#2 lore raw

Re: [PATCH 1/2 iproute2] configure: support --param=value style

Quoted 7 lines · Andrea Claudi
configure +0 -0
index 7f4f3bd9..f0c81ee1 100755
@@ -504,15 +504,28 @@ else
 			--include_dir)
 				INCLUDE=$2

configure else · line 515

Quoted 10 lines
configure +6 -0
 				shift 2 ;;
+			--include_dir=*)
+				INCLUDE="${1#*=}"
+				shift ;;
 			--libbpf_dir)
 				LIBBPF_DIR="$2"
 				shift 2 ;;
+			--libbpf_dir=*)
+				LIBBPF_DIR="${1#*=}"
+				shift ;;

We should be able to consolidate these into 1 case like:

			--libbpf_dir|--libbpf_dir=)

and then handle the difference in argument style. e.g.,

			LIBBPF_FORCE="${1#*=}"
			if [ -z "${LIBBPF_FORCE}" ]; then
				LIBBPF_FORCE=$2
				shift
			fi

			....
Quoted 17 lines
configure +7 -0
 			--libbpf_force)
 				if [ "$2" != 'on' ] && [ "$2" != 'off' ]; then
 					usage 1
 				fi
 				LIBBPF_FORCE=$2
 				shift 2 ;;
+			--libbpf_force=*)
+				libbpf_f="${1#*=}"
+				if [ "$libbpf_f" != 'on' ] && [ "$libbpf_f" != 'off' ]; then
+					usage 1
+				fi
+				LIBBPF_FORCE="$libbpf_f"
+				shift ;;
 			-h | --help)
 				usage 0 ;;
 			"")
#3 lore raw

PATCH 2/2 configure: add the --libdir param

In reply to Andrea Claudi

This commit allows users/packagers to choose a lib directory to store iproute2 lib files.

At the moment iproute2 ship lib files in /usr/lib and offers no way to modify this setting. However, according to the FHS, distros may choose "one or more variants of the /lib directory on systems which support more than one binary format" (e.g. /usr/lib64 on Fedora).

As Luca states in commit a3272b93725a ("configure: restore backward compatibility"), packaging systems may assume that 'configure' is from autotools, and try to pass it some parameters.

Allowing the '--libdir=/path/to/libdir' syntax, we can use this to our advantage, and let the lib directory to be chosen by the distro packaging system.

---
 Makefile  |  7 ++++---
 configure | 21 +++++++++++++++++++++
 2 files changed, 25 insertions(+), 3 deletions(-)
Makefile +4 -3
index 5bc11477..45655ca4 100644
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 # Top level Makefile for iproute2
 
+-include config.mk
+
 ifeq ("$(origin V)", "command line")
 VERBOSE = $(V)
 endif
@@ -13,7 +15,6 @@ MAKEFLAGS += --no-print-directory
 endif
 
 PREFIX?=/usr
-LIBDIR?=$(PREFIX)/lib
 SBINDIR?=/sbin
 CONFDIR?=/etc/iproute2
 NETNS_RUN_DIR?=/var/run/netns
@@ -60,7 +61,7 @@ SUBDIRS=lib ip tc bridge misc netem genl tipc devlink rdma dcb man vdpa
 LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a
 LDLIBS += $(LIBNETLINK)
 
-all: config
+all: config.mk
 	@set -e; \
 	for i in $(SUBDIRS); \
 	do echo; echo $$i; $(MAKE) -C $$i; done
@@ -80,7 +81,7 @@ help:
 	@echo "Make Arguments:"
 	@echo " V=[0|1]             - set build verbosity level"
 
-config:
+config.mk:
 	@if [ ! -f config.mk -o configure -nt config.mk ]; then \
 		sh configure $(KERNEL_INCLUDE); \
 	fi
configure +21 -0
index f0c81ee1..a1b0261a 100755
@@ -148,6 +148,19 @@ EOF
 	rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
 }
 
+check_lib_dir()
+{
+	echo -n "lib directory: "
+	if [ -n "$LIB_DIR" ]; then
+		echo "$LIB_DIR"
+		echo "LIBDIR:=$LIB_DIR" >> $CONFIG
+		return
+	fi
+
+	echo "/usr/lib"
+	echo "LIBDIR:=/usr/lib" >> $CONFIG
+}
+
 check_ipt()
 {
 	if ! grep TC_CONFIG_XT $CONFIG > /dev/null; then
@@ -486,6 +499,7 @@ usage()
 	cat <<EOF
 Usage: $0 [OPTIONS]
 	--include_dir		Path to iproute2 include dir
+	--libdir		Path to iproute2 lib dir
 	--libbpf_dir		Path to libbpf DESTDIR
 	--libbpf_force		Enable/disable libbpf by force. Available options:
 				  on: require link against libbpf, quit config if no libbpf support
@@ -507,6 +521,12 @@ else
 			--include_dir=*)
 				INCLUDE="${1#*=}"
 				shift ;;
+			--libdir)
+				LIB_DIR="$2"
+				shift 2 ;;
+			--libdir=*)
+				LIB_DIR="${1#*=}"
+				shift ;;
 			--libbpf_dir)
 				LIBBPF_DIR="$2"
 				shift 2 ;;
@@ -559,6 +579,7 @@ if ! grep -q TC_CONFIG_NO_XT $CONFIG; then
 fi
 
 echo
+check_lib_dir
 if ! grep -q TC_CONFIG_NO_XT $CONFIG; then
 	echo -n "iptables modules directory: "
 	check_ipt_lib_dir
Signature · 1 line
2.31.1
#4 lore raw

Re: [PATCH 2/2 iproute2] configure: add the --libdir param

Quoted 115 lines · Andrea Claudi

This commit allows users/packagers to choose a lib directory to store iproute2 lib files.

At the moment iproute2 ship lib files in /usr/lib and offers no way to modify this setting. However, according to the FHS, distros may choose "one or more variants of the /lib directory on systems which support more than one binary format" (e.g. /usr/lib64 on Fedora).

As Luca states in commit a3272b93725a ("configure: restore backward compatibility"), packaging systems may assume that 'configure' is from autotools, and try to pass it some parameters.

Allowing the '--libdir=/path/to/libdir' syntax, we can use this to our advantage, and let the lib directory to be chosen by the distro packaging system.

---
 Makefile | 7 ++++---
 configure | 21 +++++++++++++++++++++

 2 files changed, 25 insertions(+), 3 deletions(-)
Makefile +0 -0
index 5bc11477..45655ca4 100644
@@ -1,6 +1,8 @@
  # SPDX-License-Identifier: GPL-2.0
  # Top level Makefile for iproute2

+-include config.mk
+
 ifeq ("$(origin V)", "command line")
 VERBOSE = $(V)
 endif

Makefile +0 -0
@@ -13,7 +15,6 @@ MAKEFLAGS += --no-print-directory

 endif

 PREFIX?=/usr
-LIBDIR?=$(PREFIX)/lib
 SBINDIR?=/sbin
 CONFDIR?=/etc/iproute2
 NETNS_RUN_DIR?=/var/run/netns

Makefile +0 -0
@@ -60,7 +61,7 @@ SUBDIRS=lib ip tc bridge misc netem genl tipc devlink rdma dcb man vdpa

 LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a
 LDLIBS += $(LIBNETLINK)

Makefile +1 -1
-all: config
+all: config.mk

  @set -e; \
  for i in $(SUBDIRS); \
  do echo; echo $$i; $(MAKE) -C $$i; done

Makefile +0 -0
@@ -80,7 +81,7 @@ help:

  @echo "Make Arguments:"
  @echo " V=[0|1] - set build verbosity level"

Makefile +1 -1
-config:
+config.mk:

  @if [ ! -f config.mk -o configure -nt config.mk ]; then \
  sh configure $(KERNEL_INCLUDE); \
  fi

configure +0 -0
index f0c81ee1..a1b0261a 100755
@@ -148,6 +148,19 @@ EOF

  rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
 }

configure +13 -0
+check_lib_dir()
+{
+	echo -n "lib directory: "
+	if [ -n "$LIB_DIR" ]; then
+		echo "$LIB_DIR"
+		echo "LIBDIR:=$LIB_DIR" >> $CONFIG
+		return
+	fi
+
+	echo "/usr/lib"
+	echo "LIBDIR:=/usr/lib" >> $CONFIG
+}
+

 check_ipt()
 {
  if ! grep TC_CONFIG_XT $CONFIG > /dev/null; then

configure +0 -0
@@ -486,6 +499,7 @@ usage()

  cat <<EOF
 Usage: $0 [OPTIONS]
  --include_dir Path to iproute2 include dir

configure +1 -0
+	--libdir		Path to iproute2 lib dir

  --libbpf_dir Path to libbpf DESTDIR
  --libbpf_force Enable/disable libbpf by force. Available options:
  on: require link against libbpf, quit config if no libbpf support

configure +0 -0
@@ -507,6 +521,12 @@ else
  			--include_dir=*)

  INCLUDE="${1#*=}"
  shift ;;

configure +6 -0
+			--libdir)
+				LIB_DIR="$2"
+				shift 2 ;;
+			--libdir=*)
+				LIB_DIR="${1#*=}"
+				shift ;;

  --libbpf_dir)
  LIBBPF_DIR="$2"
  shift 2 ;;

configure +0 -0
@@ -559,6 +579,7 @@ if ! grep -q TC_CONFIG_NO_XT $CONFIG; then

 fi

Quoted 5 lines

 echo
+check_lib_dir
 if ! grep -q TC_CONFIG_NO_XT $CONFIG; then
  echo -n "iptables modules directory: "
  check_ipt_lib_dir

	./configure --build=x86_64-linux-gnu --prefix=/usr --

includedir=\${prefix}/include --mandir=\${prefix}/share/man -- infodir=\${prefix}/share/info --sysconfdir=/etc --localstatedir=/var -- disable-option-checking --disable-silent-rules -- libdir=\${prefix}/lib/x86_64-linux-gnu --runstatedir=/run --disable- maintainer-mode --disable-dependency-tracking
TC schedulers
ATM yes
IPT using xtables
IPSET yes

lib directory: ${prefix}/lib/x86_64-linux-gnu

But you end up with:

/lib/x86_64-linux-gnu/tc

/usr disappears somewhere?

Signature · 2 lines
Kind regards,
Luca Boccassi
#5 lore raw

Re: [PATCH 2/2 iproute2] configure: add the --libdir param

Quoted 133 lines · Luca Boccassi
Quoted 115 lines · Andrea Claudi

This commit allows users/packagers to choose a lib directory to store iproute2 lib files.

At the moment iproute2 ship lib files in /usr/lib and offers no way to modify this setting. However, according to the FHS, distros may choose "one or more variants of the /lib directory on systems which support more than one binary format" (e.g. /usr/lib64 on Fedora).

As Luca states in commit a3272b93725a ("configure: restore backward compatibility"), packaging systems may assume that 'configure' is from autotools, and try to pass it some parameters.

Allowing the '--libdir=/path/to/libdir' syntax, we can use this to our advantage, and let the lib directory to be chosen by the distro packaging system.

---
 Makefile | 7 ++++---
 configure | 21 +++++++++++++++++++++

 2 files changed, 25 insertions(+), 3 deletions(-)
Makefile +0 -0
index 5bc11477..45655ca4 100644
@@ -1,6 +1,8 @@
  # SPDX-License-Identifier: GPL-2.0
  # Top level Makefile for iproute2

+-include config.mk
+
 ifeq ("$(origin V)", "command line")
 VERBOSE = $(V)
 endif

Makefile +0 -0
@@ -13,7 +15,6 @@ MAKEFLAGS += --no-print-directory

 endif

 PREFIX?=/usr
-LIBDIR?=$(PREFIX)/lib
 SBINDIR?=/sbin
 CONFDIR?=/etc/iproute2
 NETNS_RUN_DIR?=/var/run/netns

Makefile +0 -0
@@ -60,7 +61,7 @@ SUBDIRS=lib ip tc bridge misc netem genl tipc devlink rdma dcb man vdpa

 LIBNETLINK=../lib/libutil.a ../lib/libnetlink.a
 LDLIBS += $(LIBNETLINK)

Makefile +1 -1
-all: config
+all: config.mk

  @set -e; \
  for i in $(SUBDIRS); \
  do echo; echo $$i; $(MAKE) -C $$i; done

Makefile +0 -0
@@ -80,7 +81,7 @@ help:

  @echo "Make Arguments:"
  @echo " V=[0|1] - set build verbosity level"

Makefile +1 -1
-config:
+config.mk:

  @if [ ! -f config.mk -o configure -nt config.mk ]; then \
  sh configure $(KERNEL_INCLUDE); \
  fi

configure +0 -0
index f0c81ee1..a1b0261a 100755
@@ -148,6 +148,19 @@ EOF

  rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
 }

configure +13 -0
+check_lib_dir()
+{
+	echo -n "lib directory: "
+	if [ -n "$LIB_DIR" ]; then
+		echo "$LIB_DIR"
+		echo "LIBDIR:=$LIB_DIR" >> $CONFIG
+		return
+	fi
+
+	echo "/usr/lib"
+	echo "LIBDIR:=/usr/lib" >> $CONFIG
+}
+

 check_ipt()
 {
  if ! grep TC_CONFIG_XT $CONFIG > /dev/null; then

configure +0 -0
@@ -486,6 +499,7 @@ usage()

  cat <<EOF
 Usage: $0 [OPTIONS]
  --include_dir Path to iproute2 include dir

configure +1 -0
+	--libdir		Path to iproute2 lib dir

  --libbpf_dir Path to libbpf DESTDIR
  --libbpf_force Enable/disable libbpf by force. Available options:
  on: require link against libbpf, quit config if no libbpf support

configure +0 -0
@@ -507,6 +521,12 @@ else
  			--include_dir=*)

  INCLUDE="${1#*=}"
  shift ;;

configure +6 -0
+			--libdir)
+				LIB_DIR="$2"
+				shift 2 ;;
+			--libdir=*)
+				LIB_DIR="${1#*=}"
+				shift ;;

  --libbpf_dir)
  LIBBPF_DIR="$2"
  shift 2 ;;

configure +0 -0
@@ -559,6 +579,7 @@ if ! grep -q TC_CONFIG_NO_XT $CONFIG; then

 fi

Quoted 5 lines

 echo
+check_lib_dir
 if ! grep -q TC_CONFIG_NO_XT $CONFIG; then
  echo -n "iptables modules directory: "
  check_ipt_lib_dir

	./configure --build=x86_64-linux-gnu --prefix=/usr --

includedir=\${prefix}/include --mandir=\${prefix}/share/man -- infodir=\${prefix}/share/info --sysconfdir=/etc --localstatedir=/var -- disable-option-checking --disable-silent-rules -- libdir=\${prefix}/lib/x86_64-linux-gnu --runstatedir=/run --disable- maintainer-mode --disable-dependency-tracking
TC schedulers
ATM yes
IPT using xtables
IPSET yes

Quoted 9 lines

lib directory: ${prefix}/lib/x86_64-linux-gnu

But you end up with:

/lib/x86_64-linux-gnu/tc

/usr disappears somewhere?

Hi Luca,
and thanks for your review.

This is probably because my patch does not manage the --prefix option I see in your command line. I'll fix this in v2.

Regards,
Andrea