xref: /freebsd/contrib/bc/scripts/link.sh (revision 44d4804d1945435745518cd09eb8ae6ab22ecef4)
1*44d4804dSStefan Eßer#! /bin/sh
2*44d4804dSStefan Eßer#
3*44d4804dSStefan Eßer# SPDX-License-Identifier: BSD-2-Clause
4*44d4804dSStefan Eßer#
5*44d4804dSStefan Eßer# Copyright (c) 2018-2021 Gavin D. Howard and contributors.
6*44d4804dSStefan Eßer#
7*44d4804dSStefan Eßer# Redistribution and use in source and binary forms, with or without
8*44d4804dSStefan Eßer# modification, are permitted provided that the following conditions are met:
9*44d4804dSStefan Eßer#
10*44d4804dSStefan Eßer# * Redistributions of source code must retain the above copyright notice, this
11*44d4804dSStefan Eßer#   list of conditions and the following disclaimer.
12*44d4804dSStefan Eßer#
13*44d4804dSStefan Eßer# * Redistributions in binary form must reproduce the above copyright notice,
14*44d4804dSStefan Eßer#   this list of conditions and the following disclaimer in the documentation
15*44d4804dSStefan Eßer#   and/or other materials provided with the distribution.
16*44d4804dSStefan Eßer#
17*44d4804dSStefan Eßer# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18*44d4804dSStefan Eßer# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*44d4804dSStefan Eßer# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*44d4804dSStefan Eßer# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21*44d4804dSStefan Eßer# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*44d4804dSStefan Eßer# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*44d4804dSStefan Eßer# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*44d4804dSStefan Eßer# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25*44d4804dSStefan Eßer# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26*44d4804dSStefan Eßer# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27*44d4804dSStefan Eßer# POSSIBILITY OF SUCH DAMAGE.
28*44d4804dSStefan Eßer#
29*44d4804dSStefan Eßer
30*44d4804dSStefan Eßerusage() {
31*44d4804dSStefan Eßer	printf "usage: %s bin_dir link\n" "$0" 1>&2
32*44d4804dSStefan Eßer	exit 1
33*44d4804dSStefan Eßer}
34*44d4804dSStefan Eßer
35*44d4804dSStefan Eßer# Command-line processing.
36*44d4804dSStefan Eßertest "$#" -gt 1 || usage
37*44d4804dSStefan Eßer
38*44d4804dSStefan Eßerbindir="$1"
39*44d4804dSStefan Eßershift
40*44d4804dSStefan Eßer
41*44d4804dSStefan Eßerlink="$1"
42*44d4804dSStefan Eßershift
43*44d4804dSStefan Eßer
44*44d4804dSStefan Eßer# For each executable...
45*44d4804dSStefan Eßerfor exe in "$bindir"/*; do
46*44d4804dSStefan Eßer
47*44d4804dSStefan Eßer	# If the executable is *not* a link (is our target)...
48*44d4804dSStefan Eßer	if [ ! -L "$exe" ]; then
49*44d4804dSStefan Eßer
50*44d4804dSStefan Eßer		# We do fancy things to preserve the extension of the executable.
51*44d4804dSStefan Eßer		base=$(basename "$exe")
52*44d4804dSStefan Eßer		ext="${base##*.}"
53*44d4804dSStefan Eßer
54*44d4804dSStefan Eßer		if [ "$ext" != "$base" ]; then
55*44d4804dSStefan Eßer			name="$link.$ext"
56*44d4804dSStefan Eßer		else
57*44d4804dSStefan Eßer			name="$link"
58*44d4804dSStefan Eßer		fi
59*44d4804dSStefan Eßer
60*44d4804dSStefan Eßer		ln -fs "$base" "$bindir/$name"
61*44d4804dSStefan Eßer	fi
62*44d4804dSStefan Eßer
63*44d4804dSStefan Eßerdone
64