From 694f22a4c8b7c9cbcb9f853f8857e4f3ceffaf93 Mon Sep 17 00:00:00 2001 From: Christian Couder Date: Sun, 14 Feb 2016 22:30:16 +0100 Subject: [PATCH 1/4] bin: add check-gx-program License: MIT Signed-off-by: Christian Couder --- bin/check_gx_program | 91 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 bin/check_gx_program diff --git a/bin/check_gx_program b/bin/check_gx_program new file mode 100755 index 000000000..8191b6750 --- /dev/null +++ b/bin/check_gx_program @@ -0,0 +1,91 @@ +#!/bin/sh +# +# Check if a gx program is installed and if its version is at least +# equal to a minimum version number. +# +# Call it for example like this: +# +# $ check_gx_program "gx-go" "0.2.0" "Use 'make gx_upgrade' to install or upgrade gx-go." +# +# or: +# +# $ check_gx_program "gx" "0.3" "Use 'make gx_upgrade' to install or upgrade gx." +# + +USAGE="$0 GX_PROGRAM_NAME GX_MIN_VERSION UPGRADE_MSG" + +die() { + printf >&2 "fatal: %s\n" "$@" + exit 1 +} + +# Get arguments + +test "$#" -eq "3" || die "This program must be passed exactly 3 arguments" "Usage: $USAGE" + +GX_PROGRAM_NAME="$1" +GX_MIN_VERSION="$2" +UPGRADE_MSG="$3" + +die_upgrade() { + printf >&2 "fatal: %s\n" "$@" + printf >&2 "=> %s\n" "$UPGRADE_MSG" + exit 1 +} + +major_number() { + vers="$1" + + # Hack around 'expr' exiting with code 1 when it outputs 0 + case "$vers" in + 0) echo "0" ;; + 0.*) echo "0" ;; + *) expr "$vers" : "\([^.]*\).*" || return 1 + esac +} + +check_at_least_version() { + MIN_VERS="$1" + CUR_VERS="$2" + PROG_NAME="$3" + + # Get major, minor and fix numbers for each version + MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'" + CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'" + if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*") + then + MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0" + else + MIN_MIN="0" + MIN_FIX="0" + fi + if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*") + then + CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0" + else + CUR_MIN="0" + CUR_FIX="0" + fi + + # Compare versions + VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'" + test "$CUR_MAJ" -gt $(expr "$MIN_MAJ" - 1) || die_upgrade "$VERS_LEAST" + test "$CUR_MAJ" -gt "$MIN_MAJ" || { + test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST" + test "$CUR_MIN" -gt "$MIN_MIN" || { + test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST" + } + } +} + +# Check that the gx program exists + +type "$GX_PROGRAM_NAME" >/dev/null || die_upgrade "Program $GX_PROGRAM_NAME is not installed!" + +# Check the gx program version + +VERS_STR=$($GX_PROGRAM_NAME -v 2>&1) || die "'$GX_PROGRAM_NAME -v' failed with output: $VERS_STR" + +GX_CUR_VERSION=$(expr "$VERS_STR" : "$GX_PROGRAM_NAME version \(.*\)") || die "Invalid '$GX_PROGRAM_NAME -v' output: $VERS_STR" + +check_at_least_version "$GX_MIN_VERSION" "$GX_CUR_VERSION" "$GX_PROGRAM_NAME" From cd34b3d40581468332c7e790ef98722931562fc7 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Tue, 9 Feb 2016 22:51:08 +0100 Subject: [PATCH 2/4] Do not install gx unless user asks for it Build scripts should never touch user's environment. This patch intoduces existance and version check for gx and gx-go Prints nice error message if they are missing or outdated. License: MIT Signed-off-by: Jakub Sztandera --- .travis.yml | 4 +++- Makefile | 15 ++++++++++++--- appveyor.yml | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 84e04807f..9b511be90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,9 @@ env: - TEST_NO_FUSE=1 TEST_VERBOSE=1 TEST_SUITE=test_go_expensive - TEST_NO_FUSE=1 TEST_VERBOSE=1 TEST_SUITE=test_sharness_expensive -install: make install +install: + - make toolkit_upgrade + - make install script: - make $TEST_SUITE diff --git a/Makefile b/Makefile index 228051a3f..84271bf68 100644 --- a/Makefile +++ b/Makefile @@ -14,11 +14,19 @@ all: help godep: go get github.com/tools/godep -gx: +toolkit_upgrade: gx_upgrade gxgo_upgrade + +gx_upgrade: go get -u github.com/whyrusleeping/gx + +gxgo_upgrade: go get -u github.com/whyrusleeping/gx-go -deps: gx +gx_check: + @bin/check_gx_program "gx" "0.3" 'Upgrade or install gx using your package manager or run `make gx_upgrade`' + @bin/check_gx_program "gx-go" "0.2" 'Upgrade or install gx-go using your package manager or run `make gxgo_upgrade`' + +deps: gx_check gx --verbose install --global # saves/vendors third-party dependencies to Godeps/_workspace @@ -42,7 +50,7 @@ clean: uninstall: cd cmd/ipfs && go clean -i -ldflags=$(ldflags) -PHONY += all help godep install build nofuse clean uninstall +PHONY += all help godep toolkit_upgrade gx_upgrade gxgo_upgrade gx_check deps vendor install build nofuse clean uninstall ############################################################## # tests targets @@ -98,6 +106,7 @@ PHONY += test test_short test_expensive help: @echo 'DEPENDENCY TARGETS:' @echo '' + @echo ' deps - Download dependencies using gx' @echo ' vendor - Create a Godep workspace of 3rd party dependencies' @echo '' @echo 'BUILD TARGETS:' diff --git a/appveyor.yml b/appveyor.yml index 5dffeb0aa..5cff8cda8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -40,7 +40,7 @@ install: # default file handles. Ensure a dummy file descriptor is opened with 'exec'. # build_script: - - '%BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0 Date: Sun, 14 Feb 2016 23:00:09 +0100 Subject: [PATCH 3/4] Reformat check_gx_program License: MIT Signed-off-by: Jakub Sztandera --- bin/check_gx_program | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/bin/check_gx_program b/bin/check_gx_program index 8191b6750..25c9cebc5 100755 --- a/bin/check_gx_program +++ b/bin/check_gx_program @@ -38,9 +38,9 @@ major_number() { # Hack around 'expr' exiting with code 1 when it outputs 0 case "$vers" in - 0) echo "0" ;; - 0.*) echo "0" ;; - *) expr "$vers" : "\([^.]*\).*" || return 1 + 0) echo "0" ;; + 0.*) echo "0" ;; + *) expr "$vers" : "\([^.]*\).*" || return 1 esac } @@ -52,35 +52,34 @@ check_at_least_version() { # Get major, minor and fix numbers for each version MIN_MAJ=$(major_number "$MIN_VERS") || die "No major version number in '$MIN_VERS' for '$PROG_NAME'" CUR_MAJ=$(major_number "$CUR_VERS") || die "No major version number in '$CUR_VERS' for '$PROG_NAME'" - if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*") - then - MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0" + + if MIN_MIN=$(expr "$MIN_VERS" : "[^.]*\.\([^.]*\).*"); then + MIN_FIX=$(expr "$MIN_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || MIN_FIX="0" else - MIN_MIN="0" - MIN_FIX="0" + MIN_MIN="0" + MIN_FIX="0" fi - if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*") - then - CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0" + if CUR_MIN=$(expr "$CUR_VERS" : "[^.]*\.\([^.]*\).*"); then + CUR_FIX=$(expr "$CUR_VERS" : "[^.]*\.[^.]*\.\([^.]*\).*") || CUR_FIX="0" else - CUR_MIN="0" - CUR_FIX="0" + CUR_MIN="0" + CUR_FIX="0" fi # Compare versions VERS_LEAST="$PROG_NAME version '$CUR_VERS' should be at least '$MIN_VERS'" test "$CUR_MAJ" -gt $(expr "$MIN_MAJ" - 1) || die_upgrade "$VERS_LEAST" test "$CUR_MAJ" -gt "$MIN_MAJ" || { - test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST" - test "$CUR_MIN" -gt "$MIN_MIN" || { - test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST" - } + test "$CUR_MIN" -gt $(expr "$MIN_MIN" - 1) || die_upgrade "$VERS_LEAST" + test "$CUR_MIN" -gt "$MIN_MIN" || { + test "$CUR_FIX" -ge "$MIN_FIX" || die_upgrade "$VERS_LEAST" + } } } # Check that the gx program exists -type "$GX_PROGRAM_NAME" >/dev/null || die_upgrade "Program $GX_PROGRAM_NAME is not installed!" +type "$GX_PROGRAM_NAME" >/dev/null 2>&1 || die_upgrade "Program $GX_PROGRAM_NAME is not installed!" # Check the gx program version From a59b47e093717161b4a640714659f87848956593 Mon Sep 17 00:00:00 2001 From: Jakub Sztandera Date: Sun, 14 Feb 2016 23:20:13 +0100 Subject: [PATCH 4/4] Fix bin/check_gx_program on Windows where gx -v outputs full path License: MIT Signed-off-by: Jakub Sztandera --- bin/check_gx_program | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/check_gx_program b/bin/check_gx_program index 25c9cebc5..37ada6edc 100755 --- a/bin/check_gx_program +++ b/bin/check_gx_program @@ -85,6 +85,6 @@ type "$GX_PROGRAM_NAME" >/dev/null 2>&1 || die_upgrade "Program $GX_PROGRAM_NAME VERS_STR=$($GX_PROGRAM_NAME -v 2>&1) || die "'$GX_PROGRAM_NAME -v' failed with output: $VERS_STR" -GX_CUR_VERSION=$(expr "$VERS_STR" : "$GX_PROGRAM_NAME version \(.*\)") || die "Invalid '$GX_PROGRAM_NAME -v' output: $VERS_STR" +GX_CUR_VERSION=$(expr "$VERS_STR" : ".*$GX_PROGRAM_NAME.* version \(.*\)") || die "Invalid '$GX_PROGRAM_NAME -v' output: $VERS_STR" check_at_least_version "$GX_MIN_VERSION" "$GX_CUR_VERSION" "$GX_PROGRAM_NAME"