]> git.proxmox.com Git - mirror_iproute2.git/blame - configure
fix print_0xhex on 32 bit
[mirror_iproute2.git] / configure
CommitLineData
449bf1f3 1#! /bin/bash
6054c1eb 2# SPDX-License-Identifier: GPL-2.0
07a6f5ec 3# This is not an autoconf generated configure
449bf1f3 4#
4b1bbd9c 5INCLUDE=${1:-"$PWD/include"}
449bf1f3 6
5f1df307
SH
7# Output file which is input to Makefile
8CONFIG=config.mk
9
e557d1ac
SH
10# Make a temp directory in build tree.
11TMPDIR=$(mktemp -d config.XXXXXX)
c2f7d6c7 12trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM
e557d1ac 13
10ed8b7f 14check_prog()
15{
16 echo -n "$2"
5f1df307 17 command -v $1 >/dev/null 2>&1 && (echo "$3:=y" >> $CONFIG; echo "yes") || (echo "no"; return 1)
10ed8b7f 18}
19
601f60e5
MF
20check_toolchain()
21{
07a6f5ec
SH
22 : ${PKG_CONFIG:=pkg-config}
23 : ${AR=ar}
24 : ${CC=gcc}
5f1df307
SH
25 echo "PKG_CONFIG:=${PKG_CONFIG}" >>$CONFIG
26 echo "AR:=${AR}" >>$CONFIG
27 echo "CC:=${CC}" >>$CONFIG
601f60e5
MF
28}
29
14743a78 30check_atm()
f1a0125b 31{
07a6f5ec 32 cat >$TMPDIR/atmtest.c <<EOF
c830d77b
SH
33#include <atm.h>
34int main(int argc, char **argv) {
35 struct atm_qos qos;
36 (void) text2qos("aal5,ubr:sdu=9180,rx:none",&qos,0);
37 return 0;
38}
39EOF
07a6f5ec
SH
40
41 $CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1
42 if [ $? -eq 0 ]
43 then
5f1df307 44 echo "TC_CONFIG_ATM:=y" >>$CONFIG
07a6f5ec
SH
45 echo yes
46 else
47 echo no
48 fi
49 rm -f $TMPDIR/atmtest.c $TMPDIR/atmtest
f1a0125b 50}
63c7d26f 51
4710e46e
DB
52check_xtables()
53{
54 if ! ${PKG_CONFIG} xtables --exists
55 then
5f1df307 56 echo "TC_CONFIG_NO_XT:=y" >>$CONFIG
4710e46e
DB
57 fi
58}
59
14743a78 60check_xt()
f1a0125b 61{
07a6f5ec
SH
62 #check if we have xtables from iptables >= 1.4.5.
63 cat >$TMPDIR/ipttest.c <<EOF
a36ceb85
AH
64#include <xtables.h>
65#include <linux/netfilter.h>
66static struct xtables_globals test_globals = {
67 .option_offset = 0,
68 .program_name = "tc-ipt",
69 .program_version = XTABLES_VERSION,
70 .orig_opts = NULL,
71 .opts = NULL,
72 .exit_err = NULL,
73};
74
75int main(int argc, char **argv)
76{
77 xtables_init_all(&test_globals, NFPROTO_IPV4);
78 return 0;
79}
a36ceb85
AH
80EOF
81
07a6f5ec
SH
82 if $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL \
83 $(${PKG_CONFIG} xtables --cflags --libs) -ldl >/dev/null 2>&1
84 then
5f1df307 85 echo "TC_CONFIG_XT:=y" >>$CONFIG
f1a0125b 86 echo "using xtables"
07a6f5ec
SH
87 fi
88 rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
f1a0125b
AH
89}
90
14743a78 91check_xt_old()
f1a0125b 92{
5cc46394 93 # bail if previous XT checks has already succeeded.
5f1df307 94 if grep -q TC_CONFIG_XT $CONFIG
07a6f5ec 95 then
f1a0125b 96 return
07a6f5ec 97 fi
a36ceb85 98
5cc46394 99 #check if we don't need our internal header ..
07a6f5ec 100 cat >$TMPDIR/ipttest.c <<EOF
63c7d26f
JHS
101#include <xtables.h>
102char *lib_dir;
103unsigned int global_option_offset = 0;
104const char *program_version = XTABLES_VERSION;
105const char *program_name = "tc-ipt";
106struct afinfo afinfo = {
107 .libprefix = "libxt_",
108};
109
110void exit_error(enum exittype status, const char *msg, ...)
111{
112}
113
114int main(int argc, char **argv) {
115
116 return 0;
117}
118
119EOF
63c7d26f 120
07a6f5ec
SH
121 $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
122 if [ $? -eq 0 ]
123 then
5f1df307 124 echo "TC_CONFIG_XT_OLD:=y" >>$CONFIG
f1a0125b 125 echo "using old xtables (no need for xt-internal.h)"
07a6f5ec
SH
126 fi
127 rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
f1a0125b
AH
128}
129
14743a78 130check_xt_old_internal_h()
f1a0125b 131{
5cc46394 132 # bail if previous XT checks has already succeeded.
5f1df307 133 if grep -q TC_CONFIG_XT $CONFIG
07a6f5ec 134 then
f1a0125b 135 return
07a6f5ec 136 fi
63c7d26f 137
07a6f5ec
SH
138 #check if we need our own internal.h
139 cat >$TMPDIR/ipttest.c <<EOF
63c7d26f
JHS
140#include <xtables.h>
141#include "xt-internal.h"
142char *lib_dir;
143unsigned int global_option_offset = 0;
144const char *program_version = XTABLES_VERSION;
145const char *program_name = "tc-ipt";
146struct afinfo afinfo = {
147 .libprefix = "libxt_",
148};
149
150void exit_error(enum exittype status, const char *msg, ...)
151{
152}
153
154int main(int argc, char **argv) {
155
156 return 0;
157}
158
159EOF
07a6f5ec 160 $CC -I$INCLUDE $IPTC -o $TMPDIR/ipttest $TMPDIR/ipttest.c $IPTL -ldl >/dev/null 2>&1
63c7d26f 161
07a6f5ec
SH
162 if [ $? -eq 0 ]
163 then
164 echo "using old xtables with xt-internal.h"
5f1df307 165 echo "TC_CONFIG_XT_OLD_H:=y" >>$CONFIG
07a6f5ec
SH
166 fi
167 rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
f1a0125b
AH
168}
169
14743a78 170check_ipt()
f1a0125b 171{
5f1df307 172 if ! grep TC_CONFIG_XT $CONFIG > /dev/null
f1a0125b
AH
173 then
174 echo "using iptables"
175 fi
176}
177
12ddfff7
AH
178check_ipt_lib_dir()
179{
e4fc4ada 180 IPT_LIB_DIR=$(${PKG_CONFIG} --variable=xtlibdir xtables)
da7fbb24
LW
181 if [ -n "$IPT_LIB_DIR" ]; then
182 echo $IPT_LIB_DIR
5f1df307 183 echo "IPT_LIB_DIR:=$IPT_LIB_DIR" >> $CONFIG
da7fbb24
LW
184 return
185 fi
186
12ddfff7
AH
187 for dir in /lib /usr/lib /usr/local/lib
188 do
44e743e5 189 for file in $dir/{xtables,iptables}/lib*t_*so ; do
12ddfff7 190 if [ -f $file ]; then
44e743e5 191 echo ${file%/*}
5f1df307 192 echo "IPT_LIB_DIR:=${file%/*}" >> $CONFIG
12ddfff7
AH
193 return
194 fi
195 done
196 done
197 echo "not found!"
198}
199
2e8a07f5
EB
200check_setns()
201{
07a6f5ec 202 cat >$TMPDIR/setnstest.c <<EOF
2e8a07f5 203#include <sched.h>
d116ff34 204int main(int argc, char **argv)
2e8a07f5
EB
205{
206 (void)setns(0,0);
207 return 0;
208}
209EOF
07a6f5ec
SH
210 $CC -I$INCLUDE -o $TMPDIR/setnstest $TMPDIR/setnstest.c >/dev/null 2>&1
211 if [ $? -eq 0 ]
212 then
5f1df307 213 echo "IP_CONFIG_SETNS:=y" >>$CONFIG
2e8a07f5 214 echo "yes"
5f1df307 215 echo "CFLAGS += -DHAVE_SETNS" >>$CONFIG
07a6f5ec 216 else
2e8a07f5 217 echo "no"
07a6f5ec
SH
218 fi
219 rm -f $TMPDIR/setnstest.c $TMPDIR/setnstest
2e8a07f5
EB
220}
221
8194411a
FW
222check_ipset()
223{
07a6f5ec 224 cat >$TMPDIR/ipsettest.c <<EOF
8194411a
FW
225#include <linux/netfilter/ipset/ip_set.h>
226#ifndef IP_SET_INVALID
227#define IPSET_DIM_MAX 3
228typedef unsigned short ip_set_id_t;
229#endif
230#include <linux/netfilter/xt_set.h>
231
232struct xt_set_info info;
233#if IPSET_PROTOCOL == 6
234int main(void)
235{
236 return IPSET_MAXNAMELEN;
237}
238#else
239#error unknown ipset version
240#endif
241EOF
242
07a6f5ec
SH
243 if $CC -I$INCLUDE -o $TMPDIR/ipsettest $TMPDIR/ipsettest.c >/dev/null 2>&1
244 then
5f1df307 245 echo "TC_CONFIG_IPSET:=y" >>$CONFIG
8194411a 246 echo "yes"
07a6f5ec 247 else
8194411a 248 echo "no"
07a6f5ec
SH
249 fi
250 rm -f $TMPDIR/ipsettest.c $TMPDIR/ipsettest
8194411a
FW
251}
252
11c39b5e
DB
253check_elf()
254{
5f1df307 255 if ${PKG_CONFIG} libelf --exists
11c39b5e 256 then
5f1df307 257 echo "HAVE_ELF:=y" >>$CONFIG
11c39b5e 258 echo "yes"
5f1df307
SH
259
260 echo 'CFLAGS += -DHAVE_ELF' `${PKG_CONFIG} libelf --cflags` >> $CONFIG
261 echo 'LDLIBS += ' `${PKG_CONFIG} libelf --libs` >>$CONFIG
11c39b5e
DB
262 else
263 echo "no"
264 fi
11c39b5e
DB
265}
266
116ac927
RH
267check_selinux()
268# SELinux is a compile time option in the ss utility
269{
270 if ${PKG_CONFIG} libselinux --exists
271 then
5f1df307 272 echo "HAVE_SELINUX:=y" >>$CONFIG
116ac927 273 echo "yes"
5f1df307
SH
274
275 echo 'LDLIBS +=' `${PKG_CONFIG} --libs libselinux` >>$CONFIG
276 echo 'CFLAGS += -DHAVE_SELINUX' `${PKG_CONFIG} --cflags libselinux` >>$CONFIG
116ac927
RH
277 else
278 echo "no"
279 fi
280}
281
b6907403
VK
282check_mnl()
283{
284 if ${PKG_CONFIG} libmnl --exists
285 then
5f1df307 286 echo "HAVE_MNL:=y" >>$CONFIG
a25df488 287 echo "yes"
5f1df307
SH
288
289 echo 'CFLAGS += -DHAVE_LIBMNL' `${PKG_CONFIG} libmnl --cflags` >>$CONFIG
290 echo 'LDLIBS +=' `${PKG_CONFIG} libmnl --libs` >> $CONFIG
b6907403 291 else
a25df488 292 echo "no"
b6907403
VK
293 fi
294}
295
a25df488
VK
296check_berkeley_db()
297{
298 cat >$TMPDIR/dbtest.c <<EOF
299#include <fcntl.h>
300#include <stdlib.h>
301#include <db_185.h>
302int main(int argc, char **argv) {
303 dbopen("/tmp/xxx_test_db.db", O_CREAT|O_RDWR, 0644, DB_HASH, NULL);
304 return 0;
305}
306EOF
307 $CC -I$INCLUDE -o $TMPDIR/dbtest $TMPDIR/dbtest.c -ldb >/dev/null 2>&1
308 if [ $? -eq 0 ]
309 then
5f1df307 310 echo "HAVE_BERKELEY_DB:=y" >>$CONFIG
a25df488
VK
311 echo "yes"
312 else
313 echo "no"
314 fi
315 rm -f $TMPDIR/dbtest.c $TMPDIR/dbtest
316}
317
4f6b7338
BS
318check_strlcpy()
319{
320 cat >$TMPDIR/strtest.c <<EOF
321#include <string.h>
322int main(int argc, char **argv) {
323 char dst[10];
324 strlcpy(dst, "test", sizeof(dst));
325 return 0;
326}
327EOF
328 $CC -I$INCLUDE -o $TMPDIR/strtest $TMPDIR/strtest.c >/dev/null 2>&1
329 if [ $? -eq 0 ]
330 then
331 echo "no"
332 else
508f3c23
LB
333 if ${PKG_CONFIG} libbsd --exists
334 then
335 echo 'CFLAGS += -DHAVE_LIBBSD' `${PKG_CONFIG} libbsd --cflags` >>$CONFIG
336 echo 'LDLIBS +=' `${PKG_CONFIG} libbsd --libs` >> $CONFIG
337 echo "no"
338 else
339 echo 'CFLAGS += -DNEED_STRLCPY' >>$CONFIG
340 echo "yes"
341 fi
4f6b7338
BS
342 fi
343 rm -f $TMPDIR/strtest.c $TMPDIR/strtest
344}
345
ba2fc55b
LB
346check_cap()
347{
348 if ${PKG_CONFIG} libcap --exists
349 then
350 echo "HAVE_CAP:=y" >>$CONFIG
351 echo "yes"
352
353 echo 'CFLAGS += -DHAVE_LIBCAP' `${PKG_CONFIG} libcap --cflags` >>$CONFIG
354 echo 'LDLIBS +=' `${PKG_CONFIG} libcap --libs` >> $CONFIG
355 else
356 echo "no"
357 fi
358}
359
57bdf8b7
DA
360quiet_config()
361{
362 cat <<EOF
363# user can control verbosity similar to kernel builds (e.g., V=1)
364ifeq ("\$(origin V)", "command line")
365 VERBOSE = \$(V)
366endif
367ifndef VERBOSE
368 VERBOSE = 0
369endif
370ifeq (\$(VERBOSE),1)
371 Q =
372else
373 Q = @
374endif
375
376ifeq (\$(VERBOSE), 0)
377 QUIET_CC = @echo ' CC '\$@;
378 QUIET_AR = @echo ' AR '\$@;
379 QUIET_LINK = @echo ' LINK '\$@;
380 QUIET_YACC = @echo ' YACC '\$@;
381 QUIET_LEX = @echo ' LEX '\$@;
382endif
383EOF
384}
385
5f1df307
SH
386echo "# Generated config based on" $INCLUDE >$CONFIG
387quiet_config >> $CONFIG
57bdf8b7 388
601f60e5 389check_toolchain
f1a0125b
AH
390
391echo "TC schedulers"
392
393echo -n " ATM "
394check_atm
395
4710e46e 396check_xtables
5f1df307 397if ! grep -q TC_CONFIG_NO_XT $CONFIG
4710e46e
DB
398then
399 echo -n " IPT "
400 check_xt
401 check_xt_old
402 check_xt_old_internal_h
403 check_ipt
f1a0125b 404
4710e46e
DB
405 echo -n " IPSET "
406 check_ipset
407fi
8194411a 408
aaf70458 409echo
5f1df307 410if ! grep -q TC_CONFIG_NO_XT $CONFIG
4710e46e
DB
411then
412 echo -n "iptables modules directory: "
413 check_ipt_lib_dir
414fi
2e8a07f5
EB
415
416echo -n "libc has setns: "
417check_setns
116ac927
RH
418
419echo -n "SELinux support: "
420check_selinux
10ed8b7f 421
11c39b5e
DB
422echo -n "ELF support: "
423check_elf
424
b6907403
VK
425echo -n "libmnl support: "
426check_mnl
b6907403 427
a25df488
VK
428echo -n "Berkeley DB: "
429check_berkeley_db
430
4f6b7338
BS
431echo -n "need for strlcpy: "
432check_strlcpy
433
ba2fc55b
LB
434echo -n "libcap support: "
435check_cap
436
5f1df307
SH
437echo >> $CONFIG
438echo "%.o: %.c" >> $CONFIG
1a03ac6b 439echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CPPFLAGS) -c -o $@ $<' >> $CONFIG