aboutsummaryrefslogtreecommitdiff
path: root/testcase
diff options
context:
space:
mode:
authorDan Willemsen <dwillemsen@google.com>2018-06-08 16:39:23 -0700
committerDan Willemsen <dwillemsen@google.com>2018-06-11 14:52:17 -0700
commit8b551c5c20165711d8982a22b010c15ed1e819b0 (patch)
treef7ad21a73feb2bdaa998acb79c43a7345433ef09 /testcase
parent6aafee69b661d03dd53d88c55b1e3ec0b377b02b (diff)
downloadkati-8b551c5c20165711d8982a22b010c15ed1e819b0.tar.gz
Add some simple sanity checks around PHONY targets
These checks won't apply for all build systems, but for Android, we'd like to assert: * That .PHONY targets don't look like real files. This is mostly to prevent confusion, and just checks to see if any targets marked as phony have a '/' character in their name. * That real files don't depend on a PHONY target. If they do, the real file would be rebuilt on every build execution, potentially causing much of the build graph to be rebuilt on every execution. Change-Id: Ibc3023ddccfca5123be41a5124e7bc134e37d2d2
Diffstat (limited to 'testcase')
-rw-r--r--testcase/phony_looks_real.sh43
-rw-r--r--testcase/real_to_phony.sh43
2 files changed, 86 insertions, 0 deletions
diff --git a/testcase/phony_looks_real.sh b/testcase/phony_looks_real.sh
new file mode 100644
index 0000000..b526564
--- /dev/null
+++ b/testcase/phony_looks_real.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# Copyright 2018 Google Inc. All rights reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -u
+
+mk="$@"
+
+cat <<EOF > Makefile
+test: foo/bar foo/baz
+foo/bar: .KATI_IMPLICIT_OUTPUTS := foo/baz
+foo/bar:
+ @echo "END"
+.PHONY: test foo/bar
+EOF
+
+if echo "${mk}" | grep -qv "kati"; then
+ # Make doesn't support these warnings, so write the expected output.
+ echo 'Makefile:4: warning: PHONY target "foo/bar" looks like a real file (contains a "/")'
+ echo 'Makefile:4: warning: PHONY target "foo/baz" looks like a real file (contains a "/")'
+ echo 'END'
+else
+ ${mk} --warn_phony_looks_real 2>&1
+fi
+
+if echo "${mk}" | grep -qv "kati"; then
+ # Make doesn't support these warnings, so write the expected output.
+ echo 'Makefile:4: *** PHONY target "foo/bar" looks like a real file (contains a "/")'
+else
+ ${mk} --werror_phony_looks_real 2>&1
+fi
diff --git a/testcase/real_to_phony.sh b/testcase/real_to_phony.sh
new file mode 100644
index 0000000..18bc0bc
--- /dev/null
+++ b/testcase/real_to_phony.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+#
+# Copyright 2018 Google Inc. All rights reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http:#www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -u
+
+mk="$@"
+
+cat <<EOF > Makefile
+test: foo
+foo: bar
+ @echo "END"
+bar:
+ @exit 0
+.PHONY: bar
+EOF
+
+if echo "${mk}" | grep -qv "kati"; then
+ # Make doesn't support these warnings, so write the expected output.
+ echo 'Makefile:3: warning: real file "foo" depends on PHONY target "bar"'
+ echo 'END'
+else
+ ${mk} --warn_real_to_phony 2>&1
+fi
+
+if echo "${mk}" | grep -qv "kati"; then
+ # Make doesn't support these warnings, so write the expected output.
+ echo 'Makefile:3: *** real file "foo" depends on PHONY target "bar"'
+else
+ ${mk} --werror_real_to_phony 2>&1
+fi