libpcap: Update shared-lib patch from Debian to fix linking problems
[openwrt/openwrt.git] / package / libs / libpcap / patches / 100-debian_shared_lib.patch
1 Debian-specific modifications to the upstream Makefile.in to
2 build a shared library.
3
4 --- a/Makefile.in
5 +++ b/Makefile.in
6 @@ -40,6 +40,14 @@ mandir = @mandir@
7 srcdir = @srcdir@
8 VPATH = @srcdir@
9
10 +# some defines for shared library compilation
11 +MAJ=0.8
12 +LIBVERSION=$(shell head -1 debian/changelog | perl -nle 'm/\S+\s+\((\S+)-\S+\)/ and print $$1')
13 +LIBNAME=pcap
14 +LIBRARY=lib$(LIBNAME).a
15 +SOLIBRARY=lib$(LIBNAME).so
16 +SHAREDLIB=$(SOLIBRARY).$(LIBVERSION)
17 +
18 #
19 # You shouldn't need to edit anything below.
20 #
21 @@ -69,7 +77,8 @@ INSTALL_RPCAPD=@INSTALL_RPCAPD@
22 EXTRA_NETWORK_LIBS=@EXTRA_NETWORK_LIBS@
23
24 # Standard CFLAGS for building members of a shared library
25 -FULL_CFLAGS = $(CCOPT) @V_LIB_CCOPT_FAT@ $(SHLIB_CCOPT) $(INCLS) $(DEFS) $(CFLAGS)
26 +FULL_CFLAGS = $(CCOPT) @V_LIB_CCOPT_FAT@ $(SHLIB_CCOPT) $(INCLS) $(DEFS) $(CFLAGS) $(CPPFLAGS)
27 +CFLAGS_SHARED = -shared -Wl,-soname,$(SOLIBRARY).$(MAJ) -Wl,--version-script=libpcap-symbols.lds
28
29 INSTALL = @INSTALL@
30 INSTALL_PROGRAM = @INSTALL_PROGRAM@
31 @@ -84,7 +93,11 @@ YACC = @YACC@
32 # problem if you don't own the file but can write to the directory.
33 .c.o:
34 @rm -f $@
35 - $(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
36 + $(CC) $(FULL_CFLAGS) -c -o $@ $(srcdir)/$*.c
37 +
38 +%_pic.o: %.c
39 + @rm -f $@
40 + $(CC) -fPIC $(FULL_CFLAGS) -c -o $@ $(srcdir)/$*.c
41
42 PSRC = pcap-@V_PCAP@.c @USB_SRC@ @BT_SRC@ @BT_MONITOR_SRC@ @NETFILTER_SRC@ @DBUS_SRC@ @NETMAP_SRC@ @RDMA_SRC@
43 FSRC = @V_FINDALLDEVS@
44 @@ -101,6 +114,7 @@ SRC = $(PSRC) $(FSRC) $(CSRC) $(SSRC) $(
45 # We would like to say "OBJ = $(SRC:.c=.o)" but Ultrix's make cannot
46 # hack the extra indirection
47 OBJ = $(PSRC:.c=.o) $(FSRC:.c=.o) $(CSRC:.c=.o) $(SSRC:.c=.o) $(GENSRC:.c=.o) $(LIBOBJS)
48 +OBJ_PIC = $(PSRC:.c=_pic.o) $(FSRC:.c=_pic.o) $(CSRC:.c=_pic.o) $(SSRC:.c=_pic.o) $(GENSRC:.c=_pic.o) $(LIBOBJS:.o=_pic.o)
49 PUBHDR = \
50 pcap.h \
51 pcap-bpf.h \
52 @@ -155,7 +169,7 @@ TAGFILES = \
53
54 CLEANFILES = $(OBJ) libpcap.a libpcap.so.`cat $(srcdir)/VERSION` \
55 $(PROG)-`cat $(srcdir)/VERSION`.tar.gz $(GENSRC) $(GENHDR) \
56 - lex.yy.c pcap-config libpcap.pc
57 + lex.yy.c pcap-config libpcap.pc $(OBJ_PIC)
58
59 MAN1 = pcap-config.1
60
61 @@ -392,7 +406,7 @@ libpcap.a: $(OBJ)
62 $(AR) rc $@ $(OBJ) $(ADDLARCHIVEOBJS)
63 $(RANLIB) $@
64
65 -shared: libpcap.$(DYEXT)
66 +shared: $(SHAREDLIB)
67
68 libpcap.so: $(OBJ)
69 @rm -f $@
70 @@ -468,6 +482,13 @@ libpcap.shareda: $(OBJ)
71 #
72 libpcap.none:
73
74 +$(SHAREDLIB): $(OBJ_PIC)
75 + -@rm -f $@
76 + -@rm -f $(SOLIBRARY) $(SOLIBRARY).$(MAJ)
77 + $(CC) $(CFLAGS_SHARED) $(LDFLAGS) -o $(SHAREDLIB) $(OBJ_PIC) -lc $(LIBS)
78 + ln -s $(SHAREDLIB) $(SOLIBRARY).$(MAJ)
79 + ln -s $(SOLIBRARY).$(MAJ) $(SOLIBRARY)
80 +
81 scanner.c: $(srcdir)/scanner.l
82 $(LEX) -P pcap_ --header-file=scanner.h --nounput -o scanner.c $<
83 scanner.h: scanner.c
84 @@ -480,6 +501,9 @@ scanner.h: scanner.c
85 scanner.o: scanner.c grammar.h
86 $(CC) $(FULL_CFLAGS) -c scanner.c
87
88 +scanner_pic.o: scanner.c grammar.h
89 + $(CC) -fPIC $(FULL_CFLAGS) -o $@ -c scanner.c
90 +
91 grammar.c: $(srcdir)/grammar.y
92 $(YACC) -p pcap_ -o grammar.c -d $<
93 grammar.h: grammar.c
94 @@ -492,6 +516,10 @@ grammar.h: grammar.c
95 grammar.o: grammar.c scanner.h
96 $(CC) $(FULL_CFLAGS) -c grammar.c
97
98 +grammar_pic.o: grammar.c
99 + @rm -f $@
100 + $(CC) -fPIC $(FULL_CFLAGS) -o $@ -c grammar.c
101 +
102 gencode.o: $(srcdir)/gencode.c grammar.h scanner.h
103 $(CC) $(FULL_CFLAGS) -c $(srcdir)/gencode.c
104
105 @@ -504,9 +532,17 @@ snprintf.o: $(srcdir)/missing/snprintf.c
106 strlcat.o: $(srcdir)/missing/strlcat.c
107 $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcat.c
108
109 +strlcat_pic.o: $(srcdir)/missing/strlcat.c
110 + @rm -f $@
111 + $(CC) -fPIC $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcat.c
112 +
113 strlcpy.o: $(srcdir)/missing/strlcpy.c
114 $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcpy.c
115
116 +strlcpy_pic.o: $(srcdir)/missing/strlcpy.c
117 + @rm -f $@
118 + $(CC) -fPIC $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strlcpy.c
119 +
120 strtok_r.o: $(srcdir)/missing/strtok_r.c
121 $(CC) $(FULL_CFLAGS) -o $@ -c $(srcdir)/missing/strtok_r.c
122
123 @@ -539,6 +575,9 @@ pcap-config: $(srcdir)/pcap-config.in ./
124 mv $@.tmp $@
125 chmod a+x $@
126
127 +bpf_filter_pic.o: bpf_filter.c
128 + $(CC) -fPIC $(FULL_CFLAGS) -c bpf_filter.c -o $@
129 +
130 #
131 # Remote pcap daemon.
132 #
133 @@ -635,11 +674,9 @@ install-shared: install-shared-$(DYEXT)
134 install-shared-so: libpcap.so
135 [ -d $(DESTDIR)$(libdir) ] || \
136 (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
137 - VER=`cat $(srcdir)/VERSION`; \
138 - MAJOR_VER=`sed 's/\([0-9][0-9]*\)\..*/\1/' $(srcdir)/VERSION`; \
139 - $(INSTALL_PROGRAM) libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$VER; \
140 - ln -sf libpcap.so.$$VER $(DESTDIR)$(libdir)/libpcap.so.$$MAJOR_VER; \
141 - ln -sf libpcap.so.$$MAJOR_VER $(DESTDIR)$(libdir)/libpcap.so
142 + $(INSTALL_DATA) $(SHAREDLIB) $(DESTDIR)$(libdir)/
143 + ln -sf $(SHAREDLIB) $(DESTDIR)$(libdir)/$(SOLIBRARY).$(MAJ)
144 + ln -sf $(SOLIBRARY).$(MAJ) $(DESTDIR)$(libdir)/$(SOLIBRARY)
145 install-shared-dylib: libpcap.dylib
146 [ -d $(DESTDIR)$(libdir) ] || \
147 (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
148 --- a/aclocal.m4
149 +++ b/aclocal.m4
150 @@ -507,7 +507,7 @@ AC_DEFUN(AC_LBL_SHLIBS_INIT,
151 esac
152 ;;
153 esac
154 - V_SHLIB_CCOPT="$V_SHLIB_CCOPT $PIC_OPT"
155 + V_SHLIB_CCOPT="$V_SHLIB_CCOPT"
156 V_SONAME_OPT="-Wl,-soname,"
157 V_RPATH_OPT="-Wl,-rpath,"
158 ;;
159 @@ -570,7 +570,7 @@ AC_DEFUN(AC_LBL_SHLIBS_INIT,
160 #
161 # "cc" is GCC.
162 #
163 - V_SHLIB_CCOPT="$V_SHLIB_CCOPT -fpic"
164 + V_SHLIB_CCOPT="$V_SHLIB_CCOPT"
165 V_SHLIB_CMD="\$(CC)"
166 V_SHLIB_OPT="-shared"
167 V_SONAME_OPT="-Wl,-soname,"
168 --- /dev/null
169 +++ b/libpcap-symbols.lds
170 @@ -0,0 +1,106 @@
171 +{
172 + global:
173 + bpf_dump;
174 + bpf_filter;
175 + bpf_image;
176 + bpf_validate;
177 + eproto_db;
178 + pcap_breakloop;
179 + pcap_can_set_rfmon;
180 + pcap_close;
181 + pcap_compile;
182 + pcap_compile_nopcap;
183 + pcap_datalink;
184 + pcap_datalink_name_to_val;
185 + pcap_datalink_val_to_description;
186 + pcap_datalink_val_to_name;
187 + pcap_dispatch;
188 + pcap_dump;
189 + pcap_dump_close;
190 + pcap_dump_file;
191 + pcap_dump_flush;
192 + pcap_dump_fopen;
193 + pcap_dump_ftell;
194 + pcap_dump_open;
195 + pcap_ether_aton;
196 + pcap_ether_hostton;
197 + pcap_file;
198 + pcap_fileno;
199 + pcap_findalldevs;
200 + pcap_fopen_offline;
201 + pcap_freealldevs;
202 + pcap_freecode;
203 + pcap_get_selectable_fd;
204 + pcap_geterr;
205 + pcap_getnonblock;
206 + pcap_inject;
207 + pcap_is_swapped;
208 + pcap_lib_version;
209 + pcap_list_datalinks;
210 + pcap_lookupdev;
211 + pcap_lookupnet;
212 + pcap_loop;
213 + pcap_major_version;
214 + pcap_minor_version;
215 + pcap_nametoaddr;
216 + pcap_nametoaddrinfo;
217 + pcap_nametoeproto;
218 + pcap_nametollc;
219 + pcap_nametonetaddr;
220 + pcap_nametoport;
221 + pcap_nametoportrange;
222 + pcap_nametoproto;
223 + pcap_next;
224 + pcap_next_etherent;
225 + pcap_next_ex;
226 + pcap_open_dead;
227 + pcap_open_live;
228 + pcap_open_offline;
229 + pcap_perror;
230 + pcap_sendpacket;
231 + pcap_set_datalink;
232 + pcap_setdirection;
233 + pcap_setfilter;
234 + pcap_setnonblock;
235 + pcap_snapshot;
236 + pcap_stats;
237 + pcap_statustostr;
238 + pcap_strerror;
239 + pcap_version;
240 + /* introduced in pcap 1.0 */
241 + pcap_activate;
242 + pcap_create;
243 + pcap_datalink_ext;
244 + pcap_free_datalinks;
245 + pcap_offline_filter;
246 + pcap_set_buffer_size;
247 + pcap_set_promisc;
248 + pcap_set_rfmon;
249 + pcap_set_snaplen;
250 + pcap_set_timeout;
251 + /* introduced in pcap 1.2 */
252 + pcap_set_tstamp_type;
253 + pcap_list_tstamp_types;
254 + pcap_free_tstamp_types;
255 + pcap_tstamp_type_name_to_val;
256 + pcap_tstamp_type_val_to_name;
257 + pcap_tstamp_type_val_to_description;
258 + /* introduced in pcap 1.5 */
259 + pcap_set_immediate_mode;
260 + pcap_set_tstamp_precision;
261 + pcap_get_tstamp_precision;
262 + pcap_open_dead_with_tstamp_precision;
263 + pcap_open_offline_with_tstamp_precision;
264 + pcap_fopen_offline_with_tstamp_precision;
265 + /* introduced in pcap 1.7 */
266 + pcap_dump_open_append;
267 + /* introduced in pcap 1.9.0 */
268 + pcap_bufsize;
269 + pcap_dump_ftell64;
270 + pcap_get_required_select_timeout;
271 + pcap_set_protocol_linux; /* linux-only */
272 + /* introduced in pcap 1.9.1 */
273 + pcap_datalink_val_to_description_or_dlt;
274 + local:
275 + *;
276 +};