OSDN Git Service

For windows, add m4 binary
[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
13 if $(file-exists VERSION)
14         VERSION=$(shell head -1 VERSION)
15         export
16 else
17         VERSION=local-HEAD
18         export
19
20 Shell. +=
21     ounit-postproc(argv) =
22       (grep "FAIL\|ERROR\|Fail" && exit 1) || exit 0
23     ocaml-clean(argv) =
24       rm -f *.cm[iox] *.o *.omc *.opt *.run *~ $(argv) *.cmxa *.a *.spot *.annot
25
26 # ------------------------------
27 # camlp4 rules
28 # ------------------------------
29 public.UseCamlp4(files) =
30         protected.CAMLP4CMO = $(addprefix $(ROOT)/camlp4/,$(addsuffix .cmo,$(files)))
31         OCAMLPPFLAGS+=-pp 'camlp4o $(CAMLP4CMO)'
32         OCAMLDEPFLAGS+=$(OCAMLPPFLAGS)
33         export
34
35         .SCANNER: scan-ocaml-%.ml: %.ml $(CAMLP4CMO)
36
37 .PHONY: all install config clean distclean example
38
39 # ------------------------------
40 # config
41 # ------------------------------
42 config: OMakefile.config base/config.ml
43
44 .INCLUDE: OMakefile.config
45         if $(mem config,$(TARGETS))
46                 rm -f $@
47                 if $(and $(defined RELATIVE),$(RELATIVE))
48                         echo LIB_DIR=$(PREFIX) >> $@
49                         echo SHARE_DIR=$(PREFIX) >> $@
50                         echo BIN_DIR=$(PREFIX) >> $@
51                 else
52                         if $(not $(defined LIB_DIR))
53                                 echo LIB_DIR=$(PREFIX)/lib/habc >> $@
54                         else
55                                 echo LIB_DIR=$(LIB_DIR) >> $@
56                         if $(not $(defined SHARE_DIR))
57                                 echo SHARE_DIR=$(PREFIX)/share/habc >> $@
58                         else
59                                 echo SHARE_DIR=$(SHARE_DIR) >> $@
60                         if $(not $(defined BIN_DIR))
61                                 echo BIN_DIR=$(PREFIX)/bin >> $@
62                         else
63                                 echo BIN_DIR=$(BIN_DIR) >> $@
64
65                 if $(shell-success-null ocamlc$(if $(OCAMLC_OPT_EXISTS), .opt) -annot)
66                         @echo "static.OCAMLFLAGS +=-annot" >> $@
67                 else
68                         @echo "static.OCAMLFLAGS +=-dtypes" >> $@
69                 if $(ENABLE_DEBUG)
70                         @echo "static.OCAMLFLAGS +=-g" >> $@
71         if $(not $(file-exists OMakefile.config))
72                 @echo "Please refer to the installation instructions in file README.mkdn."
73                 @echo "If you've just unpacked the distribution, something like"
74                 @echo "   omake config"
75                 @echo "   omake all"
76                 @echo "   omake install"
77                 @echo "should work.  But see the file README.mkdn for more details."
78
79 base/config.ml:
80         if $(mem config,$(TARGETS))
81                 rm -f $@
82                 echo 'let version = "$(VERSION)"' >> $@
83                 if $(and $(defined RELATIVE),$(RELATIVE))
84                         @echo 'let bin_dir   = Str.global_replace (Str.regexp "\\\\") "/" (Filename.dirname Sys.executable_name)' >> $@
85                         @echo 'let share_dir = bin_dir' >> $@
86                         @echo 'let lib_dir   = bin_dir' >> $@
87                 else
88                         @echo 'let bin_dir   = "$(ocaml-escaped  $(BIN_DIR))"' >> $@
89                         @echo 'let share_dir = "$(ocaml-escaped  $(SHARE_DIR))"' >> $@
90                         @echo 'let lib_dir   = "$(ocaml-escaped  $(LIB_DIR))"' >> $@
91                 @echo 'let default_includes = [lib_dir;"."]' >> $@
92                 @echo 'let default_template = share_dir ^ "/template.xml"' >> $@
93                 @echo 'let path_sep="$(PATHSEP)"' >> $@
94                 @echo 'let exe="$(EXE)"' >> $@
95
96 .SUBDIRS: scm xml driver base lib camlp4
97
98 # ------------------------------
99 # all
100 # ------------------------------
101 habc-scm$(EXE): scm/src/habc-scm$(EXE)
102         cp $^ .
103
104 habc-xml$(EXE): xml/src/habc-xml$(EXE)
105         cp $^ .
106
107 habc$(EXE) : driver/habc$(EXE)
108         cp $^ .
109
110 PROGRAM = habc$(EXE) habc-xml$(EXE) habc-scm$(EXE)
111
112 all: config $(PROGRAM)
113
114 .DEFAULT: all
115
116 # ------------------------------
117 # install
118 # ------------------------------
119 install: $(PROGRAM)
120         mkdir -p $(BIN_DIR)
121         mkdir -p $(LIB_DIR)
122         mkdir -p $(SHARE_DIR)
123         mkdir -p $(SHARE_DIR)/example
124         $(INSTALL) $(PROGRAM)   $(BIN_DIR)
125         $(INSTALL) share/habc/* $(SHARE_DIR)
126         $(INSTALL) example/*    $(SHARE_DIR)/example/
127         $(INSTALL) lib/habc/*   $(LIB_DIR)
128         if $(or $(equal Win32,$(OSTYPE)),$(equal Cygwin,$(OSTYPE)))
129                 $(INSTALL) win32/swfmill/* $(BIN_DIR)/
130                 $(INSTALL) win32/m4/* $(BIN_DIR)/
131                 $(INSTALL) README.mkdn $(BIN_DIR)/
132
133 # ------------------------------
134 # clean
135 # ------------------------------
136 clean:
137         ocaml-clean *.abc $(PROGRAM)
138
139 distclean: clean
140         ocaml-clean *.abc $(PROGRAM) OMakefile.config base/config.ml
141
142 # ------------------------------
143 # example
144 # ------------------------------
145 %.swf: example/%.scm all
146         ./habc -o $(removesuffix $@) $<