diff options
author | Dan Willemsen <dwillemsen@google.com> | 2018-06-08 16:39:23 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@google.com> | 2018-06-11 14:52:17 -0700 |
commit | 8b551c5c20165711d8982a22b010c15ed1e819b0 (patch) | |
tree | f7ad21a73feb2bdaa998acb79c43a7345433ef09 /testcase | |
parent | 6aafee69b661d03dd53d88c55b1e3ec0b377b02b (diff) | |
download | kati-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.sh | 43 | ||||
-rw-r--r-- | testcase/real_to_phony.sh | 43 |
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 |