xref: /illumos-gate/usr/src/cmd/dtrace/test/tst/common/include/tst.includefirst.ksh (revision cd61ae21816e53b94bc1673f3f1aa651fc3115e8)
1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright (c) 2011, Joyent Inc. All rights reserved.
24# Use is subject to license terms.
25#
26
27#
28# This test verifies that we only use the first entry of a file with a given
29# name in the library path
30#
31
32if [ $# != 1 ]; then
33	echo expected one argument: '<'dtrace-path'>'
34	exit 2
35fi
36
37firstinc=${TMPDIR:-/tmp}/firstinc.$$
38secondinc=${TMPDIR:-/tmp}/secondinc.$$
39expexit=23
40
41setup_include()
42{
43	mkdir $firstinc
44	mkdir $secondinc
45	cat > $firstinc/lib.d <<EOF
46inline int foobar = $expexit;
47#pragma D binding "1.0" foobar
48EOF
49	cat > $secondinc/lib.d <<EOF
50inline int foobar = 42;
51#pragma D binding "1.0" foobar
52EOF
53}
54
55clean()
56{
57	rm -rf $firstinc
58	rm -rf $secondinc
59}
60
61fail()
62{
63	echo "$@"
64	clean
65	exit 1
66}
67
68setup_include
69
70dtrace -L$firstinc -L$secondinc -e -n 'BEGIN{ exit(foobar) }'
71[[ $? != 0 ]] && fail "Failed to compile with same file in include path twice"
72dtrace -L$firstinc -L$secondinc -n 'BEGIN{ exit(foobar) }'
73status=$?
74[[ $status != $expexit ]] && fail "Exited with unexpected status code: $status"
75clean
76exit 0
77