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
David Allsopp 2019-06-18 14:35:06 +01:00 committed by GitHub
parent 4797b8fdf8
commit 93ee6b43b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 28 deletions

View File

@ -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

View File

@ -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

48
Makefile.dev Normal file
View File

@ -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)