Move AST testing rules to Makefile.dev (#8743)
Makefile.dev is only included if a Git clone is detected. make evaluates macros in target specifications when the Makefile is read, which meant that the build-all-asts target caused `git ls-files` to be called on every invocation of make. This tweaks it to be a recursive call to make which puts the $(AST_FILES) macro in the recipe where it is only evaluated when the target is requested.master
parent
4797b8fdf8
commit
93ee6b43b0
|
@ -229,6 +229,10 @@ installation, the following targets may be of use:
|
|||
|
||||
`make -C testsuite parallel`:: see link:testsuite/HACKING.adoc[]
|
||||
|
||||
Additionally, there are some developer specific targets in link:Makefile.dev[].
|
||||
These targets are automatically available when working in a Git clone of the
|
||||
repository, but are not available from a tarball.
|
||||
|
||||
=== Bootstrapping
|
||||
|
||||
The OCaml compiler is bootstrapped. This means that
|
||||
|
|
31
Makefile
31
Makefile
|
@ -1267,34 +1267,9 @@ partialclean::
|
|||
|
||||
beforedepend:: bytecomp/opcodes.ml bytecomp/opcodes.mli
|
||||
|
||||
# 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))
|
||||
|
||||
build-all-asts: $(AST_FILES)
|
||||
|
||||
CAMLC_DPARSETREE := \
|
||||
$(CAMLRUN) ./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
|
||||
|
||||
partialclean::
|
||||
rm -f $(AST_FILES)
|
||||
ifneq "$(wildcard .git)" ""
|
||||
include Makefile.dev
|
||||
endif
|
||||
|
||||
# Default rules
|
||||
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
#**************************************************************************
|
||||
#* *
|
||||
#* 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))
|
||||
|
||||
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 := \
|
||||
$(CAMLRUN) ./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
|
||||
|
||||
partialclean::
|
||||
rm -f $(AST_FILES)
|
Loading…
Reference in New Issue