diff --git a/src/install/default.txt b/src/install/default.txt index 7d81231..eb300bc 100644 --- a/src/install/default.txt +++ b/src/install/default.txt @@ -339,6 +339,42 @@ extract_file() { return "${rcode}" } +#--- FUNCTION ---------------------------------------------------------------- +# NAME: create_prefix +# DESCRIPTION: Creates the install prefix (and any parent directories). If +# EUID not 0, then attempt to use sudo. +# PARAMETERS: $1 = prefix +# RETURNS: Return code of the tool used to make the directory +# 0 = Created the directory +# >0 = Failed to create directory +# 20 = Could not find mkdir command +# 21 = Could not find sudo command +#------------------------------------------------------------------------------- +create_prefix() { + local prefix + local rcode + + prefix="${1}" + + if command -v mkdir >/dev/null 2>&1; then + if [[ "${EUID}" == "0" ]]; then + mkdir -p "${prefix}" + rcode="${?}" + else + if command -v sudo >/dev/null 2>&1; then + sudo mkdir -p "${prefix}" + rcode="${?}" + else + rcode="21" + fi + fi + else + rcode="20" + fi + + return "${rcode}" +} + #--- FUNCTION ---------------------------------------------------------------- # NAME: install_file_freebsd # DESCRIPTION: Installs a file into a location using 'install'. If EUID not @@ -377,7 +413,6 @@ install_file_freebsd() { return "${rcode}" } - #--- FUNCTION ---------------------------------------------------------------- # NAME: install_file_linux # DESCRIPTION: Installs a file into a location using 'install'. If EUID not @@ -485,6 +520,7 @@ main() { local checksum_check_rcode local extract_file_rcode local install_file_rcode + local create_prefix_rcode croc_bin_name="croc" croc_version="6.4.6" @@ -620,6 +656,26 @@ main() { exit 1 fi + if [[ ! -d "${prefix}" ]]; then + create_prefix "${prefix}" + create_prefix_rcode="${?}" + if [[ "${create_prefix_rcode}" == "0" ]]; then + print_message "== Created install prefix at ${prefix}" "info" + elif [[ "${create_prefix_rcode}" == "20" ]]; then + print_message "== Failed to find mkdir in path" "error" + exit 1 + elif [[ "${create_prefix_rcode}" == "21" ]]; then + print_message "== Failed to find sudo in path" "error" + exit 1 + else + print_message "== Failed to create the install prefix: ${prefix}" "error" + exit 1 + fi + else + print_message "== Install prefix already exists. No need to create it." "info" + fi + + case "${croc_os}" in "Linux" ) install_file_linux "${tmpdir}/${croc_bin_name}" "${prefix}/"; install_file_rcode="${?}";;