OILS / install View on Github | oilshell.org

120 lines, 55 significant
1#!/bin/sh
2#
3# POSIX shell script to install oils-for-unix into the proper directory.
4# Distributed with the source tarball.
5#
6# Also shared with the old "oil.ovm" build.
7
8# NOTE: 'install' is part of coreutils and busybox.
9
10# The variable DESTDIR allows staged installs, where the installed files are
11# not placed directly into the location they're expected to be executed from.
12# They are placed in a temp dir first, which they are NOT expected to run out of.
13#
14# https://www.gnu.org/prep/standards/html_node/DESTDIR.html
15#
16# Staged installs are the default method of installation by package managers
17# such as gentoo-portage.
18#
19# https://devmanual.gentoo.org/quickstart/index.html
20
21# old tarball
22
23readonly OVM_NAME=oil.ovm
24readonly OVM_PATH=_bin/$OVM_NAME
25
26readonly OILS_PATH=_bin/cxx-opt-sh/oils-for-unix.stripped
27
28
29log() {
30 # 4 space indent
31 echo " $@" >& 2
32}
33
34die() {
35 echo "FATAL install error: $@" >& 2
36 exit 1
37}
38
39my_install() {
40 ### A bit like install -v. OpenBSD doesn't have -v
41
42 echo " + install $@" >& 2
43 install "$@"
44}
45
46install_bin_and_links() {
47 ### Install an executable and symlinks.
48
49 bin_src=$1
50 bin_new_name=$2
51 shift 2
52
53 # symlinks are the remaining args
54
55 # NOTE: The configure step generates this
56 if ! . _build/detected-config.sh; then
57 die "Can't find _build/detected-config.sh. Run './configure'"
58 fi
59 # Now $PREFIX should be defined
60
61 #
62 # Install the shell binary
63 #
64
65 bin_dest_dir="${DESTDIR}${PREFIX}/bin"
66 bin_dest="$bin_dest_dir/$bin_new_name"
67
68 if ! my_install -d "$bin_dest_dir"; then
69 die "Couldn't create $bin_dest_dir"
70 fi
71
72 if ! my_install "$bin_src" "$bin_dest"; then
73 die "Couldn't install $bin_src -> $bin_dest"
74 fi
75 log "Installed $bin_dest"
76
77 working_dir=$PWD # save for later
78
79 cd "$bin_dest_dir"
80 for link in "$@"; do
81 if ! ln -s -f "$bin_new_name" "$link"; then # -f to overwrite
82 die "Couldn't create $link symlink"
83 fi
84 log "Created '$link' symlink"
85 done
86
87 #
88 # Install man page
89 #
90
91 # Relevant:
92 # https://unix.stackexchange.com/questions/90759/where-should-i-install-manual-pages-in-user-directory
93 # https://www.freebsd.org/cgi/man.cgi?query=install
94
95 cd "$working_dir"
96
97 # e.g. /usr/local/share/man/man1
98 man_dest_dir="${DESTDIR}${DATAROOTDIR}/man/man1"
99
100 if ! my_install -d "$man_dest_dir"; then
101 die "Couldn't create $man_dest_dir"
102 fi
103
104 # -m so it's not executable
105 if ! my_install -m 644 doc/osh.1 "$man_dest_dir"; then
106 die "Couldn't install man page"
107 fi
108 log "Installed man page"
109}
110
111if test -f "$OVM_PATH"; then
112 # Python tarball keeps 'oil' for compatibility
113 install_bin_and_links "$OVM_PATH" "$OVM_NAME" osh ysh oil
114elif test -f "$OILS_PATH"; then
115 # new name is 'ysh', which points at oils-for-unix
116 install_bin_and_links "$OILS_PATH" 'oils-for-unix' osh ysh
117else
118 die "Couldn't find $OVM_PATH or $OILS_PATH"
119fi
120