OSDN Git Service

supress error
[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 # behavior as traditional cpp
13 CPPFLAGS=-traditional-cpp
14
15 if $(file-exists VERSION)
16         VERSION=$(shell head -1 VERSION)
17         export
18 else
19         VERSION=local-HEAD
20         export
21
22 Shell. +=
23     ounit-postproc(argv) =
24       (grep "FAIL\|ERROR\|Error\|Fail" && exit 1) || exit 0
25     ocaml-clean(argv) =
26       rm -f *.cm[aiox] *.o *.omc *.opt *.run *~ $(argv) *.cmxa *.a *.spot *.spit *.annot
27
28 # ------------------------------
29 # rules
30 # ------------------------------
31 public.UseCamlp4(files) =
32         protected.CAMLP4CMO = $(addprefix $(ROOT)/camlp4/,$(addsuffix .cmo,$(files)))
33         OCAMLPPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
34         OCAMLDEPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
35         export
36
37         .SCANNER: scan-ocaml-%.ml: %.ml $(CAMLP4CMO)
38
39 %.mli : %.mlip
40     @rm -f $@
41     @echo "(* CAUTION: this is a generated file.  If you edit it, all changes will be lost! *)" > $@
42     $(CPP) $(CPPFLAGS) $*.mlip >> $@
43     @chmod 444 $@
44
45 .SCANNER: %.mli : %.mlip
46     $(CPP) $(CPPFLAGS) -M $< >& /dev/null; true
47
48 %.ml: %.mlp
49     @rm -f $@
50     @echo "(* CAUTION: this is a generated file.  If you edit it, all changes will be lost! *)" > $@
51     $(CPP) $(CPPFLAGS) $*.mlp >> $@
52     @chmod 444 $@
53
54 .SCANNER: %.ml : %.mlp
55     $(CPP) $(CPPFLAGS) -M $< >& /dev/null; true
56
57
58 USE_OCAMLFIND = true
59
60 if $(not $(OCAMLFIND_EXISTS))
61    eprintln('This project requires ocamlfind, but is was not found.')
62    eprintln('You need to install ocamlfind and run "omake --configure".')
63    exit 1
64
65 NATIVE_ENABLED = $(OCAMLOPT_EXISTS)
66 BYTE_ENABLED = true
67
68
69 .PHONY: all install config clean distclean example
70
71 # ------------------------------
72 # config
73 # ------------------------------
74 config: OMakefile.config base/config.ml
75
76 .INCLUDE: OMakefile.config
77         if $(mem config,$(TARGETS))
78                 rm -f $@
79                 if $(and $(defined RELATIVE),$(RELATIVE))
80                         echo LIB_DIR=$(PREFIX) >> $@
81                         echo SHARE_DIR=$(PREFIX) >> $@
82                         echo BIN_DIR=$(PREFIX) >> $@
83                 else
84                         if $(not $(defined LIB_DIR))
85                                 echo LIB_DIR=$(PREFIX)/lib/habc >> $@
86                         else
87                                 echo LIB_DIR=$(LIB_DIR) >> $@
88                         if $(not $(defined SHARE_DIR))
89                                 echo SHARE_DIR=$(PREFIX)/share/habc >> $@
90                         else
91                                 echo SHARE_DIR=$(SHARE_DIR) >> $@
92                         if $(not $(defined BIN_DIR))
93                                 echo BIN_DIR=$(PREFIX)/bin >> $@
94                         else
95                                 echo BIN_DIR=$(BIN_DIR) >> $@
96
97                 if $(shell-success-null ocamlc$(if $(OCAMLC_OPT_EXISTS), .opt) -annot)
98                         @echo "static.OCAMLFLAGS +=-annot" >> $@
99                 else
100                         @echo "static.OCAMLFLAGS +=-dtypes" >> $@
101                 if $(ENABLE_DEBUG)
102                         @echo "static.OCAMLFLAGS +=-g" >> $@
103         if $(not $(file-exists OMakefile.config))
104                 @echo "Please refer to the installation instructions in file README.mkdn."
105                 @echo "If you've just unpacked the distribution, something like"
106                 @echo "   omake config"
107                 @echo "   omake all"
108                 @echo "   omake install"
109                 @echo "should work.  But see the file README.mkdn for more details."
110
111 base/config.ml:
112         if $(mem config,$(TARGETS))
113                 rm -f $@
114                 echo 'let version = "$(VERSION)"' >> $@
115                 if $(and $(defined RELATIVE),$(RELATIVE))
116                         @echo 'let bin_dir   = Str.global_replace (Str.regexp "\\\\") "/" (Filename.dirname Sys.executable_name)' >> $@
117                         @echo 'let share_dir = bin_dir' >> $@
118                         @echo 'let lib_dir   = bin_dir' >> $@
119                 else
120                         @echo 'let bin_dir   = "$(ocaml-escaped  $(BIN_DIR))"' >> $@
121                         @echo 'let share_dir = "$(ocaml-escaped  $(SHARE_DIR))"' >> $@
122                         @echo 'let lib_dir   = "$(ocaml-escaped  $(LIB_DIR))"' >> $@
123                 @echo 'let default_includes = [lib_dir;"."]' >> $@
124                 @echo 'let default_template = share_dir ^ "/template.xml"' >> $@
125                 @echo 'let path_sep="$(PATHSEP)"' >> $@
126                 @echo 'let exe="$(EXE)"' >> $@
127
128 .SUBDIRS: scm xml driver base lib camlp4 docs
129
130 # ------------------------------
131 # all
132 # ------------------------------
133 habc-scm$(EXE): scm/src/habc-scm$(EXE)
134         $(LN) $^ .
135
136 habc-xml$(EXE): xml/src/habc-xml$(EXE)
137         $(LN) $^ .
138
139 habc$(EXE) : driver/habc$(EXE)
140         $(LN) $^ .
141
142 PROGRAM = habc$(EXE) habc-xml$(EXE) habc-scm$(EXE)
143
144 all: config $(PROGRAM)
145
146 .DEFAULT: all
147
148 # ------------------------------
149 # install
150 # ------------------------------
151 install: $(PROGRAM)
152         mkdir -p $(BIN_DIR)
153         mkdir -p $(LIB_DIR)
154         mkdir -p $(SHARE_DIR)
155         mkdir -p $(SHARE_DIR)/example
156         $(INSTALL) $(PROGRAM)   $(BIN_DIR)
157         $(INSTALL) share/habc/* $(SHARE_DIR)
158         $(INSTALL) example/*    $(SHARE_DIR)/example/
159         $(INSTALL) lib/habc/*   $(LIB_DIR)
160         if $(or $(equal Win32,$(OSTYPE)),$(equal Cygwin,$(OSTYPE)))
161                 $(INSTALL) win32/swfmill/* $(BIN_DIR)/
162                 $(INSTALL) README.mkdn $(BIN_DIR)/
163
164 # ------------------------------
165 # clean
166 # ------------------------------
167 clean:
168         ocaml-clean *.abc $(PROGRAM)
169
170 distclean: clean
171         ocaml-clean *.abc $(PROGRAM) OMakefile.config base/config.ml
172
173 # ------------------------------
174 # example
175 # ------------------------------
176 %.swf: example/%.scm all
177         ./habc -o $(removesuffix $@) $<