X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=configure;h=45fcffb69bb532a876cd9462090f97cb42ff54eb;hb=0f3f0ca3a2aef77b0e4009a8de31cb48f58993fc;hp=7c2db9be46c38b33f0d82f8b68580acc514f606a;hpb=95d9d665d9dc5bdb0be84d2caa405e9487bd88ad;p=mirror_iproute2.git diff --git a/configure b/configure index 7c2db9be..45fcffb6 100755 --- a/configure +++ b/configure @@ -1,25 +1,29 @@ -#! /bin/bash -# This is not an autconf generated configure +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# This is not an autoconf generated configure # INCLUDE=${1:-"$PWD/include"} +# Output file which is input to Makefile +CONFIG=config.mk + # Make a temp directory in build tree. TMPDIR=$(mktemp -d config.XXXXXX) trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM check_toolchain() { -: ${PKG_CONFIG:=pkg-config} -: ${AR=ar} -: ${CC=gcc} -echo "AR:=${AR}" >>Config -echo "CC:=${CC}" >>Config -echo "PKG_CONFIG:=${PKG_CONFIG}" >>Config + : ${PKG_CONFIG:=pkg-config} + : ${AR=ar} + : ${CC=gcc} + echo "PKG_CONFIG:=${PKG_CONFIG}" >>$CONFIG + echo "AR:=${AR}" >>$CONFIG + echo "CC:=${CC}" >>$CONFIG } check_atm() { -cat >$TMPDIR/atmtest.c <$TMPDIR/atmtest.c < int main(int argc, char **argv) { struct atm_qos qos; @@ -27,21 +31,27 @@ int main(int argc, char **argv) { return 0; } EOF -$CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1 -if [ $? -eq 0 ] -then - echo "TC_CONFIG_ATM:=y" >>Config - echo yes -else - echo no -fi -rm -f $TMPDIR/atmtest.c $TMPDIR/atmtest + + if $CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1; then + echo "TC_CONFIG_ATM:=y" >>$CONFIG + echo yes + else + echo no + fi + rm -f $TMPDIR/atmtest.c $TMPDIR/atmtest +} + +check_xtables() +{ + if ! ${PKG_CONFIG} xtables --exists; then + echo "TC_CONFIG_NO_XT:=y" >>$CONFIG + fi } check_xt() { -#check if we have xtables from iptables >= 1.4.5. -cat >$TMPDIR/ipttest.c <= 1.4.5. + cat >$TMPDIR/ipttest.c < #include static struct xtables_globals test_globals = { @@ -58,27 +68,23 @@ int main(int argc, char **argv) xtables_init_all(&test_globals, NFPROTO_IPV4); return 0; } - EOF -if $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL $(${PKG_CONFIG} xtables --cflags --libs) -ldl >/dev/null 2>&1 -then - echo "TC_CONFIG_XT:=y" >>Config + if $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL \ + $(${PKG_CONFIG} xtables --cflags --libs) -ldl >/dev/null 2>&1; then + echo "TC_CONFIG_XT:=y" >>$CONFIG echo "using xtables" -fi -rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest + fi + rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest } check_xt_old() { -# bail if previous XT checks has already succeded. -if grep TC_CONFIG_XT Config > /dev/null -then - return -fi + # bail if previous XT checks has already succeeded. + grep -q TC_CONFIG_XT $CONFIG && return -#check if we dont need our internal header .. -cat >$TMPDIR/ipttest.c <$TMPDIR/ipttest.c < char *lib_dir; unsigned int global_option_offset = 0; @@ -98,26 +104,21 @@ int main(int argc, char **argv) { } EOF -$CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1 -if [ $? -eq 0 ] -then - echo "TC_CONFIG_XT_OLD:=y" >>Config + if $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1; then + echo "TC_CONFIG_XT_OLD:=y" >>$CONFIG echo "using old xtables (no need for xt-internal.h)" -fi -rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest + fi + rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest } check_xt_old_internal_h() { -# bail if previous XT checks has already succeded. -if grep TC_CONFIG_XT Config > /dev/null -then - return -fi + # bail if previous XT checks has already succeeded. + grep -q TC_CONFIG_XT $CONFIG && return -#check if we need our own internal.h -cat >$TMPDIR/ipttest.c <$TMPDIR/ipttest.c < #include "xt-internal.h" char *lib_dir; @@ -138,20 +139,16 @@ int main(int argc, char **argv) { } EOF -$CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1 - -if [ $? -eq 0 ] -then - echo "using old xtables with xt-internal.h" - echo "TC_CONFIG_XT_OLD_H:=y" >>Config -fi -rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest + if $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1; then + echo "using old xtables with xt-internal.h" + echo "TC_CONFIG_XT_OLD_H:=y" >>$CONFIG + fi + rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest } check_ipt() { - if ! grep TC_CONFIG_XT Config > /dev/null - then + if ! grep TC_CONFIG_XT $CONFIG > /dev/null; then echo "using iptables" fi } @@ -161,16 +158,16 @@ check_ipt_lib_dir() IPT_LIB_DIR=$(${PKG_CONFIG} --variable=xtlibdir xtables) if [ -n "$IPT_LIB_DIR" ]; then echo $IPT_LIB_DIR - echo "IPT_LIB_DIR:=$IPT_LIB_DIR" >> Config + echo "IPT_LIB_DIR:=$IPT_LIB_DIR" >> $CONFIG return fi - for dir in /lib /usr/lib /usr/local/lib - do - for file in $dir/{xtables,iptables}/lib*t_*so ; do + for dir in /lib /usr/lib /usr/local/lib; do + for file in "xtables" "iptables"; do + file="$dir/$file/lib*t_*so" if [ -f $file ]; then echo ${file%/*} - echo "IPT_LIB_DIR:=${file%/*}" >> Config + echo "IPT_LIB_DIR:=${file%/*}" >> $CONFIG return fi done @@ -180,28 +177,27 @@ check_ipt_lib_dir() check_setns() { -cat >$TMPDIR/setnstest.c <$TMPDIR/setnstest.c < -int main(int argc, char **argv) +int main(int argc, char **argv) { (void)setns(0,0); return 0; } EOF -$CC -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1 -if [ $? -eq 0 ] -then - echo "IP_CONFIG_SETNS:=y" >>Config + if $CC -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1; then + echo "IP_CONFIG_SETNS:=y" >>$CONFIG echo "yes" -else + echo "CFLAGS += -DHAVE_SETNS" >>$CONFIG + else echo "no" -fi -rm -f $TMPDIR/setnstest.c $TMPDIR/setnstest + fi + rm -f $TMPDIR/setnstest.c $TMPDIR/setnstest } check_ipset() { -cat >$TMPDIR/ipsettest.c <$TMPDIR/ipsettest.c < #ifndef IP_SET_INVALID #define IPSET_DIM_MAX 3 @@ -220,17 +216,142 @@ int main(void) #endif EOF -if $CC -I$INCLUDE -o $TMPDIR/ipsettest $TMPDIR/ipsettest.c >/dev/null 2>&1 -then - echo "TC_CONFIG_IPSET:=y" >>Config + if $CC -I$INCLUDE -o $TMPDIR/ipsettest $TMPDIR/ipsettest.c >/dev/null 2>&1; then + echo "TC_CONFIG_IPSET:=y" >>$CONFIG echo "yes" -else + else echo "no" -fi -rm -f $TMPDIR/ipsettest.c $TMPDIR/ipsettest + fi + rm -f $TMPDIR/ipsettest.c $TMPDIR/ipsettest +} + +check_elf() +{ + if ${PKG_CONFIG} libelf --exists; then + echo "HAVE_ELF:=y" >>$CONFIG + echo "yes" + + echo 'CFLAGS += -DHAVE_ELF' `${PKG_CONFIG} libelf --cflags` >> $CONFIG + echo 'LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG + else + echo "no" + fi +} + +check_selinux() +# SELinux is a compile time option in the ss utility +{ + if ${PKG_CONFIG} libselinux --exists; then + echo "HAVE_SELINUX:=y" >>$CONFIG + echo "yes" + + echo 'LDLIBS +=' `${PKG_CONFIG} --libs libselinux` >>$CONFIG + echo 'CFLAGS += -DHAVE_SELINUX' `${PKG_CONFIG} --cflags libselinux` >>$CONFIG + else + echo "no" + fi +} + +check_mnl() +{ + if ${PKG_CONFIG} libmnl --exists; then + echo "HAVE_MNL:=y" >>$CONFIG + echo "yes" + + echo 'CFLAGS += -DHAVE_LIBMNL' `${PKG_CONFIG} libmnl --cflags` >>$CONFIG + echo 'LDLIBS +=' `${PKG_CONFIG} libmnl --libs` >> $CONFIG + else + echo "no" + fi +} + +check_berkeley_db() +{ + cat >$TMPDIR/dbtest.c < +#include +#include +int main(int argc, char **argv) { + dbopen("/tmp/xxx_test_db.db", O_CREAT|O_RDWR, 0644, DB_HASH, NULL); + return 0; +} +EOF + if $CC -I$INCLUDE -o $TMPDIR/dbtest $TMPDIR/dbtest.c -ldb >/dev/null 2>&1; then + echo "HAVE_BERKELEY_DB:=y" >>$CONFIG + echo "yes" + else + echo "no" + fi + rm -f $TMPDIR/dbtest.c $TMPDIR/dbtest +} + +check_strlcpy() +{ + cat >$TMPDIR/strtest.c < +int main(int argc, char **argv) { + char dst[10]; + strlcpy(dst, "test", sizeof(dst)); + return 0; +} +EOF + if $CC -I$INCLUDE -o $TMPDIR/strtest $TMPDIR/strtest.c >/dev/null 2>&1; then + echo "no" + else + if ${PKG_CONFIG} libbsd --exists; then + echo 'CFLAGS += -DHAVE_LIBBSD' `${PKG_CONFIG} libbsd --cflags` >>$CONFIG + echo 'LDLIBS +=' `${PKG_CONFIG} libbsd --libs` >> $CONFIG + echo "no" + else + echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG + echo "yes" + fi + fi + rm -f $TMPDIR/strtest.c $TMPDIR/strtest +} + +check_cap() +{ + if ${PKG_CONFIG} libcap --exists; then + echo "HAVE_CAP:=y" >>$CONFIG + echo "yes" + + echo 'CFLAGS += -DHAVE_LIBCAP' `${PKG_CONFIG} libcap --cflags` >>$CONFIG + echo 'LDLIBS +=' `${PKG_CONFIG} libcap --libs` >> $CONFIG + else + echo "no" + fi } -echo "# Generated config based on" $INCLUDE >Config +quiet_config() +{ + cat <$CONFIG +quiet_config >> $CONFIG + check_toolchain echo "TC schedulers" @@ -238,17 +359,45 @@ echo "TC schedulers" echo -n " ATM " check_atm -echo -n " IPT " -check_xt -check_xt_old -check_xt_old_internal_h -check_ipt +check_xtables +if ! grep -q TC_CONFIG_NO_XT $CONFIG; then + echo -n " IPT " + check_xt + check_xt_old + check_xt_old_internal_h + check_ipt -echo -n " IPSET " -check_ipset + echo -n " IPSET " + check_ipset +fi -echo -n "iptables modules directory: " -check_ipt_lib_dir +echo +if ! grep -q TC_CONFIG_NO_XT $CONFIG; then + echo -n "iptables modules directory: " + check_ipt_lib_dir +fi echo -n "libc has setns: " check_setns + +echo -n "SELinux support: " +check_selinux + +echo -n "ELF support: " +check_elf + +echo -n "libmnl support: " +check_mnl + +echo -n "Berkeley DB: " +check_berkeley_db + +echo -n "need for strlcpy: " +check_strlcpy + +echo -n "libcap support: " +check_cap + +echo >> $CONFIG +echo "%.o: %.c" >> $CONFIG +echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $<' >> $CONFIG