f8802bfcacc02c6be2f6826a90ed4018a423709b
[obnox/wireshark/wip.git] / Makefile.nmake
1 ## Makefile for building ethereal.exe with Microsoft C and nmake
2 ## Use: $(MAKE) /$(MAKEFLAGS) -f makefile.nmake
3 #
4 # $Id$
5
6 include config.nmake
7 include <win32.mak>
8
9 ############### no need to modify below this line #########
10
11 CC = cl
12 LINK= link
13
14 LDFLAGS = /NOLOGO /INCREMENTAL:no /MACHINE:I386 $(LOCAL_LDFLAGS)
15
16 CFLAGS=-DHAVE_CONFIG_H $(LOCAL_CFLAGS) $(GLIB_CFLAGS) /I. /Iwiretap \
17         $(ZLIB_CFLAGS) /I$(PCAP_DIR)\include \
18         /I$(NET_SNMP_DIR)\include /I$(NET_SNMP_DIR)\win32 \
19         $(ADNS_CFLAGS) $(PCRE_CFLAGS) -D_U_=""
20
21 CVARSDLL=-DWIN32 -DNULL=0 -D_MT -D_DLL
22
23 .c.obj::
24         $(CC) $(CVARSDLL) $(CFLAGS) -Fd.\ -c $<
25
26 PLATFORM_SRC = capture-wpcap.c
27
28 include Makefile.common
29
30 include epan\Makefile.common
31
32 BUILT_SOURCES = $(BUILT_SOURCES) \
33         svnversion.h
34
35 DISSECTOR_SUPPORT_SRC = $(DISSECTOR_SUPPORT_SRC:../=)
36 DISSECTOR_SUPPORT_OBJECTS = $(DISSECTOR_SUPPORT_SRC:.c=.obj)
37 #DISSECTOR_SUPPORT_OBJECTS = $(DISSECTOR_SUPPORT_OBJECTS:../=)
38
39 ethereal_OBJECTS = $(ethereal_SOURCES:.c=.obj)
40 tethereal_OBJECTS = $(tethereal_SOURCES:.c=.obj)
41 dftest_OBJECTS = $(dftest_SOURCES:.c=.obj)
42
43 randpkt_OBJECTS = $(randpkt_SOURCES:.c=.obj)
44
45 EXTRA_OBJECTS = \
46 #       snprintf.obj    \
47 #       strerror.obj    \
48         mkstemp.obj     \
49         strptime.obj
50
51 ethereal_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
52         wsock32.lib user32.lib shell32.lib \
53         $(NET_SNMP_DIR)\win32\lib\netsnmp.lib \
54 !IFDEF ENABLE_LIBETHEREAL
55         epan\libethereal.lib \
56 !ELSE
57         epan\dissectors\dissectors.lib \
58         epan\ethereal.lib \
59         epan\dfilter\dfilter.lib epan\ftypes\ftypes.lib \
60         $(ADNS_LIBS) \
61         $(PCRE_LIBS) \
62         $(ZLIB_LIBS)
63 !ENDIF
64 #       $(PCAP_DIR)\lib\wpcap.lib
65
66 tethereal_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
67         wsock32.lib user32.lib \
68         $(GLIB_LIBS) \
69         $(NET_SNMP_DIR)\win32\lib\netsnmp.lib \
70 !IFDEF ENABLE_LIBETHEREAL
71         epan\libethereal.lib \
72 !ELSE
73         epan\dissectors\dissectors.lib \
74         epan\ethereal.lib \
75         epan\dfilter\dfilter.lib epan\ftypes\ftypes.lib \
76         $(ADNS_LIBS) \
77         $(PCRE_LIBS) \
78         $(ZLIB_LIBS)
79 !ENDIF
80
81 capinfo_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
82         wsock32.lib user32.lib \
83         $(GLIB_LIBS)
84
85 editcap_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
86         wsock32.lib user32.lib \
87         $(GLIB_LIBS)
88
89 mergecap_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
90         wsock32.lib user32.lib \
91         $(GLIB_LIBS)
92
93 dftest_LIBS=  wiretap\wiretap-$(WTAP_VERSION).lib \
94         wsock32.lib user32.lib \
95         $(GLIB_LIBS) \
96         $(NET_SNMP_DIR)\win32\lib\netsnmp.lib \
97 !IFDEF ENABLE_LIBETHEREAL
98         epan\libethereal.lib \
99 !ELSE
100         epan\dissectors\dissectors.lib \
101         epan\ethereal.lib \
102         epan\dfilter\dfilter.lib epan\ftypes\ftypes.lib \
103         $(ADNS_LIBS) \
104         $(PCRE_LIBS) \
105         $(ZLIB_LIBS)    
106 !ENDIF
107
108 randpkt_LIBS= wiretap\wiretap-$(WTAP_VERSION).lib \
109         user32.lib \
110         $(GLIB_LIBS) \
111         $(NET_SNMP_DIR)\win32\lib\netsnmp.lib
112
113 EXECUTABLES=ethereal.exe ethereal-gtk2.exe tethereal.exe \
114         capinfo.exe editcap.exe mergecap.exe text2pcap.exe
115
116 RESOURCES=image\ethereal.res image\libethereal.res image\tethereal.res \
117         image\capinfo.res image\editcap.res image\mergecap.res \
118         image\text2pcap.res image\wiretap.res
119
120 all: config.h tools image wiretap epan $(EXECUTABLES) $(RESOURCES) doc
121
122 packaging: all
123         cd packaging
124         cd nsis
125         nmake -f makefile.nmake
126         cd ..
127         cd ..
128
129 separate_packaging: all
130         cd packaging
131         cd nsis
132 !IFDEF GTK1_DIR
133         nmake -f makefile.nmake GTK1_ONLY="USE"
134 !ENDIF
135 !IFDEF GTK2_DIR
136         nmake -f makefile.nmake GTK2_ONLY="USE"
137 !ENDIF
138         cd ..
139         cd ..
140
141 $(RESOURCES): image
142
143 wiretap\wiretap-$(WTAP_VERSION).lib: wiretap
144
145 !IFNDEF GTK1_DIR
146 ethereal.exe    : 
147 !ELSE
148 ethereal.exe    : config.h svnversion.h $(ethereal_OBJECTS) $(EXTRA_OBJECTS) epan gtk image\ethereal.res wiretap\wiretap-$(WTAP_VERSION).lib gtk\libui.lib plugins
149         @echo Linking $@
150         $(LINK) @<<
151                 /OUT:ethereal.exe $(guiflags) $(guilibsdll) $(LDFLAGS) /SUBSYSTEM:windows $(ethereal_LIBS) $(GTK1_LIBS) gtk\libui.lib $(ethereal_OBJECTS) $(EXTRA_OBJECTS) image\ethereal.res
152 <<
153 !ENDIF
154
155 !IFNDEF GTK2_DIR
156 ethereal-gtk2.exe       : 
157 !ELSE
158 ethereal-gtk2.exe       : config.h svnversion.h $(ethereal_OBJECTS) $(EXTRA_OBJECTS) epan gtk2 image\ethereal.res wiretap\wiretap-$(WTAP_VERSION).lib gtk2.tmp\libui.lib plugins
159         @echo Linking $@
160         $(LINK) @<<
161                 /OUT:ethereal-gtk2.exe $(guiflags) $(guilibsdll) $(LDFLAGS) /SUBSYSTEM:windows $(ethereal_LIBS) $(GTK2_LIBS) gtk2.tmp\libui.lib $(ethereal_OBJECTS) $(EXTRA_OBJECTS) image\ethereal.res
162 <<
163 !ENDIF
164
165 tethereal.exe   : config.h svnversion.h $(tethereal_OBJECTS) $(EXTRA_OBJECTS) epan image\tethereal.res wiretap\wiretap-$(WTAP_VERSION).lib plugins
166         @echo Linking $@
167         $(LINK) @<<
168                 /OUT:tethereal.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(tethereal_LIBS) $(tethereal_OBJECTS) $(EXTRA_OBJECTS) image\tethereal.res
169 <<
170
171 capinfo.exe     : config.h capinfo.obj getopt.obj wiretap\wiretap-$(WTAP_VERSION).lib image\capinfo.res
172         @echo Linking $@
173         $(LINK) @<<
174                 /OUT:capinfo.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console capinfo.obj getopt.obj $(capinfo_LIBS) image\capinfo.res
175 <<
176
177 editcap.exe     : config.h editcap.obj getopt.obj wiretap\wiretap-$(WTAP_VERSION).lib image\editcap.res
178         @echo Linking $@
179         $(LINK) @<<
180                 /OUT:editcap.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console editcap.obj getopt.obj $(editcap_LIBS) image\editcap.res
181 <<
182
183 mergecap.exe    : config.h svnversion.h mergecap.obj merge.obj getopt.obj wiretap\wiretap-$(WTAP_VERSION).lib image\mergecap.res
184         @echo Linking $@
185         $(LINK) @<<
186                 /OUT:mergecap.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console mergecap.obj merge.obj getopt.obj $(mergecap_LIBS) image\mergecap.res
187 <<
188
189 text2pcap.exe   : config.h text2pcap.obj text2pcap-scanner.obj getopt.obj strptime.obj image\text2pcap.res
190         @echo Linking $@
191         $(LINK) @<<
192                 /OUT:text2pcap.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console text2pcap.obj text2pcap-scanner.obj getopt.obj strptime.obj image\text2pcap.res
193 <<
194
195 dftest.exe      : $(dftest_OBJECTS) $(EXTRA_OBJECTS) epan
196         $(LINK) @<<
197                 /OUT:dftest.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(dftest_LIBS) $(dftest_OBJECTS) $(EXTRA_OBJECTS)
198 <<
199
200 randpkt.exe     : $(randpkt_OBJECTS) $(EXTRA_OBJECTS)
201         $(LINK) @<<
202                 /OUT:randpkt.exe $(conflags) $(conlibsdll) $(LDFLAGS) /SUBSYSTEM:console $(randpkt_LIBS) $(randpkt_OBJECTS)
203 <<
204
205 config.h        : config.h.win32 config.nmake
206         sed -e s/@VERSION@/$(VERSION)/ \
207             -e "s/@HAVE_GNU_ADNS@/$(ADNS_CONFIG)/" \
208             -e "s/@HAVE_PCRE@/$(PCRE_CONFIG)/" \
209             -e "s/@HAVE_LIBZ@/$(ZLIB_CONFIG)/" \
210             -e "s/@HAVE_LIBPCAP@/$(WINPCAP_CONFIG)/" \
211             -e "s/@HAVE_PCAP_FINDALLDEVS@/$(PCAP_FINDALLDEVS_CONFIG)/" \
212             -e "s/@HAVE_LIBETHEREALDLL@/$(LIBETHEREAL_CONFIG)/" \
213             -e "s/@WPCAP_CONSTIFIED@/$(WPCAP_CONSTIFIED_CONFIG)/" \
214             -e "s/@HAVE_LIBETHEREALDLL@/$(LIBETHEREAL_CONFIG)/" \
215             < config.h.win32 > $@
216
217 ps.c    : rdps.exe print.ps
218         rdps print.ps ps.c
219
220
221 #
222 # Build the version string
223 #
224 svnversion.h:
225         $(PERL) make-version.pl
226
227 #
228 # Build the short version of the authors file for the about dialog
229 #
230 AUTHORS-SHORT: AUTHORS make-authors-short.pl
231         $(PERL) make-authors-short.pl < AUTHORS > AUTHORS-SHORT
232
233
234 #
235 # Build "tethereal-tap-register.c", which contains a function 
236 # "register_all_tap_listeners()"
237 # that calls the register routines for all tehtereal tap listeners.
238 #
239 # We do this by grepping through sources.
240 #
241 # Formatting conventions:  The name of the tap_listener_register_* 
242 # routines must start in column zero, or must be preceded only by 
243 # "void " starting in column zero, and must not be inside #if.
244 #
245 # The first argument is the name of the file to write.
246 # The second argument is the directory in which the source files live.
247 # All subsequent arguments are the files to scan.
248 #
249 tethereal-tap-register.c: $(TETHEREAL_TAP_SRC) make-tapreg-dotc
250         @echo Making tethereal-tap-register.c
251         @$(SH) make-tapreg-dotc tethereal-tap-register.c . $(TETHEREAL_TAP_SRC)
252
253 text2pcap-scanner.c : text2pcap-scanner.l
254         $(LEX) -otext2pcap-scanner.c text2pcap-scanner.l
255
256 gtk2_distclean:
257         rm -f gtk2.tmp/*.*
258         if exist gtk2.tmp rmdir gtk2.tmp
259
260 clean: gtk2_distclean
261         rm -f $(ethereal_OBJECTS) $(tethereal_OBJECTS) $(EXTRA_OBJECTS) \
262                 $(EXECUTABLES) $(PDB_FILE) \
263                 capinfo.obj editcap.obj mergecap.obj text2pcap.obj getopt.obj\
264                 text2pcap-scanner.obj text2pcap-scanner.c rdps.obj \
265                 rdps.pdb rdps.exe rdps.ilk config.h ps.c AUTHORS-SHORT \
266                 dftest.obj dftest.exe randpkt.obj randpkt.ext doxygen.cfg \
267                 $(RESOURCES)
268         cd wiretap
269         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
270         cd ../gtk
271         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
272         cd ../epan
273         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
274         cd ../plugins
275         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
276         cd ../tools
277         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
278         cd ../image
279         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
280         cd ../doc
281         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
282         cd ../help
283         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
284         cd ../packaging/nsis
285         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake clean
286         cd ../..
287
288 # Call distclean only, if you would like to remove ALL generated files.
289 # Be sure to have python and perl installed to regenerate them.
290 distclean: clean gtk2_distclean
291         rm -f $(BUILT_SOURCES) \
292                 tethereal-tap-register.c 
293         cd wiretap
294         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
295         cd ../gtk
296         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
297         cd ../epan
298         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
299         cd ../plugins
300         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
301         cd ../tools
302         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
303         cd ../image
304         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
305         cd ../doc
306         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
307         cd ../help
308         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
309         cd ../packaging/nsis
310         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake distclean
311         cd ../..
312
313 tools::
314         cd tools
315         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
316         cd ..
317
318 image::
319         cd image
320         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
321         cd ..
322
323 wiretap::
324         cd wiretap
325         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
326         cd ..
327
328 gtk:: help config.h svnversion.h AUTHORS-SHORT doxygen
329         cd gtk
330         $(MAKE) /$(MAKEFLAGS) /f Makefile.nmake GTK_CFLAGS="$(GTK1_CFLAGS)" GTK_LIBS="$(GTK1_LIBS)" libui.lib
331         cd ..
332
333 # copy all required files to gtk2.tmp (but only when newer than existing) and compile in that dir
334 gtk2:: help config.h svnversion.h AUTHORS-SHORT
335         if not exist gtk2.tmp mkdir gtk2.tmp
336         cd gtk
337         cp --update --preserve Makefile.* *.c *.h ..\gtk2.tmp
338         cd ..\gtk2.tmp
339         $(MAKE) /$(MAKEFLAGS) /f Makefile.nmake GTK_CFLAGS="$(GTK2_CFLAGS)" GTK_LIBS="$(GTK2_LIBS)" libui.lib
340         cd ..
341
342 epan:: $(DISSECTOR_SUPPORT_OBJECTS) $(EXTRA_OBJECTS) $(RESOURCES) $(BUILT_SOURCES) doxygen
343         cd epan
344         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
345         cd ..
346
347 plugins::
348         cd plugins
349         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
350         cd ..
351
352 doc::
353         cd doc
354         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
355         cd ..
356
357 help::
358         cd help
359         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
360         cd ..
361
362 doxygen.cfg: config.nmake doxygen.cfg.in
363         sed -e s/@VERSION@/$(VERSION)/ \
364             < doxygen.cfg.in > $@
365
366 doxygen-run:
367 !IFDEF DOXYGEN
368         $(DOXYGEN) doxygen.cfg
369 !ENDIF
370
371 doxygen: doxygen.cfg doxygen-run
372
373 REQUIRED_APPS=\
374         $(SH)   \
375         $(YACC) \
376         $(LEX)  \
377         grep    \
378         $(PERL) \
379         $(PYTHON)       \
380         sed     \
381         unzip   \
382         wget
383
384 verify_apps:
385         @$(SH) tools\win32-setup.sh --appverify $(REQUIRED_APPS)
386
387 setup: verify_apps
388 !IF "$(GTK2_INST_VERSION)" == "2.4"
389         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
390                 glib gtk2.4/glib-2.4.5.zip
391         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
392                 glib gtk2.4/glib-dev-2.4.5.zip
393 !ELSE
394         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
395                 glib glib-2.2.3-20040116.zip
396         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
397                 glib glib-dev-2.2.3-20040116.zip
398 !ENDIF
399 !IFDEF GTK1_DIR
400         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
401                 gtk+ gtk+-1.3.0-20030717.zip
402         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
403                 gtk+ gtk+-dev-1.3.0-20030115.zip
404 !ENDIF
405         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
406                 libiconv-1.9.1.bin.woe32 libiconv-1.9.1.bin.woe32.zip
407         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
408                 gettext-runtime-0.13.1 gettext-runtime-0.13.1.zip
409 !IFDEF NET_SNMP_DIR
410         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
411                 . net-snmp-5.1.zip
412 !ENDIF
413 !IFDEF PCAP_DIR
414         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
415                 . wpdpack_3_0.zip
416 !ENDIF
417 !IFDEF ADNS_DIR
418         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
419                 . adns-1.0-win32-03.zip
420 !ENDIF
421 !IFDEF PCRE_DIR
422         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
423                 . pcre-4.4.zip
424 !ENDIF
425 !IFDEF ZLIB_DIR
426         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
427                 zlib121-dll zlib121-dll.zip
428 !ENDIF
429 !IFDEF GTK2_DIR
430 !IF "$(GTK2_INST_VERSION)" == "2.4"
431         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
432                 gtk2 gtk2.4/gtk+-2.4.4.zip
433         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
434                 gtk2 gtk2.4/gtk+-dev-2.4.4.zip
435         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
436                 gtk2 gtk2.4/atk-1.6.0.zip
437         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
438                 gtk2 gtk2.4/atk-dev-1.6.0.zip
439 !ELSE
440         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
441                 gtk2 gtk2/gtk+-2.2.4-20040124.zip
442         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
443                 gtk2 gtk2/gtk+-dev-2.2.4-20040124.zip
444         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
445                 gtk2 gtk2/atk-1.4.0.zip
446         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
447                 gtk2 gtk2/atk-dev-1.4.0.zip
448 !ENDIF
449 !IF "$(PANGO_INST_VERSION)" == "1.4"
450         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
451                 gtk2 gtk2.4/pango-1.4.1.zip
452         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
453                 gtk2 gtk2.4/pango-dev-1.4.1.zip
454 !ELSE
455         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
456                 gtk2 gtk2/pango-1.2.5-20040124.zip
457         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
458                 gtk2 gtk2/pango-dev-1.2.5-20040124.zip
459 !ENDIF
460 !ENDIF
461 !IFDEF GTK_WIMP_DIR
462         @$(SH) tools\win32-setup.sh --download "$(ETHEREAL_LIBS)" \
463                 gtk-wimp gtk2/gtk-wimp-0.5.4-bin.zip
464 !ENDIF
465         @echo.
466         @echo Ethereal is ready to build.
467
468 update_plugin_api: config.h
469         cd plugins
470         $(MAKE) /$(MAKEFLAGS) -f Makefile.nmake xyzzy
471         cd ..
472