libk  install.sh

File install.sh from the latest check-in


#!/usr/bin/env bash
source global/common.sh

# TODO: provide "modular" install option to avoid the traditional
# linux directory hierarchy on systems where this doesn't make sense.

check prefix 'a directory to install to'
build="${build:-out}"

bindir="${bindir:-$prefix/bin}"
libdir="${libdir:-$prefix/lib}"
incdir="${incdir:-$prefix/include/k}"
sharedir="${sharedir:-$prefix/share}"
shebang="${shebang:-#!/usr/bin/env bash}"

say "commencing install"
say " - prefix: $prefix"
say " - destinations:"
say "   - binaries → $bindir"
say "   - libraries → $libdir"
say "   - headers → $incdir"
say "   - shared files → $sharedir"

mkdir -p "$bindir" "$libdir" "$incdir" "$sharedir"

# Libraries
# These may or may not exist, depending on what library build is done, so check
say "installing libraries"
test -e "$build/libk.a"  && install -Dm644 -t "$libdir" "$build/libk.a"
test -e "$build/libk.so" && install -Dm644 -t "$libdir" "$build/libk.so"
test -e "$build/kboot.o" && install -Dm644 -t "$libdir" "$build/kboot.o"

# Binaries
say "installing binaries"
# *.testbin files should not be installed
install -Dm755 -t "$bindir" "$build/kgraft.attach"

# Includes
say "installing headers"
for inc in "$build"/k/*; do
	install -Dm644 -t "$incdir" "$inc"
done

# Documentation
say "installing documentation"
for man in "$build"/doc/man/*; do
	install -Dm644 -t "$sharedir/man" "$man"
done
for html in "$build"/doc/html/*; do
	install -Dm644 -t "$sharedir/doc/libk/html" "$html"
done
for pdf in "$build"/doc/pdf/*; do
	install -Dm644 -t "$sharedir/doc/libk/pdf" "$pdf"
done

say "building libk-config utility"
m4 >"$bindir/libk-config" \
	-D"_libk_bindir_=$bindir" -D"_libk_libdir_=$libdir" \
	-D"_libk_incdir_=$incdir" -D"_libk_sharedir_=$sharedir" \
	-D"_libk_shebang_=$shebang" \
	global/cc-invoke.m4

chmod +x "$bindir/libk-config"

say "install complete"