#!/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"