annotate ci/unlisted.make @ 33861:e6c291944e18

CI: check that all files are listed in Filelist (#13601) Commit: https://github.com/vim/vim/commit/9cc95aa0d8f52bb0c906ca13297ce3a2ba615f2b Author: Peter Simonyi <the.peter.simonyi@gmail.com> Date: Fri Dec 1 12:07:42 2023 -0500 CI: check that all files are listed in Filelist (https://github.com/vim/vim/issues/13601) Sometimes patches add files that should be included in tarballs for distribution, but are not added to Filelist (used by Makefile to build the tar archive). This can break the build, or it can be silently ignored as runtime files are simply not included in the distribution. Add a CI check to ensure all files tracked in the repository are assigned to a variable in Filelist. A few files were not listed because they do not need to be included in builds and tarballs, so add an IGNORE variable for these exceptions. Co-authored-by: Peter Simonyi <pts@petersimonyi.ca> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Fri, 01 Dec 2023 18:15:04 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33861
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
1 # vim: ft=make
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
2 SHELL = /bin/bash
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
3
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
4 # List all files that are tracked in git but not listed in Filelist.
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
5 # Exit code is 2 ("Make encountered an error") if any such files exist.
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
6
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
7 # Filelist is a Makefile that defines many variables, so we use Make itself to
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
8 # query which variables it defines, then expand them all by wrapping each name
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
9 # in $(...), importing Filelist and using $(eval).
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
10
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
11 include Filelist
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
12 $(eval all_patterns := $(shell \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
13 make -f Filelist --question --print-data-base --no-builtin-rules \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
14 --no-builtin-variables 2>/dev/null \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
15 | sed -nre \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
16 '/^# makefile .from \x27Filelist\x27,/ { \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
17 n; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
18 s/ = .*//; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
19 T; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
20 s/.*/$$(\0)/; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
21 p; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
22 }'))
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
23
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
24 # In Makefile's `prepeare` target, all the IN_README_DIR files are moved from
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
25 # READMEdir to the root, so add those files in their Git-tracked location:
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
26 all_patterns := $(all_patterns) \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
27 $(foreach readme, $(IN_README_DIR), READMEdir/$(readme))
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
28
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
29 # The result 'all_patterns' is a list of patterns (globs), which we expand with
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
30 # wildcard to get actual filenames. Note this means Filelist can list a file
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
31 # that does not exist, and it will be omitted at this step.
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
32 listed_files := $(wildcard $(all_patterns))
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
33
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
34 # Default target to actually run the comparison:
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
35 .PHONY: check
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
36 check:
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
37 @# There are too many files to list on the command line, so we write
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
38 @# that to a temporary file, one per line.
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
39 $(file > Filelist-listed-files)
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
40 $(foreach filename, $(listed_files),\
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
41 $(file >> Filelist-listed-files,$(filename)))
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
42 @# Compare the sorted lists. Delete that temporary file on both
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
43 @# success and failure, but exit with diff's exit code.
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
44 diff -u0 --label files-in-git <(git ls-files | sort) \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
45 --label Filelist <(sort --unique Filelist-listed-files); \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
46 RV=$$?; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
47 rm Filelist-listed-files; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
48 (($$RV != 0)) && echo "Add files to the right variable in Filelist."; \
e6c291944e18 CI: check that all files are listed in Filelist (#13601)
Christian Brabandt <cb@256bit.org>
parents:
diff changeset
49 exit $$RV