OSDN Git Service

remove win32 files
[happyabc/happyabc.git] / OMakefile
1 PREFIX=
2         if $(not $(defined PREFIX))
3                 value /usr/local
4         else
5                 value $(PREFIX)
6 ENABLE_DEBUG=
7         if $(not $(defined ENABLE_DEBUG))
8                 value false
9         else
10                 value $(ENABLE_DEBUG)
11
12 ENABLE_NATIVE=
13         if $(not $(defined ENABLE_NATIVE))
14                 value true
15         else
16                 value $(ENABLE_NATIVE)
17
18 # behavior as traditional cpp
19 CPPFLAGS=-traditional-cpp
20
21 if $(file-exists VERSION)
22         VERSION=$(shell head -1 VERSION)
23         export
24 else
25         VERSION=local-HEAD
26         export
27
28 Shell. +=
29     ocaml-clean(argv) =
30       rm -f *.cm[aiox] *.o *.omc *.opt *.run *~ $(argv) *.cmxa *.a *.spot *.spit *.annot *.runner
31
32 # ------------------------------
33 # camlp4 rules
34 # ------------------------------
35 public.UseCamlp4(files) =
36         protected.CAMLP4CMO = $(addprefix $(ROOT)/camlp4/,$(addsuffix .cmo,$(files)))
37         OCAMLPPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
38         OCAMLDEPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
39         export
40
41         .SCANNER: scan-ocaml-%.ml: %.ml $(CAMLP4CMO)
42
43 # ------------------------------
44 # package
45 # ------------------------------
46 public.MyOCamlPackage(name, files) =
47    # XXX: JYH: these variables should be marked private in 0.9.9
48    protected.OFILES   = $(addsuffix $(EXT_OBJ), $(files))
49    protected.CMOFILES = $(addsuffix .cmo, $(files))
50    protected.CMXFILES = $(addsuffix .cmx, $(files))
51
52    protected.OBJ       = $(file $(name)$(EXT_OBJ))
53    protected.CMO       = $(file $(name).cmo)
54    protected.CMX       = $(file $(name).cmx)
55    protected.CMI       = $(file $(name).cmi)
56    protected.MLI       = $(file $(name).mli)
57
58    protected.BYTE_TARGETS   = $(CMO)
59    protected.NATIVE_TARGETS = $(CMX) $(OBJ)
60
61    protected.TARGETS = $(CMI)
62    if $(NATIVE_ENABLED)
63        TARGETS += $(NATIVE_TARGETS)
64        export
65
66    if $(BYTE_ENABLED)
67        TARGETS += $(BYTE_TARGETS)
68        export
69
70    #
71    # Link commands
72    #
73    protected.BYTE_DEPS = $(CMOFILES)
74    if $(and $(not $(NATIVE_ENABLED)), $(target-exists $(MLI)))
75       BYTE_DEPS += $(CMI)
76       export
77    else
78       BYTE_TARGETS += $(CMI)
79       export
80
81    protected.NATIVE_DEPS = $(CMXFILES) $(OFILES)
82    if $(target-exists $(MLI))
83       NATIVE_DEPS += $(CMI)
84       export
85    else
86       NATIVE_TARGETS += $(CMI)
87       export
88
89    if $(target-exists $(MLI))
90       $(CMI): $(MLI) :scanner: scan-ocaml-$(name).mli
91            $(OCamlC) -c $<
92    elseif $(NATIVE_ENABLED)
93       $(NATIVE_TARGETS) $(CMI): $(NATIVE_DEPS)
94            $(OCAMLFIND) $(OCAMLOPTLINK) $(LAZY_OCAMLFINDFLAGS) $(PREFIXED_OCAMLPACKS) $(OCAMLFLAGS) \
95                $(OCAMLOPTFLAGS) $(OCAML_LIB_FLAGS) -pack -o $(CMX) $(OCamlLinkSort $(CMXFILES))
96    else
97       $(BYTE_TARGETS) $(CMI): $(BYTE_DEPS)
98            $(OCAMLFIND) $(OCAMLC) $(LAZY_OCAMLFINDFLAGS) $(PREFIXED_OCAMLPACKS) $(OCAMLFLAGS) \
99                $(OCAMLCFLAGS) $(OCAML_LIB_FLAGS) -pack -o $(CMO) $(OCamlLinkSort $(CMOFILES))
100
101    return $(TARGETS)
102
103
104 # ------------------------------
105 # ounit
106 # ------------------------------
107 OUNIT_SRC_DIR=../src/
108 OUNIT_LIBS[]=
109
110 Shell. +=
111     ounit-postproc(argv) =
112       (grep "FAIL\|ERROR\|Error\|Fail" && exit 1) || exit 0
113
114 public.OUnitTest(name,files) =
115         protected.test_file = $(addsuffix Test,$(name))
116         protected.target    = $(addsuffix -runner,$(test_file))
117         protected.src_files = $(addprefix $(OUNIT_SRC_DIR),$(files))
118
119         .PHONY: check check-$(name) clean
120         OCamlProgram($(target), $(test_file) $(src_files) $(OUNIT_LIBS))
121
122         check-$(name): $(target)
123                 $(addprefix ./,$(target)) | ounit-postproc
124
125         check: check-$(name)
126
127         export
128
129 # ------------------------------
130 # other rules
131 # ------------------------------t
132 %.mli : %.mlip
133     @rm -f $@
134     @echo "(* CAUTION: this is a generated file.  If you edit it, all changes will be lost! *)" > $@
135     $(CPP) $(CPPFLAGS) $*.mlip >> $@
136     @chmod 444 $@
137
138 .SCANNER: %.mli : %.mlip
139     $(CPP) $(CPPFLAGS) -M $< ;  true
140
141 %.ml: %.mlp
142     @rm -f $@
143     @echo "(* CAUTION: this is a generated file.  If you edit it, all changes will be lost! *)" > $@
144     $(CPP) $(CPPFLAGS) $*.mlp >> $@
145     @chmod 444 $@
146
147 .SCANNER: %.ml : %.mlp
148     $(CPP) $(CPPFLAGS) -M $< ; true
149
150
151 USE_OCAMLFIND = true
152
153 if $(not $(OCAMLFIND_EXISTS))
154    eprintln('This project requires ocamlfind, but is was not found.')
155    eprintln('You need to install ocamlfind and run "omake --configure".')
156    exit 1
157
158 .PHONY: all install config clean distclean
159
160 # ------------------------------
161 # config
162 # ------------------------------
163 config: OMakefile.config config.ml
164
165 .INCLUDE: OMakefile.config
166         if $(mem config,$(TARGETS))
167                 rm -f $@
168                 if $(and $(defined RELATIVE),$(RELATIVE))
169                         echo LIB_DIR=$(PREFIX) >> $@
170                         echo SHARE_DIR=$(PREFIX) >> $@
171                         echo BIN_DIR=$(PREFIX) >> $@
172                 else
173                         if $(not $(defined LIB_DIR))
174                                 echo LIB_DIR=$(PREFIX)/lib/habc >> $@
175                         else
176                                 echo LIB_DIR=$(LIB_DIR) >> $@
177                         if $(not $(defined SHARE_DIR))
178                                 echo SHARE_DIR=$(PREFIX)/share/habc >> $@
179                         else
180                                 echo SHARE_DIR=$(SHARE_DIR) >> $@
181                         if $(not $(defined BIN_DIR))
182                                 echo BIN_DIR=$(PREFIX)/bin >> $@
183                         else
184                                 echo BIN_DIR=$(BIN_DIR) >> $@
185
186                 if $(shell-success-null ocamlc$(if $(OCAMLC_OPT_EXISTS), .opt) -annot)
187                         @echo "static.OCAMLFLAGS +=-annot" >> $@
188                 else
189                         @echo "static.OCAMLFLAGS +=-dtypes" >> $@
190                 if $(ENABLE_DEBUG)
191                         @echo "static.OCAMLFLAGS +=-g" >> $@
192                 if $(ENABLE_NATIVE)
193                         @echo "static.NATIVE_ENABLED = true"  >> $@
194                         @echo "static.BYTE_ENABLED   = false" >> $@
195                 else
196                         @echo "static.NATIVE_ENABLED = false" >> $@
197                         @echo "static.BYTE_ENABLED   = true"  >> $@
198
199
200         if $(not $(file-exists OMakefile.config))
201                 @echo "Please refer to the installation instructions in file README.mkdn."
202                 @echo "If you've just unpacked the distribution, something like"
203                 @echo "   omake config"
204                 @echo "   omake all"
205                 @echo "   omake install"
206                 @echo "should work.  But see the file README.mkdn for more details."
207
208 config.ml:
209         if $(mem config,$(TARGETS))
210                 rm -f $@
211                 echo 'let version = "$(VERSION)"' >> $@
212                 if $(and $(defined RELATIVE),$(RELATIVE))
213                         @echo 'let bin_dir   = Str.global_replace (Str.regexp "\\\\") "/" (Filename.dirname Sys.executable_name)' >> $@
214                         @echo 'let share_dir = bin_dir' >> $@
215                         @echo 'let lib_dir   = bin_dir' >> $@
216                 else
217                         @echo 'let bin_dir   = "$(ocaml-escaped  $(BIN_DIR))"' >> $@
218                         @echo 'let share_dir = "$(ocaml-escaped  $(SHARE_DIR))"' >> $@
219                         @echo 'let lib_dir   = "$(ocaml-escaped  $(LIB_DIR))"' >> $@
220                 @echo 'let default_includes = [lib_dir;"."]' >> $@
221                 @echo 'let default_template = share_dir ^ "/template.xml"' >> $@
222                 @echo 'let path_sep="$(PATHSEP)"' >> $@
223                 @echo 'let exe="$(EXE)"' >> $@
224
225
226 ################################################
227 USE_OCAMLFIND = true
228 if $(not $(OCAMLFIND_EXISTS))
229     eprintln('This project requires ocamlfind, but is was not found.')
230     eprintln('You need to install ocamlfind and run "omake --configure".')
231     exit 1
232
233 OCAMLINCLUDES += $(ROOT)
234 .SUBDIRS: scm xml driver base lib camlp4
235
236 # ------------------------------
237 # all
238 # ------------------------------
239 habc-scm$(EXE): scm/src/habc-scm$(EXE)
240         ln-or-cp $^ .
241
242 habc-xml$(EXE): xml/src/habc-xml$(EXE)
243         ln-or-cp $^ .
244
245 habc$(EXE) : driver/src/habc$(EXE)
246         ln-or-cp $^ .
247
248 PROGRAM = habc$(EXE) habc-xml$(EXE) habc-scm$(EXE)
249
250 all: config $(PROGRAM)
251
252 .DEFAULT: all
253
254 # ------------------------------
255 # install
256 # ------------------------------
257 install: $(PROGRAM)
258         mkdir -p $(BIN_DIR)
259         mkdir -p $(LIB_DIR)
260         mkdir -p $(SHARE_DIR)
261         mkdir -p $(SHARE_DIR)/example
262         $(INSTALL) $(PROGRAM)   $(BIN_DIR)
263         $(INSTALL) share/habc/* $(SHARE_DIR)
264         $(INSTALL) example/*    $(SHARE_DIR)/example/
265         $(INSTALL) lib/habc/*   $(LIB_DIR)
266         if $(or $(equal Win32,$(OSTYPE)),$(equal Cygwin,$(OSTYPE)))
267                 $(INSTALL) win32/swfmill/* $(BIN_DIR)/
268                 $(INSTALL) README.mkdn $(BIN_DIR)/
269
270 # ------------------------------
271 # clean
272 # ------------------------------
273 clean:
274         ocaml-clean *.abc $(PROGRAM)
275
276 distclean: clean
277         ocaml-clean *.abc $(PROGRAM) OMakefile.config base/config.ml
278
279 # ------------------------------
280 # example
281 # ------------------------------
282 %.swf: example/%.scm all
283         ./habc -o $(removesuffix $@) $<