commit: 5f6678eae7f6b7cd533197d6eba2fd13de378552
parent caf2ba1aec84c87911731418f9224f0efa3cc5aa
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Mon, 13 Oct 2025 07:11:07 +0200
extras/iproute2: switch to custom meson.build
Diffstat:
4 files changed, 54 insertions(+), 24 deletions(-)
diff --git a/extras-build-all.sh b/extras-build-all.sh
@@ -13,11 +13,10 @@ set -ex
/extras/pkgconf.sh
/extras/muon-stage2.sh # libpkgconf
+/extras/iproute2.sh # muon-stage2
+
/extras/tiny-curl.sh
/extras/git.sh # muon-stage2 tiny-curl
/extras/make.sh
-
-/extras/iproute2.sh # make pkgconf
-
diff --git a/extras/iproute2.sh b/extras/iproute2.sh
@@ -6,30 +6,24 @@ die() {
exit 1
}
-# With pdpmake-2.0.3:
-# pdpmake: don't know how to make %.c
-# Needs support for `.EXPORT_ALL_VARIABLES:`
-command -v make || die "Run /extras/make.sh"
-
-command -v pkg-config || die "Run /extras/pkgconf-lite.sh"
+command -v muon || die "Run /extras/muon-stage2.sh"
cd /extras/iproute2-*/
-./configure --prefix /usr
+{
+ printf 'man_man8 = ['
+ printf "'%s', " man/man8/*.8
+ printf ']\n'
+} > man/man8/meson.build
-# tc(1) requires flex (or at least a lex with -o)
-# -maxdepth 1 is unsupported by both sbase and heirloom find(1)
-printf '%s\n' \
- '/SUBDIRS=/s;tc ;;' \
- '/iproute2 -maxdepth 1/s;install;\# install;' \
- w q | ed Makefile
+export CC_LD=$CC
-# Requires static_assert which is guarded behind C11
-export CFLAGS="${CFLAGS} -std=c11"
+muon setup \
+ -Dbuildtype=debugoptimized \
+ -Dprefix=/usr \
+ build || die
-unset MAKE
-make clean
-make HOSTCC=$CC
-make install
+muon -C build samu
+muon -C build install
cd -
diff --git a/extras/iproute2/meson.build b/extras/iproute2/meson.build
@@ -0,0 +1,35 @@
+# version needs to be in sync with include/version.h
+# C11 for static_assert
+project('iproute2', 'c', version: '6.16.0', default_options: 'c_std=c11')
+
+subdir('man/man8')
+
+# meson-format-array bridge/*.c
+bridge_src = ['bridge/bridge.c', 'bridge/fdb.c', 'bridge/link.c', 'bridge/mdb.c', 'bridge/monitor.c', 'bridge/mst.c', 'bridge/vlan.c', 'bridge/vni.c']
+
+# ip/*.c excluding ip/static-syms.c ip/rtmon.c
+ip_src = ['ip/ip.c', 'ip/ip6tunnel.c', 'ip/ipaddress.c', 'ip/ipaddrlabel.c', 'ip/ipfou.c', 'ip/ipila.c', 'ip/ipioam6.c', 'ip/ipl2tp.c', 'ip/iplink.c', 'ip/iplink_amt.c', 'ip/iplink_bareudp.c', 'ip/iplink_batadv.c', 'ip/iplink_bond.c', 'ip/iplink_bond_slave.c', 'ip/iplink_bridge.c', 'ip/iplink_bridge_slave.c', 'ip/iplink_can.c', 'ip/iplink_dsa.c', 'ip/iplink_dummy.c', 'ip/iplink_geneve.c', 'ip/iplink_gtp.c', 'ip/iplink_hsr.c', 'ip/iplink_ifb.c', 'ip/iplink_ipoib.c', 'ip/iplink_ipvlan.c', 'ip/iplink_macvlan.c', 'ip/iplink_netdevsim.c', 'ip/iplink_netkit.c', 'ip/iplink_nlmon.c', 'ip/iplink_rmnet.c', 'ip/iplink_team.c', 'ip/iplink_vcan.c', 'ip/iplink_virt_wifi.c', 'ip/iplink_vlan.c', 'ip/iplink_vrf.c', 'ip/iplink_vxcan.c', 'ip/iplink_vxlan.c', 'ip/iplink_wwan.c', 'ip/iplink_xdp.c', 'ip/iplink_xstats.c', 'ip/ipmacsec.c', 'ip/ipmaddr.c', 'ip/ipmonitor.c', 'ip/ipmptcp.c', 'ip/ipmroute.c', 'ip/ipneigh.c', 'ip/ipnetconf.c', 'ip/ipnetns.c', 'ip/ipnexthop.c', 'ip/ipntable.c', 'ip/ipprefix.c', 'ip/iproute.c', 'ip/iproute_lwtunnel.c', 'ip/iprule.c', 'ip/ipseg6.c', 'ip/ipstats.c', 'ip/iptoken.c', 'ip/iptunnel.c', 'ip/iptuntap.c', 'ip/ipvrf.c', 'ip/ipxfrm.c', 'ip/link_gre.c', 'ip/link_gre6.c', 'ip/link_ip6tnl.c', 'ip/link_iptnl.c', 'ip/link_veth.c', 'ip/link_vti.c', 'ip/link_vti6.c', 'ip/link_xfrm.c', 'ip/rtm_map.c', 'ip/tcp_metrics.c', 'ip/tunnel.c', 'ip/xfrm_monitor.c', 'ip/xfrm_policy.c', 'ip/xfrm_state.c']
+
+# == lib ==
+# Loosely based on lib/Makefile
+libnetlink_src = ['lib/libgenl.c', 'lib/libnetlink.c']
+
+libutil_src = ['lib/utils.c', 'lib/utils_math.c', 'lib/rt_names.c', 'lib/ll_map.c', 'lib/ll_types.c', 'lib/ll_proto.c', 'lib/ll_addr.c', 'lib/inet_proto.c', 'lib/namespace.c', 'lib/json_writer.c', 'lib/json_print.c', 'lib/json_print_math.c', 'lib/names.c', 'lib/color.c', 'lib/bpf_legacy.c', 'lib/bpf_glue.c', 'lib/exec.c', 'lib/fs.c', 'lib/cg_map.c', 'lib/ppp_proto.c']
+libutil_src += [ 'lib/selinux.c' ]
+
+libaddlib_src = [ 'lib/ax25_ntop.c', 'lib/rose_ntop.c', 'lib/mpls_ntop.c', 'lib/mpls_pton.c', 'lib/netrom_ntop.c' ]
+
+# ======
+
+# Note: libmnl uses autotools so not including it
+add_project_arguments('-std=c11', '-D _GNU_SOURCE', '-D HAVE_SETNS', '-D HAVE_HANDLE_AT', '-D CONF_COLOR=COLOR_OPT_AUTO', language: 'c')
+
+inc = include_directories('./include/', './include/uapi', './misc/')
+# All in the same target as they pretty much all use it anyway
+libnetlink = static_library('libnetlink', libnetlink_src, libutil_src, libaddlib_src, build_by_default: false, install: false, include_directories: inc)
+
+executable('ip', ip_src, link_with: [libnetlink], install: true, include_directories: inc)
+executable('rtmon', 'ip/rtmon.c', link_with: [libnetlink], install: true, include_directories: inc)
+executable('bridge', bridge_src, link_with: [libnetlink], install: true, include_directories: inc)
+# TODO: ss (requires yacc)
+install_man(man_man8)
diff --git a/make-root.sh b/make-root.sh
@@ -55,8 +55,8 @@ extra_local_files="
extras/tiny-curl.sh
extras/usign.sh
"
-WORKDIR="$(dirname "$0")"
-WORKDIR="$(realpath "$WORKDIR")"
+dir0=$(dirname "$0")
+WORKDIR=$(realpath "$dir0")
. "$WORKDIR/common.sh"
@@ -126,6 +126,8 @@ if ! test "${EXCLUDE_EXTRAS:+y}" = "y"; then
# config.status: error: cannot find input file: `po/Makefile.in.in'
#rm -r ./extras/make-*/po || die
+ cp "${WORKDIR}"/extras/iproute2/meson.build ./extras/iproute2-*/ || die
+
mkdir -p ./distfiles
for i in $extra_distfiles
do