#! /bin/sh # # (c) 2018, coded by Nat!, Mulle KybernetiK # [ "${TRACE}" = 'YES' ] && set -x && : "$0" "$@" PREFIX="${1:-/usr/local}" SUDO="${2:-`command -v sudo`}" SUDO="${SUDO:-`command -v doas`}" if [ "${SUDO}" = "no" -o `id -u` -eq 0 ] then SUDO="" echo "Installing under user id `id -u` (PATH=$PATH)" >&2 else SUDO="`basename -- "${SUDO}" `" echo "Installing with ${SUDO} under user id `id -u` (PATH=$PATH)" >&2 fi if [ "${MULLE_NAT_PROJECTS}" != "NONE" ] then MULLE_NAT_PROJECTS="${MULLE_NAT_PROJECTS} mulle-bashfunctions;${MULLE_BASHFUNCTIONS_VERSION}" else MULLE_NAT_PROJECTS="" fi if [ "${SDE_PROJECTS}" != "NONE" ] then SDE_PROJECTS="${SDE_PROJECTS} mulle-craft;${MULLE_CRAFT_VERSION} mulle-dispense;${MULLE_DISPENSE_VERSION} mulle-domain;${MULLE_DOMAIN_VERSION} mulle-env;${MULLE_ENV_VERSION} mulle-fetch;${MULLE_FETCH_VERSION} mulle-make;${MULLE_MAKE_VERSION} mulle-match;${MULLE_MATCH_VERSION} mulle-menu;${MULLE_MENU_VERSION} mulle-monitor;${MULLE_MONITOR_VERSION} mulle-platform;${MULLE_PLATFORM_VERSION} mulle-sde;${MULLE_SDE_VERSION} mulle-semver;${MULLE_SEMVER_VERSION} mulle-sourcetree;${MULLE_SOURCETREE_VERSION} mulle-template;${MULLE_TEMPLATE_VERSION}" else SDE_PROJECTS="" fi install_project() ( vendor="$1" project="$2" [ -z "${project}" ] && return 0 name="`printf "%s\n" "${project}" | sed -n -e 's/\([^;]*\);\(.*\)/\1/p'`" name="${name:-${project}}" version="`printf "%s\n" "${project}" | sed -n -e 's/\([^;]*\);\(.*\)/\2/p'`" version="${version:-${MULLE_SDE_DEFAULT_VERSION}}" version="${version:-latest}" url="https://github.com/${vendor}/${name}/archive/${version}.tar.gz" echo "Download ${version} version of \"${name}\" from \"${url}\"" >&2 if ! "${CURL}" ${CURLFLAGS} "${url}" | ${SUDO} "${TAR}" xvfz - then echo "Download/unpack failed in \"$PWD\"" >&2 exit 1 fi if ! cd "${name}-${version}" then echo "Unpack into \"${name}-${version}\" failed" >&2 ls -CF >&2 exit 1 fi if ! ( ${SUDO} ./bin/installer "${PREFIX}" "${MODE:-755}" "${LIBEXEC_DIRNAME}" \ || ${SUDO} ./install.sh "${PREFIX}" ) then echo "Installation failed" >&2 exit 1 fi cd .. && rm -rf "${name}-${version}" || exit 1 ) main() { mkdir -p "${PREFIX}" || exit 1 for project in ${MULLE_NAT_PROJECTS} do install_project "mulle-nat" "${project}" done for project in ${SDE_PROJECTS} do install_project "mulle-sde" "${project}" done for vendorproject in ${OTHER_PROJECTS} do vendor="`printf "%s\n" "${vendorproject}" | sed -n -e 's/\([^/]*\)\/\(.*\)/\1/p'`" project="`printf "%s\n" "${vendorproject}" | sed -n -e 's/\([^/]*\)\/\(.*\)/\2/p'`" install_project "${vendor}" "${project}" done } # # wget is OK as well, but defaults to curl # CURL="`command -v curl`" TAR="`command -v gtar`" case "`uname`" in [Ss]un*) if [ -z "${TAR}" ] then echo "need gtar to install (use pkgutil install gnutar)" 2>&1 exit 1 fi ;; esac TAR="${TAR:-`command -v tar`}" # if this becomes a problem use unzip as an alternative if [ -z "${TAR}" ] then echo "Need tar or gtar to install" 2>&1 exit 1 fi if [ -z "${CURL}" -a ! -z "`command -v wget`" ] then CURL="wget" CURLFLAGS="${CURLFLAGS} -O -" else CURL="curl" CURLFLAGS="${CURLFLAGS} -L -S" fi main "$@"