xref: /netbsd-src/tests/usr.bin/mkdep/t_findcc.sh (revision 1c89b83dd464d704e1d3c9e71ad026804cea137f)
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