1*1c89b83dSrillig# $NetBSD: t_findcc.sh,v 1.3 2021/08/20 06:36:10 rillig Exp $ 2e91fe367Srillig# 3e91fe367Srillig# Copyright (c) 2021 The NetBSD Foundation, Inc. 4e91fe367Srillig# All rights reserved. 5e91fe367Srillig# 6e91fe367Srillig# This code is derived from software contributed to The NetBSD Foundation 7e91fe367Srillig# by Roland Illig. 8e91fe367Srillig# 9e91fe367Srillig# Redistribution and use in source and binary forms, with or without 10e91fe367Srillig# modification, are permitted provided that the following conditions 11e91fe367Srillig# are met: 12e91fe367Srillig# 1. Redistributions of source code must retain the above copyright 13e91fe367Srillig# notice, this list of conditions and the following disclaimer. 14e91fe367Srillig# 2. Redistributions in binary form must reproduce the above copyright 15e91fe367Srillig# notice, this list of conditions and the following disclaimer in the 16e91fe367Srillig# documentation and/or other materials provided with the distribution. 17e91fe367Srillig# 18e91fe367Srillig# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19e91fe367Srillig# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20e91fe367Srillig# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21e91fe367Srillig# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22e91fe367Srillig# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23e91fe367Srillig# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24e91fe367Srillig# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25e91fe367Srillig# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26e91fe367Srillig# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27e91fe367Srillig# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28e91fe367Srillig# POSSIBILITY OF SUCH DAMAGE. 29e91fe367Srillig# 30e91fe367Srillig 31e91fe367Srillign=' 32e91fe367Srillig' 33e91fe367Srillig 34e91fe367Srillig# A plain program name is searched in the PATH. Since in this case, the 35e91fe367Srillig# environment is empty, nothing is found. 36e91fe367Srillig# 37e91fe367Srilligatf_test_case base_not_found 38e91fe367Srilligbase_not_found_body() { 39e91fe367Srillig atf_check -o "inline:(not found)$n" \ 40e91fe367Srillig env -i \ 41e91fe367Srillig "$(atf_get_srcdir)"/h_findcc 'echo' 42e91fe367Srillig} 43e91fe367Srillig 44e91fe367Srillig# A plain program name is searched in the PATH and, in this example, it is 45e91fe367Srillig# found in '/bin'. 46e91fe367Srillig# 47e91fe367Srilligatf_test_case base_found 48e91fe367Srilligbase_found_body() { 49e91fe367Srillig atf_check -o "inline:/bin/echo$n" \ 50e91fe367Srillig env -i PATH='/bin:/nonexistent' \ 51e91fe367Srillig "$(atf_get_srcdir)"/h_findcc 'echo' 52e91fe367Srillig} 53e91fe367Srillig 54*1c89b83dSrillig# A plain program name is searched in the PATH and, in this example, it is 55*1c89b83dSrillig# found in '/bin', which comes second in the PATH. 56*1c89b83dSrillig# 57*1c89b83dSrilligatf_test_case base_found_second 58*1c89b83dSrilligbase_found_second_body() { 59*1c89b83dSrillig atf_check -o "inline:/bin/echo$n" \ 60*1c89b83dSrillig env -i PATH='/nonexistent:/bin' \ 61*1c89b83dSrillig "$(atf_get_srcdir)"/h_findcc 'echo' 62*1c89b83dSrillig} 63*1c89b83dSrillig 64*1c89b83dSrillig# A plain program name is searched in the PATH and, in this example, it is 65*1c89b83dSrillig# found in './bin', a relative path in the PATH, which is rather unusual in 66*1c89b83dSrillig# practice. 67*1c89b83dSrillig# 68*1c89b83dSrilligatf_test_case base_found_reldir 69*1c89b83dSrilligbase_found_reldir_body() { 70*1c89b83dSrillig mkdir bin 71*1c89b83dSrillig echo '#! /bin/sh' > 'bin/reldir-echo' 72*1c89b83dSrillig chmod +x 'bin/reldir-echo' 73*1c89b83dSrillig 74*1c89b83dSrillig atf_check -o "inline:bin/reldir-echo$n" \ 75*1c89b83dSrillig env -i PATH='/nonexistent:bin' \ 76*1c89b83dSrillig "$(atf_get_srcdir)"/h_findcc 'reldir-echo' 77*1c89b83dSrillig} 78*1c89b83dSrillig 79e91fe367Srillig# The C compiler can be specified as a program with one or more arguments. 80e91fe367Srillig# If the program name is a plain name without any slash, the argument is 81e91fe367Srillig# discarded. 82e91fe367Srillig# 83e91fe367Srillig# XXX: Discarding the arguments feels unintended. 84e91fe367Srillig# 85e91fe367Srilligatf_test_case base_arg_found 86e91fe367Srilligbase_arg_found_body() { 87e91fe367Srillig atf_check -o "inline:/bin/echo$n" \ 88e91fe367Srillig env -i PATH='/bin:/nonexistent' \ 89e91fe367Srillig "$(atf_get_srcdir)"/h_findcc 'echo arg' 90e91fe367Srillig} 91e91fe367Srillig 92e91fe367Srillig 93e91fe367Srillig# If the program name contains a slash, no matter where, the program is not 94e91fe367Srillig# searched in the PATH. This is the same behavior as in /bin/sh. 95e91fe367Srillig# 96e91fe367Srilligatf_test_case rel_not_found 97e91fe367Srilligrel_not_found_body() { 98e91fe367Srillig atf_check -o "inline:(not found)$n" \ 99e91fe367Srillig env -i PATH='/' \ 100e91fe367Srillig "$(atf_get_srcdir)"/h_findcc 'bin/echo' 101e91fe367Srillig} 102e91fe367Srillig 1039108d0c3Srillig# If the program name contains a slash, no matter where, the program is not 1049108d0c3Srillig# searched in the PATH. This is the same behavior as in /bin/sh. 105e91fe367Srillig# 106e91fe367Srilligatf_test_case rel_found 107e91fe367Srilligrel_found_body() { 108e91fe367Srillig mkdir bin 109e91fe367Srillig echo '#! /bin/sh' > bin/echo 110e91fe367Srillig chmod +x bin/echo 111e91fe367Srillig 112e91fe367Srillig atf_check -o "inline:bin/echo$n" \ 113e91fe367Srillig env -i PATH='/' \ 114e91fe367Srillig "$(atf_get_srcdir)"/h_findcc 'bin/echo' 115e91fe367Srillig} 116e91fe367Srillig 117e91fe367Srillig# If the program name contains a slash in the middle and has additional 118e91fe367Srillig# arguments, the arguments are discarded. 119e91fe367Srillig# 120e91fe367Srillig# XXX: Discarding the arguments feels unintended. 121e91fe367Srillig# 122e91fe367Srilligatf_test_case rel_arg_found 123e91fe367Srilligrel_arg_found_body() { 124e91fe367Srillig mkdir bin 125e91fe367Srillig echo '#! /bin/sh' > bin/echo 126e91fe367Srillig chmod +x bin/echo 127e91fe367Srillig 128e91fe367Srillig atf_check -o "inline:bin/echo$n" \ 129e91fe367Srillig env -i PATH='/' \ 130e91fe367Srillig "$(atf_get_srcdir)"/h_findcc 'bin/echo arg' 131e91fe367Srillig} 132e91fe367Srillig 133e91fe367Srillig 1349108d0c3Srilligatf_test_case abs_not_found 1359108d0c3Srilligabs_not_found_body() { 1369108d0c3Srillig atf_check -o "inline:(not found)$n" \ 1379108d0c3Srillig env -i \ 1389108d0c3Srillig "$(atf_get_srcdir)"/h_findcc "$PWD/nonexistent/echo" 1399108d0c3Srillig} 1409108d0c3Srillig 1419108d0c3Srilligatf_test_case abs_found 1429108d0c3Srilligabs_found_body() { 1439108d0c3Srillig mkdir bin 1449108d0c3Srillig echo '#! /bin/sh' > bin/echo 1459108d0c3Srillig chmod +x bin/echo 1469108d0c3Srillig 1479108d0c3Srillig atf_check -o "inline:$PWD/bin/echo$n" \ 1489108d0c3Srillig env -i \ 1499108d0c3Srillig "$(atf_get_srcdir)"/h_findcc "$PWD/bin/echo" 1509108d0c3Srillig} 1519108d0c3Srillig 1529108d0c3Srillig# If the program name is an absolute pathname, the arguments are discarded. 1539108d0c3Srillig# 1549108d0c3Srillig# XXX: Discarding the arguments feels unintended. 1559108d0c3Srillig# 1569108d0c3Srilligatf_test_case abs_arg_found 1579108d0c3Srilligabs_arg_found_body() { 1589108d0c3Srillig mkdir bin 1599108d0c3Srillig echo '#! /bin/sh' > bin/echo 1609108d0c3Srillig chmod +x bin/echo 1619108d0c3Srillig 1629108d0c3Srillig atf_check -o "inline:$PWD/bin/echo$n" \ 1639108d0c3Srillig env -i \ 1649108d0c3Srillig "$(atf_get_srcdir)"/h_findcc "$PWD/bin/echo arg" 1659108d0c3Srillig} 1669108d0c3Srillig 1679108d0c3Srillig 168e91fe367Srilligatf_init_test_cases() { 169e91fe367Srillig atf_add_test_case base_not_found 170e91fe367Srillig atf_add_test_case base_found 171*1c89b83dSrillig atf_add_test_case base_found_second 172*1c89b83dSrillig atf_add_test_case base_found_reldir 173e91fe367Srillig atf_add_test_case base_arg_found 174e91fe367Srillig 175e91fe367Srillig atf_add_test_case rel_not_found 176e91fe367Srillig atf_add_test_case rel_found 177e91fe367Srillig atf_add_test_case rel_arg_found 1789108d0c3Srillig 1799108d0c3Srillig atf_add_test_case abs_not_found 1809108d0c3Srillig atf_add_test_case abs_found 1819108d0c3Srillig atf_add_test_case abs_arg_found 182e91fe367Srillig} 183