aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/mate/Makefile.nmake
blob: 8ce9f47e970b5d29937619e94fe668091b77453c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Makefile.nmake
# nmake file for mate plugin
#
# $Id$
#

include ..\..\config.nmake
include ..\..\Makefile.nmake.inc

include moduleinfo.nmake

include Makefile.common

LEMON=..\..\tools\lemon

# We use GENERATED_CFLAGS to get around flex's non-LLP64-compliant output
GENERATED_CFLAGS=\
	$(STANDARD_CFLAGS) \
	/I../.. $(GLIB_CFLAGS) /I$(LEMON) \
	/I$(PCAP_DIR)\include

CFLAGS=$(WARNINGS_ARE_ERRORS) $(GENERATED_CFLAGS)

.c.obj::
	$(CC) $(CFLAGS) -Fd.\ -c $<

LDFLAGS = $(PLUGIN_LDFLAGS)

!IFDEF ENABLE_LIBWIRESHARK
LINK_PLUGIN_WITH=..\..\epan\libwireshark.lib ..\..\wsutil\libwsutil.lib
CFLAGS=/D_NEED_VAR_IMPORT_ $(CFLAGS)

DISSECTOR_OBJECTS = $(DISSECTOR_SRC:.c=.obj)

DISSECTOR_SUPPORT_OBJECTS = $(DISSECTOR_SUPPORT_SRC:.c=.obj)

OBJECTS = $(DISSECTOR_OBJECTS) $(DISSECTOR_SUPPORT_OBJECTS) plugin.obj

RESOURCE=$(PLUGIN_NAME).res

all: $(PLUGIN_NAME).dll

$(PLUGIN_NAME).rc : moduleinfo.nmake
	sed -e s/@PLUGIN_NAME@/$(PLUGIN_NAME)/ \
	-e s/@RC_MODULE_VERSION@/$(RC_MODULE_VERSION)/ \
	-e s/@RC_VERSION@/$(RC_VERSION)/ \
	-e s/@MODULE_VERSION@/$(MODULE_VERSION)/ \
	-e s/@PACKAGE@/$(PACKAGE)/ \
	-e s/@VERSION@/$(VERSION)/ \
	-e s/@MSVC_VARIANT@/$(MSVC_VARIANT)/ \
	< plugin.rc.in > $@

$(PLUGIN_NAME).dll $(PLUGIN_NAME).exp $(PLUGIN_NAME).lib : $(OBJECTS) $(LINK_PLUGIN_WITH) $(RESOURCE)
	link -dll /out:$(PLUGIN_NAME).dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \
	$(GLIB_LIBS) $(RESOURCE)

#
# Build plugin.c, which contains the plugin version[] string, a
# function plugin_register() that calls the register routines for all
# protocols, and a function plugin_reg_handoff() that calls the handoff
# registration routines for all protocols.
#
# We do this by scanning sources.  If that turns out to be too slow,
# maybe we could just require every .o file to have an register routine
# of a given name (packet-aarp.o -> proto_register_aarp, etc.).
#
# Formatting conventions:  The name of the proto_register_* routines an
# proto_reg_handoff_* routines must start in column zero, or must be
# preceded only by "void " starting in column zero, and must not be
# inside #if.
#
# DISSECTOR_SRC is assumed to have all the files that need to be scanned.
#
# For some unknown reason, having a big "for" loop in the Makefile
# to scan all the files doesn't work with some "make"s; they seem to
# pass only the first few names in the list to the shell, for some
# reason.
#
# Therefore, we have a script to generate the plugin.c file.
# The shell script runs slowly, as multiple greps and seds are run
# for each input file; this is especially slow on Windows.  Therefore,
# if Python is present (as indicated by PYTHON being defined), we run
# a faster Python script to do that work instead.
#
# The first argument is the directory in which the source files live.
# The second argument is "plugin", to indicate that we should build
# a plugin.c file for a plugin.
# All subsequent arguments are the files to scan.
#
!IFDEF PYTHON
plugin.c: $(DISSECTOR_SRC) moduleinfo.h Makefile.common ../../tools/make-dissector-reg.py
	@echo Making plugin.c (using python)
	@$(PYTHON) "../../tools/make-dissector-reg.py" . plugin $(DISSECTOR_SRC)
!ELSE
plugin.c: $(DISSECTOR_SRC) moduleinfo.h Makefile.common ../../tools/make-dissector-reg
	@echo Making plugin.c (using sh)
	@$(SH) ../../tools/make-dissector-reg . plugin $(DISSECTOR_SRC)
!ENDIF

!ENDIF

clean:
	rm -f $(OBJECTS) $(RESOURCE) plugin.c *.pdb *.sbr \
	    $(PLUGIN_NAME).dll $(PLUGIN_NAME).dll.manifest $(PLUGIN_NAME).lib \
	    $(PLUGIN_NAME).exp $(PLUGIN_NAME).rc

# We remove the generated files with "distclean" because one of them,
# "mate_parser.c", needs different #includes for UN*X and Windows
# (UN*X versions of Flex make it include <unistd.h>, but that's a
# UN*X-only header), so if you're going to build from source, you need
# to build "mate_parser.c" from "mate_parser.l" with Flex.
# This might not be necessary for "mate_grammar.{c,h}", but we handle them
# the same for now.
#
distclean: clean
	rm -f mate_parser.c mate_parser_lex.h mate_grammar.c \
	mate_grammar.h mate_grammar.out

maintainer-clean: distclean

RUNLEX = ..\..\tools\runlex.sh

mate_parser_lex.h : mate_parser.c
mate_parser.obj : mate_parser.c
	$(CC) $(GENERATED_CFLAGS) -Fd.\ -c $?

mate_grammar.h : mate_grammar.c
mate_grammar.c : mate_grammar.lemon $(LEMON)\lemon.exe
	$(LEMON)\lemon.exe t=$(LEMON)\lempar.c mate_grammar.lemon

$(LEMON)\lemon.exe:
	cd ../../tools
	$(MAKE) /$(MAKEFLAGS) -f makefile.nmake lemon
	cd ../plugins/mate

checkapi:
	$(PERL) ../../tools/checkAPIs.pl -g abort -g termoutput -build $(DISSECTOR_SRC) $(DISSECTOR_INCLUDES)