diff mbox series

[iproute2,v5,7/7] configure: add the --libdir option

Message ID 62f6968cc2647685a0ef8074687ecf12c8c1f3c0.1634199240.git.aclaudi@redhat.com (mailing list archive)
State Accepted
Delegated to: David Ahern
Headers show
Series configure: add support for libdir option | expand

Checks

Context Check Description
netdev/tree_selection success Not a local patch

Commit Message

Andrea Claudi Oct. 14, 2021, 8:50 a.m. UTC
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.

Note that LIBDIR uses "\${prefix}/lib" as default value because autoconf
allows this to be expanded to the --prefix value at configure runtime.
"\${prefix}" is replaced with the PREFIX value in check_lib_dir().

Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
---
 Makefile  |  7 ++++---
 configure | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+), 3 deletions(-)

Comments

Phil Sutter Oct. 14, 2021, 10:10 a.m. UTC | #1
Hi Andrea,

On Thu, Oct 14, 2021 at 10:50:55AM +0200, Andrea Claudi wrote:
[...]
> diff --git a/Makefile b/Makefile
> index 5eddd504..f6214534 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1,6 +1,8 @@
>  # SPDX-License-Identifier: GPL-2.0
>  # Top level Makefile for iproute2
>  
> +-include config.mk
> +

Assuming config.mk may be missing (as dash-prefix is used).

>  ifeq ("$(origin V)", "command line")
>  VERBOSE = $(V)
>  endif
> @@ -13,7 +15,6 @@ MAKEFLAGS += --no-print-directory
>  endif
>  
>  PREFIX?=/usr
> -LIBDIR?=$(PREFIX)/lib

Dropping this leads to trouble if config.mk is missing or didn't define
it. Can't you just leave it in place? Usually config.mk would override
it anyway, no?

Rest of the series looks great, thanks a lot for spending the extra
cycles giving it the mirror finish it has now. :)

Cheers, Phil
Andrea Claudi Oct. 14, 2021, 11:02 a.m. UTC | #2
On Thu, Oct 14, 2021 at 12:10:53PM +0200, Phil Sutter wrote:
> Hi Andrea,
> 
> On Thu, Oct 14, 2021 at 10:50:55AM +0200, Andrea Claudi wrote:
> [...]
> > diff --git a/Makefile b/Makefile
> > index 5eddd504..f6214534 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -1,6 +1,8 @@
> >  # SPDX-License-Identifier: GPL-2.0
> >  # Top level Makefile for iproute2
> >  
> > +-include config.mk
> > +
> 
> Assuming config.mk may be missing (as dash-prefix is used).
> 
> >  ifeq ("$(origin V)", "command line")
> >  VERBOSE = $(V)
> >  endif
> > @@ -13,7 +15,6 @@ MAKEFLAGS += --no-print-directory
> >  endif
> >  
> >  PREFIX?=/usr
> > -LIBDIR?=$(PREFIX)/lib
> 
> Dropping this leads to trouble if config.mk is missing or didn't define
> it. Can't you just leave it in place? Usually config.mk would override
> it anyway, no?

config.mk may miss at the first make call, but the "all" target calls
config.mk, which in turns re-generate it. Thus LIBDIR is defined when
the target all executes.

Also, LIBDIR must be defined in config.mk, as a default value for it is
provided in configure, and will be used if the user does not provide it
at command line.

I verified this deleting config.mk and printing DEFINES in Makefile to
verify it includes the correct path for LIBDIR.
Phil Sutter Oct. 14, 2021, 11:17 a.m. UTC | #3
On Thu, Oct 14, 2021 at 01:02:41PM +0200, Andrea Claudi wrote:
> On Thu, Oct 14, 2021 at 12:10:53PM +0200, Phil Sutter wrote:
> > Hi Andrea,
> > 
> > On Thu, Oct 14, 2021 at 10:50:55AM +0200, Andrea Claudi wrote:
> > [...]
> > > diff --git a/Makefile b/Makefile
> > > index 5eddd504..f6214534 100644
> > > --- a/Makefile
> > > +++ b/Makefile
> > > @@ -1,6 +1,8 @@
> > >  # SPDX-License-Identifier: GPL-2.0
> > >  # Top level Makefile for iproute2
> > >  
> > > +-include config.mk
> > > +
> > 
> > Assuming config.mk may be missing (as dash-prefix is used).
> > 
> > >  ifeq ("$(origin V)", "command line")
> > >  VERBOSE = $(V)
> > >  endif
> > > @@ -13,7 +15,6 @@ MAKEFLAGS += --no-print-directory
> > >  endif
> > >  
> > >  PREFIX?=/usr
> > > -LIBDIR?=$(PREFIX)/lib
> > 
> > Dropping this leads to trouble if config.mk is missing or didn't define
> > it. Can't you just leave it in place? Usually config.mk would override
> > it anyway, no?
> 
> config.mk may miss at the first make call, but the "all" target calls
> config.mk, which in turns re-generate it. Thus LIBDIR is defined when
> the target all executes.

Ah, I forgot the call to configure from make. So full series:

Acked-by: Phil Sutter <phil@nwl.cc>

Thanks, Phil
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 5eddd504..f6214534 100644
--- a/Makefile
+++ b/Makefile
@@ -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
@@ -69,7 +70,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
@@ -89,7 +90,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
diff --git a/configure b/configure
index 05e23eff..8ddff43c 100755
--- a/configure
+++ b/configure
@@ -4,6 +4,7 @@ 
 
 INCLUDE="$PWD/include"
 PREFIX="/usr"
+LIBDIR="\${prefix}/lib"
 
 # Output file which is input to Makefile
 CONFIG=config.mk
@@ -149,6 +150,15 @@  EOF
 	rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
 }
 
+check_lib_dir()
+{
+	LIBDIR=$(echo $LIBDIR | sed "s|\${prefix}|$PREFIX|")
+
+	echo -n "lib directory: "
+	echo "$LIBDIR"
+	echo "LIBDIR:=$LIBDIR" >> $CONFIG
+}
+
 check_ipt()
 {
 	if ! grep TC_CONFIG_XT $CONFIG > /dev/null; then
@@ -487,6 +497,7 @@  usage()
 	cat <<EOF
 Usage: $0 [OPTIONS]
 	--include_dir <dir>		Path to iproute2 include dir
+	--libdir <dir>			Path to iproute2 lib dir
 	--libbpf_dir <dir>		Path to libbpf DESTDIR
 	--libbpf_force <on|off>		Enable/disable libbpf by force. Available options:
 					  on: require link against libbpf, quit config if no libbpf support
@@ -508,6 +519,11 @@  else
 				INCLUDE="$1" ;;
 			--include_dir=*)
 				INCLUDE="${1#*=}" ;;
+			--libdir)
+				shift
+				LIBDIR="$1" ;;
+			--libdir=*)
+				LIBDIR="${1#*=}" ;;
 			--libbpf_dir)
 				shift
 				LIBBPF_DIR="$1" ;;
@@ -544,6 +560,7 @@  if [ "${LIBBPF_FORCE-unused}" != "unused" ]; then
 	fi
 fi
 [ -z "$PREFIX" ] && usage 1
+[ -z "$LIBDIR" ] && usage 1
 
 echo "# Generated config based on" $INCLUDE >$CONFIG
 quiet_config >> $CONFIG
@@ -568,6 +585,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