Import Upstream version 20180207
[hcoop/debian/mlton.git] / Makefile
1 ## Copyright (C) 2009,2011,2013,2017-2018 Matthew Fluet.
2 # Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
3 # Jagannathan, and Stephen Weeks.
4 # Copyright (C) 1997-2000 NEC Research Institute.
5 #
6 # MLton is released under a BSD-style license.
7 # See the file MLton-LICENSE for details.
8 ##
9
10 # Specify C compiler and binutils.
11 # Can be used for alternative tools (e.g., `CC=clang` or `CC=gcc-7`).
12 CC := gcc
13 AR := ar
14 RANLIB := ranlib
15 STRIP := strip
16
17 # Specify GMP include and library paths, if not on default search paths.
18 WITH_GMP_DIR :=
19 ifneq ($(WITH_GMP_DIR),)
20 WITH_GMP_INC_DIR := $(WITH_GMP_DIR)/include
21 WITH_GMP_LIB_DIR := $(WITH_GMP_DIR)/lib
22 endif
23
24 # Specify installation prefix and staged install destination.
25 PREFIX := /usr/local
26 DESTDIR :=
27
28 # Specify runtime and compile arguments given to (the to-be-built) `mlton` when
29 # compiling distributed executables ((self-compiled) `mlton`, `mllex`, `mlyacc`,
30 # `mlprof`, and `mlnlffigen`).
31 # Can be used for testing (e.g., `MLTON_COMPILE_ARGS="-codegen c"`) or for
32 # downstream packaging.
33 MLTON_RUNTIME_ARGS :=
34 MLTON_COMPILE_ARGS :=
35
36 # Specify runtime and compile arguments given to "old" `mlton` when compiling
37 # "bootstrapped" `mlton`.
38 # Can be used to work around bugs in "old" `mlton` when compiling "bootstrapped"
39 # `mlton` (e.g., `BOOTSTRAP_MLTON_COMPILE_ARGS="-drop-pass 'deepFlatten'"`).
40 BOOTSTRAP_MLTON_RUNTIME_ARGS :=
41 BOOTSTRAP_MLTON_COMPILE_ARGS :=
42
43 # Specify standard tools.
44 # Can be used for alternative tools (e.g., `SED=gsed`).
45 DIFF := diff
46 FIND := find
47 GIT := git
48 GREP := grep
49 GZIP := gzip
50 PATCH := patch
51 SED := sed
52 TAR := tar
53 XARGS := xargs
54
55 ######################################################################
56 ######################################################################
57
58 SRC := $(shell pwd)
59 BUILD := $(SRC)/build
60 BIN := $(BUILD)/bin
61 LIB := $(BUILD)/lib/mlton
62 INC := $(LIB)/include
63
64 PATH := $(BIN):$(shell echo $$PATH)
65
66 MLTON_VERSION := 20180207
67
68 HOST_ARCH := $(shell ./bin/host-arch)
69 HOST_OS := $(shell ./bin/host-os)
70 TARGET := self
71 TARGET_ARCH := $(HOST_ARCH)
72 TARGET_OS := $(HOST_OS)
73
74 ifeq (mingw, $(TARGET_OS))
75 EXE := .exe
76 else
77 EXE :=
78 endif
79
80 CP := cp -fpR
81 MKDIR := mkdir -p
82 MV := mv -f
83 RM := rm -rf
84
85 ######################################################################
86
87 # If we're compiling with another version of MLton, then we want to do another
88 # round of compilation so that we get a MLton built without stubs.
89 ifeq (other, $(shell if [ ! -x "$(BIN)/mlton" ]; then echo other; fi))
90 BOOTSTRAP:=true
91 else
92 BOOTSTRAP:=false
93 endif
94 CHECK_FIXPOINT:=false
95
96 .PHONY: all
97 all:
98 $(MAKE) dirs runtime
99 $(MAKE) compiler CHECK_FIXPOINT=false # tools0 + mlton0 -> mlton1
100 $(MAKE) script basis-no-check constants basis-check libraries
101 $(MAKE) tools CHECK_FIXPOINT=false # tools0 + mlton1 -> tools1
102 ifeq (true, $(findstring true,$(BOOTSTRAP) $(CHECK_FIXPOINT)))
103 $(RM) "$(SRC)/mlton/mlton-compile$(EXE)"
104 $(MAKE) -C "$(SRC)/mlton/front-end" clean
105 $(MAKE) compiler CHECK_FIXPOINT=false # tools1 + mlton1 -> mlton2
106 ifeq (true, $(CHECK_FIXPOINT))
107 $(MAKE) tools-clean
108 $(MAKE) tools CHECK_FIXPOINT=true # tools1 + mlton1 -> tools2; tools2 == tools1
109 $(RM) "$(SRC)/mlton/mlton-compile$(EXE)"
110 $(MAKE) -C "$(SRC)/mlton/front-end" clean
111 $(MAKE) compiler CHECK_FIXPOINT=true # tools2 + mlton2 -> mlton3; mlton3 == mlton2
112 endif
113 endif
114 @echo 'Build of MLton succeeded.'
115
116 .PHONY: basis-no-check
117 basis-no-check:
118 $(RM) "$(LIB)/sml/basis"
119 $(MKDIR) "$(LIB)/sml/basis"
120 ( \
121 cd "$(SRC)/basis-library" && \
122 $(FIND) . -type f '(' -name '*.mlb' -o -name '*.sml' -o -name '*.sig' -o -name '*.fun' ')' | \
123 $(XARGS) $(TAR) cf - | \
124 ( cd "$(LIB)/sml/basis" && $(TAR) xf - ) \
125 )
126
127 .PHONY: basis-check
128 basis-check:
129 @echo 'Type checking basis.'
130 "$(BIN)/mlton" -disable-ann deadCode -stop tc '$$(SML_LIB)/basis/libs/all.mlb' >/dev/null
131
132 .PHONY: basis
133 basis:
134 $(MAKE) basis-no-check
135 $(MAKE) basis-check
136
137 .PHONY: bootstrap-smlnj
138 bootstrap-smlnj:
139 $(MAKE) smlnj-mlton
140 $(RM) "$(BIN)/mlton"
141 $(MAKE) BOOTSTRAP_MLTON=mlton.smlnj all
142 smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | sml 2>&1 1> /dev/null` && $(RM) "$(LIB)/mlton/mlton-smlnj.$$smlnj_heap_suffix"
143 $(RM) "$(BIN)/mlton.smlnj"
144
145 .PHONY: bootstrap-polyml
146 bootstrap-polyml:
147 $(MAKE) polyml-mlton
148 $(RM) "$(BIN)/mlton"
149 $(MAKE) BOOTSTRAP_MLTON=mlton.polyml all
150 $(RM) "$(LIB)/mlton-polyml$(EXE)"
151 $(RM) "$(BIN)/mlton.polyml"
152
153 .PHONY: clean
154 clean:
155 ./bin/clean --exclude package
156
157 .PHONY: clean-git
158 clean-git:
159 $(FIND) . -type d -name .git -prune -exec $(RM) '{}' ';'
160
161 .PHONY: compiler
162 compiler:
163 $(MAKE) -C "$(SRC)/mlton" MLTON_OUTPUT=mlton-compile
164 ifeq (true, $(CHECK_FIXPOINT))
165 $(DIFF) -b "$(SRC)/mlton/mlton-compile$(EXE)" "$(LIB)/mlton-compile$(EXE)"
166 endif
167 $(CP) "$(SRC)/mlton/mlton-compile$(EXE)" "$(LIB)/"
168
169 .PHONY: constants
170 constants:
171 @echo 'Creating constants file.'
172 "$(BIN)/mlton" -target "$(TARGET)" -build-constants true > build-constants.c
173 "$(BIN)/mlton" -target "$(TARGET)" -output build-constants build-constants.c
174 ./build-constants$(EXE) >"$(LIB)/targets/$(TARGET)/constants"
175 $(RM) build-constants$(EXE) build-constants.c
176
177 .PHONY: debugged
178 debugged:
179 $(MAKE) -C "$(SRC)/mlton" MLTON_OUTPUT=mlton-compile.debug \
180 MLTON_COMPILE_ARGS="$(MLTON_COMPILE_ARGS) -debug true -const 'Exn.keepHistory true' -profile-val true -const 'MLton.debug true' -disable-pass 'deepFlatten'"
181 $(CP) "$(SRC)/mlton/mlton-compile.debug$(EXE)" "$(LIB)/"
182 $(SED) -e 's/mlton-compile/mlton-compile.debug/' \
183 < "$(BIN)/mlton" \
184 > "$(BIN)/mlton.debug"
185 chmod u+x "$(BIN)/mlton.debug"
186
187 .PHONY: dirs
188 dirs:
189 $(MKDIR) "$(BIN)" "$(LIB)" "$(INC)"
190 $(MKDIR) "$(LIB)/targets/$(TARGET)/include"
191 $(MKDIR) "$(LIB)/targets/$(TARGET)/sml"
192
193 .PHONY: docs
194 docs:
195 $(MAKE) -C "$(SRC)/mllex" docs
196 $(MAKE) -C "$(SRC)/mlyacc" docs
197 $(MAKE) -C "$(SRC)/doc/guide"
198
199 define LIBRARIES_NO_CHECK_TEMPLATE
200 $(RM) "$(LIB)/sml/$(1)"
201 $(MKDIR) "$(LIB)/sml/$(1)"
202 ( \
203 cd "$(SRC)/lib/$(1)$(2)" && \
204 $(FIND) . '!' -path '*/.cm/*' $(3) -type f '(' -name '*.mlb' -o -name '*.sml' -o -name '*.sig' -o -name '*.fun' ')' | \
205 $(XARGS) $(TAR) cf - | \
206 ( cd "$(LIB)/sml/$(1)" && $(TAR) xf - ) \
207 )
208
209 endef
210
211 .PHONY: libraries-no-check
212 libraries-no-check:
213 $(MAKE) -C "$(SRC)/lib/ckit-lib"
214 $(call LIBRARIES_NO_CHECK_TEMPLATE,ckit-lib,/ckit/src,)
215 $(call LIBRARIES_NO_CHECK_TEMPLATE,cml,,'!' -path '*/tests/*')
216 $(MAKE) -C "$(SRC)/lib/mllpt-lib"
217 $(call LIBRARIES_NO_CHECK_TEMPLATE,mllpt-lib,/ml-lpt/lib,)
218 $(MAKE) -C "$(SRC)/lib/mlnlffi-lib"
219 $(call LIBRARIES_NO_CHECK_TEMPLATE,mlnlffi-lib,,)
220 $(MAKE) -C "$(SRC)/lib/mlrisc-lib"
221 $(call LIBRARIES_NO_CHECK_TEMPLATE,mlrisc-lib,/MLRISC,'!' -path '*/demo/*' '!' -path '*/Tools/*' '!' -path './autoload.sml' '!' -path './make*.sml')
222 $(call LIBRARIES_NO_CHECK_TEMPLATE,mlyacc-lib,,)
223 $(MAKE) -C "$(SRC)/lib/smlnj-lib"
224 $(call LIBRARIES_NO_CHECK_TEMPLATE,smlnj-lib,/smlnj-lib,'!' -path '*/examples/*' '!' -path '*/tests/*' '!' -path '*/Tests/*')
225
226 define LIBRARIES_CHECK_TEMPLATE
227 @echo "Type checking $(1) library."
228 "$(BIN)/mlton" -disable-ann deadCode -stop tc '$$(SML_LIB)/$(1)/$(1).mlb' >/dev/null
229 endef
230
231 .PHONY: libraries-check
232 libraries-check:
233 $(call LIBRARIES_CHECK_TEMPLATE,ckit-lib)
234 $(call LIBRARIES_CHECK_TEMPLATE,cml)
235 $(call LIBRARIES_CHECK_TEMPLATE,mllpt-lib)
236 $(call LIBRARIES_CHECK_TEMPLATE,mlnlffi-lib)
237 $(call LIBRARIES_CHECK_TEMPLATE,mlrisc-lib)
238 $(call LIBRARIES_CHECK_TEMPLATE,mlyacc-lib)
239 $(call LIBRARIES_CHECK_TEMPLATE,smlnj-lib)
240
241 .PHONY: libraries
242 libraries:
243 $(MAKE) libraries-no-check
244 $(MAKE) libraries-check
245
246 .PHONY: polyml-mlton
247 polyml-mlton:
248 $(MAKE) dirs runtime
249 $(MAKE) -C "$(SRC)/mlton" polyml-mlton
250 $(CP) "$(SRC)/mlton/mlton-polyml$(EXE)" "$(LIB)/"
251 $(MAKE) script basis-no-check constants libraries-no-check
252 $(SED) \
253 -e 's;doitMLton "$$@";# doitMLton "$$@";' \
254 -e 's;doitSMLNJ "$$@";# doitSMLNJ "$$@";' \
255 < "$(BIN)/mlton" \
256 > "$(BIN)/mlton.polyml"
257 chmod u+x "$(BIN)/mlton.polyml"
258 @echo 'Build of MLton (with Poly/ML) succeeded.'
259
260 define PROFILED_TEMPLATE
261 $(MAKE) -C "$(SRC)/mlton" MLTON_OUTPUT=mlton-compile.$(1) \
262 MLTON_COMPILE_ARGS="$(MLTON_COMPILE_ARGS) -profile $(1)"
263 $(CP) "$(SRC)/mlton/mlton-compile.$(1)$(EXE)" "$(LIB)/"
264 $(SED) -e "s/mlton-compile/mlton-compile.$(1)/" \
265 < "$(BIN)/mlton" \
266 >"$(BIN)/mlton.$(1)"
267 chmod u+x "$(BIN)/mlton.$(1)"
268 endef
269
270 .PHONY: profiled-alloc
271 profiled-alloc:
272 $(call PROFILED_TEMPLATE,alloc)
273
274 .PHONY: profiled-count
275 profiled-count:
276 $(call PROFILED_TEMPLATE,count)
277
278 .PHONY: profiled-time
279 profiled-time:
280 $(call PROFILED_TEMPLATE,time)
281
282 .PHONY: profiled
283 $(MAKE) profiled-alloc
284 $(MAKE) profiled-count
285 $(MAKE) profiled-time
286
287 .PHONY: runtime
288 runtime:
289 @echo 'Compiling MLton runtime system for $(TARGET).'
290 $(MAKE) -C "$(SRC)/runtime"
291 $(CP) "$(SRC)/include/"*.h "$(INC)/"
292 $(CP) "$(SRC)/runtime/"*.a "$(LIB)/targets/$(TARGET)/"
293 $(CP) "$(SRC)/runtime/gen/sizes" "$(LIB)/targets/$(TARGET)/"
294 $(CP) "$(SRC)/runtime/gen/c-types.sml" "$(LIB)/targets/$(TARGET)/sml/"
295 echo "$(TARGET_OS)" > "$(LIB)/targets/$(TARGET)/os"
296 echo "$(TARGET_ARCH)" > "$(LIB)/targets/$(TARGET)/arch"
297 $(CP) "$(SRC)/runtime/gen/basis-ffi.sml" \
298 basis-library/primitive/basis-ffi.sml
299 $(CP) "$(SRC)/runtime/"*.h "$(INC)/"
300 $(MV) "$(INC)/c-types.h" "$(LIB)/targets/$(TARGET)/include"
301 for d in basis basis/Real basis/Word gc platform util; do \
302 $(MKDIR) "$(INC)/$$d"; \
303 $(CP) "$(SRC)/runtime/$$d/"*.h "$(INC)/$$d"; \
304 done
305
306 .PHONY: script
307 script:
308 $(SED) \
309 -e "s;^EXE=.*;EXE=\"$(EXE)\";" \
310 -e "s;^CC=.*;CC=\"$(CC)\";" \
311 -e "s;^GMP_INC_DIR=.*;GMP_INC_DIR=\"$(WITH_GMP_INC_DIR)\";" \
312 -e "s;^GMP_LIB_DIR=.*;GMP_LIB_DIR=\"$(WITH_GMP_LIB_DIR)\";" \
313 < "$(SRC)/bin/mlton-script" > "$(BIN)/mlton"
314 chmod a+x "$(BIN)/mlton"
315 $(CP) "$(SRC)/bin/static-library" "$(LIB)"
316 ifeq (mingw, $(TARGET_OS))
317 $(CP) "$(SRC)/bin/static-library.bat" "$(LIB)"
318 endif
319
320 .PHONY: smlnj-mlton
321 smlnj-mlton:
322 $(MAKE) dirs runtime
323 $(MAKE) -C "$(SRC)/mlton" smlnj-mlton
324 smlnj_heap_suffix=`echo 'TextIO.output (TextIO.stdErr, SMLofNJ.SysInfo.getHeapSuffix ());' | sml 2>&1 1> /dev/null` && $(CP) "$(SRC)/mlton/mlton-smlnj.$$smlnj_heap_suffix" "$(LIB)/"
325 $(MAKE) script basis-no-check constants libraries-no-check
326 $(SED) \
327 -e 's;doitMLton "$$@";# doitMLton "$$@";' \
328 -e 's;doitPolyML "$$@";# doitPolyML "$$@";' \
329 < "$(BIN)/mlton" \
330 > "$(BIN)/mlton.smlnj"
331 chmod u+x "$(BIN)/mlton.smlnj"
332 @echo 'Build of MLton (with SML/NJ) succeeded.'
333
334 .PHONY: smlnj-mlton-x2
335 smlnj-mlton-x2:
336 $(MAKE) SMLNJ_CM_SERVERS_NUM=2 smlnj-mlton
337
338 .PHONY: smlnj-mlton-x4
339 smlnj-mlton-x4:
340 $(MAKE) SMLNJ_CM_SERVERS_NUM=4 smlnj-mlton
341
342 .PHONY: smlnj-mlton-x8
343 smlnj-mlton-x8:
344 $(MAKE) SMLNJ_CM_SERVERS_NUM=8 smlnj-mlton
345
346 .PHONY: smlnj-mlton-x16
347 smlnj-mlton-x16:
348 $(MAKE) SMLNJ_CM_SERVERS_NUM=16 smlnj-mlton
349
350 .PHONY: traced
351 traced:
352 $(MAKE) -C "$(SRC)/mlton" MLTON_OUTPUT=mlton-compile.trace \
353 MLTON_COMPILE_ARGS="$(MLTON_COMPILE_ARGS) -const 'Exn.keepHistory true' -profile-val true -const 'MLton.debug true' -disable-pass 'deepFlatten'"
354 $(CP) "$(SRC)/mlton/mlton-compile.trace$(EXE)" "$(LIB)/"
355 $(SED) -e 's/mlton-compile/mlton-compile.trace/' \
356 < "$(BIN)/mlton" \
357 > "$(BIN)/mlton.trace"
358 chmod u+x "$(BIN)/mlton.trace"
359
360 ifeq (true, $(CHECK_FIXPOINT))
361 define TOOLS_TEMPLATE_CHECK_FIXPOINT
362 $(DIFF) -b "$(SRC)/$(1)/$(1)$(EXE)" "$(BIN)/$(1)$(EXE)"
363 endef
364 else
365 define TOOLS_TEMPLATE_CHECK_FIXPOINT
366 endef
367 endif
368
369 define TOOLS_TEMPLATE
370 $(MAKE) -C "$(SRC)/$(1)"
371 $(call TOOLS_TEMPLATE_CHECK_FIXPOINT,$(1))
372 $(CP) "$(1)/$(1)$(EXE)" "$(BIN)/"
373 endef
374
375 .PHONY: tools
376 tools:
377 $(call TOOLS_TEMPLATE,mllex)
378 $(call TOOLS_TEMPLATE,mlyacc)
379 $(call TOOLS_TEMPLATE,mlprof)
380 $(call TOOLS_TEMPLATE,mlnlffigen)
381
382 .PHONY: tools-clean
383 tools-clean:
384 $(MAKE) -C "$(SRC)/mllex" clean
385 $(MAKE) -C "$(SRC)/mlyacc" clean
386 $(MAKE) -C "$(SRC)/mlprof" clean
387 $(MAKE) -C "$(SRC)/mlnlffigen" clean
388
389 .PHONY: check
390 check:
391 ./bin/regression $(CHECK_ARGS)
392
393
394 .PHONY: version
395 version:
396 @echo 'Instantiating version numbers.'
397 for f in \
398 "$(SRC)/Makefile" \
399 "$(SRC)/mlton/Makefile" \
400 "$(SRC)/doc/guide/Makefile" \
401 ; do \
402 $(SED) -e "s/^MLTON_VERSION := .*/MLTON_VERSION := $(MLTON_VERSION)/" <"$$f" >z && \
403 mv z "$$f"; \
404 done
405
406
407 prefix := $(PREFIX)
408 exec_prefix := $(prefix)
409 bindir := $(exec_prefix)/bin
410 datarootdir := $(prefix)/share
411 docdir := $(datarootdir)/doc/mlton
412 libdir := $(exec_prefix)/lib
413 mandir := $(datarootdir)/man
414 man1dir := $(mandir)/man1
415
416 TBIN := $(DESTDIR)$(bindir)
417 TLIB := $(DESTDIR)$(libdir)/mlton
418 TMAN := $(DESTDIR)$(man1dir)
419 TDOC := $(DESTDIR)$(docdir)
420 TEXM := $(TDOC)/examples
421
422 GZIP_MAN := true
423 ifeq ($(findstring $(TARGET_OS), openbsd solaris), $(TARGET_OS))
424 GZIP_MAN := false
425 endif
426
427 .PHONY: install
428 install: install-no-strip install-strip install-docs
429
430 MAN_PAGES := \
431 mllex.1 \
432 mlnlffigen.1 \
433 mlprof.1 \
434 mlton.1 \
435 mlyacc.1
436
437 .PHONY: install-no-strip
438 install-no-strip:
439 $(MKDIR) "$(TBIN)" "$(TLIB)" "$(TMAN)"
440 $(CP) "$(BIN)/." "$(TBIN)/"
441 $(CP) "$(LIB)/." "$(TLIB)/"
442 cd "$(SRC)/man" && $(CP) $(MAN_PAGES) "$(TMAN)/"
443 ifeq (true, $(GZIP_MAN))
444 cd "$(TMAN)" && $(GZIP) --force --best $(MAN_PAGES);
445 endif
446
447 .PHONY: install-strip
448 install-strip: install-no-strip
449 for f in "$(TLIB)/mlton-compile$(EXE)" \
450 "$(TBIN)/mllex$(EXE)" \
451 "$(TBIN)/mlyacc$(EXE)" \
452 "$(TBIN)/mlprof$(EXE)" \
453 "$(TBIN)/mlnlffigen$(EXE)"; do \
454 $(STRIP) "$$f"; \
455 done
456
457 REGRESSION_EXAMPLES := \
458 callcc.sml command-line.sml hello-world.sml same-fringe.sml \
459 signals.sml size.sml taut.sml thread1.sml thread2.sml \
460 thread-switch.sml timeout.sml
461
462 .PHONY: install-docs
463 install-docs:
464 $(MKDIR) "$(TDOC)" "$(TDOC)/license"
465 ( \
466 cd "$(SRC)" && \
467 $(CP) CHANGELOG.adoc README.adoc "$(TDOC)/" && \
468 $(CP) LICENSE "$(TDOC)/license/MLton-LICENSE" \
469 )
470 ( \
471 cd "$(SRC)/doc" && \
472 $(FIND) examples -type f '!' -name .gitignore \
473 | $(XARGS) $(TAR) cf - \
474 | ( cd "$(TDOC)/" && $(TAR) xf - ) \
475 )
476 ( \
477 cd "$(SRC)/doc" && \
478 $(FIND) license -type f '!' -name .gitignore \
479 | $(XARGS) $(TAR) cf - \
480 | ( cd "$(TDOC)/" && $(TAR) xf - ) \
481 )
482 if [ -d "$(SRC)/doc/guide/localhost" ]; then \
483 $(CP) "$(SRC)/doc/guide/localhost" "$(TDOC)/guide"; \
484 fi
485 if [ -r "$(SRC)/doc/guide/mlton-guide.pdf" ]; then \
486 $(CP) "$(SRC)/doc/guide/mlton-guide.pdf" "$(TDOC)/"; \
487 fi
488 if [ -r "mllex/mllex.pdf" ]; then \
489 $(CP) "mllex/mllex.pdf" "$(TDOC)/"; \
490 fi
491 if [ -r "mlyacc/mlyacc.pdf" ]; then \
492 $(CP) "mlyacc/mlyacc.pdf" "$(TDOC)/"; \
493 fi
494 ( \
495 cd "$(SRC)/util" && \
496 $(FIND) cm2mlb -type f '!' -name .gitignore \
497 | $(XARGS) $(TAR) cf - \
498 | ( cd "$(TDOC)/" && $(TAR) xf - ) \
499 )
500 ( \
501 cd "$(SRC)/regression" && \
502 $(CP) $(REGRESSION_EXAMPLES) "$(TEXM)/" \
503 )
504
505
506 .PHONY: source-release
507 source-release:
508 $(MAKE) clean
509 $(MAKE) MLTON_VERSION=$(MLTON_VERSION) version
510 ( cd "$(SRC)/mllex" ; latexmk -pdf lexgen ; latexmk -c lexgen )
511 $(MAKE) -C "$(SRC)/mllex" mllex.pdf
512 ( cd "$(SRC)/mlyacc/doc"; latexmk -pdf mlyaccc ; latexmk -c mlyacc )
513 $(MAKE) -C "$(SRC)/mlyacc" mlyacc.pdf
514 $(MAKE) -C doc/guide
515 $(TAR) cvzf ../mlton-$(MLTON_VERSION).src.tgz \
516 --exclude .git --exclude package \
517 --transform "s@^@mlton-$(MLTON_VERSION)/@S" \
518 *
519
520 MLTON_BINARY_RELEASE := 1
521 MLTON_BINARY_RELEASE_SUFFIX :=
522 .PHONY: binary-release
523 binary-release:
524 $(MAKE) all docs
525 $(RM) "$(SRC)/mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX)"
526 $(MKDIR) "$(SRC)/mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX)"
527 $(MAKE) DESTDIR="$(SRC)/mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX)" PREFIX="" install
528 $(CP) "$(SRC)/Makefile.binary" "$(SRC)/mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX)/Makefile"
529 $(CP) "$(SRC)/CHANGELOG.adoc" "$(SRC)/LICENSE" "$(SRC)/README.adoc" "$(SRC)/mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX)/"
530 $(TAR) cvzf ../mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX).tgz \
531 mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX)
532 $(RM) mlton-$(MLTON_VERSION)-$(MLTON_BINARY_RELEASE).$(TARGET_ARCH)-$(TARGET_OS)$(MLTON_BINARY_RELEASE_SUFFIX)
533
534 BSDSRC := /tmp/mlton-$(MLTON_VERSION)
535 MLTON_FREEBSD_RELEASE := 1
536 .PHONY: freebsd
537 freebsd:
538 $(MAKE) clean clean-git version
539 $(RM) "$(BSDSRC)"
540 $(MKDIR) "$(BSDSRC)"
541 ( cd $(SRC) && tar -cpf - . ) | ( cd "$(BSDSRC)" && tar -xpf - )
542 cd /tmp && tar -cpf - mlton-$(MLTON_VERSION) | \
543 $(GZIP) --force --best >/usr/ports/distfiles/mlton-$(MLTON_VERSION)-$(MLTON_FREEBSD_RELEASE).freebsd.src.tgz
544 # do not change "make" to "$(MAKE)" in the following line
545 cd "$(BSDSRC)/package/freebsd" && MAINTAINER_MODE=yes make build-package