1#! /bin/bash
2# This is not an autconf generated configure
3#
4INCLUDE=${1:-"$PWD/include"}
5
6check_atm()
7{
8cat >/tmp/atmtest.c <<EOF
9#include <atm.h>
10int main(int argc, char **argv) {
11	struct atm_qos qos;
12	(void) text2qos("aal5,ubr:sdu=9180,rx:none",&qos,0);
13	return 0;
14}
15EOF
16${CROSS_COMPILE}gcc -I$INCLUDE -o /tmp/atmtest /tmp/atmtest.c -latm >/dev/null 2>&1
17if [ $? -eq 0 ]
18then
19    echo "TC_CONFIG_ATM:=y" >>Config
20    echo yes
21else
22    echo no
23fi
24rm -f /tmp/atmtest.c /tmp/atmtest
25}
26
27check_xt()
28{
29#check if we have xtables from iptables >= 1.4.5.
30cat >/tmp/ipttest.c <<EOF
31#include <xtables.h>
32#include <linux/netfilter.h>
33static struct xtables_globals test_globals = {
34	.option_offset = 0,
35	.program_name = "tc-ipt",
36	.program_version = XTABLES_VERSION,
37	.orig_opts = NULL,
38	.opts = NULL,
39	.exit_err = NULL,
40};
41
42int main(int argc, char **argv)
43{
44	xtables_init_all(&test_globals, NFPROTO_IPV4);
45	return 0;
46}
47
48EOF
49
50if ${CROSS_COMPILE}gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl -lxtables >/dev/null 2>&1
51then
52	echo "TC_CONFIG_XT:=y" >>Config
53	echo "using xtables"
54fi
55rm -f /tmp/ipttest.c /tmp/ipttest
56}
57
58check_xt_old()
59{
60# bail if previous XT checks has already succeded.
61if grep TC_CONFIG_XT Config > /dev/null
62then
63	return
64fi
65
66#check if we dont need our internal header ..
67cat >/tmp/ipttest.c <<EOF
68#include <xtables.h>
69char *lib_dir;
70unsigned int global_option_offset = 0;
71const char *program_version = XTABLES_VERSION;
72const char *program_name = "tc-ipt";
73struct afinfo afinfo = {
74	.libprefix      = "libxt_",
75};
76
77void exit_error(enum exittype status, const char *msg, ...)
78{
79}
80
81int main(int argc, char **argv) {
82
83	return 0;
84}
85
86EOF
87${CROSS_COMPILE}gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
88
89if [ $? -eq 0 ]
90then
91	echo "TC_CONFIG_XT_OLD:=y" >>Config
92	echo "using old xtables (no need for xt-internal.h)"
93fi
94rm -f /tmp/ipttest.c /tmp/ipttest
95}
96
97check_xt_old_internal_h()
98{
99# bail if previous XT checks has already succeded.
100if grep TC_CONFIG_XT Config > /dev/null
101then
102	return
103fi
104
105#check if we need our own internal.h
106cat >/tmp/ipttest.c <<EOF
107#include <xtables.h>
108#include "xt-internal.h"
109char *lib_dir;
110unsigned int global_option_offset = 0;
111const char *program_version = XTABLES_VERSION;
112const char *program_name = "tc-ipt";
113struct afinfo afinfo = {
114	.libprefix      = "libxt_",
115};
116
117void exit_error(enum exittype status, const char *msg, ...)
118{
119}
120
121int main(int argc, char **argv) {
122
123	return 0;
124}
125
126EOF
127${CROSS_COMPILE}gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
128
129if [ $? -eq 0 ]
130then
131	echo "using old xtables with xt-internal.h"
132	echo "TC_CONFIG_XT_OLD_H:=y" >>Config
133fi
134rm -f /tmp/ipttest.c /tmp/ipttest
135}
136
137check_ipt()
138{
139	if ! grep TC_CONFIG_XT Config > /dev/null
140	then
141		echo "using iptables"
142	fi
143}
144
145check_ipt_lib_dir()
146{
147	echo "IPT_LIB_DIR:=/usr/lib/xtables" >> Config
148}
149
150echo "# Generated config based on" $INCLUDE >Config
151
152echo "TC schedulers"
153
154echo -n " ATM	"
155check_atm
156
157echo -n " IPT	"
158check_xt
159check_xt_old
160check_xt_old_internal_h
161check_ipt
162
163echo -n "iptables modules directory: "
164check_ipt_lib_dir
165