1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#**************************************************************************
#* *
#* OCaml *
#* *
#* Gabriel Scherer, projet Parsifal, INRIA Saclay *
#* *
#* Copyright 2018 Institut National de Recherche en Informatique et *
#* en Automatique. *
#* *
#* All rights reserved. This file is distributed under the terms of *
#* the GNU Lesser General Public License version 2.1, with the *
#* special exception on linking described in the file LICENSE. *
#* *
#**************************************************************************
# Developer-only rules, included in Makefile when a Git repository is detected.
# Testing the parser -- see parsing/HACKING.adoc
SOURCE_FILES=$(shell git ls-files '*.ml' '*.mli' | grep -v boot/menhir/parser)
AST_FILES=$(addsuffix .ast,$(SOURCE_FILES))
# Note: some shells do not support command-lines that contain the full
# list of source files ("too many argument"). We ensure that
# AST_FILES is only passed inside a shell command in explicit targets
# from this Makefile, and not in targets common to other makefiles
# that would be executed unconditionally. We previously had
# a `partialclean::` target performing `clean-all-asts` and that
# resulted in annoying failures for some users, see #13817.
build-all-asts:
# Recursive invocation ensures that `git ls-files` is not executed on every
# invocation of make
@$(MAKE) --no-print-directory $(AST_FILES)
CAMLC_DPARSETREE := \
$(OCAMLRUN) ./ocamlc -nostdlib -nopervasives \
-stop-after parsing -dparsetree
%.ml.ast: %.ml ocamlc
$(CAMLC_DPARSETREE) $< 2> $@ || exit 0
# `|| exit 0` : some source files will fail to parse
# (for example, they are meant as toplevel scripts
# rather than source files, or are parse-error tests),
# we ignore the failure in that case
%.mli.ast: %.mli ocamlc
$(CAMLC_DPARSETREE) $< 2> $@ || exit 0
.PHONY: list-all-asts
list-all-asts:
@for f in $(AST_FILES); do echo "'$$f'"; done
.PHONY: clean-all-asts
clean-all-asts:
@rm -f $(AST_FILES)
|