1#
2# SI6 Networks' IPv6 toolkit Makefile
3#
4# Notes to package developers:
5#
6# By default, binaries will be installed in /usr/local/bin, manual pages in
7# /usr/local/man, data files in /usr/local/share/ipv6toolkit, and configuration
8# files in /etc
9#
10# The path of the binaries and data files can be overriden by setting "PREFIX"
11# variable accordingly. The path of the manual pages can be overriden by setting
12# the MANPREFIX variable. Typically, packages will set these variables as follows:
13#
14# PREFIX=/usr
15# MANPREFIX=/usr/share
16#
17# Finally, please note that this makefile supports the DESTDIR variable, as
18# typically employed by package developers.
19
20
21CC?=gcc
22CFLAGS+= -Wall
23LDFLAGS+= -lpcap -lm
24
25.ifndef(PREFIX)
26PREFIX=/usr/local
27.ifndef(MANPREFIX)
28MANPREFIX=/usr/local
29.endif
30.else
31.ifndef(MANPREFIX)
32MANPREFIX=/usr/share
33.endif
34.endif
35
36ETCPATH= $(DESTDIR)/etc
37MANPATH= $(DESTDIR)$(MANPREFIX)/man
38DATAPATH= $(DESTDIR)$(PREFIX)/share/ipv6toolkit
39BINPATH= $(DESTDIR)$(PREFIX)/bin
40SBINPATH= $(DESTDIR)$(PREFIX)/sbin
41SRCPATH= tools
42
43
44SBINTOOLS= blackhole6 flow6 frag6 icmp6 jumbo6 na6 ni6 ns6 path6 ra6 rd6 rs6 scan6 script6 tcp6 udp6
45BINTOOLS= addr6
46TOOLS= $(BINTOOLS) $(SBINTOOLS)
47LIBS= libipv6.o
48
49all: $(TOOLS) data/ipv6toolkit.conf
50
51addr6: $(SRCPATH)/addr6.c $(SRCPATH)/addr6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
52	$(CC) $(CPPFLAGS) $(CFLAGS) -o addr6 $(SRCPATH)/addr6.c $(LIBS) $(LDFLAGS)
53
54blackhole6: $(SRCPATH)/blackhole6
55	cp $(SRCPATH)/blackhole6 ./
56
57flow6: $(SRCPATH)/flow6.c $(SRCPATH)/flow6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
58	$(CC) $(CPPFLAGS) $(CFLAGS) -o flow6 $(SRCPATH)/flow6.c $(LIBS) $(LDFLAGS)
59
60frag6: $(SRCPATH)/frag6.c $(SRCPATH)/frag6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
61	$(CC) $(CPPFLAGS) $(CFLAGS) -o frag6 $(SRCPATH)/frag6.c $(LIBS) $(LDFLAGS)
62
63icmp6: $(SRCPATH)/icmp6.c $(SRCPATH)/icmp6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
64	$(CC) $(CPPFLAGS) $(CFLAGS) -o icmp6 $(SRCPATH)/icmp6.c $(LIBS) $(LDFLAGS)
65
66jumbo6: $(SRCPATH)/jumbo6.c $(SRCPATH)/jumbo6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
67	$(CC) $(CPPFLAGS) $(CFLAGS) -o jumbo6 $(SRCPATH)/jumbo6.c $(LIBS) $(LDFLAGS)
68
69na6: $(SRCPATH)/na6.c $(SRCPATH)/na6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
70	$(CC) $(CPPFLAGS) $(CFLAGS) -o na6 $(SRCPATH)/na6.c $(LIBS) $(LDFLAGS)
71
72ni6: $(SRCPATH)/ni6.c $(SRCPATH)/ni6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
73	$(CC) $(CPPFLAGS) $(CFLAGS) -o ni6 $(SRCPATH)/ni6.c $(LIBS) $(LDFLAGS)
74
75ns6: $(SRCPATH)/ns6.c $(SRCPATH)/ns6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
76	$(CC) $(CPPFLAGS) $(CFLAGS) -o ns6 $(SRCPATH)/ns6.c $(LIBS) $(LDFLAGS)
77
78path6: $(SRCPATH)/path6.c $(SRCPATH)/path6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
79	$(CC) $(CPPFLAGS) $(CFLAGS) -o path6 $(SRCPATH)/path6.c $(LIBS) $(LDFLAGS)
80
81ra6: $(SRCPATH)/ra6.c $(SRCPATH)/ra6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
82	$(CC) $(CPPFLAGS) $(CFLAGS) -o ra6 $(SRCPATH)/ra6.c $(LIBS) $(LDFLAGS)
83
84rd6: $(SRCPATH)/rd6.c $(SRCPATH)/rd6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
85	$(CC) $(CPPFLAGS) $(CFLAGS) -o rd6 $(SRCPATH)/rd6.c $(LIBS) $(LDFLAGS)
86
87rs6: $(SRCPATH)/rs6.c $(SRCPATH)/rs6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
88	$(CC) $(CPPFLAGS) $(CFLAGS) -o rs6 $(SRCPATH)/rs6.c $(LIBS) $(LDFLAGS)
89
90scan6: $(SRCPATH)/scan6.c $(SRCPATH)/scan6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
91	$(CC) $(CPPFLAGS) $(CFLAGS) -o scan6 $(SRCPATH)/scan6.c $(LIBS) $(LDFLAGS)
92
93script6: $(SRCPATH)/script6
94	cp $(SRCPATH)/script6 ./
95
96tcp6: $(SRCPATH)/tcp6.c $(SRCPATH)/tcp6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
97	$(CC) $(CPPFLAGS) $(CFLAGS) -o tcp6 $(SRCPATH)/tcp6.c $(LIBS) $(LDFLAGS)
98
99udp6: $(SRCPATH)/udp6.c $(SRCPATH)/udp6.h $(SRCPATH)/ipv6toolkit.h $(LIBS) $(SRCPATH)/libipv6.h
100	$(CC) $(CPPFLAGS) $(CFLAGS) -o udp6 $(SRCPATH)/udp6.c $(LIBS) $(LDFLAGS)
101
102libipv6.o: $(SRCPATH)/libipv6.c $(SRCPATH)/libipv6.h
103	$(CC) $(CPPFLAGS) $(CFLAGS) -c -o libipv6.o $(SRCPATH)/libipv6.c
104
105data/ipv6toolkit.conf:
106	echo "# SI6 Networks' IPv6 Toolkit Configuration File" > \
107           data/ipv6toolkit.conf
108	echo OUI-Database=$(PREFIX)/share/ipv6toolkit/oui.txt >> \
109           data/ipv6toolkit.conf
110	echo Ports-Database=$(PREFIX)/share/ipv6toolkit/service-names-port-numbers.csv >> \
111           data/ipv6toolkit.conf
112
113clean:
114	rm -f $(TOOLS) $(LIBS)
115	rm -f data/ipv6toolkit.conf
116
117install: all
118	# Install the binaries
119	install -m0755 -d $(BINPATH)
120	install -m0755 -d $(SBINPATH)
121	install -m0755 $(BINTOOLS) $(BINPATH)
122	install -m0755 $(SBINTOOLS) $(SBINPATH)
123
124	# Install the configuration file
125	install -m0755 -d $(ETCPATH)
126	install -m0644 data/ipv6toolkit.conf $(ETCPATH)
127
128	# Install the IEEE OUI database
129	install -m0755 -d $(DATAPATH)
130	install -m0644 data/oui.txt $(DATAPATH)
131
132	# Install the port numbers database
133	install -m0644 data/service-names-port-numbers.csv $(DATAPATH)
134
135	# Install the manual pages
136	install -m0755 -d $(MANPATH)/man1
137	install -m0644 manuals/*.1 $(MANPATH)/man1
138	install -m0755 -d $(MANPATH)/man5
139	install -m0644 manuals/*.5 $(MANPATH)/man5
140	install -m0755 -d $(MANPATH)/man7
141	install -m0644 manuals/*.7 $(MANPATH)/man7
142
143uninstall:
144	# Remove the binaries
145	rm -f $(BINPATH)/addr6
146	rm -f $(SBINPATH)/blackhole6
147	rm -f $(SBINPATH)/flow6
148	rm -f $(SBINPATH)/frag6
149	rm -f $(SBINPATH)/icmp6
150	rm -f $(SBINPATH)/jumbo6
151	rm -f $(SBINPATH)/na6
152	rm -f $(SBINPATH)/ni6
153	rm -f $(SBINPATH)/ns6
154	rm -f $(SBINPATH)/path6
155	rm -f $(SBINPATH)/ra6
156	rm -f $(SBINPATH)/rd6
157	rm -f $(SBINPATH)/rs6
158	rm -f $(SBINPATH)/scan6
159	rm -f $(SBINPATH)/script6
160	rm -f $(SBINPATH)/tcp6
161	rm -f $(SBINPATH)/udp6
162
163	# Remove the configuration file
164	rm -f $(ETCPATH)/ipv6toolkit.conf
165
166	# Remove the IEEE OUI database
167	rm -rf $(DATAPATH)
168
169	# Remove the manual pages
170	rm -f $(MANPATH)/man1/addr6.1
171	rm -f $(MANPATH)/man1/blackhole.1
172	rm -f $(MANPATH)/man1/flow6.1
173	rm -f $(MANPATH)/man1/frag6.1
174	rm -f $(MANPATH)/man1/icmp6.1
175	rm -f $(MANPATH)/man1/jumbo6.1
176	rm -f $(MANPATH)/man1/na6.1
177	rm -f $(MANPATH)/man1/ni6.1
178	rm -f $(MANPATH)/man1/ns6.1
179	rm -f $(MANPATH)/man1/path6.1
180	rm -f $(MANPATH)/man1/ra6.1
181	rm -f $(MANPATH)/man1/rd6.1
182	rm -f $(MANPATH)/man1/rs6.1
183	rm -f $(MANPATH)/man1/scan6.1
184	rm -f $(MANPATH)/man1/script6.1
185	rm -f $(MANPATH)/man1/tcp6.1
186	rm -f $(MANPATH)/man1/udp6.1
187	rm -f $(MANPATH)/man5/ipv6toolkit.conf.5
188	rm -f $(MANPATH)/man7/ipv6toolkit.7
189
190