@@ -5,82 +5,123 @@ set -euo pipefail
55
66DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd) "
77
8+ ACTION=" ${1:- install} "
89INSTALL_DIR=" ${COMPOSER_INSTALL_DIR:-/ usr/ local/ bin} "
910COMPOSER_URL=" https://getcomposer.org/download/latest-stable/composer.phar"
1011
11- # Check for PHP dependency
12- if ! command -v php > /dev/null 2>&1 ; then
13- echo " [composer] Error: PHP is required but not installed." >&2
14- echo " [composer] Install PHP first using one of:" >&2
15- echo " - sudo apt-get install php php-cli (Debian/Ubuntu)" >&2
16- echo " - brew install php (macOS)" >&2
17- echo " - ./install_tool.sh php (via this toolset)" >&2
18-
19- # Try to install PHP automatically if we can
20- if [ -f " $DIR /installers/package_manager.sh" ]; then
21- echo " [composer] Attempting to install PHP automatically..." >&2
22- if " $DIR /installers/package_manager.sh" php; then
23- echo " [composer] PHP installed successfully, continuing with Composer..." >&2
12+ install_composer () {
13+ # Check for PHP dependency
14+ if ! command -v php > /dev/null 2>&1 ; then
15+ echo " [composer] Error: PHP is required but not installed." >&2
16+ echo " [composer] Install PHP first using one of:" >&2
17+ echo " - sudo apt-get install php php-cli (Debian/Ubuntu)" >&2
18+ echo " - brew install php (macOS)" >&2
19+ echo " - ./install_tool.sh php (via this toolset)" >&2
20+
21+ # Try to install PHP automatically if we can
22+ if [ -f " $DIR /installers/package_manager.sh" ]; then
23+ echo " [composer] Attempting to install PHP automatically..." >&2
24+ if " $DIR /installers/package_manager.sh" php; then
25+ echo " [composer] PHP installed successfully, continuing with Composer..." >&2
26+ else
27+ echo " [composer] Failed to install PHP automatically. Please install manually." >&2
28+ exit 1
29+ fi
2430 else
25- echo " [composer] Failed to install PHP automatically. Please install manually." >&2
2631 exit 1
2732 fi
33+ fi
34+
35+ echo " [composer] Downloading latest stable composer.phar..."
36+
37+ # Download to temp file
38+ TMP_FILE=" $( mktemp) "
39+ trap " rm -f '$TMP_FILE '" EXIT
40+
41+ if ! curl -fsSL " $COMPOSER_URL " -o " $TMP_FILE " ; then
42+ echo " [composer] Error: Failed to download from $COMPOSER_URL " >&2
43+ exit 1
44+ fi
45+
46+ # Verify it's a valid phar by checking version
47+ echo " [composer] Verifying downloaded phar..."
48+ if ! php " $TMP_FILE " --version > /dev/null 2>&1 ; then
49+ echo " [composer] Error: Downloaded file is not a valid composer.phar" >&2
50+ exit 1
51+ fi
52+
53+ # Get version
54+ COMPOSER_VERSION=" $( php " $TMP_FILE " --version 2> /dev/null | head -1 || echo ' unknown' ) "
55+ echo " [composer] Downloaded: $COMPOSER_VERSION "
56+
57+ # Get current version
58+ CURRENT_VERSION=" $( command -v composer > /dev/null 2>&1 && composer --version 2> /dev/null | head -1 || echo ' <none>' ) "
59+ echo " [composer] Current: $CURRENT_VERSION "
60+
61+ # Install composer.phar
62+ echo " [composer] Installing to $INSTALL_DIR /composer..."
63+
64+ if [ -w " $INSTALL_DIR " ]; then
65+ # User has write access
66+ cp " $TMP_FILE " " $INSTALL_DIR /composer"
67+ chmod 755 " $INSTALL_DIR /composer"
68+ elif command -v sudo > /dev/null 2>&1 ; then
69+ # Need sudo
70+ echo " [composer] Requires sudo to install to $INSTALL_DIR "
71+ sudo cp " $TMP_FILE " " $INSTALL_DIR /composer"
72+ sudo chmod 755 " $INSTALL_DIR /composer"
2873 else
74+ echo " [composer] Error: Cannot write to $INSTALL_DIR and sudo not available" >&2
75+ echo " [composer] Try: COMPOSER_INSTALL_DIR=~/.local/bin $0 " >&2
2976 exit 1
3077 fi
31- fi
32-
33- echo " [composer] Downloading latest stable composer.phar..."
34-
35- # Download to temp file
36- TMP_FILE=" $( mktemp) "
37- trap " rm -f '$TMP_FILE '" EXIT
38-
39- if ! curl -fsSL " $COMPOSER_URL " -o " $TMP_FILE " ; then
40- echo " [composer] Error: Failed to download from $COMPOSER_URL " >&2
41- exit 1
42- fi
43-
44- # Verify it's a valid phar by checking version
45- echo " [composer] Verifying downloaded phar..."
46- if ! php " $TMP_FILE " --version > /dev/null 2>&1 ; then
47- echo " [composer] Error: Downloaded file is not a valid composer.phar" >&2
48- exit 1
49- fi
50-
51- # Get version
52- COMPOSER_VERSION=" $( php " $TMP_FILE " --version 2> /dev/null | head -1 || echo ' unknown' ) "
53- echo " [composer] Downloaded: $COMPOSER_VERSION "
54-
55- # Get current version
56- CURRENT_VERSION=" $( command -v composer > /dev/null 2>&1 && composer --version 2> /dev/null | head -1 || echo ' <none>' ) "
57- echo " [composer] Current: $CURRENT_VERSION "
58-
59- # Install composer.phar
60- echo " [composer] Installing to $INSTALL_DIR /composer..."
61-
62- if [ -w " $INSTALL_DIR " ]; then
63- # User has write access
64- cp " $TMP_FILE " " $INSTALL_DIR /composer"
65- chmod 755 " $INSTALL_DIR /composer"
66- elif command -v sudo > /dev/null 2>&1 ; then
67- # Need sudo
68- echo " [composer] Requires sudo to install to $INSTALL_DIR "
69- sudo cp " $TMP_FILE " " $INSTALL_DIR /composer"
70- sudo chmod 755 " $INSTALL_DIR /composer"
71- else
72- echo " [composer] Error: Cannot write to $INSTALL_DIR and sudo not available" >&2
73- echo " [composer] Try: COMPOSER_INSTALL_DIR=~/.local/bin $0 " >&2
74- exit 1
75- fi
76-
77- # Verify installation
78- NEW_VERSION=" $( composer --version 2> /dev/null | head -1 || echo ' <failed>' ) "
79- echo " [composer] Installed: $NEW_VERSION "
80-
81- if [ " $NEW_VERSION " = " <failed>" ]; then
82- echo " [composer] Error: Installation verification failed" >&2
83- exit 1
84- fi
85-
86- echo " [composer] ✓ Installation successful"
78+
79+ # Verify installation
80+ NEW_VERSION=" $( composer --version 2> /dev/null | head -1 || echo ' <failed>' ) "
81+ echo " [composer] Installed: $NEW_VERSION "
82+
83+ if [ " $NEW_VERSION " = " <failed>" ]; then
84+ echo " [composer] Error: Installation verification failed" >&2
85+ exit 1
86+ fi
87+
88+ echo " [composer] Installation successful"
89+ }
90+
91+ uninstall_composer () {
92+ local composer_bin
93+ composer_bin=" $( command -v composer 2> /dev/null || echo " " ) "
94+
95+ if [ -z " $composer_bin " ]; then
96+ echo " [composer] Not installed, nothing to remove" >&2
97+ return 0
98+ fi
99+
100+ echo " [composer] Removing composer binary: $composer_bin " >&2
101+ local bin_dir
102+ bin_dir=" $( dirname " $composer_bin " ) "
103+ if [ -w " $bin_dir " ]; then
104+ rm -f " $composer_bin "
105+ elif command -v sudo > /dev/null 2>&1 ; then
106+ sudo rm -f " $composer_bin "
107+ else
108+ echo " [composer] Error: Cannot remove $composer_bin (no write access and sudo not available)" >&2
109+ return 1
110+ fi
111+
112+ # Remove composer cache/config directories
113+ for dir in " $HOME /.composer" " $HOME /.config/composer" ; do
114+ if [ -d " $dir " ]; then
115+ echo " [composer] Removing $dir " >&2
116+ rm -rf " $dir "
117+ fi
118+ done
119+
120+ echo " [composer] Uninstall complete" >&2
121+ }
122+
123+ case " $ACTION " in
124+ install|update) install_composer ;;
125+ uninstall) uninstall_composer ;;
126+ * ) echo " Usage: $0 {install|update|uninstall}" ; exit 2 ;;
127+ esac
0 commit comments