From 1cbb167b576b08cb22fa9667bc2784354426604a Mon Sep 17 00:00:00 2001 From: Denis Isidoro Date: Mon, 9 Mar 2020 18:41:06 -0300 Subject: [PATCH] Allow custom dirs when running make (#214) --- Makefile | 3 --- README.md | 2 +- scripts/install | 46 ++++++++++++++++++++++++++++++++-------------- scripts/make | 9 ++++++--- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 6ee6d14..fa40213 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,3 @@ -install: - scripts/install - install: scripts/make install diff --git a/README.md b/README.md index 2ea7489..b5e9e44 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Alternatively, you can download the binaries manually [here](https://github.com/ ```bash git clone https://github.com/denisidoro/navi ~/.navi cd ~/.navi -make install +make install # or make SOURCE_DIR=/opt/navi BIN_DIR=/usr/local/bin install ``` Usage diff --git a/scripts/install b/scripts/install index 93a501f..b4aae21 100755 --- a/scripts/install +++ b/scripts/install @@ -1,19 +1,32 @@ #!/usr/bin/env bash set -euo pipefail -FIRST_INSTALL_DIR="/opt/navi" -SECOND_INSTALL_DIR="${HOME}/.navi" +FIRST_SOURCE_DIR="/opt/navi" +SECOND_SOURCE_DIR="${HOME}/.navi" -get_install_dir() { - local -r useless_folder="${FIRST_INSTALL_DIR}/useless" +FIRST_BIN_DIR="/usr/bin" +SECOND_BIN_DIR="/usr/local/bin" + +get_dir() { + local -r first_dir="$1" + local -r second_dir="$1" + local -r useless_folder="${first_dir}/useless" local folder mkdir -p "$useless_folder" 2>/dev/null \ - && folder="$FIRST_INSTALL_DIR" \ - || folder="$SECOND_INSTALL_DIR" + && folder="$first_dir" \ + || folder="$second_dir" rm -r "$useless_folder" 2>/dev/null echo "$folder" } +get_source_dir() { + get_dir "$FIRST_SOURCE_DIR" "$SECOND_SOURCE_DIR" +} + +get_bin_dir() { + get_dir "$FIRST_BIN_DIR" "$SECOND_BIN_DIR" +} + echoerr() { echo "$@" 1>&2 } @@ -59,15 +72,14 @@ asset_url() { download_asset() { local -r url="$(asset_url "$@")" - mkdir -p "$DEFAULT_INSTALL_DIR" - cd "$DEFAULT_INSTALL_DIR" + mkdir -p "$SOURCE_DIR" + cd "$SOURCE_DIR" rm -f navi.tar.gz - echoerr "Downloading $url" + echoerr "Downloading ${url}..." curl -L "$url" -o navi.tar.gz tar xvzf navi.tar.gz rm -f navi.tar.gz - ln -s "${DEFAULT_INSTALL_DIR}/navi" "/usr/bin/navi" \ - || ln -s "${DEFAULT_INSTALL_DIR}/navi" "/usr/local/bin/navi" + ln -s "${SOURCE_DIR}/navi" "${BIN_DIR}/navi" } sha_for_asset_on_github() { @@ -102,17 +114,23 @@ get_shell() { } install_navi() { - export DEFAULT_INSTALL_DIR="$(get_install_dir)" + export SOURCE_DIR="${SOURCE_DIR:-"$(get_source_dir)"}" + export BIN_DIR="${BIN_DIR:-"$(get_bin_dir)"}" + echoerr "Sources will be downloaded to ${SOURCE_DIR}..." + local -r target="$(get_target)" + if [[ -n "$target" ]]; then local -r version="$(latest_version_released)" download_asset "$version" "$target" + elif command_exists cargo; then no_binary_warning echoerr "Building sources..." - git clone https://github.com/denisidoro/navi "$DEFAULT_INSTALL_DIR" - cd "$DEFAULT_INSTALL_DIR" + git clone https://github.com/denisidoro/navi "$SOURCE_DIR" + cd "$SOURCE_DIR" make install + else no_binary_warning echoerr "You don't have the necessary tools to build it" diff --git a/scripts/make b/scripts/make index ea7758d..d50a0de 100755 --- a/scripts/make +++ b/scripts/make @@ -8,14 +8,17 @@ export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)" source "${NAVI_HOME}/scripts/install" install() { + export SOURCE_DIR="${SOURCE_DIR:-"$(get_source_dir)"}" + export BIN_DIR="${BIN_DIR:-"$(get_bin_dir)"}" + echoerr "The final binary will be available at ${BIN_DIR}/navi..." "${NAVI_HOME}/scripts/action" release - ln -s "${NAVI_HOME}/target/tar/navi" /usr/bin/navi \ - || ln -s "${NAVI_HOME}/target/tar/navi" /usr/local/bin/navi + ln -s "${NAVI_HOME}/target/tar/navi" "${BIN_DIR}/navi" } uninstall() { + export SOURCE_DIR="${SOURCE_DIR:-"$(get_source_dir)"}" rm -rf "${NAVI_HOME}/target" - rm /usr/local/bin/navi || rm /usr/bin/navi + rm "$SOURCE_DIR" } cmd="$1"