]> git.proxmox.com Git - mirror_iproute2.git/blame - configure
devlink: Convert conditional in dl_argv_handle_port() to switch()
[mirror_iproute2.git] / configure
CommitLineData
449bf1f3 1#! /bin/bash
07a6f5ec 2# This is not an autoconf generated configure
449bf1f3 3#
4b1bbd9c 4INCLUDE=${1:-"$PWD/include"}
449bf1f3 5
e557d1ac
SH
6# Make a temp directory in build tree.
7TMPDIR=$(mktemp -d config.XXXXXX)
c2f7d6c7 8trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM
e557d1ac 9
10ed8b7f 10check_prog()
11{
12 echo -n "$2"
13 command -v $1 >/dev/null 2>&1 && (echo "$3:=y" >> Config; echo "yes") || (echo "no"; return 1)
14}
15
16check_docs()
17{
18 if check_prog latex " latex: " HAVE_LATEX; then
19 check_prog pdflatex " pdflatex: " HAVE_PDFLATEX || echo " WARNING: no PDF docs can be built from LaTeX files"
20 check_prog sgml2latex " sgml2latex: " HAVE_SGML2LATEX || echo " WARNING: no LaTeX files can be build from SGML files"
21 else
22 echo " WARNING: no docs can be built from LaTeX files"
23 fi
24
25 check_prog sgml2html " sgml2html: " HAVE_SGML2HTML || echo " WARNING: no HTML docs can be built from SGML"
26}
27
601f60e5
MF
28check_toolchain()
29{
07a6f5ec
SH
30 : ${PKG_CONFIG:=pkg-config}
31 : ${AR=ar}
32 : ${CC=gcc}
ae7b9a0d 33 echo "PKG_CONFIG:=${PKG_CONFIG}" >>Config
07a6f5ec
SH
34 echo "AR:=${AR}" >>Config
35 echo "CC:=${CC}" >>Config
601f60e5
MF
36}
37
14743a78 38check_atm()
f1a0125b 39{
07a6f5ec 40 cat >$TMPDIR/atmtest.c <<EOF
c830d77b
SH
41#include <atm.h>
42int main(int argc, char **argv) {
43 struct atm_qos qos;
44 (void) text2qos("aal5,ubr:sdu=9180,rx:none",&qos,0);
45 return 0;
46}
47EOF
07a6f5ec
SH
48
49 $CC -I$INCLUDE -o $TMPDIR/atmtest $TMPDIR/atmtest.c -latm >/dev/null 2>&1
50 if [ $? -eq 0 ]
51 then
52 echo "TC_CONFIG_ATM:=y" >>Config
53 echo yes
54 else
55 echo no
56 fi
57 rm -f $TMPDIR/atmtest.c $TMPDIR/atmtest
f1a0125b 58}
63c7d26f 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
a36ceb85 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{
07a6f5ec
SH
93 # bail if previous XT checks has already succeded.
94 if grep -q TC_CONFIG_XT Config
95 then
f1a0125b 96 return
07a6f5ec 97 fi
a36ceb85 98
07a6f5ec
SH
99 #check if we dont need our internal header ..
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
80d689d0 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{
07a6f5ec
SH
132 # bail if previous XT checks has already succeded.
133 if grep -q TC_CONFIG_XT Config
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"
165 echo "TC_CONFIG_XT_OLD_H:=y" >>Config
166 fi
167 rm -f $TMPDIR/ipttest.c $TMPDIR/ipttest
f1a0125b
AH
168}
169
14743a78 170check_ipt()
f1a0125b
AH
171{
172 if ! grep TC_CONFIG_XT Config > /dev/null
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
183 echo "IPT_LIB_DIR:=$IPT_LIB_DIR" >> Config
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
DM
191 echo ${file%/*}
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
2e8a07f5
EB
213 echo "IP_CONFIG_SETNS:=y" >>Config
214 echo "yes"
07a6f5ec 215 else
2e8a07f5 216 echo "no"
07a6f5ec
SH
217 fi
218 rm -f $TMPDIR/setnstest.c $TMPDIR/setnstest
2e8a07f5
EB
219}
220
8194411a
FW
221check_ipset()
222{
07a6f5ec 223 cat >$TMPDIR/ipsettest.c <<EOF
8194411a
FW
224#include <linux/netfilter/ipset/ip_set.h>
225#ifndef IP_SET_INVALID
226#define IPSET_DIM_MAX 3
227typedef unsigned short ip_set_id_t;
228#endif
229#include <linux/netfilter/xt_set.h>
230
231struct xt_set_info info;
232#if IPSET_PROTOCOL == 6
233int main(void)
234{
235 return IPSET_MAXNAMELEN;
236}
237#else
238#error unknown ipset version
239#endif
240EOF
241
07a6f5ec
SH
242 if $CC -I$INCLUDE -o $TMPDIR/ipsettest $TMPDIR/ipsettest.c >/dev/null 2>&1
243 then
8194411a
FW
244 echo "TC_CONFIG_IPSET:=y" >>Config
245 echo "yes"
07a6f5ec 246 else
8194411a 247 echo "no"
07a6f5ec
SH
248 fi
249 rm -f $TMPDIR/ipsettest.c $TMPDIR/ipsettest
8194411a
FW
250}
251
11c39b5e
DB
252check_elf()
253{
254 cat >$TMPDIR/elftest.c <<EOF
255#include <libelf.h>
256#include <gelf.h>
257int main(void)
258{
259 Elf_Scn *scn;
260 GElf_Shdr shdr;
261 return elf_version(EV_CURRENT);
262}
263EOF
264
265 if $CC -I$INCLUDE -o $TMPDIR/elftest $TMPDIR/elftest.c -lelf >/dev/null 2>&1
266 then
267 echo "TC_CONFIG_ELF:=y" >>Config
268 echo "yes"
269 else
270 echo "no"
271 fi
272 rm -f $TMPDIR/elftest.c $TMPDIR/elftest
273}
274
116ac927
RH
275check_selinux()
276# SELinux is a compile time option in the ss utility
277{
278 if ${PKG_CONFIG} libselinux --exists
279 then
280 echo "HAVE_SELINUX:=y" >>Config
281 echo "yes"
282 else
283 echo "no"
284 fi
285}
286
b6907403
VK
287check_mnl()
288{
289 if ${PKG_CONFIG} libmnl --exists
290 then
291 echo "HAVE_MNL:=y" >>Config
a25df488 292 echo "yes"
b6907403 293 else
a25df488 294 echo "no"
b6907403
VK
295 fi
296}
297
a25df488
VK
298check_berkeley_db()
299{
300 cat >$TMPDIR/dbtest.c <<EOF
301#include <fcntl.h>
302#include <stdlib.h>
303#include <db_185.h>
304int main(int argc, char **argv) {
305 dbopen("/tmp/xxx_test_db.db", O_CREAT|O_RDWR, 0644, DB_HASH, NULL);
306 return 0;
307}
308EOF
309 $CC -I$INCLUDE -o $TMPDIR/dbtest $TMPDIR/dbtest.c -ldb >/dev/null 2>&1
310 if [ $? -eq 0 ]
311 then
312 echo "HAVE_BERKELEY_DB:=y" >>Config
313 echo "yes"
314 else
315 echo "no"
316 fi
317 rm -f $TMPDIR/dbtest.c $TMPDIR/dbtest
318}
319
57bdf8b7
DA
320quiet_config()
321{
322 cat <<EOF
323# user can control verbosity similar to kernel builds (e.g., V=1)
324ifeq ("\$(origin V)", "command line")
325 VERBOSE = \$(V)
326endif
327ifndef VERBOSE
328 VERBOSE = 0
329endif
330ifeq (\$(VERBOSE),1)
331 Q =
332else
333 Q = @
334endif
335
336ifeq (\$(VERBOSE), 0)
337 QUIET_CC = @echo ' CC '\$@;
338 QUIET_AR = @echo ' AR '\$@;
339 QUIET_LINK = @echo ' LINK '\$@;
340 QUIET_YACC = @echo ' YACC '\$@;
341 QUIET_LEX = @echo ' LEX '\$@;
342endif
343EOF
344}
345
f1a0125b 346echo "# Generated config based on" $INCLUDE >Config
57bdf8b7
DA
347quiet_config >> Config
348
601f60e5 349check_toolchain
f1a0125b
AH
350
351echo "TC schedulers"
352
353echo -n " ATM "
354check_atm
355
356echo -n " IPT "
357check_xt
358check_xt_old
359check_xt_old_internal_h
360check_ipt
361
8194411a
FW
362echo -n " IPSET "
363check_ipset
364
aaf70458
SH
365echo
366echo -n "iptables modules directory: "
12ddfff7 367check_ipt_lib_dir
2e8a07f5
EB
368
369echo -n "libc has setns: "
370check_setns
116ac927
RH
371
372echo -n "SELinux support: "
373check_selinux
10ed8b7f 374
11c39b5e
DB
375echo -n "ELF support: "
376check_elf
377
b6907403
VK
378echo -n "libmnl support: "
379check_mnl
b6907403 380
a25df488
VK
381echo -n "Berkeley DB: "
382check_berkeley_db
383
aaf70458
SH
384echo
385echo -n "docs:"
10ed8b7f 386check_docs
aaf70458 387echo
57bdf8b7
DA
388
389echo >> Config
390echo "%.o: %.c" >> Config
391echo ' $(QUIET_CC)$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<' >> Config