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=nightly-2018-07-09" | ||||
| 
 | ||||
| # things to be installed: | ||||
| # things to be installed | ||||
| 
 | ||||
| HLEDGER_MAIN_TOOLS="\ | ||||
| hledger \ | ||||
| @ -76,23 +76,28 @@ hledger-iadd \ | ||||
| hledger-interest \ | ||||
| " | ||||
| 
 | ||||
| # latest hledger package versions, update often: | ||||
| HLEDGER_VERSION=1.11 | ||||
| HLEDGER_LIB_VERSION=$HLEDGER_VERSION | ||||
| HLEDGER_UI_VERSION=$HLEDGER_VERSION | ||||
| HLEDGER_WEB_VERSION=$HLEDGER_VERSION | ||||
| HLEDGER_API_VERSION=$HLEDGER_VERSION | ||||
| 
 | ||||
| HLEDGER_DIFF_VERSION=0.2.0.14 | ||||
| HLEDGER_IADD_VERSION=1.3.6 | ||||
| HLEDGER_INTEREST_VERSION=1.5.2 | ||||
| 
 | ||||
| # extra dependencies that aren't in stackage | ||||
| # extra dependencies that aren't in stackage: | ||||
| EXTRA_DEPS="\ | ||||
| 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 | ||||
| # CHANGED marks (some of) our customisations | ||||
| # CHANGED marks a few of our customisations, but not all. | ||||
| 
 | ||||
| HOME_LOCAL_BIN="$HOME/.local/bin" | ||||
| USR_LOCAL_BIN="/usr/local/bin" | ||||
| @ -653,6 +658,12 @@ has_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 | ||||
| has_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_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: | ||||
|   $(stack_location) | ||||
| Use 'stack upgrade' or your OS's package manager to upgrade, | ||||
| @ -757,9 +768,11 @@ trap cleanup_temp_dir EXIT | ||||
| 
 | ||||
| # 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() { | ||||
|   if ! has_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then | ||||
|   if ! has_good_stack || [[ "$FORCE_INSTALL_STACK" == "true" ]] ; then | ||||
|     echo "Installing stack" | ||||
|     do_os | ||||
|   fi | ||||
| @ -794,13 +807,13 @@ print_cmd_version() { | ||||
|   if [[ $(cmd_location "$1") ]]; then | ||||
|     echo "$1" $(cmd_version "$1") is installed at $(cmd_location "$1") | ||||
|   else | ||||
|     echo "$1 not found" | ||||
|     echo "$1 is not found" | ||||
|   fi | ||||
| } | ||||
| 
 | ||||
| # Show the installation status of the $HLEDGER_MAIN_TOOLS and $HLEDGER_OTHER_TOOLS. | ||||
| print_hledger_versions() { | ||||
|   for cmd in $HLEDGER_MAIN_TOOLS $HLEDGER_OTHER_TOOLS $HLEDGER_INSTALL_TOOL ; do print_cmd_version "$cmd"; done | ||||
| # Show the current installation status of the hledger packages and install tools. | ||||
| print_installed_versions() { | ||||
|   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. | ||||
| @ -825,7 +838,7 @@ try_install() { | ||||
|   (cd  # ensure we install at user level, not in some project's stack/cabal setup | ||||
|    # cabal and not stack installed ? use 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" ) | ||||
|     ) || | ||||
|    # use stack, installing it if missing or too old | ||||
| @ -915,14 +928,17 @@ quietly_run lsb_release -a | ||||
| 
 | ||||
| # show current installed hledger packages | ||||
| echo "Install status before:" | ||||
| print_hledger_versions | ||||
| print_installed_versions | ||||
| 
 | ||||
| if [[ $STATUSFLAG ]] ; then | ||||
|   exit 0 | ||||
| fi | ||||
| 
 | ||||
| # 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. | ||||
| # 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 | ||||
|   echo | ||||
| fi | ||||
| 
 | ||||
| exit | ||||
| # Third-party addons. We sometimes build these with an older version | ||||
| # 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 | ||||
| @ -1012,7 +1028,7 @@ echo ---------- | ||||
| 
 | ||||
| # show new installation status | ||||
| echo "Install status after:" | ||||
| print_hledger_versions | ||||
| print_installed_versions | ||||
| 
 | ||||
| # warn if $HOME/.local/bin isn't in $PATH | ||||
| check_home_local_bin_on_path | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user