Makefile 3.28 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This is the main Makefile that is shipped as part of the source package.
# Keep in mind that the hierarchy that is shipped is not identical to the
# hierarchy within the svn repository: some sub-directories are not shipped;
# the documentation is pre-built.

# The hierarchy that is shipped includes:
#   demos
#   menhir.1
#   manual.pdf
#   src
#   Makefile (this one)

# ----------------------------------------------------------------------------

fpottier's avatar
fpottier committed
15
16
17
18
19
20
21
22
23
24
25
26
# The following variables must/can be configured.

ifndef PREFIX
  $(error Please define PREFIX)
endif

ifndef TARGET
  TARGET := native
endif

# ----------------------------------------------------------------------------

27
28
29
30
31
32
33
34
35
36
37
# By default, we attempt to use ocamlfind (if present in the PATH), but it it
# is possible to prevent that externally by setting USE_OCAMLFIND to false.

ifndef USE_OCAMLFIND
  USE_OCAMLFIND = ocamlfind ocamlc -v >/dev/null 2>&1
endif

# ----------------------------------------------------------------------------

# A few settings differ on Windows versus Unix.

fpottier's avatar
fpottier committed
38
39
40
41
42
43
44
45
46
ifeq "$(shell ocamlc -config | grep ccomp_type)" "ccomp_type: msvc"
MENHIREXE    := menhir.exe
OBJ          := obj
# LIBSUFFIX    := lib
else
MENHIREXE    := menhir
OBJ          := o
# LIBSUFFIX    := a
endif
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

# ----------------------------------------------------------------------------
# Installation paths.

bindir          := ${PREFIX}/bin
docdir		:= ${PREFIX}/share/doc/menhir
libdir	        := ${PREFIX}/share/menhir
mandir          := ${PREFIX}/share/man/man1
MANS            := menhir.1
DOCS            := manual.pdf demos
MLYLIB          := src/standard.mly

# -------------------------------------------------------------------------

# Building menhirLib.

ifeq ($(TARGET),byte)
MENHIRLIB       := menhirLib.cmi menhirLib.cmo
else
MENHIRLIB       := menhirLib.cmi menhirLib.cmo menhirLib.cmx menhirLib.$(OBJ)
endif

# ----------------------------------------------------------------------------
# Compilation.

# Installation time settings are recorded within src/installation.ml.
# This file is recreated every time so as to avoid becoming stale.

.PHONY: all install uninstall

all:
	rm -f src/installation.ml
	echo "let libdir = \"${libdir}\"" > src/installation.ml
	if $(USE_OCAMLFIND) ; then \
	  echo "let ocamlfind = true" >> src/installation.ml ; \
	else \
	  echo "let ocamlfind = false" >> src/installation.ml ; \
	fi
fpottier's avatar
fpottier committed
85
	$(MAKE) -C src library bootstrap
86
87
88
89

# ----------------------------------------------------------------------------
# Installation.

fpottier's avatar
fpottier committed
90
91
92
# The directory where things have been built (by make all, above).
BUILDDIR := src/_stage2

93
install:
94
95
96
97
	mkdir -p $(bindir)
	mkdir -p $(libdir)
	mkdir -p $(docdir)
	mkdir -p $(mandir)
98
	install $(BUILDDIR)/menhir.$(TARGET) $(bindir)/$(MENHIREXE)
99
100
101
	install -m 644 $(MLYLIB) $(libdir)
	cp -r $(DOCS) $(docdir)
	cp -r $(MANS) $(mandir)
fpottier's avatar
fpottier committed
102
	@if $(USE_OCAMLFIND) ; then \
103
	  echo Installing MenhirLib via ocamlfind. ; \
fpottier's avatar
fpottier committed
104
	  ocamlfind install menhirLib src/META $(patsubst %,$(BUILDDIR)/%,$(MENHIRLIB)) ; \
105
106
	else \
	  echo Installing MenhirLib manually. ; \
fpottier's avatar
fpottier committed
107
	  install -m 644 $(patsubst %,$(BUILDDIR)/%,$(MENHIRLIB)) $(libdir) ; \
108
109
110
111
112
113
114
115
116
117
118
	fi

uninstall:
	rm -rf $(bindir)/$(MENHIREXE)
	rm -rf $(libdir)
	rm -rf $(docdir)
	rm -rf $(mandir)/$(MANS)
	@if $(USE_OCAMLFIND) ; then \
	  echo Un-installing MenhirLib via ocamlfind. ; \
	  ocamlfind remove menhirLib ; \
	fi