install: ensure a new-enough version of stack; output improvements
This commit is contained in:
		
							parent
							
								
									87e54507e0
								
							
						
					
					
						commit
						aba0db8490
					
				| @ -61,7 +61,7 @@ HLEDGER_INSTALL_VERSION=20180824 | |||||||
| RESOLVER="--resolver=lts-12" | RESOLVER="--resolver=lts-12" | ||||||
| #RESOLVER="--resolver=nightly-2018-07-09" | #RESOLVER="--resolver=nightly-2018-07-09" | ||||||
| 
 | 
 | ||||||
| # things to be installed: | # things to be installed | ||||||
| 
 | 
 | ||||||
| HLEDGER_MAIN_TOOLS="\ | HLEDGER_MAIN_TOOLS="\ | ||||||
| hledger \ | hledger \ | ||||||
| @ -76,23 +76,28 @@ hledger-iadd \ | |||||||
| hledger-interest \ | hledger-interest \ | ||||||
| " | " | ||||||
| 
 | 
 | ||||||
|  | # latest hledger package versions, update often: | ||||||
| HLEDGER_VERSION=1.11 | HLEDGER_VERSION=1.11 | ||||||
| HLEDGER_LIB_VERSION=$HLEDGER_VERSION | HLEDGER_LIB_VERSION=$HLEDGER_VERSION | ||||||
| HLEDGER_UI_VERSION=$HLEDGER_VERSION | HLEDGER_UI_VERSION=$HLEDGER_VERSION | ||||||
| HLEDGER_WEB_VERSION=$HLEDGER_VERSION | HLEDGER_WEB_VERSION=$HLEDGER_VERSION | ||||||
| HLEDGER_API_VERSION=$HLEDGER_VERSION | HLEDGER_API_VERSION=$HLEDGER_VERSION | ||||||
| 
 |  | ||||||
| HLEDGER_DIFF_VERSION=0.2.0.14 | HLEDGER_DIFF_VERSION=0.2.0.14 | ||||||
| HLEDGER_IADD_VERSION=1.3.6 | HLEDGER_IADD_VERSION=1.3.6 | ||||||
| HLEDGER_INTEREST_VERSION=1.5.2 | HLEDGER_INTEREST_VERSION=1.5.2 | ||||||
| 
 | 
 | ||||||
| # extra dependencies that aren't in stackage | # extra dependencies that aren't in stackage: | ||||||
| EXTRA_DEPS="\ | EXTRA_DEPS="\ | ||||||
| cassava-megaparsec-1.0.0 \ | cassava-megaparsec-1.0.0 \ | ||||||
| " | " | ||||||
| 
 | 
 | ||||||
|  | # the oldest version of stack that will work: | ||||||
|  | STACK_VERSION=1.7.1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # start of (most of) get-stack.sh, https://github.com/commercialhaskell/stack/blob/master/etc/scripts/get-stack.sh | # start of (most of) get-stack.sh, https://github.com/commercialhaskell/stack/blob/master/etc/scripts/get-stack.sh | ||||||
| # CHANGED marks (some of) our customisations | # CHANGED marks a few of our customisations, but not all. | ||||||
| 
 | 
 | ||||||
| HOME_LOCAL_BIN="$HOME/.local/bin" | HOME_LOCAL_BIN="$HOME/.local/bin" | ||||||
| USR_LOCAL_BIN="/usr/local/bin" | USR_LOCAL_BIN="/usr/local/bin" | ||||||
| @ -653,6 +658,12 @@ has_stack() { | |||||||
|   has_cmd stack |   has_cmd stack | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | # Check whether a new enough version of the 'stack' command exists | ||||||
|  | has_good_stack() { | ||||||
|  |   has_cmd stack && | ||||||
|  |   [[ ! $(cmpver "$(cmd_version stack 2>/dev/null)" $STACK_VERSION) = 2 ]] | ||||||
|  | } | ||||||
|  | 
 | ||||||
| # Check whether 'wget' command exists | # Check whether 'wget' command exists | ||||||
| has_wget() { | has_wget() { | ||||||
|   has_cmd wget |   has_cmd wget | ||||||
| @ -743,7 +754,7 @@ check_usr_local_bin_on_path() { | |||||||
| 
 | 
 | ||||||
| # Check whether Stack is already installed, and print an error if it is. | # Check whether Stack is already installed, and print an error if it is. | ||||||
| check_stack_installed() { | check_stack_installed() { | ||||||
|   if [ "$FORCE_INSTALL_STACK" != "true" ] && has_stack ; then |   if [ "$FORCE_INSTALL_STACK" != "true" ] && has_good_stack ; then | ||||||
|     die "Stack $(stack_version) already appears to be installed at: |     die "Stack $(stack_version) already appears to be installed at: | ||||||
|   $(stack_location) |   $(stack_location) | ||||||
| Use 'stack upgrade' or your OS's package manager to upgrade, | Use 'stack upgrade' or your OS's package manager to upgrade, | ||||||
| @ -757,9 +768,11 @@ trap cleanup_temp_dir EXIT | |||||||
| 
 | 
 | ||||||
| # hledger routines | # hledger routines | ||||||
| 
 | 
 | ||||||
| # install stack if needed, or always with --force-install-stack, in $HOME/.local/bin | # install stack or a newer version of stack if needed,  | ||||||
|  | # or always with --force-install-stack,  | ||||||
|  | # in $HOME/.local/bin | ||||||
| ensure_stack() { | ensure_stack() { | ||||||
|   if ! has_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then |   if ! has_good_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then | ||||||
|     echo "Installing stack" |     echo "Installing stack" | ||||||
|     do_os |     do_os | ||||||
|   fi |   fi | ||||||
| @ -794,13 +807,13 @@ print_cmd_version() { | |||||||
|   if [[ $(cmd_location "$1") ]]; then |   if [[ $(cmd_location "$1") ]]; then | ||||||
|     echo "$1" $(cmd_version "$1") is installed at $(cmd_location "$1") |     echo "$1" $(cmd_version "$1") is installed at $(cmd_location "$1") | ||||||
|   else |   else | ||||||
|     echo "$1 not found" |     echo "$1 is not found" | ||||||
|   fi |   fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Show the installation status of the $HLEDGER_MAIN_TOOLS and $HLEDGER_OTHER_TOOLS. | # Show the current installation status of the hledger packages and install tools. | ||||||
| print_hledger_versions() { | print_installed_versions() { | ||||||
|   for cmd in $HLEDGER_MAIN_TOOLS $HLEDGER_OTHER_TOOLS $HLEDGER_INSTALL_TOOL ; do print_cmd_version "$cmd"; done |   for cmd in $HLEDGER_MAIN_TOOLS $HLEDGER_OTHER_TOOLS $HLEDGER_INSTALL_TOOL stack cabal ; do print_cmd_version "$cmd"; done | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Run a command, but first log it with "Trying" prepended. | # Run a command, but first log it with "Trying" prepended. | ||||||
| @ -825,7 +838,7 @@ try_install() { | |||||||
|   (cd  # ensure we install at user level, not in some project's stack/cabal setup |   (cd  # ensure we install at user level, not in some project's stack/cabal setup | ||||||
|    # cabal and not stack installed ? use cabal |    # cabal and not stack installed ? use cabal | ||||||
|    (! has_cmd stack && has_cmd cabal && ( |    (! has_cmd stack && has_cmd cabal && ( | ||||||
|     echo "no stack installed, $(cabal --version) installed; trying cabal install" &&  |     echo "no stack installed, cabal $(cabal --numeric-version) installed; trying cabal install" &&  # cf cabal update step | ||||||
|     try_info cabal install "$@" --verbose="$CABAL_VERBOSITY" ) |     try_info cabal install "$@" --verbose="$CABAL_VERBOSITY" ) | ||||||
|     ) || |     ) || | ||||||
|    # use stack, installing it if missing or too old |    # use stack, installing it if missing or too old | ||||||
| @ -915,14 +928,17 @@ quietly_run lsb_release -a | |||||||
| 
 | 
 | ||||||
| # show current installed hledger packages | # show current installed hledger packages | ||||||
| echo "Install status before:" | echo "Install status before:" | ||||||
| print_hledger_versions | print_installed_versions | ||||||
| 
 | 
 | ||||||
| if [[ $STATUSFLAG ]] ; then | if [[ $STATUSFLAG ]] ; then | ||||||
|   exit 0 |   exit 0 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| # if we'll be using cabal, run cabal update once at the start | # if we'll be using cabal, run cabal update once at the start | ||||||
| (! has_cmd stack && has_cmd cabal && try_info cabal update ) | (! has_cmd stack && has_cmd cabal && | ||||||
|  |   echo "no stack installed, cabal $(cabal --numeric-version) installed; trying cabal update" &&  # cf try-install() | ||||||
|  |   try_info cabal update | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| # Compare dotted number version strings, based on https://stackoverflow.com/a/4025065/84401. | # Compare dotted number version strings, based on https://stackoverflow.com/a/4025065/84401. | ||||||
| # cmpver A B's exit status *and* output is | # cmpver A B's exit status *and* output is | ||||||
| @ -987,7 +1003,7 @@ if [[ $(cmpver "$(cmd_version hledger-api 2>/dev/null)" $HLEDGER_API_VERSION) = | |||||||
|   try_install hledger-api-$HLEDGER_API_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS |   try_install hledger-api-$HLEDGER_API_VERSION hledger-$HLEDGER_VERSION hledger-lib-$HLEDGER_LIB_VERSION $EXTRA_DEPS | ||||||
|   echo |   echo | ||||||
| fi | fi | ||||||
| 
 | exit | ||||||
| # Third-party addons. We sometimes build these with an older version | # Third-party addons. We sometimes build these with an older version | ||||||
| # of hledger[-lib], if their bounds have not been updated yet. | # of hledger[-lib], if their bounds have not been updated yet. | ||||||
| if [[ $(cmpver "$(cmd_version hledger-diff 2>/dev/null)" $HLEDGER_DIFF_VERSION) = 2 ]]; then | if [[ $(cmpver "$(cmd_version hledger-diff 2>/dev/null)" $HLEDGER_DIFF_VERSION) = 2 ]]; then | ||||||
| @ -1012,7 +1028,7 @@ echo ---------- | |||||||
| 
 | 
 | ||||||
| # show new installation status | # show new installation status | ||||||
| echo "Install status after:" | echo "Install status after:" | ||||||
| print_hledger_versions | print_installed_versions | ||||||
| 
 | 
 | ||||||
| # warn if $HOME/.local/bin isn't in $PATH | # warn if $HOME/.local/bin isn't in $PATH | ||||||
| check_home_local_bin_on_path | check_home_local_bin_on_path | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user