#!/usr/bin/env bash ##makedesc: Install composer (latest) set -eo pipefail installed() { command -v "$1" >/dev/null 2>&1; } warn() { echo "WARNING: $*" >&2; } require() { local missing=() for pkg in "$@"; do installed "$pkg" || missing+=("$pkg") done if [ ${#missing[@]} -gt 0 ]; then if [ "$(uname -s)" = "Darwin" ]; then if installed brew; then brew install "${missing[@]}" else echo "ERROR: Missing: ${missing[*]}. Install manually or use brew." >&2 exit 1 fi else sudo apt install -y "${missing[@]}" fi fi } download() { if installed wget; then wget -q --show-progress "$1" -O "$2" else curl -fsSL "$1" -o "$2" fi } install() { echo echo "===============================================" echo "Installing composer" echo "===============================================" echo # https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md require php if installed composer; then warn "Removing current composer to install latest one" composer --version rm -f "$HOME/.local/bin/composer" /usr/local/bin/composer /usr/bin/composer 2>/dev/null || true fi mkdir -p "$HOME/install/other" "$HOME/.local/bin" download "https://getcomposer.org/installer" \ "$HOME/install/other/composer-setup.php" php "$HOME/install/other/composer-setup.php" \ --install-dir="$HOME/.local/bin/" \ --filename="composer" COMPOSER_GLOBAL_HOME="$($HOME/.local/bin/composer config -g home)" NEWPATH="PATH=\"$COMPOSER_GLOBAL_HOME/vendor/bin:\${PATH}\"" if ! grep -qoh "$NEWPATH" "$HOME/.profile" 2>/dev/null; then export "$NEWPATH" echo "export $NEWPATH" >> "$HOME/.profile" fi # shellcheck source=/dev/null source "$HOME/.profile" echo echo "Finish!" composer --version echo } upgrade() { install } remove() { echo echo "===============================================" echo "Removing composer" echo "===============================================" echo sudo apt remove -y --autoremove composer 2>/dev/null || true rm -f \ "$HOME/.local/bin/composer" \ /bin/composer \ /usr/bin/composer \ /usr/local/bin/composer \ /usr/src/composer 2>/dev/null || true echo echo "Finish!" echo } case "$1" in u|upgrade|update) upgrade ;; r|remove|d|delete|p|purge) remove ;; *) install ;; esac