permit multiline comments and strings in macros
[bpt/coccinelle.git] / parsing_c / Makefile
1 ifneq ($(MAKECMDGOALS),distclean)
2 include ../Makefile.config
3 endif
4
5 ##############################################################################
6 # Variables
7 ##############################################################################
8 TARGET=parsing_c
9
10 # - type_cocci.ml ast_cocci.ml # + unparse_hrule
11 SRC= token_annot.ml flag_parsing_c.ml parsing_stat.ml \
12 token_c.ml ast_c.ml control_flow_c.ml \
13 visitor_c.ml lib_parsing_c.ml \
14 control_flow_c_build.ml \
15 pretty_print_c.ml \
16 semantic_c.ml lexer_parser.ml parser_c.ml lexer_c.ml \
17 token_helpers.ml token_views_c.ml \
18 cpp_token_c.ml \
19 parsing_hacks.ml \
20 cpp_analysis_c.ml \
21 unparse_cocci.ml unparse_c.ml unparse_hrule.ml \
22 parsing_recovery_c.ml parsing_consistency_c.ml \
23 parse_c.ml type_c.ml \
24 cpp_ast_c.ml \
25 type_annoter_c.ml comment_annotater_c.ml \
26 compare_c.ml \
27 test_parsing_c.ml
28
29
30
31 # ast_cocci.ml and unparse_cocci.ml should be deleted in the future
32 # to make parsing_c really independent of coccinelle.
33 # control_flow_c have also coccinelle dependencies.
34 # old: parsing_c now depends on cocci_parser because in addition to decorate
35 # the token in Ast_c with some parse info, we now also make some place to
36 # welcome some mcodekind of Ast_cocci.
37 LIBS=../commons/commons.cma ../globals/globals.cma \
38 ../parsing_cocci/cocci_parser.cma
39
40 INCLUDESDEP= -I ../commons -I ../commons/ocamlextra -I ../commons/ocollection \
41 -I ../globals -I ../parsing_cocci
42
43 INCLUDES=$(INCLUDESDEP) $(TARZANINCLUDE)
44
45 SYSLIBS= str.cma unix.cma num.cma
46
47 ##############################################################################
48 # Generic variables
49 ##############################################################################
50
51 #for warning: -w A
52 #for profiling: -p -inline 0 with OCAMLOPT
53 OCAMLCFLAGS ?= -g
54 OPTFLAGS ?= -g
55
56 OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) $(INCLUDES)
57 OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) $(INCLUDES)
58 OCAMLDEP_CMD=$(OCAMLDEP) $(INCLUDESDEP)
59 OCAMLMKTOP_CMD=$(OCAMLMKTOP) -g -custom $(INCLUDES)
60
61 OBJS = $(SRC:.ml=.cmo)
62 OPTOBJS = $(SRC:.ml=.cmx)
63
64
65 ##############################################################################
66 # Top rules
67 ##############################################################################
68 ifneq ($(FEATURE_OCAMLBUILD),yes)
69 all: $(TARGET).cma
70 all.opt:
71 @$(MAKE) $(TARGET).cmxa BUILD_OPT=yes
72
73 $(TARGET).cma: $(OBJS)
74 $(OCAMLC_CMD) -a -o $(TARGET).cma $(OBJS)
75
76 $(TARGET).cmxa: $(OPTOBJS) $(LIBS:.cma=.cmxa)
77 $(OCAMLOPT_CMD) -a -o $(TARGET).cmxa $(OPTOBJS)
78
79 $(TARGET).top: $(OBJS) $(LIBS)
80 $(OCAMLMKTOP_CMD) -o $(TARGET).top $(SYSLIBS) $(LIBS) $(OBJS)
81
82 clean::
83 rm -f $(TARGET).top
84
85 lexer_c.ml: lexer_c.mll
86 $(OCAMLLEX) $<
87 clean::
88 rm -f lexer_c.ml
89
90 parser_c.ml parser_c.mli: parser_c.mly
91 $(OCAMLYACC) -v $<
92 clean::
93 rm -f parser_c.ml parser_c.mli parser_c.output
94 else
95 all:
96 cd .. && $(OCAMLBUILD) parsing_c/parsing_c.cma
97
98 all.opt:
99 cd .. && $(OCAMLBUILD) parsing_c/parsing_c.cmxa
100
101 clean::
102 cd .. && $(OCAMLBUILD) -clean
103 endif
104
105
106 ##############################################################################
107 # Pad's rules
108 ##############################################################################
109 # visitor_c.ml lib_parsing_c.ml \
110 # type_annoter_c.ml \
111 # statistics_c.ml \
112 # pretty_print_c.ml unparse_c.ml \
113 # test_parsing_c.ml
114 #toreput: compare_c.ml ast_to_flow.ml
115
116 COREPARSING= flag_parsing_c.ml parsing_stat.ml \
117 ast_cocci.ml \
118 ast_c.ml control_flow_c.ml \
119 semantic_c.ml lexer_parser.ml parser_c.mly lexer_c.mll \
120 token_helpers.ml parsing_hacks.ml parse_c.ml \
121
122 locparsing:
123 wc -l $(COREPARSING)
124
125 locindiv:
126 wc -l lexer_c.mll
127 wc -l parser_c.mly
128 wc -l parsing_hacks.ml
129 wc -l ast_c.ml
130 wc -l parse_c.ml
131
132 ##############################################################################
133 # Literate Programming rules
134 ##############################################################################
135
136
137 ##############################################################################
138 # Generic rules
139 ##############################################################################
140
141 .SUFFIXES: .ml .mli .cmo .cmi .cmx
142
143 .ml.cmo:
144 $(OCAMLC_CMD) -c $<
145 .mli.cmi:
146 $(OCAMLC_CMD) -c $<
147 .ml.cmx:
148 $(OCAMLOPT_CMD) -c $<
149
150 clean::
151 rm -f *.cm[ioxa] *.o *.a *.cmxa *.annot
152 rm -f *~ .*~ gmon.out #*#
153 rm -f .depend
154
155 distclean: clean
156
157 .depend depend: lexer_c.ml parser_c.ml parser_c.mli
158 $(OCAMLDEP_CMD) *.mli *.ml > .depend
159
160 ifneq ($(MAKECMDGOALS),clean)
161 ifneq ($(MAKECMDGOALS),distclean)
162 ifneq ($(FEATURE_OCAMLBUILD),yes)
163 -include .depend
164 endif
165 endif
166 endif
167
168 include ../Makefile.common