forked from casework/CASE-Utilities-Python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
158 lines (142 loc) · 4.71 KB
/
Makefile
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#!/usr/bin/make -f
# Portions of this file contributed by NIST are governed by the following
# statement:
#
# This software was developed at the National Institute of Standards
# and Technology by employees of the Federal Government in the course
# of their official duties. Pursuant to Title 17 Section 105 of the
# United States Code, this software is not subject to copyright
# protection within the United States. NIST assumes no responsibility
# whatsoever for its use by other parties, and makes no guarantees,
# expressed or implied, about its quality, reliability, or any other
# characteristic.
#
# We would appreciate acknowledgement if the software is used.
SHELL := /bin/bash
PYTHON3 ?= python3
case_version := $(shell $(PYTHON3) case_utils/ontology/version_info.py)
ifeq ($(case_version),)
$(error Unable to determine CASE version)
endif
all: \
.ontology.done.log \
.venv-pre-commit/var/.pre-commit-built.log
.PHONY: \
check-supply-chain \
check-supply-chain-pre-commit \
download
.git_submodule_init.done.log: \
.gitmodules
# Log current submodule pointers.
cd dependencies \
&& git diff . \
| cat
test -r dependencies/CASE/ontology/master/case.ttl \
|| (git submodule init dependencies/CASE && git submodule update dependencies/CASE)
test -r dependencies/CASE/ontology/master/case.ttl
$(MAKE) \
--directory dependencies/CASE \
.git_submodule_init.done.log \
.lib.done.log
touch $@
.ontology.done.log: \
dependencies/CASE/ontology/master/case.ttl
# Do not rebuild the current ontology file if it is already present. It is expected not to change once built.
# touch -c: Do not create the file if it does not exist. This will convince the recursive make nothing needs to be done if the file is present.
touch -c case_utils/ontology/case-$(case_version).ttl
touch -c case_utils/ontology/case-$(case_version)-subclasses.ttl
$(MAKE) \
--directory case_utils/ontology
# Confirm the current monolithic file is in place.
test -r case_utils/ontology/case-$(case_version).ttl
test -r case_utils/ontology/case-$(case_version)-subclasses.ttl
touch $@
# This virtual environment is meant to be built once and then persist, even through 'make clean'.
# If a recipe is written to remove this flag file, it should first run `pre-commit uninstall`.
.venv-pre-commit/var/.pre-commit-built.log:
rm -rf .venv-pre-commit
test -r .pre-commit-config.yaml \
|| (echo "ERROR:Makefile:pre-commit is expected to install for this repository, but .pre-commit-config.yaml does not seem to exist." >&2 ; exit 1)
$(PYTHON3) -m venv \
.venv-pre-commit
source .venv-pre-commit/bin/activate \
&& pip install \
--upgrade \
pip \
setuptools \
wheel
source .venv-pre-commit/bin/activate \
&& pip install \
pre-commit
source .venv-pre-commit/bin/activate \
&& pre-commit install
mkdir -p \
.venv-pre-commit/var
touch $@
check: \
.ontology.done.log \
.venv-pre-commit/var/.pre-commit-built.log
$(MAKE) \
PYTHON3=$(PYTHON3) \
--directory tests \
check
# This target's dependencies potentially modify the working directory's Git state, so it is intentionally not a dependency of check.
check-supply-chain: \
check-supply-chain-pre-commit
# This target is scheduled to run as part of prerelease review.
check-supply-chain-pre-commit: \
.venv-pre-commit/var/.pre-commit-built.log
source .venv-pre-commit/bin/activate \
&& pre-commit autoupdate
git diff \
--exit-code \
.pre-commit-config.yaml
clean:
@$(MAKE) \
PYTHON3=$(PYTHON3) \
--directory tests \
clean
@rm -f \
.*.done.log
@# 'clean' in the ontology directory should only happen when testing and building new ontology versions. Hence, it is not called from the top-level Makefile.
@test ! -r dependencies/CASE/README.md \
|| $(MAKE) \
--directory dependencies/CASE \
clean
@# Restore CASE validation and catalog output files that do not affect CASE build process.
@test ! -r dependencies/CASE/README.md \
|| ( \
cd dependencies/CASE \
&& git checkout \
-- \
ontology \
tests/examples \
|| true \
)
@# Restore UCO catalog output files that do not affect CASE build process.
@test ! -r dependencies/CASE/dependencies/UCO/README.md \
|| ( \
cd dependencies/CASE/dependencies/UCO \
&& git checkout \
-- \
ontology \
tests/examples \
|| true \
)
# This recipe guarantees timestamp update order, and is otherwise intended to be a no-op.
dependencies/CASE/ontology/master/case.ttl: \
.git_submodule_init.done.log
test -r $@
touch $@
distclean: \
clean
@rm -rf \
build \
*.egg-info \
dist
download: \
.git_submodule_init.done.log
$(MAKE) \
PYTHON3=$(PYTHON3) \
--directory tests \
download